강화학습

  • 강화학습을 언어모델에 적용하는 부분에 관심이 있다.
  • 예전에 책등으로 강화학습을 스터디했지만 시간도 지나서 잘 기억이 안나고..
  • 실질적으로 책등은 이론, 기초적인 것을 다루기 때문에 바로 NLP에 적용하는데 미스매칭되었다.
  • 챗지피티의 PPO 방식을 따라하던중, 기초적인것을 빠르게 습득하고 적용해보기 위해 필요한부분만 살펴보자

추천 강의

  • 혁펜하임: https://www.youtube.com/watch?v=cvctS4xWSaU&list=PL_iJu012NOxehE8fdF9me4TLfbdv3ZW8g&index=1
  • 위 강의를 쭉보면 되는데, 내 식대로 간단히만 정리해둔다.

MDP (Markov Decision Process)

  • 강화학습이 이뤄지는 환경은 MDP로 가정을 하는 거 같다.
  • 현재 상태에서 action을 취해서 다음 상태가 되는데, MDP란 현재 상태만이 이 영향을 끼친다는 것 같다.
  • 즉 과거의 state, action은 현재의 state을 만들고 여기서 action을 취하면 현재 st, at에 의해서 st+1이 결정이 되는 것
  • 언뜻보면 당연한 거 같지만, 실제 세계에서는 아닌 경우가 대부분이다.
    • 회사를 입사 하려고 할때, 학점만이 영향을 끼치지 않지 않는가?
    • 학점을 나타내는 상태는 과거 공부한 것의 결과가 축적이 되었겠지만
    • 현재 학점 state와 상관없는 인성등의 state또한 회사 입사에 관련이 있을 것이기 때문에?
  • 뭐아무튼, 이러한 가정을 통해, 벨만 방정식등의 수학적인 전개에서 소거등을 할 수가 있다.

베이지안 룰

  • 기초적인 수학이다.
  • p(x,y) = p(x|y)p(y) = p(y|x)p(x)
  • 만약 condition이 있다면?
    • p(x,y|z) = p(x|y,z)p(y|z)

용어

  • https://www.youtube.com/watch?v=7MdQ-UAhsxA&list=PL_iJu012NOxehE8fdF9me4TLfbdv3ZW8g&index=4
  • return
    • 에피소드가 끝날때까지 받는 reward의 합들을 의미
    • 미래 reward는 gamma로 감소
  • V: state value function
    • 현재 상태에서 기대되는 return을 의미한다.
  • Q: action value function
    • 현재상태+현재엑션을 했을 때, 기대되는 return을 의미한다.]
  • optimal policy
    • state value function을 최대화하는 policy

벨만 방정식

  • https://www.youtube.com/watch?v=gA-6J-nl4c4&list=PL_iJu012NOxehE8fdF9me4TLfbdv3ZW8g&index=5
  • V(st)을 V(st+1)로 표현하거나, Q(st)을 Q(st+1)로 표현하는 것을 벨만 방정식이라고 표현
  • 표현하는 방법은 그냥 수학 적분을 풀어서 쓰면 된다.
  • 이때 베이지안 룰&MDP를 이용하는 것

MC (monte-carlo)

  • https://www.youtube.com/watch?v=cn7IAfgPasE&list=PL_iJu012NOxehE8fdF9me4TLfbdv3ZW8g&index=6
  • https://www.youtube.com/watch?v=bCifW0SENGs&list=PL_iJu012NOxehE8fdF9me4TLfbdv3ZW8g&index=7
  • V을 최대화하는 optimal policy을 구하고 싶다: 이것이 RL의 최종목적
    • 여기서는 V을 이용한 수식, 방법론이기 때문에 value-based 방법이라고 보면된다.
    • V = 적분_at (Q(st,at)p(at|st))dat
    • 이때, 현재 time t가 아닌, 추후의 policy는 optimal이라고 가정을 한다.
    • 따라서 Q(st,at)는 이미 optimal 상태=Q*(st,at)이고, 그럴 경우 p(at|st)의 optimal만 찾으면 된다.
    • 즉 at는 Q*을 최대화하면 되는 것이기 때문에 optimal policy p*(at|st) = delta(at-a*t)가 된다.
  • 그렇다면 Q*는 어떻게 구할까
    • MC방법이 그중의 하나이고, 큰수의 법칙 개념이다.
    • 적분 xp(x)dx = 1/N sum(x)에서 N이 커지면 같게 되는데, 이를 이용한다.
  • MC을 이용하면 끝까지 샘플링을 해야한다.
    • 생성 언어모델을 생각해보면, 현재 상태 st는 "나는 오늘"까지 생성한 상태라고 하자.
    • 그러면 그 뒤에 다양한 문장들이 생성될 수 있는데 MC는 이를 하나하나 다 생성해보는 방법이다.
    • 그렇게 다 생성해서 에피소드가 끝날때마다, return을 구해서 평균내면 Q값이 구해진다.
    • 이 Q가 Q*는 첨에는 아니지만, 이렇게 Q을 업데이트할수록 Q*에 가까워진다는 것이다.

TD (temporal difference)

  • https://www.youtube.com/watch?v=vfLrBPYwuFA&list=PL_iJu012NOxehE8fdF9me4TLfbdv3ZW8g&index=8
  • https://www.youtube.com/watch?v=STcbD5VhP3Y&list=PL_iJu012NOxehE8fdF9me4TLfbdv3ZW8g&index=9
  • Q*을 구하는 다른 방법이다.
  • TD는 일부 step만 이동한 경우만 고려하면 된다.
    • 예로 1-step만 고려해보자
    • 그러면 현재 상태 "나는 오늘" 에서 "나는 오늘 학교에"의 문장이 완성되었다.
    • 그러면 이에 따른 reward을 얻고 st+1 상태가 되는 것이다.
    • 이를 벨만 방정식으로 표현을 한다.
    • 그러면 Q(st,at)=Q_{N-1} + 1/N(Rt+ gamma*Q(st+1_{N},at+1_{N})-Q_{N-1})가 되는데 이는 incremental MC라고 한다.
      • N는 샘플링 수이다.
      • incremental MC는 별건 아니고, 그냥 MC인데 한번에 평균내는게 아니고 이전 샘플링들로 평균낸 결과를 이용해 요번 샘플링까지 포함한 평균을 구한다는 것이다.
      • TD하고는 다른건데, TD는 매 st,at에 대해 update가 되는 것인데 MC는 끝까지 샘플링하고 update가 되는 것이다.
      • 즉 incremental MC는 매 샘플들마다, 귀납법식으로 업데이트 되는 것을 의미한다.
      • 원래 MC는 모든 샘플을 뽑고 나서, 업데이트하기 때문에 그 샘플들을 뽑는 과정에서 업데이트되지 않는 policy들을 사용할 것이기 때문에 별로일 듯?
      • 1-step TD는 한번의 action만 취하고, 나온 reward와 next state의 Q(st+1,at+1)을 이용해서 업데이트하는 것을 의미한다.
    • 이것을 수식조금 변형하면 Q_{N} = (1-alpha)Q_{N-1}+alpha*(Rt+gamma*Q(st+1,at+1))이 된다.
    • 즉 쉽게 말해서, 샘플링을 하면서 Q가 업데이트 되는데, MC와 달리 한번 step이동하면서 reward와 샘플이 구해지고, Q(st,at)을 Q(st+1,at+1)로 표현하는 식이다.
    • 직관적으로는 귀납법같은 느낌이다.
    • 이러한 방법을 SARSA라고한다.
  • MC 
    • 잠점: unbiased
    • 단점: 높은 variance
  • TD
    • 장점: 낮은 variance
    • 단점: biased
    • SARASA, Q-learning등이 있음

On-policy vs off-policy

  • https://www.youtube.com/watch?v=wVhH_3Td_R4&list=PL_iJu012NOxehE8fdF9me4TLfbdv3ZW8g&index=10
  • on-policy
    • behavior policy = target policy
  • off-policy
    • behavior policy != target policy
  • behavior policy
    • 현재 상태에서 행동을 해서 다음의 state을 얻는 것
  • target policy
    • TD target을 만들기 위한 policy
    • 샘플이 만들어질 다음 state에서 진행되기 위한 policy
    • 즉 바둑이라 하면 사람이 미리 둔 기보가 있을 것이다.
    • 이 기보를 이용해서 next state로부터 샘플들을 뽑을 수가 있을텐데, 이 샘플들을 뽑는 것이 target policy라고 보면된다.
    • 이러한 사람의 기보가 딱히 없는 경우? 일반적으로는 greedy policy를 target policy로 쓴다고 한다.
    • 당연히 behavior policy는 입실론 그리디 policy이다.
  • Q-learning
    • https://www.youtube.com/watch?v=k0VoyCZjbMY&list=PL_iJu012NOxehE8fdF9me4TLfbdv3ZW8g&index=11
    • 이는 off-policy이기 때문에 수식전개가 조금 다른데, 수식 결과는 next state의 Q값을 활용할 때 Q가 max되는 at+1에 해당하는 Q값을 취하게 된다.
    • on-policy인 SARSA는 next staet의 Q값을 활용할 때, Q(st+1,at+1)를 그대로 따른다.
  • SARSA vs Q-learning
    • https://www.youtube.com/watch?v=Fj5HBT1vloU&list=PL_iJu012NOxehE8fdF9me4TLfbdv3ZW8g&index=12
    • n-step
    • https://www.youtube.com/watch?v=aURcmCyA1TA&list=PL_iJu012NOxehE8fdF9me4TLfbdv3ZW8g&index=13

Policy-based

  • https://www.youtube.com/watch?v=t9wuRUFWkRQ&list=PL_iJu012NOxehE8fdF9me4TLfbdv3ZW8g&index=23&pp=iAQB
  • 위 영상시리즈를 언어모델하고 접목하면 사실 NLP에 핵심적인 내용이 된다.
  • 즉 생성 테스크라고하면 다음과 같을 것이다.
    • 상태 st: "나는 집에"
    • action at: 다음 토큰은 어떤 것으로
    • 언어모델: 다음 토큰에 대한 확률 (policy network)
  • 즉 생성모델을 강화학습으로 다음과 같이 학습한다고 해보자
    • https://www.youtube.com/watch?v=t9wuRUFWkRQ&list=PL_iJu012NOxehE8fdF9me4TLfbdv3ZW8g&index=23
    • 상태 st: "나는 집에"
    • 최종 문장: "나는 집에 가서 밥을 먹었다"
    • st에서 최종문장(에피소드 끝)이 생성됐을 때, return r을 받았다고 하자.
      • 물론 여기서 return r은 계산할 수 있는 사전의 모델이 필요하다
    • 이때 이론적으로 모델은 expected return을 최대화하도록 업데이트한다.
    • 즉 maximize expected return을 하도록 모델을 학습시키는 거라 expected return을 미분해서 gradient ascending을 하면 된다.
    • expected return을 적분으로 표현하고, 미분(p(x))=미분(lnp(x))p(x)로 바꿔서 수식을 전개하면 샘플링으로 업데이트할 수 있다.
    • 즉 실제 매 학습데이터(인스턴스)를 가지고 샘플링된 결과가지고 업데이트하면 결국 expected return을 최대화하는 것이랑 같다는 것이다.
      • 이는 몬테카를로 법칙 (큰 수의 법칙) 때문에 그렇게 된다.
      • 여기서 업데이트할 sample개수를 1로 두는 것을 REINFORCEMENT 알고리즘이라 부르는 것 같다.
      • 자세한 식은 동영상 참고
      • 영상에서 식을 풀어서쓰면, G0=Gt로 보고 sigma로 풀어서 쓸 수 있다. 
        • 근데 이는 생성모델의 업데이트에서는 안쓰이는 듯? 
        • 왜냐하면 각 토큰을 생성할 때마다(at취할때마다) return Gt을 얻어야하는데, 보통 reward(return) model은 완성된 문장에서 뽑는 형태이기 때문
        • 그래서 언어모델에선 굳이 식을 풀어쓴 것을 사용하지 않는 것으로 생각됨
    • 따라서, 언어모델에서 chatgpt처럼 학습할때는, 초기 상태 s0에서 최종 상태를 생성했을 때, 한번 업데이트하는 것으로 이해했다.
      • 최종상태에서 업데이트는 결과적으로 objective = return*ln(p)가 되는 것이다.
      • 여기서 return은 G0가 되는 것으로 reward모델로 계산한 값일 것이다.
      • 코드상으로는 loss = -return*ln(p)을 minimize하면 됨
      • 여기서 p는 st에서 at을 해나가면서 최종문장까지 가는 과정을 말하므로
      • 언어모델에서 vocab_size의 action이 있기 때문에, 언어모델의 출력에서 softmax취한것이 pt가 되고, 최종 p=pt*pt+1*...이 된다.
      • 모델 업데이트하기 위해 log을 취하므로 log(p)=log(pt)+log(pt+1)+...이 되는 형태이다.
































댓글