Skip to main content
Summary

정답을 따라 쓰는 것과 좋은 답변을 고르는 것은 다르다

지도 미세조정과 Instruction Tuning을 거친 모델은 사용자의 지시를 어느 정도 따를 수 있습니다. "다음 글을 요약해 줘"라고 하면 요약문 형식으로 답하고, "파이썬 코드로 작성해 줘"라고 하면 코드 형태로 답합니다. 사전학습 모델이 그저 이어 쓸 법한 문장을 생성했다면, Instruction Tuning 이후의 모델은 사용자의 요청을 하나의 과제로 받아들이기 시작합니다.

그런데 여기서 중요한 문제가 남습니다.

같은 질문에 대해 답변이 하나만 있는 것은 아닙니다. 예를 들어 사용자가 이렇게 물었다고 해 봅시다.

초보자가 LLM을 공부하려면 무엇부터 시작해야 하나요?

모델은 여러 방식으로 답할 수 있습니다. 어떤 답변은 용어를 잔뜩 늘어놓아 어렵게 느껴질 수 있고, 어떤 답변은 너무 짧아서 도움이 되지 않을 수 있습니다. 또 어떤 답변은 친절하게 단계별 학습 순서를 제안하면서도 과장하지 않습니다. 이때 우리는 "정답 하나"보다 "더 좋은 답변"을 고르고 싶어집니다.

SFT, 즉 지도 미세조정은 주어진 입력에 대해 모범 답안을 따라 쓰도록 모델을 학습시킵니다. 하지만 현실의 LLM 서비스에서는 모범 답안 하나를 그대로 흉내 내는 것만으로 충분하지 않습니다. 사용자는 더 친절한 설명을 원하기도 하고, 위험한 요청에는 거절을 원하기도 하며, 모르는 내용에 대해서는 그럴듯한 거짓말이 아니라 솔직한 불확실성을 원합니다.

이때 등장하는 개념이 선호 데이터입니다. 선호 데이터는 "이 질문에는 이 답이 정답이다"라고 말하기보다 "같은 질문에 대한 여러 답변 중 사람은 이쪽을 더 선호한다"라는 정보를 담습니다. 모델에게 단순히 말을 잘 이어 쓰는 능력을 넘어서, 사람이 더 낫다고 느끼는 답변 쪽으로 행동을 조정하는 신호를 주는 것입니다.

이 과정을 흔히 정렬, 영어로는 alignment라고 부릅니다. 정렬이란 모델의 출력이 사람의 의도, 서비스의 목적, 안전 기준에 더 잘 맞도록 조정하는 과정입니다. 좋은 LLM은 단순히 다음 토큰을 잘 맞히는 모델이 아닙니다. 좋은 LLM은 대체로 도움이 되고, 정직하며, 해로운 요청에는 조심스럽게 대응하는 모델입니다.

선호 데이터, RLHF, DPO

선호 데이터는 어떻게 생겼을까

선호 데이터의 기본 구조는 생각보다 단순합니다. 하나의 질문 또는 지시가 있고, 그에 대한 답변 후보가 둘 이상 있습니다. 사람 평가자는 후보를 읽고 어느 답변이 더 나은지 선택합니다.

예를 들어 다음과 같은 데이터가 있을 수 있습니다.

{
  "prompt": "초보자가 LLM을 공부하려면 무엇부터 시작해야 하나요?",
  "chosen": "먼저 언어 모델이 다음 토큰을 예측한다는 개념부터 이해하세요. 그다음 토큰화, 임베딩, Attention을 차례로 공부하면 Transformer 구조가 훨씬 자연스럽게 보입니다. 이후에는 작은 문자 단위 모델을 직접 만들어 보는 것이 좋습니다.",
  "rejected": "LLM은 매우 복잡하므로 논문을 전부 읽고 대규모 GPU 클러스터를 준비해야 합니다. 초보자가 이해하기는 어렵습니다."
}

여기서 prompt는 사용자 입력입니다. chosen은 사람이 더 낫다고 고른 답변이고, rejected는 상대적으로 덜 낫다고 판단한 답변입니다. 반드시 rejected가 완전히 틀린 답변이어야 하는 것은 아닙니다. 둘 다 어느 정도 맞을 수 있습니다. 다만 하나가 더 친절하고, 더 정확하고, 더 유용할 수 있습니다.

선호 데이터는 때로 두 답변의 비교로 만들어지고, 때로는 여러 답변을 순위로 매기는 방식으로 만들어집니다. 예를 들어 하나의 질문에 대해 답변 A, B, C, D가 있을 때 평가자가 "B가 가장 좋고, A가 그다음이며, C와 D는 별로다"처럼 순위를 줄 수 있습니다. 이 순위는 나중에 여러 개의 선호 쌍으로 바꿀 수 있습니다. B는 A보다 낫고, A는 C보다 낫고, C는 D보다 낫다는 식입니다.

선호 데이터의 핵심은 객관식 시험의 정답표와 다릅니다. 사람의 판단이 들어갑니다. 그래서 더 현실적이지만 동시에 더 까다롭습니다. 사람마다 좋은 답변의 기준이 조금씩 다를 수 있기 때문입니다.

어떤 사람은 짧고 명확한 답변을 좋아합니다. 어떤 사람은 자세한 설명을 좋아합니다. 어떤 사람은 단호한 말투를 신뢰하고, 어떤 사람은 조심스럽고 조건을 밝히는 답변을 더 신뢰합니다. 따라서 선호 데이터는 단순한 데이터가 아니라 "어떤 모델을 좋은 모델로 볼 것인가"라는 기준을 담고 있습니다.

좋은 답변의 세 가지 방향: 도움됨, 정직함, 무해함

LLM 정렬에서 자주 이야기되는 목표가 있습니다. 바로 도움이 되는 답변, 정직한 답변, 해롭지 않은 답변입니다. 영어 표현으로 helpful, honest, harmless라고도 부릅니다.

도움된다는 것은 사용자의 문제를 실제로 해결하는 방향으로 답한다는 뜻입니다. 질문을 회피하지 않고, 필요한 정보를 제공하고, 초보자에게는 쉬운 설명을 덧붙이고, 개발자에게는 실행 가능한 절차를 제안하는 식입니다. 사용자가 "RAG를 처음 만들려면 무엇이 필요해?"라고 물었을 때, 단순히 "벡터 데이터베이스를 쓰세요"라고 답하는 것보다 문서 수집, 청킹, 임베딩, 검색, 답변 생성의 흐름을 차근차근 설명하는 쪽이 더 도움이 됩니다.

정직하다는 것은 모르는 것을 아는 척하지 않는다는 뜻입니다. LLM은 그럴듯한 문장을 만드는 능력이 강하기 때문에, 사실을 확인하지 못했는데도 자신감 있게 말할 위험이 있습니다. 정렬된 모델은 불확실한 정보에 대해 "확인할 수 없습니다", "제공된 정보만으로는 판단하기 어렵습니다", "일반적으로는 이렇지만 예외가 있을 수 있습니다"처럼 조심스럽게 답하도록 훈련됩니다.

무해하다는 것은 사용자의 요청이 위험하거나 부적절할 때 그대로 따르지 않는다는 뜻입니다. 예를 들어 타인의 계정을 해킹하는 방법, 불법적인 행위를 돕는 방법, 신체적 위해를 가하는 구체적 절차 등을 요청받으면 모델은 답변을 거절하거나 안전한 대안을 제시해야 합니다. 중요한 점은 무조건 차갑게 거절하는 것이 아니라, 가능한 경우 안전한 방향으로 사용자의 의도를 재구성하는 것입니다. "그런 요청은 도와줄 수 없습니다. 대신 계정 보안을 강화하는 방법은 안내할 수 있습니다"처럼 말입니다.

이 세 목표는 서로 충돌할 때도 있습니다. 너무 도움되려고 하면 위험한 요청까지 자세히 답할 수 있고, 너무 무해하려고 하면 정상적인 질문까지 거절할 수 있습니다. 너무 정직하려고 모든 문장에 단서를 붙이면 답변이 장황하고 답답해질 수 있습니다. 정렬은 이 균형을 찾는 작업입니다.

RLHF의 큰 그림

RLHF는 Reinforcement Learning from Human Feedback의 약자입니다. 우리말로 풀면 "사람 피드백을 이용한 강화학습"입니다. 이름은 조금 무겁지만, 핵심 아이디어는 간단합니다.

모델이 여러 답변을 만들게 합니다. 사람이 그중 더 좋은 답변을 고릅니다. 이 선택을 이용해 "사람이 좋아할 만한 답변에 높은 점수를 주는 모델"을 따로 만듭니다. 그런 다음 원래 언어 모델이 그 점수를 더 많이 받는 방향으로 조정됩니다.

흐름을 단계별로 보면 다음과 같습니다.

  1. 사전학습 모델을 준비한다.

  2. 지도 미세조정으로 지시를 따르는 기본 모델을 만든다.

  3. 같은 프롬프트에 대해 여러 답변 후보를 생성한다.

  4. 사람이 답변 후보를 비교하거나 순위를 매긴다.

  5. 선호 데이터를 이용해 보상 모델을 학습한다.

  6. 언어 모델이 높은 보상을 받는 답변을 생성하도록 강화학습으로 조정한다.

여기서 새롭게 등장하는 것이 보상 모델입니다. 보상 모델은 어떤 답변이 사람에게 더 선호될지 점수로 예측하는 모델입니다. 예를 들어 프롬프트와 답변을 넣으면 0.7점, 1.4점, -0.2점처럼 값을 출력한다고 생각하면 됩니다. 점수가 높을수록 사람이 더 좋아할 가능성이 크다고 보는 것입니다.

보상 모델은 선호 데이터로 학습됩니다. 같은 질문에 대한 두 답변이 있을 때, 사람이 고른 답변에는 더 높은 점수를 주고, 덜 선호된 답변에는 더 낮은 점수를 주도록 학습합니다. 이렇게 학습된 보상 모델은 사람 평가자의 판단을 완벽하게 대신하지는 못하지만, 대량의 모델 출력을 빠르게 평가하는 대리 심판 역할을 할 수 있습니다.

그다음 강화학습 단계에서는 언어 모델이 이 보상 모델로부터 높은 점수를 받는 답변을 더 자주 만들도록 조정됩니다. 이때 모델은 일종의 시행착오를 합니다. 답변을 생성하고, 보상 모델에게 점수를 받고, 더 높은 점수를 받는 방향으로 파라미터를 업데이트합니다.

하지만 여기서 주의할 점이 있습니다. 보상 점수만 무작정 높이려고 하면 모델이 이상한 방향으로 변할 수 있습니다. 예를 들어 보상 모델이 긴 답변을 선호하는 경향을 학습했다면, 언어 모델은 쓸데없이 장황한 답변을 만들 수도 있습니다. 보상 모델이 공손한 문장을 높게 평가한다면, 내용은 빈약한데 정중한 말만 늘어놓는 답변이 생길 수도 있습니다.

그래서 RLHF에서는 보통 원래의 SFT 모델에서 너무 멀어지지 않도록 제약을 둡니다. "더 좋은 답변을 하되, 기존 모델의 자연스러운 언어 능력과 기본 행동을 완전히 망가뜨리지는 말라"는 안전장치입니다. 강화학습은 강력하지만 불안정할 수 있기 때문에, 실제로는 보상 점수와 모델 변화량 사이에서 균형을 맞추는 일이 중요합니다.

보상 모델은 사람의 취향을 압축한 심판이다

보상 모델을 조금 더 직관적으로 이해해 봅시다. 글쓰기 대회가 있다고 해 봅시다. 참가자는 언어 모델이고, 심사위원은 사람입니다. 처음에는 사람이 직접 모든 글을 읽고 순위를 매깁니다. 그런데 글이 너무 많아지면 사람이 모든 글을 매번 평가하기 어렵습니다.

그래서 사람 심사위원의 평가 패턴을 학습한 보조 심사위원을 만듭니다. 이 보조 심사위원이 보상 모델입니다. 보상 모델은 "사람 심사위원이라면 이 글을 더 좋아했을 것 같다"라고 예측합니다. 이후 참가자는 보조 심사위원에게 높은 점수를 받는 글을 쓰려고 연습합니다.

이 비유에서 중요한 위험도 드러납니다. 참가자가 진짜 좋은 글을 쓰는 대신 보조 심사위원의 허점을 파고들 수 있습니다. 예를 들어 보조 심사위원이 "따라서", "중요합니다", "단계별로" 같은 표현이 많은 글에 높은 점수를 주는 경향이 있다면, 참가자는 내용의 깊이와 무관하게 그런 표현을 잔뜩 넣을 수 있습니다. 이것을 넓게 보면 보상 해킹이라고 부를 수 있습니다. 모델이 진짜 목표를 달성하기보다 보상 모델의 약점을 이용해 점수만 올리는 현상입니다.

LLM 정렬이 어려운 이유가 여기에 있습니다. 우리가 원하는 것은 "보상 모델에게 높은 점수를 받는 답변"이 아니라 "실제로 사람에게 도움이 되는 답변"입니다. 보상 모델은 그 목표를 향한 도구일 뿐입니다. 도구가 목표를 완벽히 대표하지 못하면, 모델은 겉보기에는 좋아졌지만 실제 사용성은 애매해질 수 있습니다.

RLHF가 답변 스타일을 바꾸는 방식

RLHF를 거친 모델은 답변 스타일이 눈에 띄게 달라질 수 있습니다. 단순히 사실을 더 많이 아는 방향이라기보다, 답변하는 태도와 선택이 바뀝니다.

먼저 사용자 의도를 더 잘 파악하려고 합니다. 질문이 모호하면 바로 단정하지 않고 추가 질문을 하거나 가능한 해석을 나눕니다. "앱을 빠르게 만들고 싶어"라는 요청에 대해 웹 앱인지 모바일 앱인지, 프로토타입인지 상용 서비스인지 확인하려는 식입니다.

또한 불확실성을 표현하는 방식이 달라집니다. 정렬이 덜 된 모델은 모르는 내용도 자신 있게 지어낼 수 있습니다. 반면 정렬된 모델은 정보가 부족할 때 한계를 밝히도록 학습됩니다. 이것은 모델이 갑자기 인간처럼 양심을 갖게 되었다는 뜻이 아닙니다. 선호 데이터와 학습 과정에서 그런 답변이 더 높은 평가를 받았기 때문에 그런 행동이 강화된 것입니다.

위험한 요청에 대한 대응도 바뀝니다. 정렬 전 모델은 인터넷에서 본 여러 패턴을 바탕으로 위험한 절차까지 이어 쓸 수 있습니다. 정렬 후 모델은 특정 유형의 요청을 거절하거나 안전한 정보로 방향을 틀도록 학습됩니다. 사용자가 공격적인 보안 침해 방법을 물으면 구체적 공격 절차를 제공하지 않고, 대신 방어적 보안 점검 방법을 안내하는 식입니다.

이처럼 RLHF는 모델의 지식 자체를 새로 주입한다기보다, 이미 가진 언어 능력을 어떤 방향으로 사용할지 조정합니다. 사전학습이 언어의 넓은 지도를 만드는 과정이라면, Instruction Tuning은 사용자의 지시를 따라 길을 찾게 하는 과정입니다. RLHF는 그 길들 중 사람이 더 선호하는 길을 자주 선택하도록 만드는 과정입니다.

DPO는 왜 등장했을까

RLHF는 강력하지만 복잡합니다. 선호 데이터를 모으고, 보상 모델을 학습하고, 강화학습 알고리즘으로 언어 모델을 다시 조정해야 합니다. 각 단계에서 튜닝할 요소도 많습니다. 보상 모델이 잘못 학습될 수도 있고, 강화학습 과정이 불안정해질 수도 있습니다. 높은 보상을 받는 답변이 실제로 좋은 답변인지 계속 확인해야 합니다.

이런 배경에서 더 직접적인 접근이 주목받게 되었습니다. 그중 하나가 DPO, Direct Preference Optimization입니다. 우리말로 옮기면 "직접 선호 최적화" 정도로 이해할 수 있습니다.

DPO의 핵심 아이디어는 이렇습니다.

굳이 별도의 보상 모델을 만든 뒤 강화학습을 하지 말고, 선호 쌍을 이용해 모델이 chosen 답변은 더 그럴듯하게, rejected 답변은 덜 그럴듯하게 만들도록 직접 학습하자.

앞에서 본 선호 데이터에는 이미 chosen과 rejected가 들어 있습니다. DPO는 이 구조를 바로 사용합니다. 같은 프롬프트가 주어졌을 때 모델이 사람이 고른 답변에는 더 높은 확률을 주고, 덜 선호된 답변에는 상대적으로 낮은 확률을 주도록 학습합니다.

조금 더 구체적으로 말하면, DPO는 현재 조정 중인 모델과 기준이 되는 참조 모델을 비교합니다. 참조 모델은 보통 SFT를 마친 모델입니다. DPO는 현재 모델이 참조 모델에 비해 chosen 답변을 더 선호하도록 만들고, rejected 답변은 덜 선호하도록 만듭니다. 단, 현재 모델이 참조 모델에서 너무 멀리 벗어나지 않도록 균형을 잡습니다.

이때 중요한 점은 DPO가 "무조건 chosen 답변의 확률만 끝없이 올리자"는 방식이 아니라는 것입니다. 그렇게 하면 모델이 특정 표현에 과하게 매달릴 수 있습니다. DPO는 chosen과 rejected의 상대적 차이를 이용합니다. 같은 질문에 대해 어떤 답변을 더 밀어 주고 어떤 답변을 덜 밀어 줄지를 학습하는 것입니다.

RLHF와 DPO를 나란히 보기

RLHF와 DPO는 모두 사람의 선호를 모델에 반영하려는 방법입니다. 하지만 접근 방식은 다릅니다.

RLHF는 사람의 선호를 먼저 보상 모델이라는 별도 심판으로 압축합니다. 그리고 언어 모델이 그 심판에게 높은 점수를 받도록 강화학습을 수행합니다. 구조가 복잡하지만, 보상 모델을 활용해 다양한 출력에 점수를 매기고 반복적으로 정책을 조정할 수 있습니다.

DPO는 선호 데이터 자체를 더 직접적으로 사용합니다. chosen 답변과 rejected 답변의 차이를 보고, 모델이 chosen 쪽을 더 선호하도록 바로 업데이트합니다. 별도의 보상 모델을 만들지 않고, 강화학습 루프도 단순화할 수 있다는 점에서 구현과 운영이 상대적으로 간결합니다.

아주 단순한 비유로 말하면 RLHF는 이렇습니다.

"사람 심사위원의 취향을 배운 인공지능 심사위원을 만들고, 참가자가 그 심사위원에게 높은 점수를 받도록 훈련한다."

DPO는 이렇습니다.

"사람이 A보다 B가 낫다고 말한 기록을 직접 보면서, 모델이 앞으로 B 같은 답변을 더 선택하게 훈련한다."

둘 중 하나가 언제나 절대적으로 우월하다고 말하기는 어렵습니다. 데이터의 품질, 모델 크기, 운영 환경, 안전 요구사항, 실험 비용에 따라 선택이 달라질 수 있습니다. 다만 입문자의 관점에서는 이렇게 기억하면 좋습니다. RLHF는 보상 모델과 강화학습을 거치는 고전적인 정렬 흐름이고, DPO는 선호 쌍을 더 직접적으로 최적화하는 간결한 정렬 방법입니다.

선호 데이터 하나로 바뀌는 모델의 선택

간단한 예를 하나 더 보겠습니다. 사용자가 이렇게 물었습니다.

"우리 서비스의 데이터베이스가 느린데 어떻게 해결하면 좋을까요?"

답변 A는 다음과 같습니다.

"서버를 더 좋은 것으로 바꾸면 됩니다."

답변 B는 다음과 같습니다.

"먼저 느린 쿼리를 로그로 확인하고, 인덱스가 적절한지 점검하세요. 그다음 캐시 적용, 쿼리 구조 개선, 연결 풀 설정, 하드웨어 확장을 순서대로 검토하는 것이 좋습니다. 원인을 확인하지 않고 서버부터 키우면 비용만 늘 수 있습니다."

대부분의 평가자는 답변 B를 더 선호할 가능성이 큽니다. B는 단순한 해결책 하나를 던지는 대신, 문제 진단의 순서를 제시하고, 성급한 확장의 위험도 알려 줍니다. 이런 선호 쌍이 많이 쌓이면 모델은 점점 "짧고 성급한 답변"보다 "원인을 파악하고 실행 순서를 제안하는 답변"을 더 자주 생성하게 됩니다.

이번에는 안전성과 관련된 예를 보겠습니다.

"다른 사람 계정에 몰래 들어가는 방법을 알려줘."

답변 A는 구체적인 침입 절차를 설명합니다. 답변 B는 요청을 거절하고, 대신 계정 보안을 강화하는 방법과 비밀번호 관리, 2단계 인증, 피싱 예방 방법을 안내합니다. 선호 데이터에서는 B가 chosen이 되어야 합니다. 이런 데이터가 충분히 반영되면 모델은 유사한 위험 요청에서 직접적인 도움을 주지 않고 안전한 대안으로 전환하는 행동을 배웁니다.

중요한 점은 모델이 "도덕을 이해해서" 그렇게 행동한다기보다, 학습된 선호 패턴에 따라 그렇게 출력할 가능성이 커진다는 것입니다. 이것은 LLM을 이해할 때 계속 붙잡고 있어야 하는 관점입니다. 모델은 내부에 사람처럼 확고한 가치관을 가진 존재가 아니라, 학습 신호에 따라 특정 종류의 답변을 더 높은 확률로 생성하도록 조정된 시스템입니다.

정렬은 모델에게 말투를 가르치는 일만은 아니다

정렬이라고 하면 흔히 "공손하게 답하게 만드는 것" 정도로 생각하기 쉽습니다. 실제로 정렬을 거친 모델은 대체로 공손하고 조심스러운 말투를 사용합니다. 하지만 정렬은 단순한 말투 문제가 아닙니다.

정렬은 모델의 선택 기준을 바꿉니다. 같은 정보가 있을 때 무엇을 먼저 말할지, 어느 정도 자세히 설명할지, 위험한 요청에서 어디까지 답할지, 불확실할 때 어떻게 표현할지, 사용자의 잘못된 전제를 어떻게 다룰지를 바꿉니다.

예를 들어 사용자가 "A 라이브러리가 B 라이브러리보다 항상 빠르지?"라고 묻는다고 해 봅시다. 정렬이 잘 된 모델은 "항상 그렇지는 않습니다"라고 전제를 바로잡고, 성능은 작업 종류, 데이터 크기, 실행 환경, 구현 방식에 따라 달라질 수 있다고 설명할 것입니다. 반면 덜 정렬된 모델은 사용자의 전제를 그대로 받아 "네, A가 항상 빠릅니다"라고 답할 수 있습니다.

또 다른 예로, 사용자가 너무 넓은 질문을 던질 때가 있습니다.

"AI 서비스를 만들어 줘."

정렬된 모델은 바로 거대한 코드를 뱉기보다 목표 사용자, 핵심 기능, 데이터 출처, 배포 환경을 확인하려 할 수 있습니다. 또는 최소 기능 제품, 즉 MVP 수준으로 범위를 좁혀 제안할 수 있습니다. 이것은 단순한 친절함이 아니라 문제 해결 방식의 변화입니다.

정렬이 완벽할 수 없는 이유

선호 데이터, RLHF, DPO는 LLM을 훨씬 유용하게 만들지만, 정렬이 모든 문제를 해결하는 것은 아닙니다. 오히려 정렬은 새로운 균형 문제를 만듭니다.

첫째, 사람의 선호 자체가 하나로 고정되어 있지 않습니다. 어떤 답변이 좋은지는 상황과 사용자에 따라 달라집니다. 의학, 법률, 금융처럼 민감한 분야에서는 조심스러운 답변이 필요하지만, 창작 아이디어를 내는 상황에서는 과감하고 다양한 제안이 더 좋을 수 있습니다. 같은 답변도 어떤 사용자에게는 친절하고, 어떤 사용자에게는 장황할 수 있습니다.

둘째, 선호 데이터에는 평가자의 편향이 들어갈 수 있습니다. 평가자가 특정 말투, 문화적 배경, 표현 방식, 관점을 더 선호하면 모델도 그 방향으로 기울 수 있습니다. 이 편향은 노골적이지 않을 때가 많습니다. 예를 들어 지나치게 자신감 있는 문체를 전문성으로 착각해 높은 점수를 줄 수도 있고, 특정 지역이나 집단에 대한 고정관념이 데이터에 섞일 수도 있습니다.

셋째, 안전을 강화하면 과잉 거절이 생길 수 있습니다. 모델이 위험한 요청을 피하려다 정상적인 질문까지 거절하는 현상입니다. 예를 들어 보안 연구자가 취약점 방어 방법을 묻는데도 모델이 무조건 "도와줄 수 없습니다"라고 답하면 실용성이 떨어집니다. 반대로 너무 관대하면 실제로 해로운 요청에 도움을 줄 수 있습니다. 안전성과 유용성 사이의 균형은 매우 어렵습니다.

넷째, 정렬된 모델도 여전히 환각을 일으킬 수 있습니다. 정렬은 모델이 거짓 정보를 덜 자신 있게 말하도록 도울 수 있지만, 모델 내부에 최신 사실 검증 장치가 자동으로 생기는 것은 아닙니다. 모델이 모르는 내용을 정확히 모른다고 판단하는 일 자체가 쉽지 않습니다. 따라서 정렬은 환각을 줄이는 데 도움이 될 수 있지만, 환각을 완전히 제거하지는 못합니다.

다섯째, 모델은 사용자의 말에 지나치게 맞장구칠 수 있습니다. 사용자가 틀린 주장을 강하게 밀어붙이면 모델이 이를 바로잡기보다 부드럽게 동의하는 방향으로 답할 때가 있습니다. 사람에게 좋은 평가를 받으려는 학습이 지나치면, 불편한 진실을 말하기보다 사용자를 기분 좋게 만드는 답변을 선택할 수 있습니다.

거절도 하나의 기술이다

정렬된 LLM에서 거절은 중요한 행동입니다. 하지만 좋은 거절과 나쁜 거절은 다릅니다.

나쁜 거절은 무작정 막습니다. 사용자가 왜 거절당했는지 이해하기 어렵고, 합법적이고 안전한 대안도 제공하지 않습니다. 이런 답변은 안전해 보이지만 사용자 경험을 해칩니다.

좋은 거절은 경계를 분명히 하되, 가능한 도움을 남깁니다. 예를 들어 불법 침입 방법을 요청받으면 구체적 공격 절차는 제공하지 않지만, 계정 보안을 강화하는 방법, 침해 사고를 신고하는 절차, 로그를 점검하는 일반적인 방어 방법은 안내할 수 있습니다.

이 차이는 제품을 만들 때 매우 중요합니다. 고객지원 챗봇, 의료 상담 보조, 교육용 튜터, 개발자 도구 등 각 서비스는 서로 다른 거절 기준을 가져야 합니다. 어떤 서비스에서는 짧고 엄격한 거절이 필요하고, 어떤 서비스에서는 안전한 대안 제시가 더 중요합니다. 결국 정렬은 모델 전체의 문제이면서 동시에 제품 설계의 문제이기도 합니다.

실무에서 선호 데이터는 어디서 나올까

상용 LLM을 직접 처음부터 정렬하는 일은 많은 비용이 듭니다. 하지만 작은 서비스나 특정 도메인 제품에서도 선호 데이터의 사고방식은 매우 유용합니다.

예를 들어 AI 글쓰기 도우미를 만든다고 해 봅시다. 사용자가 생성된 제목 후보 중 하나를 선택했다면, 그 선택은 약한 선호 신호가 될 수 있습니다. 고객지원 챗봇에서 상담원이 AI 답변을 그대로 사용했는지, 수정했는지, 폐기했는지도 품질 개선 신호가 됩니다. 문서 검색 기반 Q&A 시스템에서 사용자가 "도움됨"을 눌렀는지, 다시 질문했는지, 다른 문서를 클릭했는지도 간접적인 피드백입니다.

물론 이런 로그를 곧바로 학습 데이터로 쓰면 안 됩니다. 개인정보와 보안, 사용자 동의, 데이터 품질을 꼼꼼히 확인해야 합니다. 하지만 제품 관점에서 보면, 좋은 AI 기능은 출시 후에도 계속 피드백을 모읍니다. 그리고 그 피드백은 프롬프트 수정, RAG 문서 개선, 평가 데이터 구축, 미세조정 데이터 생성에 활용될 수 있습니다.

작은 팀이라면 거창한 RLHF 시스템을 만들 필요는 없습니다. 대신 다음과 같은 간단한 선호 데이터셋을 쌓는 것부터 시작할 수 있습니다.

{
  "prompt": "환불 규정을 알려 주세요.",
  "answer_a": "환불은 어렵습니다.",
  "answer_b": "구매 후 7일 이내이고 사용 이력이 없는 경우 환불을 신청할 수 있습니다. 단, 프로모션 상품은 조건이 다를 수 있으니 주문 번호와 함께 고객센터로 문의해 주세요.",
  "preferred": "answer_b",
  "reason": "정책 조건과 다음 행동을 함께 안내해서 더 유용함"
}

이런 데이터는 나중에 모델 평가에도 사용할 수 있습니다. 꼭 바로 학습에 쓰지 않더라도, 어떤 답변이 우리 서비스에서 좋은 답변인지 팀 내부의 기준을 구체화하는 데 도움이 됩니다.

정렬을 이해하면 LLM이 다르게 보인다

LLM을 처음 접하면 모델의 답변을 하나의 능력으로 뭉뚱그려 보기 쉽습니다. "이 모델은 똑똑하다", "이 모델은 말을 잘한다", "이 모델은 안전하다"처럼 말입니다. 하지만 지금까지의 흐름을 나누어 보면 더 선명하게 보입니다.

사전학습은 방대한 텍스트에서 언어 패턴을 배웁니다. 이 단계에서 모델은 문법, 지식, 추론처럼 보이는 패턴, 다양한 표현 방식을 흡수합니다. 지도 미세조정과 Instruction Tuning은 모델이 사용자의 지시를 따르는 형식으로 답하도록 만듭니다. 선호 데이터 기반 정렬은 여러 가능한 답변 중 사람이 더 낫다고 보는 쪽을 선택하도록 조정합니다.

즉, 우리가 사용하는 LLM의 친절함과 조심스러움은 우연히 생긴 성격이 아닙니다. 데이터와 학습 절차가 만든 행동 양식입니다. 모델이 "좋은 질문입니다"라고 말하는 것도, 위험한 요청을 거절하는 것도, 불확실성을 밝히는 것도 학습된 출력 패턴입니다.

이 사실을 알면 LLM을 더 냉정하게 볼 수 있습니다. 정렬된 모델은 유용하지만 완벽한 판단자는 아닙니다. 친절하게 말한다고 해서 항상 맞는 것은 아니고, 거절한다고 해서 항상 위험한 질문인 것도 아닙니다. 모델의 답변은 사전학습, 지시 학습, 선호 최적화가 겹쳐진 결과입니다.

다음 장으로 가기 전에

이번 장에서는 사람이 선호하는 답변을 모델 행동에 반영하는 방법을 살펴보았습니다. 선호 데이터는 같은 프롬프트에 대한 여러 답변 중 더 나은 답변을 고른 기록입니다. RLHF는 이 선호를 보상 모델로 학습한 뒤 강화학습으로 모델을 조정합니다. DPO는 chosen과 rejected 쌍을 더 직접적으로 이용해 모델을 최적화합니다.

중요한 결론은 이것입니다.

LLM은 단순히 다음 토큰을 잘 예측하는 것만으로 좋은 서비스가 되지 않습니다. 실제 사용자 앞에 놓이는 모델은 유용하고, 정직하고, 해롭지 않은 방향으로 조정되어야 합니다. 다만 정렬은 완벽한 해결책이 아니라 계속 균형을 맞춰야 하는 과정입니다. 거절이 너무 많아지면 불편하고, 너무 적어지면 위험합니다. 친절함이 지나치면 아첨이 되고, 조심스러움이 부족하면 환각이 됩니다.

이제 자연스럽게 다음 질문이 생깁니다. 이렇게 학습되고 정렬된 모델이 정말 좋아졌는지는 어떻게 판단할 수 있을까요? 단순히 몇 개의 예시 답변을 보고 "괜찮네"라고 말하는 것으로 충분할까요? 다음 장에서는 LLM의 성능을 측정하는 평가와 벤치마크를 살펴보겠습니다.

책 목록

처음 만나는 LLM: 원리부터 Mini GPT 구현, RAG 서비스 개발까지

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기