비전·음성·추천

DOMAIN / 55번째 글

오프라인 강화학습 — 쌓인 로그만으로 정책을 배우기

실제 서비스에서 탐색은 곧 사용자에게 나쁜 행동을 해 보는 일입니다. 이미 쌓인 로그만으로 정책을 배우려 할 때 왜 Q값이 혼자 부풀어 오르는지, 그 부풀음을 누르는 세 갈래 대응, 행동 복제라는 기준선의 무게, 그리고 배포 전에 성능을 재는 일이 왜 가장 어려운지를 정리합니다.

PALDYN Team18 MIN READ

강화학습의 기본 구조는 고리다. 정책이 행동을 고르고, 환경이 보상과 다음 상태를 돌려주고, 그 결과로 정책을 고친다. 궁금한 행동이 있으면 한 번 해 보면 된다.

실제 서비스에서 이 고리를 그대로 돌리기 어려운 자리가 많다. 추천 시스템에서 "해 본 적 없는 행동"이란 진짜 사용자에게 이상한 것을 보여 준다는 뜻이다. 가격 정책이라면 실제 매출이 걸리고, 의료나 물류 제어라면 안전이 걸린다. 그런데 그 시스템에는 지난 몇 년치 로그가 이미 쌓여 있다. 무엇을 보여 줬고 사용자가 어떻게 반응했는지가 수억 건이다.

오프라인 강화학습(offline RL)은 그 로그만 가지고, 환경을 한 번도 건드리지 않고 더 나은 정책을 만들어 내려는 시도다. 배치 강화학습이라고도 부른다.

온라인은 고리가 돌고 오프라인은 고리가 끊겨 있다

지도학습처럼 되지 않는 이유

로그가 잔뜩 있으니 지도학습처럼 하면 될 것 같다. 실제로 그렇게 하는 방법이 있고 이름도 있다 — 행동 복제(behavior cloning)다. 로그에 있는 상태에서 로그가 골랐던 행동을 그대로 흉내 내도록 지도학습하면 끝이다.

문제는 이것이 로그를 만든 정책보다 잘할 수는 없다는 점이다. 우리가 원하는 것은 흉내가 아니라 개선이다. "지난번에 A를 보여 줬을 때 반응이 이랬는데, B를 보여 줬으면 더 좋았을까"를 알고 싶다.

그 순간 문제가 생긴다. B를 보여 준 기록이 없다. 강화학습이 값을 계산하는 방식은 다음 상태에서 가장 좋은 행동의 값을 가져오는 것인데,

Q(s,a)←r+γmax⁡a′Q(s′,a′)Q(s,a) \leftarrow r + \gamma \max_{a'} Q(s', a')

여기 있는 max⁡\max 는 모든 행동을 후보로 놓는다. 로그에 있는 행동만 보는 것이 아니다. 그리고 로그에 없는 행동의 QQ 값을 물으면, 신경망은 모른다고 답하지 않는다. 주변 값에서 어림해 아무 숫자나 내놓는다.

아무도 끌어내리지 않는 봉우리

어림한 값이 실제보다 낮게 나오면 그 행동은 안 골리고 그걸로 끝이다. 실제보다 높게 나오면 이야기가 달라진다.

max⁡\max 는 가장 큰 값을 고르는 연산이므로 부풀려진 쪽을 정확히 집어낸다. 그 부풀려진 값이 다음 갱신에서 목표값으로 쓰이고, 그 목표를 향해 학습하면 주변 값이 함께 올라간다. 그리고 다시 max⁡\max 가 그중 가장 큰 것을 고른다.

데이터가 없는 구간에서 학습된 Q값이 혼자 부풀어 오른다

온라인 학습에서는 이 고리가 저절로 끊긴다. 부풀려진 행동을 실제로 해 보면 보상이 형편없이 돌아오고, 그 자료가 값을 끌어내린다. 오프라인에는 그 자료가 영영 안 온다. 학습을 오래 돌릴수록 값은 더 커지고, 정책은 확인해 본 적 없는 행동 쪽으로 더 깊이 끌려간다.

이것이 오프라인 강화학습의 중심 문제이고, 부르는 이름은 분포 이동(distributional shift)이다 — 학습된 정책이 고르는 행동의 분포가 로그를 만든 정책의 분포에서 벗어나는 것을 말한다. 벗어난 자리에서는 값을 믿을 근거가 없다.

세 갈래로 누른다

대응은 결국 "데이터가 없는 자리를 조심하게 만든다"는 한 가지인데, 어디에 제약을 거는지가 다르다.

어디를 누르나 방식 성격
정책 제약 정책 로그를 만든 정책에서 너무 멀어지지 않게 벌점을 준다 안전하지만 개선 폭이 제한된다
값 보수화 Q 함수 데이터에 없는 행동의 Q값을 학습 중에 일부러 낮춘다 조절 값 하나가 성능을 크게 흔든다
데이터 안 부트스트랩 목표값 애초에 로그에 있는 행동으로만 목표를 만든다 데이터 밖을 아예 안 묻는다
열 모델링 문제 정의 상태 · 행동 · 보상의 나열을 시퀀스로 보고 다음 행동을 예측한다 max⁡\max 가 없어 부풀음도 없다

정책 제약은 가장 직관적이다. 행동 복제 항을 손실에 섞어 넣어 "로그가 하던 것에서 크게 벗어나지 마라"고 잡아 둔다. 구현이 단순하고 잘 무너지지 않아 실무의 기본값으로 쓸 만하다.

값 보수화는 문제를 정면으로 다룬다. 학습 목표에 항을 하나 더해서, 데이터에 있는 행동의 Q는 그대로 두고 데이터에 없는 행동의 Q는 눌러 놓는다. 잘 맞추면 강하지만 누르는 세기를 정하는 값에 민감하다 — 너무 세게 누르면 행동 복제와 다를 게 없어지고, 약하면 부풀음이 새어 나온다.

데이터 안에서만 부트스트랩하는 방식은 접근이 다르다. 목표값을 만들 때 모든 행동에 대한 max⁡\max 를 아예 계산하지 않고, 로그에 실제로 있는 행동들의 값 중 위쪽을 취하는 식으로 대신한다. 데이터 밖의 Q를 한 번도 묻지 않으므로 부풀음이 원천적으로 안 생긴다. 튜닝할 것이 적어 다루기 편한 쪽이다.

열 모델링은 강화학습을 시퀀스 예측 문제로 바꿔 버린다. "이만큼의 보상을 얻으려면 다음에 무엇을 해야 하는가"를 언어 모델처럼 예측한다. max⁡\max 도 부트스트랩도 없어서 부풀음 문제 자체가 없는 대신, 로그에 없는 조합을 새로 만들어 내는 능력은 약하다.

행동 복제를 기준선에서 빼지 않는다

이 분야에서 가장 자주 되풀이되는 실수가 있다. 행동 복제를 기준선으로 안 두는 것이다.

로그를 만든 것이 이미 잘 다듬어진 규칙 기반 시스템이거나 숙련된 사람이라면, 그 로그는 상당히 좋은 정책의 기록이다. 이런 자료에서는 복잡한 오프라인 강화학습 알고리즘이 단순한 행동 복제를 못 이기는 경우가 흔하다. 심지어 행동 복제에 "보상이 높은 궤적만 골라 학습"을 얹은 정도가 최고 성능인 경우도 많다.

거꾸로, 로그가 무작위에 가깝거나 다양한 정책이 섞여 있으면 강화학습 쪽이 크게 이긴다. 좋은 조각과 나쁜 조각을 갈라 좋은 것만 이어 붙일 수 있기 때문이다. 자료의 성격이 어느 방법이 이길지를 정한다는 뜻이고, 그래서 기준선 없이는 아무 말도 할 수 없다.

배포하기 전에 재는 일이 가장 어렵다

알고리즘보다 실무에서 더 큰 벽은 평가다. 새 정책이 나왔는데 환경에 안 붙여 보고 얼마나 좋은지를 알아야 한다. 붙여 볼 수 있으면 애초에 오프라인으로 학습할 이유가 없었다.

이 문제를 오프라인 정책 평가(off-policy evaluation)라 부르고, 쓰는 방법은 대략 셋이다.

  • 중요도 가중. 로그의 각 기록에 "새 정책이라면 이 행동을 고를 확률 ÷ 옛 정책이 골랐던 확률"을 곱해 보정한다. 편향이 없다는 좋은 성질이 있는데, 두 정책이 조금만 달라도 분산이 폭발한다. 여러 단계에 걸친 결정이면 확률의 곱이 되어 더 심하다
  • 모델 기반 평가. 보상 모델을 따로 학습해 새 정책의 값을 계산한다. 분산은 작은데 그 모델이 틀린 만큼 그대로 틀린다
  • 이중 강건 방식. 위 둘을 섞어 한쪽이 틀려도 버티게 만든다. 실무에서 기본으로 쓸 만한 절충이다

셋 다 공통으로 요구하는 것이 하나 있다. 로그에 "그때 그 행동을 고를 확률"이 기록되어 있어야 한다. 이 값을 성향 점수라 부르는데, 대부분의 서비스 로그에는 없다. 무엇을 보여 줬는지만 남기고 왜 그것이 뽑혔는지, 다른 후보가 뽑힐 확률이 얼마였는지는 안 남기기 때문이다.

그래서 오프라인 강화학습을 언젠가 하고 싶다면, 모델을 만들기 훨씬 전에 로깅부터 고쳐야 한다.

  • 후보 집합과 각 후보의 선택 확률을 함께 남긴다
  • 결정론적으로 1등만 내보내지 말고 아주 작은 비율이라도 무작위를 섞는다. 탐색이 0인 로그에서는 어떤 방법으로도 대안을 평가할 수 없다
  • 모델 버전과 실험 배정을 함께 남긴다. 나중에 어느 정책이 만든 기록인지 갈라야 한다

이 세 줄이 없는 로그는 아무리 많아도 오프라인 강화학습의 자료가 되지 못한다. 양이 문제가 아니라 필요한 열이 없는 것이다.

언어 모델 쪽과의 관계

이 이야기가 낯설지 않다면, 사람 선호로 언어 모델을 다듬는 과정이 같은 구조를 갖고 있기 때문이다. 사람이 매긴 선호 자료는 이미 수집이 끝난 고정된 자료이고, 그 위에서 정책을 옮기는 일은 그대로 오프라인 문제다.

  • 선호 자료로 직접 최적화하는 방식은 보상 모델도 환경 상호작용도 없이 고정된 짝 자료만 쓴다. 전형적인 오프라인 학습이다
  • 그래서 같은 병이 나타난다. 자료를 만든 모델에서 정책이 멀어질수록 성능이 무너지고, 그것을 막으려고 원래 모델에서 멀어지는 정도에 벌점을 건다. 위의 정책 제약과 같은 처방이다
  • PPO 계열로 보상 모델을 두고 돌리는 구성은 온라인에 가깝다. 대신 보상 모델 자체가 고정된 자료로 만들어졌으므로, 정책이 그 모델의 자신 있는 구간을 벗어나면 점수가 부풀어 오른다. 부풀음의 자리가 Q 함수에서 보상 모델로 옮겨 갔을 뿐 구조는 같다

언제 쓰고 언제 쓰지 않을 것인가

쓸 만한 자리

  • 환경에서 탐색하는 비용이 크거나 위험하다
  • 로그가 충분히 많고, 그 안에 행동의 다양성이 있다
  • 로그를 만든 정책이 최적과 거리가 있다. 개선의 여지가 실제로 있어야 한다
  • 성향 점수와 후보 집합이 로그에 남아 있거나, 지금부터 남길 수 있다

쓰지 말아야 할 자리

  • 로그가 결정론적 규칙 하나에서 나왔다. 대안이 기록에 없으니 배울 것도 잴 것도 없다
  • 로그를 만든 정책이 이미 아주 좋다. 행동 복제가 더 낫고 더 단순하다
  • 보상을 정의하기 어렵다. 클릭 같은 대리 지표를 보상으로 삼으면 그 지표만 부풀리는 정책이 나온다. 이 위험은 오프라인이라 더 크다 — 이상해진 것을 알아챌 고리가 없다
  • 온라인 실험을 값싸게 돌릴 수 있다. 그러면 그냥 그렇게 하는 편이 정확하다

정리

  • 오프라인 강화학습은 이미 쌓인 로그만으로, 환경을 건드리지 않고 더 나은 정책을 만드는 일이다
  • 지도학습처럼 안 되는 이유는 개선하려면 로그에 없는 행동의 값을 물어야 하기 때문이다
  • 그 값은 모른다고 답하지 않고 어림된 숫자로 나온다. max⁡\max 가 부풀려진 쪽을 정확히 고르고, 오프라인에는 그것을 끌어내릴 자료가 오지 않는다
  • 대응은 정책을 데이터에 묶거나, 데이터 밖 Q를 눌러 놓거나, 애초에 데이터 밖을 안 묻거나, 시퀀스 예측으로 바꾸는 넷이다
  • 행동 복제를 반드시 기준선에 둔다. 로그를 만든 정책이 이미 좋으면 복잡한 방법이 진다. 자료의 성격이 승자를 정한다
  • 진짜 벽은 평가다. 오프라인 정책 평가는 중요도 가중 · 모델 기반 · 이중 강건 셋인데, 전부 로그에 선택 확률이 남아 있어야 성립한다
  • 그래서 모델보다 로깅이 먼저다. 후보 집합과 선택 확률을 남기고, 아주 작은 비율이라도 무작위를 섞어 둔다. 탐색이 0인 로그는 양이 아무리 많아도 못 쓴다
  • 선호 자료로 언어 모델을 다듬는 일도 같은 구조다. 원래 모델에서 멀어지는 데 벌점을 거는 처방이 정책 제약과 같은 것이다

읽어주셔서 감사합니다. 😊

LATEST

비전·음성·추천의 최신 글

비전·음성·추천2026.09.07

정보 추출 — 글 한 덩이를 표 한 줄로 바꾸는 일

계약서와 이메일을 데이터베이스에 넣으려면 글에서 값을 뽑아 칸에 채워야 합니다. 개체명·관계·사건의 세 층위, 값을 정규화하는 일이 왜 절반인지, 근거 위치를 함께 남겨야 하는 이유, 규칙·전용 모델·언어 모델의 갈림길, 그리고 필드별로 재는 평가법을 정리합니다.

17 MIN
비전·음성·추천2026.09.07

음성 대 음성 — 글자를 거치지 않고 소리에서 소리로

소리를 글자로 바꿨다가 다시 소리로 만드는 경로는 억양과 감정을 가운데서 버립니다. 소리를 곧바로 소리로 옮기는 방식이 무엇을 얻고 무엇을 포기하는지, 소리를 토큰으로 다루는 원리, 목소리를 그대로 옮길 때의 위험, 그리고 평가가 왜 어려운지를 정리합니다.

15 MIN
비전·음성·추천2026.09.07

화자 분리 — 누가 언제 말했는가를 시간축에 적는 일

회의 녹음을 글로 옮기면 누가 한 말인지가 사라집니다. 화자 분리가 푸는 문제와 네 걸음짜리 처리 과정, 겹쳐 말한 구간이 왜 가장 어려운지, DER이라는 지표가 무엇을 세는지, 그리고 음성 인식과 붙일 때 실제로 부딪히는 자리를 정리합니다.

17 MIN