자연어 생성에 강화학습 적용하기
Last updated
Last updated
강화학습은 마르코프 결정 과정(MDP) 상에서 정의되고 동작합니다. 따라서 여러 선택action을 통해 여러 상황state을 옮겨다니며transition 에피소드가 구성되고, 선택된 행동과 상태에 따라 보상이 주어집니다. 이것이 누적되고 에피소드가 종료되면 누적보상을 얻을 수 있습니다.
이러한 과정은 자연어 처리에서 텍스트 분류와 같은 문제보다는 시퀀셜 데이터를 예측해야 하는 자연어 생성(NLG)에 적용됩니다. 이제까지 생성된 단어들의 시퀀스가 현재 상황current state이 될 것이며, 이제까지 생성된 단어를 기반으로 새롭게 선택하는 단어가 행동이 될 것입니다. 이렇게 문장의 첫 단어beginning of sentence(BOS)부터 문장의 끝 단어end of sentence(EOS)까지 선택하는 과정, 즉 하나의 문장을 생성하는 과정이 하나의 에피소드가 됩니다. 우리는 훈련 코퍼스에 대해 문장을 생성하는 경험을 축적하여(즉, 에피소드를 반복하여) 실제 정답과의 비교를 통해 기대누적보상을 최대화할 수 있도록 seq2seq 네트워크 파라미터(강화학습에서는 정책망) $\theta$ 를 훈련합니다.
기계번역에 강화학습을 구체적으로 대입해보면, 현재 상태는 주어진 소스 문장과 이전까지 생성(번역)된 단어들의 시퀀스가 될 것이고, 행동을 선택하는 것은 현재 상태에 기반하여 새로운 단어를 선택하는 것이 될 것입니다. 그리고 현재 time-step의 행동을 선택하면 다음 time-step의 상태는 소스 문장과 이전까지 생성된 단어들의 시퀀스에 현재 time-step에 선택된 단어가 추가되어 정해집니다.
중요한 점은 행동을 선택한 후에 환경으로부터 즉각적인 보상을 받지는 않으며, 모든 단어의 선택이 끝나고 최종적으로 EOS를 선택해 디코딩이 종료되어 에피소드가 끝나면, 비로소 BLEU 점수를 계산하여 누적 보상을 받을 수 있다는 것입니다. 즉, 종료 시 받는 보상값은 에피소드 누적보상cumulative reward 값과 일치합니다.
강화학습을 통해 모델을 훈련할 때, 훈련의 도입부부터 강화학습만 적용하기에는 그 훈련방식이 비효율적이고 어려움이 크므로, 보통 기존의 MLE를 통해 어느 정도 학습이 된 신경망 $\theta$ 에 강화학습을 적용합니다.
강화학습은 탐험(exploration)을 통해 더 나은 정책의 가능성을 찾아내고 착취(exploitation)를 통해 그 정책을 발전시켜 나갑니다.
지금까지 강화학습 중에서도 정책 기반 학습 방식인 폴리시 그래디언트에 대해 간단히 살펴보았습니다. 폴리시 그래디언트의 경우 소개한 방법 외에도 발전된 방법들이 많습니다. 예를 들어 액터크리틱Actor Critic의 경우에는 정책망 $\theta$ 이외에도 가치망 $W$ 를 따로 두어, 에피소드 종료까지 기다리지 않고 TD 학습법을 통해 학습할 수 있습니다. 여기서 더욱 발전하여 기존의 단점을 보완한 A3CAsynchronous Advantage Actor Critic와 같은 다양한 방법들도 있습니다.
하지만, 자연어 처리에서의 강화학습은 이런 다양한 방법들을 굳이 사용하는 대신 간단한 REINFORCE 알고리즘을 사용해도 큰 문제가 없습니다. 이것은 자연어 처리 분야의 특징 덕분입니다. 강화학습을 자연어 처리에 적용할 때는 다음과 같은 특징이 있습니다.
선택 가능한 매우 많은 행동(action) $a_t$ 가 존재합니다. 보통 다음 단어를 선택하는 것이 행동을 선택하는 것이 되므로, 선택 가능한 행동의 집합의 크기는 어휘 사전의 크기와 같다고 볼 수 있습니다. 따라서 그 집합의 크기는 보통 몇만 개가 되기 마련입니다.
매우 많은 상태 (state)가 존재합니다. 단어를 선택하는 것이 행동이었다면, 이제까지 선택된 단어들의 시퀀스는 상태가 되므로, 여러 time-step을 거쳐 수많은 행동(단어)이 선택되었다면 가능한 상태의 경우의 수는 매우 커질 것입니다.
따라서 매우 많은 행동을 선택하고, 매우 많은 상태를 훈련 과정에서 모두 겪는 것은 거의 불가능하다고 볼 수 있습니다. 결국 추론 과정에서 보지 못한(unseen) 샘플을 만나는 것은 매우 당연할 것입니다. 이러한 희소성 문제는 큰 골칫거리가 될 수 있습니다. 하지만 우리는 딥러닝을 통해 이 문제를 해결 할 수 있습니다.
강화학습을 자연어 처리에 적용할 때 쉬운 점도 있습니다. 대부분 하나의 문장 생성이 하나의 에피소드가 되는데, 보통 문장의 길이는 길어봤자 100 단어 미만일 것입니다. 따라서 다른 분야의 강화학습보다 훨씬 쉽다는 이점을 가집니다. 예를 들어 딥마인드의 바둑(AlphaGo)이나 스타크래프트의 경우에는 하나의 에피소드가 끝나기까지 매우 긴 시간이 흐릅니다. 따라서 에피소드 내에서 선택된 행동들이 정책을 업데이트하려면 매우 긴 에피소드가 끝나기를 기다려야 합니다. 그뿐만 아니라, 10분 전에 선택했던 행동이 해당 게임의 승패에 얼마나 큰 영향을 미쳤는지 알아내기란 매우 어려운 일이 될 것입니다. 이때 자연어 생성 분야가 다른 분야에 비해 에피소드가 짧다는 것은 매우 큰 이점으로 작용하여 정책망을 훨씬 더 쉽게 훈련 시킬 수 있습니다.
대신, 문장 단위의 에피소드를 가지는 강화학습에서는 보통 에피소드 중간에 보상을 얻기 어렵습니다. 예를 들어 번역의 경우에는 각 time-step마다 단어를 선택할 때 즉각적인 보상을 얻지 못하고, 번역이 모두 끝난 이후 완성된 문장과 정답 문장을 비교하여 BLEU 점수를 누적 보상으로 사용합니다. 마찬가지로 에피소드가 매우 길다면 이것은 매우 큰 문제가 되었겠지만, 다행히도 문장 단위의 에피소드에서는 큰 문제가 되지 않습니다.
지금까지 강화학습에 대해 간단히 살펴보고, 이를 자연어 생성 문제에 적용하는 방법을 다뤘습니다. 강화학습을 적용했을 때의 장점은 무엇이 있을까요? 다시 정리해보겠습니다.
seq2seq와 같은 자기회귀 속성을 가진 모델을 훈련하려면 teacher forcing이라는 방법을 사용한다고 했습니다. 따라서 훈련방식과 추론방식의 차이가 생겨서, 실제 추론하는 방식과 다르게 모델을 훈련해야 했습니다.
하지만 이제 강화학습을 통해 실제 추론하는 형태와 같이 샘플링으로 모델을 학습할 수 있게 되었습니다. 즉, 학습 방법과 추론 방법의 차이가 없습니다.
이전 장에서 BLEU에 관해 다루면서 퍼블렉서티(PPL)에 비해 더 나은 번역의 품질을 반영한다고 설명했습니다. 사람의 언어는 어순이나 의미의 모호성 등 복잡한 구조와 형태를 가지므로, 단순한 PPL과 같은 메트릭metric은 정확한 평가 지표가 되기 어렵습니다. 따라서 자연어 처리 분야에는 번역 이외에도 여러 가지 다양한 평가 지표가 존재합니다. 이들 평가 방법은 미분을 통해 훈련하기 불가능한 경우가 대부분이므로, 신경망을 훈련하는 데는 사용할 수 없었습니다.
하지만 강화학습의 폴리시 그래디언트를 응용하여 보상함수에 대해 미분을 계산할 필요가 없어지면서, 정확한 평가지표를 사용할 수 있게 되었습니다.