AI VIDEO BRIEFING

DPO 정리: 브래들리-테리 선호 모델에서 로그 확률 계산까지, 강화학습 없이 LLM을 정렬하는 방법

보상 모델을 따로 훈련하지 않고도 언어모델을 사람의 선호에 맞추는 DPO. 브래들리-테리 선호 모델에서 손실 함수가 유도되는 과정과 계산 불가능한 항이 사라지는 원리, 실제 로그 확률 계산 방법까지 단계별로 풀어 정리했습니다.

강화학습 없이 언어모델을 길들인다, DPO의 수식을 처음부터 따라가기 영상 대표 이미지

핵심 메시지

  • 사람은 답변에 점수를 매기는 데는 서툴지만 둘 중 무엇이 나은지 고르는 데는 능하다. 선호 데이터셋은 이 성질을 이용한다.
  • 브래들리-테리 모델은 선호 데이터를 숫자 보상으로 바꾸는 장치이며, 그 손실은 두 보상의 차이에 시그모이드를 씌운 형태로 정리된다.
  • 보상만 최대화하면 모델은 보상을 잘 받는 문구만 반복하게 되므로, 원래 모델에서 너무 멀어지지 않도록 KL 발산 제약을 함께 건다.
  • 이 제약 최적화 문제에는 해석적 해가 존재하지만 정규화 항 때문에 직접 계산이 불가능하다. DPO는 이 항이 상쇄되도록 식을 재배치한다.
  • 그 결과 보상 모델을 따로 두지 않고, 경사하강법으로 최소화할 수 있는 하나의 손실 함수만 남는다.

쉽게 이해하기

언어모델은 앞에 놓인 문장이 주어졌을 때 다음에 올 토큰의 확률을 알려주는 확률 모델이다. 방대한 책과 웹 문서로 사전학습을 마치면 어떤 문장이든 그럴듯하게 이어 쓸 수 있게 되지만, 그것만으로는 예의 바르게 굴거나 공격적인 표현을 피하도록 배우지는 못한다. 인터넷 데이터를 그대로 먹인 모델은 그 데이터가 보여준 대로 행동한다. 원하는 행동에 맞춰 모델을 조정하는 일을 정렬이라 부른다.

정렬을 강화학습의 틀로 옮기면 언어모델은 정책이 된다. 상태는 프롬프트이고 행동은 다음 토큰이며, 좋은 답변에는 높은 보상을 나쁜 답변에는 낮은 보상을 주는 보상 모델이 필요하다. 문제는 그 보상을 어떻게 정하느냐다. 상하이가 어디냐는 질문에 '상하이는 중국의 도시입니다'라는 답이 몇 점짜리인지 사람마다 의견이 갈린다. 그래서 점수 대신 두 답변을 놓고 어느 쪽이 나은지 고르게 하는 선호 데이터셋을 만든다.

브래들리-테리 모델은 이 선호를 숫자로 바꾼다. 선택된 답변이 선택되지 않은 답변보다 선호될 확률을, 두 답변에 매겨진 보상의 지수 비율로 모델링하는 것이다. 영상은 논문이 생략한 유도 과정을 직접 보여준다. 분자와 분모를 같은 지수로 나누고 정리하면 이 비율이 두 보상의 차이에 대한 시그모이드와 정확히 같아진다. 여기에 로그를 씌우고 부호를 뒤집으면 파이토치 같은 프레임워크가 최소화할 수 있는 손실이 된다.

보상 모델이 준비되어도 문제가 남는다. 보상만 키우라고 하면 모델은 'thank you'나 'please'처럼 점수가 잘 나오는 말만 늘어놓는 쪽으로 망가질 수 있다. 그래서 목적 함수에 KL 발산 항을 더해, 최적화 중인 모델이 사전학습된 참조 모델에서 크게 벗어나지 않도록 붙잡는다. 다만 이 목적 함수는 미분이 불가능하다. 답변을 얻으려면 토큰을 하나씩 뽑는 샘플링을 거쳐야 하고, 그 과정이 미분되지 않기 때문에 기존에는 PPO 같은 강화학습 알고리즘을 쓸 수밖에 없었다.

DPO 논문은 이 제약 최적화 문제의 해석적 해에서 출발한다. 해는 존재하지만 그 안에 참조 모델이 만들 수 있는 모든 출력을 합산하는 정규화 항이 들어 있어, 어휘가 3만이고 답변 길이가 2천 토큰이면 경우의 수가 감당할 수 없이 커져 실제로는 계산할 수 없다. 여기서 발상을 뒤집어 최적 정책을 안다고 가정하고 식을 정리해 보상을 정책으로 표현한 뒤 브래들리-테리 모델에 대입하면, 손실이 두 보상의 차이만 사용하는 덕분에 그 정규화 항이 승자 쪽과 패자 쪽에서 서로 상쇄되어 사라진다. 남는 것은 프롬프트와 두 답변만으로 계산되는 손실 하나이며, 실제 구현에서는 프롬프트와 답변을 이어 붙여 모델에 넣고 각 위치의 로짓에 로그 소프트맥스를 적용한 뒤 답변에 해당하는 토큰의 로그 확률만 골라 더한다.

주요 인사이트

  • DPO가 강화학습을 걷어낸다고 해서 강화학습을 몰라도 되는 것은 아니다. 보상 모델과 브래들리-테리 모델을 이해하려면 정책과 보상이라는 강화학습 개념이 그대로 필요하다.
  • 손실 앞의 음수 부호는 수학적 의미가 아니라 구현상의 관례다. 최대화하고 싶은 목적 함수를 그대로 두고, 최적화기가 최소화만 할 줄 알기 때문에 부호를 뒤집는다.
  • 베타는 참조 모델에서 얼마나 멀어져도 되는지를 조절하는 하이퍼파라미터다. 값이 클수록 원래 모델을 강하게 붙잡는다.
  • 로그 확률을 곱하지 않고 더하는 이유는 단순하다. 로그가 곱셈을 덧셈으로 바꾸기 때문에, 답변 전체의 확률은 각 토큰 로그 확률의 합으로 계산된다.
  • 훈련에는 최적화 대상 모델과 값이 고정된 참조 모델 두 벌이 필요하다. 참조 모델은 KL 발산 계산을 위한 기준선 역할만 한다.

자주 묻는 질문

DPO는 RLHF와 목표가 다른가요?

목표는 같습니다. 두 방법 모두 보상을 최대화하도록 언어모델을 최적화하되 KL 발산으로 변화 폭을 제한합니다. 차이는 수단에 있습니다. RLHF는 PPO 같은 강화학습 알고리즘으로 목적 함수를 최적화하지만, DPO는 그 목적을 이미 담고 있는 손실 함수를 찾아내어 경사하강법만으로 학습합니다.

왜 답변에 직접 점수를 매기지 않고 선호 데이터를 쓰나요?

같은 답변을 두고도 사람마다 적정 점수가 다릅니다. 짧고 간결해서 좋다는 사람도 있고 너무 짧다는 사람도 있습니다. 반면 두 답변을 나란히 놓고 어느 쪽이 나은지 고르는 일은 사람들이 훨씬 잘합니다. 그래서 점수 대신 비교를 모읍니다.

해석적 해가 있는데도 왜 바로 쓸 수 없나요?

해 안에 정규화 항이 들어 있는데, 이 항은 참조 모델이 각 프롬프트에 대해 만들어낼 수 있는 모든 출력을 합산해야 구할 수 있습니다. 어휘 크기가 3만이고 답변이 2천 토큰이라면 경우의 수가 사실상 무한해 계산이 불가능합니다.

손실을 계산할 때 로그 확률은 어떻게 구하나요?

프롬프트와 답변을 한 문자열로 이어 붙여 모델에 넣고, 모든 위치의 은닉 상태를 로짓으로 투영한 뒤 로그 소프트맥스를 적용합니다. 그다음 답변에 실제로 등장한 토큰의 로그 확률만 골라 합산합니다. 질문에 해당하는 구간은 마스킹으로 제외합니다.

원문과 출처

이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.

YouTube 원본 영상 보기 ↗

관련 AI 소식