ChatGPT 시리즈 – ①강화학습(RL)과 ‘인간 피드백형 강화학습(RLwHF)’
요즘 ChatGPT가 엄청나게 많은 일을 할 수 있다며 말들이 많다. 모델을 봤을 때는 지난 2017년에 알파고가 나왔던 시절처럼 몇 가지 할 수 있는 것들만 말이 나오고는 Hype이 끝날 것 같은데, 몇 개의 시리즈 글로 ChatGPT가 왜 대단한지, 그럼에도 불구하고 뭔가 엄청난 일을 할 수 있는건 아닌지를 지적해 볼까 한다.
ChatGPT의 명성을 이용하기 위해 그럴듯하게 자기네 회사 시스템을 얹어가는 경우들에 속지말고, 가장 밑바닥에 있는 수학 모델부터 이해해서 잘못된 판단을 내리는 일이 없도록 해 보자.
1.가장 기초 – 최적화 모델(Optimization)
먼저, ChatGPT를 이해하기 위해 고교 수학의 미분과 학부 저학년 수학의 최적화 교과서를 떠올려 보자.
좌측에는 고교 시절에 배우는 미분을 이용한 극대값, 극소값 찾는 계산이 나온다. 이 때, 좌우측으로 범위가 설정되어 있으면 극대값이 최대값, 극소값이 최소값이 될 수 있는 가능성이 있다는 것도 배울 것이다. 물론 좌우측의 범위에서 나오는 한계값이 있거나, 미분 불가능한 점이 있으면 최대, 최소값이 달라질 수 있다는 것도 배웠을 것이다. 미분만 배웠으면 1차 미분이 그래프의 증가/감소를 설명하는 용도로 쓰이고, 2차 미분이 그 증가/감소 자체가 움직이는 방향을 설명한다는 것을 배웠으니 굳이 언급할 필요가 없을텐데, 대학에 입학하면 그런 미분을 1변수가 아니라 2변수(이상)에서 배운다.
대학에서 헤시안 행렬(Hessian Matrix)를 만들어 해당 함수가 최대값, 최소값을 가지는지 여부를 판단하기 위해 양의 정의(Positivie Definite), 음의 정의(Negative Definite)을 계산하는 것을 아마 미분방정식 정도의 수업에서 배울 것이다. 여기까지가 등호를 갖추고 있는 경우에 변수 숫자가 늘어나는 일반형에서 최적화(Optimization)을 계산하는데 쓰는 수학이다. 최적화라는 것이 꼭 맞춰서 들어간다고 생각해서 특이한 계산법이 있는 것이 아니라, 우리가 고교 시절, 대학 저학년 시절에 배우는 미분, 적분 기반의 간단한 수학으로 찾아내는 최대값, 최소값이라는 점만 기억하자.
위의 페이지 좌측은 그렇게 2변수가 주어져 있고, 심지어 좌우측 범위에 해당하는 ‘조건식’이라는 것이 추가됐다. 1변수 일 때는 좌우로만 범위를 정해주면 됐지만, 2변수 이상일 때는 상하로도 범위를 정해줘야하니 1차 이상의 다항식이 나오게 되는 것이다. 좌측 상단의 예시는 X+M=4 라는 1차 선형식이 조건식으로 추가되어 있다.
이 때는 1차 미분으로 X, M 등의 주요 변수가 극대/극소 등의 값을 갖추기 위한 조건을 구하고, 2차 미분으로 만든 헤시안 행렬(Hessian matrix)을 이용해 극대/극소 중 어느 쪽인지 판단할 수 있다. 좀 더 복잡해져서, 이번엔 조건식이 등호를 갖는 것이 아니라 부등호를 갖는다면? 기존에는 등호(=)인 조건만 따졌는데, 이제는 부등호인 조건도 따져야 하는 것이다. 당연하 문제 풀이가 까다로워진다. 그게 바로 우측에 있는 Kuhn Tucker method다. 우하단에 여러가지 경우의 수를 따져가며 최적값을 찾아내는 것을 확인할 수 있을 것이다.
이런 작업이 학부 저학년까지 배우게되는 ‘최적화(Optimization)’이다. 좀 더 정확하게는 ‘정적 최적화(Static optimization)’이라고 부른다. 왜 ‘정적(Static)’이냐고? 한 순간의 값을 찾는 계산이지, 계속 변화하는 값이 아니기 때문이다.
2.중간 단계 – 동적 최적화 모델(Dynamic optimization)
학부 저학년 때 배우는 정적 모델이 동적 모델로 바뀌게 되면, 계산이 반복 작업을 거치는 형태를 가정한다. 매번 완전히 새로운 계산을 해야하면 새로운 방정식을 끊임없이 만들어내야 하는데, 수학을 잘 하시는 분들은 그런 모델들에서 어떤 방식으로건 ‘추상화’ 작업을 통해 공통 부분을 뽑아낸다. 그렇게 공통된 부분이 반복 계산이 돌아가면서 결과값이 조금씩 바뀌는 과정을 추적하는 것이 동적 최적화 모델 작업이다.
직관적으로 잘 안 와닿을테니 식을 한번 정리하고 말로 다시 풀어내보자.
위는 강화학습(Reinforcement Learning, RL)을 가르치기 전에 필요한 수학 교육을 하는 노트의 일부다. 최적 선택(Optimization)을 하는 단계를 1단계에서 2단계로 바꿔봤다. 1기(t=0)에 C를 고르고, 2기(t=1)에 C를 또 고르는데, 갖고 있는 자원(Initial wealth)과 할인율(R=1+r)에 따라 두 번의 C를 고르는 값이 바뀐다.
자원을 많이 갖고 있으면 당연히 C를 많이 쓰려고 할 것이고, R이 크면 클 수록 미래가 나에게 큰 이득이 없으니 t=0에서 많은 C를 쓰고, t=1에서는 상대적으로 적은 C를 쓰려고 할 것이다.
자, 이제 이런 시간의 확장을 t=0, t=1이 아니라, t=T라고 해서 {0,1,2,…..,T}로 늘리면 어떻게 될까?
아마 고교 시절에 수열, 혹은 그 이전에 등차급수, 등비급수 등의 표현을 통해 식을 간략화하는 방식을 배운 적이 있을 것이다. 긴 시간 동안 똑같은 계산을 반복해야하니, 간단한 ‘추상화’를 통해 식을 매우 축약해놨다. 이 정도가 아마 국내 대학 학부 고학년 수준에서 맛 보기 정도로 배우게 되는 동적 최적화(Dynamic optimization)일 것이다. 보다시피 이미 고교 시절에 배운 내용을 다른 형태로 표현해 놓은 것에 불과하다.
3.가치 함수(Value function) 방식 접근
물론 저 위의 식을 우리가 알고 있는 고교 수학으로도 풀어낼 수 있지만, 식의 형태에 제한이 있고, 무엇보다 일반형 함수(Function)를 모두 포괄할 수 없는 단점을 갖는다. 그래서 후술하게 되는 강화학습 같은 계산이 단순한 이자율 계산이 아닌 다음에야 쓰기가 어렵다. 학문을 하는 사람들이 포기하는 사람들이 아니기 때문에, 아래의 ‘벨만 방정식(Bellman equation)’을 내놨다.
위의 1번 항목에서 식 변형을 보면 알겠지만, 벨만 방정식이라는 것이 뭔가 대단한 작업을 한 게 아니라, t=0, t=1, t=2 등등에서 반복 계산되어 나오는 V값 (Value function의 value값)을 구조를 단순화하고, t=0에서 최적화 계산을 할 때는 t=0에서 정하는 r(x,u)와 t=1 이후의 모든 Value는 이미 최적화 되어 있다는 가정을 하고 뭉쳐버린 V값 이렇게 2원화된 계산으로 식을 재정리 했다.
이렇게 하면 저 위에서 봤단 t=0, t=1 이렇게 2개의 시간대에서 최적화 계산을 하던 간단한 모델로 돌아간다. 물론 t=1에서도 똑같이 t=1에서 정하는 r(x,u)와 t=2 이후의 모든 최적화를 뭉쳐놓은 Value가 있다는 가정이 있고, 가장 마지막 단계로 가서 t=T-1일 때 r(x,u)를 정하는 계산을 하는 와중에 역시 t=T에서 완벽한 Value가 있다고 가정한다. 결국, t=T-1에서 최적화 한 값을 하나하나 거꾸로 돌아오면서 t=0까지 돌아오게 되면 모든 단계의 최적화가 완성된다.
이미 고교 시절에 수열 계산이나 등비급수 정도에서 봤을만한 쉬운 수학이다. 차이점이 있다면 Value function이라는 형태로 식을 재정의 하는 부분이 다르고, 그렇게 재정의 해버린 식이 매번 똑같은 형태의 계산이 되어야 한다는 문제가 생긴다.
4.가치 함수와 불확실성
사실 위의 단계까지만 놓고보면 고교 수학과 크게 다르지 않다. 단지 변수의 숫자가 좀 더 늘어났을 뿐이다. 이제 수학에 좀 더 현실을 덧붙여보자. 아까 위의 이자율 할인 같은 고교 연습문제가 주어져 있을 때, 만약에 내일의 이자율이 불확실하다면 어떻게 계산해야 할까? 내일 이후의 이자율도 정해져 있지 않다면?
이런 ‘불확실성’을 통계학에서는 ‘Uncertainty’라고 부르고, 당연히 계산의 정확도는 떨어질 수 밖에 없다. 1주일 후에 받을 돈의 내일 가치는 이자율을 다 알아야 계산할 수 있는데, 계산에 쓸 수 있는 이자율이 없기 때문이다.
그럼 이자율이 어떻게 움직일지 ‘대충’이라도 알 수는 없을까? 그 정보를 활용하면 좀 더 정확해지지 않을까? 이 때 통계학에서 말하는 ‘분포함수’의 개념을 도입할 수 있다. 우리가 일반적으로 알고 있는 정규분포, 이산분포 등등이 그 예시다. 주사위 던지기 처럼 1부터 6까지의 숫자가 각각 1/6의 확률로 나온다면, 예상 가능한 값에 1/6의 확률을 곱해주면 어떤 값이 나올지 ‘대충’이라도 짐작할 수 있지 않나? 이걸 ‘기대값’이라고 부르고, 영어로 ‘Expectation’이라는 용어를 쓴다.
아래의 Bellman equation 확장판이 바로 그 ‘Expectation’ 계산을 한 것이다.
이렇게 미래의 모든 정보를 완벽하게 예측할 수 없기 때문에 불완전 예측을 바탕으로 한 기대값 계산을 하는 것이 동적 최적화를 활용하는 첫번째 이유다.
은행 같은 금융기관이 이자율 움직임에 따라 위험을 분산하고 손실을 최소화하는 계산에 쓰는 것 뿐만 아니라, 지구 밖의 소행성이 지구에 근접할 때 24시간에 한번 주어지는 관측 정보들을 결합해 궤도를 추정할 때도 쓰이고, 사실 불확실한 미래를 예측하는 거의 모든 작업에 다 쓰일 수 있다.
이후에는 연속함수를 가정하고 극한의 범위 안에서 움직임을 수학으로 풀어내는 Hamiltonian 이라는 접근법부터 다양한 계산법이 있으나, 우리는 데이터를 입력해서 수식을 찾아가는 계산을 해야하지, 이미 주어진 식을 계산하는 것이 아니기 때문에, 관점을 좀 바꿔서 데이터로 Bellman equation를 역추적하는 계산으로 방향을 비튼다. 이것이 외부에 강화학습(Reinforcement Learning)으로 알려진 계산법의 출발점이다.