글을 쓰게 된 배경
막연하게 강화학습을 배워두면 "기획자 분들이 밸런스를 잡는데 도움을 줄 수 있지 않을까, 조직에 도움이 되지 않을까?"라는 마음으로, 강화학습을 마음에 품어 두고 있었다.
그러던 중, 우연히 포켓몬 레드버전을 강화학습을 시켜 플레이하는 과정의 영상을 보게 되었다. 인간의 개입 없이 적절하게 보상을 설계하는 것만으로 AI가 혼자서 태초마을에서 회색시티를 거쳐 달맞이산으로 가는 이 엄청난 여정의 영상을 보고 난 이후 강화학습은 어느덧 로망이 되어버렸다.
그렇지만 섣불리 공부할 용기는 못내고, 강화학습 관련 책만 야금야금 모아오고 있었는데.... 글또에서 유데미 인강을 무료로 들을 수 있는 이벤트를 통해 "AI 만들기 : 강화학습과 인공신경망 완전 정복"이라는 강의를 접하게 되었다. 해당 강의를 신청하고 본격적으로 강화학습 공부를 시작하게 되었다.
기대했던 것은 강화학습에 대한 이해, 실제로 강화학습을 적용해보면서, 실무에 적용할 수 있다는 자신감을 얻겠다!는 것이었지만,
현실은...
어림도 없었다. 생각한 것 이상으로 강화학습의 벽은 너무 높았다. 무식하면 용감하다고, 아무것도 모른 상태에서 시작한 강화학습은 기초 개념을 이해하는 것조차 쉽지 않았다. 개념을 이해하는 것도 버거운데다 파이썬에 대한 지식도 많지 않은 상태라 적용하는 것은 언감생심이었다.
그렇지만, 강화학습 공부에 대한 도전을 마무리하는 과정에서 현재까지의 여정을 정리할 겸,
강화학습 기초 개념을 나처럼 지식이 부족한 사람도 이해할 수 있도록(뉴비의 마음은 뉴비가 안다고...) 개념을 직관적으로 정리하여 전달하고 싶어 글을 쓰게 되었다.
지도학습 vs 강화학습
강화학습은 지도학습과는 다르다.
지도학습은 정답이 정해져 있고, 정답을 미리 어느 정도 알려준 상태에서 다른 상황에서도 최대한 정답을 많이 맞출 수 있도록 학습시키는 것을 의미한다. 예를 들면 시험 족보를 미리 주고, 족보를 학습한 상태에서 본 시험은 몇 개의 정답을 맞췄는지, 어떻게 하면 족보를 기반으로 본 시험을 잘 맞추게 할 수 있을지 연구하는 것이다.
반면, 강화학습은 정답을 미리 알려주지 않는다. 대신 보상이라는 개념이 있는데, 특정 액션을 했을 때 보상을 받게 된다면 그 액션을 더 강화하고, 반대로 특정 액션을 했을 때 패널티를 받게 된다면 그 액션은 줄이면서 결과적으로 누적 보상을 최대화할 수 있는 최적의 행동을 찾아나가는 과정을 의미한다.
무수히 많은 연습을 거쳐야 하기 때문에 이 과정이 한 번에 하나씩 이루어지면 시간이 오래 걸리겠지만, 수많은 컴퓨팅 자원을 통해 한 번에 여러 번 시뮬레이션을 돌리면서 파워풀한 모습을 보일 수 있다.
강화학습의 특징
누적보상과 할인 계수의 존재
위에서 보상에 대해 언급했는데, 여기서의 보상은 당장 눈 앞에 보이는 보상이 아니라 앞으로 내가 받을 수 있는 미래의 보상을 모두 고려하는 것이다. 이를 누적보상이라고 한다. 대신 누적 보상을 구할 때 할인 계수를 이용하는데, 현실 경제에서도 할인율 개념을 통해 현재 가치를 만드는 것처럼, 강화학습을 할 때에도 미래의 보상에 할인 계수(discount)를 붙여 먼 미래의 보상은 현재 시점에서 어느 정도 가치를 낮춰 평가한다.
순차적 의사결정 문제
각 순서에 따라 보상 획득에 영향을 주는 것을 의미한다. 조금 과장된 비유이기는 하지만, "젊을 때 고생은 사서도 한다"를 강화학습 관점에서 해석해보면 이해가 쉬울 것 같다. 고생이 학습 초기 단계에 이루어지면, 초반에는 마이너스 보상을 받지만 후반 단계에서는 큰 누적 보상을 획득할 수 있다. 반면, 초기 단계에서 별다른 고생이 없으면 작은 보상을 획득해나갈 수 있지만, 후반 단계에서 마이너스 보상을 크게 받을 수 있게 된다.
순서가 중요하지 않으면 단순히 고생의 총량이 중요하겠지만, 순차적 의사결정을 할 때에는 고생을 젊을 때 할 것인가, 늙어서 할 것인가가 중요해진다. 고생의 순서에 따라 누적 보상이 달라질 수 있기 때문이다.
Markov Process 를 따른다
현재의 상태가 오직 직전 과거의 상태에만 영향을 받는 확률 과정을 의미한다.
수식으로 표현하면
\(P(s_{t} | s_{t-1}, s_{t-2}, ..., s_{1}) = P(s_{t} | s_{t-1})\)
인데, 비유하자면 입시로 가는 여정에서 수능 D-100 시점의 나의 지식 수준이 수능 성적에 중요하지, 수능 D-100까지의 내 지식 수준의 변천이 크게 중요하지 않은 것처럼, 강화학습에서도 현 시점에서 내가 앞으로 받을 수 있는 누적보상이 중요하지, 과거 내가 받아온 보상 상태는 크게 중요하지 않다는 말이다.
강화학습에서 중요한 개념인 MDP (Markov Decision Process)도 위와 같은 MP 개념에 기반으로 두고 있다.
기본 용어
이런 맵을 빠져나가는 상황이라고 해보자. (유데미 인강에서 사용한 맵을 그대로 가져왔다.)
보상을 얻게 되면 이 맵을 빠져나가고 게임은 그대로 종료된다. 또, 들어가면 안 되는 지점에 들어가면 페널티를 받고 게임은 그대로 종료된다.
맵을 빠져나가기 위해 행동하는 주체를 Agent, 그리고 빠져 나가서 얻게 되는 최종보상이나, 빠져나가는 과정에서 얻을 수 있는 페널티 모두를 Reward라고 한다.
이제 +10이라는 보물상자에 대한 최적 경로를 찾기 위한 정책을 세워야 한다. 각 칸을 상태, 그리고 이동 방식에 대한 결정을 액션이라고 한다면, 각 상태에서 어떤 액션을 취할 지 결정하는 것을 정책이라고 하는데 정책을 결정할 때 필요한 것이 상태가치함수와 액션가치함수이다.
상태가치함수란 특정 상태에 도달했을 때 내가 받을 수 있는 가치를 의미한다. 위의 예시에서 할인율을 0.9라고 가정하고, 각각 위치마다 상태가치함수를 정의해본다면 아래 그림과 같다.
보물상자 바로 직전 칸은 한 번만 더 앞으로 나가면 되므로, 보물 발판과 동일한 가치를 갖게 되고, 그 왼쪽에 있는 칸에서 오른쪽으로 한 칸 나아가도 보상을 받을 수 없지만(+0), 대신 그 다음 한 번 더 오른쪽으로 한 칸 나아가면 보상을 받을 수 있게 되므로(10 * 0.9) 상태가치함수는 9를 갖게 된다. 이런 방식으로 비슷하게 상태가치함수를 채울 수 있다.
액션가치함수는 Agent에 초점을 맞춰서 특정 액션을 취했을 때 내가 어떤 가치를 받을 수 있을지를 구한다.
가령 Agent가 그림과 같은 위치에 놓여 있을 때, 위로 올라가는 선택을 하면 +10 (당장 보물이 눈앞에 있지는 않지만, 오른쪽으로 한 칸만 더 가면 보물을 얻을 수 있으므로) 오른쪽으로 가는 선택을 하면 -10, 왼쪽으로 가는 선택을 하면 막혀 있으므로 0을 받고 다시 현재 위치로 되돌아오게 된다.
이처럼 어떤 액션을 취했는지에 따라 받게 되는 보상에 대한 함수를 액션가치함수라고 한다.
위와 같은 내용을 일반화하여 보여주는 수식을 벨만 방정식이라고 하는데,
상태가치함수 \(v_{\pi}(s_{t}) = \sum\limits_{a \in A} {\pi(a|s)*q_{\pi}(s, a)} \)
액션가치함수 \(q_{\pi}(s,a) = r_s^a + \gamma*\sum\limits_{s^{'} \in S}{P_{ss{'}}^a * v_{\pi}(s^{'})} \)
로 표현할 수 있다.
상태가치함수는 특정 액션을 취할 확률과 그 액션을 취했을 때 내가 받을 수 있는 가치(액션가치함수)의 합인데, 결국 현 상태에서 내가 어떤 액션을 취하느냐에 따라 받을 수 있는 값을 평균 낸 것이라고 보면 될 것 같다.
액션가치함수는 그 상태에 도달했을 때 내가 즉시 얻을 수 있는 보상과 미래에 내가 어떤 액션을 취한 이후에 도착한 상태에서 받을 수 있는 가치(상태가치함수)를 더해서 구한 값이다. 계산이 복잡해지는 것은 내가 어떤 액션을 취한다고 해서 100% 그 상태에 도달한다는 보장이 없어 \(P_{ss^{'}}\) 라는 전이 확률 행렬을 고려하기 때문이다.
그리고 벨만 방정식에서 각 상태가치함수와 액션가치함수를 극대화할 수 있도록 만들어주는 식을 벨만 최적 방정식이라고 한다.
내 액션이 100% 확률로 그대로 실현되어서 원하는 상태에 도달할 수 있고, 내가 어떤 상태에 도달하면 어떤 보상을 받을 수 있는지에 대한 가치를 알고 있다면 문제는 간단하지만(이걸 deterministic한 상태라고 한다고 한다.) 진짜 문제는 내 액션이 원하는 상태로 100% 간다는 보장이 없고(ex. 나는 앞으로 가고 싶었지만, 몬스터를 만나 좌절되었다..) 각 상태과 액션 별로 어떤 가치를 제공해주는지 알 수가 없다는 것이다.
만약 이상적인 상황이라고 하면,
현 시점의 액션 가치 함수 \(Q_{t}(s, a)\)는 \(r_s^a + \gamma*\max\limits_{a}{Q_{t+1}(s^{'},a^{'})} \) 와 같지만, 갱신이 이루어지고 있는 과정에는 두 값에 차이가 날 수 있다. 그리고 두 값의 차이를 TD(Temporal Difference)라고 하고, 식으로 쓰면 다음과 같다.
TD = \(r_s^a + \gamma*\max\limits_{a}{Q_{t}( s^{'},a^{'} )} - Q_{t-1}(s, a) \) 로 쓸 수 있고, 현재 가지고 있는 Q(s,a)에 새로 얻은 TD를 일정 비율로 적절히 섞어서 액션가치함수를 갱신시켜 나갈 수 있다.
이렇게 각 정책을 택하고, 상태가치함수와 액션가치함수를 갱신해나가면서 최적의 정책을 찾아나가는 것이 강화학습의 기본 골자인 듯 하다. 이러한 이론을 실현해나가기 위해서 딥 큐러닝을 쓰니, A3C를 쓰니 하는 것 같은데 구현의 영역은 전혀 이해를 하지 못했기 때문에 나의 여정은 여기서 마무리짓게 되었다.
마치며
공부한 개념을 내 삶에 적용해서 생각해보는 걸 좋아하는 편이다. 당연히 어떤 개념을 현실에 대입시키면 완전히 들어맞지도 않고, 또 개념을 엄밀하게 이해하는 것이 아니라 오히려 억지를 부리는 것 같은 때도 있지만 반대로 괜스레 인생에 대한 깨달음을 얻어가는 것 같은 느낌이 들 때도 있다.
강화학습을 공부할 때도 비슷한 느낌이었는데 인생을 살아가는 여정 역시 강화학습과 크게 다르지 않게 느껴졌기 때문이다.
매일 매일 늙어가는 과정 속에서, 내가 어떤 행동을 했을 때 어떤 보상을 받을지 알 수 없고, 또 같은 행동을 하더라도 현실은 비결정적(Non-deterministic)이기 때문에 내가 뜻하지 않은 방향으로 액션을 하게 될 수도, 또 다른 보상을 받게 될 수도 있다.
강화학습과 다른 점은, 인생을 살아가는 "나"라는 존재는 오직 하나의 자원만 사용할 수 있다는 것이다. 그것이 퍽 서글프기도 하지만, 그렇기 때문에 액션 한 번 한 번에 어떤 보상을 받을지 스스로 잘 체크하고, 회고하는 시간을 가지면서 더 나은 방향으로의 삶을 모색해야 한다는 생각을 하게 되었다.
또, 보상에 대한 관점을 바꾸면 언제나 최적의 삶을 살 수도 있을 것 같다. 하루 하루 충만하고 행복한 삶을 살았다고, 스스로 보상을 줄 수 있으면 내 여정은 최적의 여정이 될 수 있다. 강화학습에서도 보상의 개념은 결국 인간이 정의해주는 것처럼, 내가 하루하루를 어떻게 평가할 것인지가 어쩌면 인생을 강화해나가는 여정에 가장 중요한 것이 아닐까 싶다.
참고자료
'ML,DL' 카테고리의 다른 글
머신러닝을 활용한 웹 최적화 공부일지 - 1장. 베이즈 통계를 활용한 가설검정 입문 (0) | 2024.08.16 |
---|