deep learning

SeqGan 논문 겉햝기

aeongsseu 2023. 9. 26. 16:04

SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient

Lantao Yu†, Weinan Zhang†, Jun Wang‡, Yong Yu††Shanghai Jiao Tong University, ‡University College London{yulantao,wnzhang,yyu}@apex.sjtu.edu.cn, j.wang@cs.ucl.ac.ukWeinan Zhang is the corresponding author.

초록

생성 모델의 새로운 개념으로 discriminator와 generator 의 개념을 사용하는 GAN이 탄생했다. 그리고 이는 real-valued data를 생성하는 데에 있어 상당한 성공을 했다.

그런데 이는 discrete한 토큰의 sequence를 생성하는 데에는(즉, NLP) 한계가 있었다. 주된 이유는 generator가 생성한 discrete한 output은 해당 output을 discriminator에게 주고 나온 점수로부터 gradient를 업데이트 하는 것이 어렵다.

cv에서 gan noise → G → [[0.3, 0.1, 0.9], [0.5, 0.7, 0.8], [0.1, 0.3, 0.3]] → D → 0.5

nlp에서 gan noise → G → [[0.1, 0.4, 0.5], [0.2, 0.2, 0.6], [0.5, 0.1, 0.4]] → [2,2,0] → D → 0.2

 

[0.8, 0.1, 0.1] 도 [1, 0, 0] 이고 [0.4, 0.3, 0.3] 도 [1, 0, 0]인데 그럼 어느 방향으로 가야하냐?

원래는 뭐 미분이 안되는 특성이 있다지만 난 뭔말인지 모르겠다~~

그래서 generator를 강화학습의 stochastic policy처럼 모델링 해봤다

gradient policy update를 직접하면서 자연어처리의 gan의 어려움을 우회했다

RL 보상 신호는 gan에서 나오고 monte carlo search를 통해 intermediate state-action로 전해진다

합성 데이터와 실제 작업에 대한 광범위한 실험은 강력한 기준에 비해 상당한 개선을 보여줍니다.(초기 설정이 어렵다?)

도표

monte carlo search를 이용해 특정 노드로부터 reward를 얻어내고 원래 노드 하나하나 역전파를 진행하는 monte carlo와 다르게 D가 뱉어낸 reward를 바로 선택 노드로 전달 하는 듯?

모델 성능 자랑

 

학습 전략 파란색 점선은 adversarial training하기전/후 를 나타냄 시작부터 adversarial training을 한다 생각했는데 그전에 뭔가 있나봄??

개요

기존 lstm cell을 이용한 rnn은 사람이 쓴거같은 글을 생성해내는데 휼륭한 성과를 보여주었다.

rnn의 학습을 시키는 가장 일반적인 방법은 이전 토큰이 주어졌을때 생성되는 추론 토큰과 실제 토큰의 LL(log likelihood)을 maxmize하는 것이다. 즉 NLL(negative log likelihood)을 최소화 하는 것.

하지만 rnn에는 teacher forcing이라는 학습 방식을 사용하는데 이 때문에 exposure bias문제가 일어난다.

exposure bias는 teacher forcing 학습 과정에서 a다음에 b가 나와야하는데 f가 나오는 경우가 있을 것이다. 이러면 모델은 a f 다음에 c를 예측해야하는데 이러면 학습이 제대로 되지 않을 것이다. 그래서 a다음에 어떤 단어가 나오든 원래 단어인 b를 넣어주는데 infer 과정에서는 a다음에 g를 예측할 수도 있는데 이때는 교정해줄 선생님이 없으므로 추론해 나갈수록 문장이 점점 개판이 되가는 문제이다.

이 문제점을 해결하기 위해 scheduled sampling(SS)이라는 방법이 제안 됐다.

SS란 tearcher forcing중 epsilon의 확률 만큼 정답인 y토큰을 사용하고 1-epsilon만큼 model이 반환한 y_hat을 사용하겠단것이다. sceduling은 아래 사진 처럼 진행된다. 학습이 진행될 수록 model이 반환한 토큰을 사용하는 모습

근데 이것도 잘안됨 그래서 그냥 문장 전체가 다 나오고 이거에 점수를 매기고 학습시키자 e.g) BLEU

근데 내가 알기론 BLEU는 다 나온 문장에 다른 어떤 워드 카운팅 같은 방법을 통해 점수를 매기는거로 알아서 미분이 안되는 연산이라 BLEU점수를 학습에 쓰는건 불가능하다고 알고있었는데 뭐지

근데 이것도 기계번역에서는 되는데, 챗봇, 시 생성된 문장의 점수를 적절히 매길수가 없음

 

그래서 최근 뜨는 gan으로 위 문제를 해결해보자 근데 gan은 사실 자연어 생성 같이 discrete한 token들의 sequence를 만드는데 적합하지 않다.

gan은 더욱 진짜 같은 데이터를 만드려하는 애인데, 이미지 처리에선 어느 특정 부분의 생성된 픽셀의 loss에대한 기울기 값이 있을때 픽셀 값이 180이였다면 기울기에 따라 170이나 190을 생성하게끔 “약간의 변화”를 주면된다.

하지만 자연어처리에서 어떤 생성된 토큰이 “약간의 변화” 원핫 벡터로 봤을때 [0,0,0,0,1] 일경우 이걸 어느 방향으로 약간의 변화를 줘야 할까

 

두번째로 gan은 전부 완성된 문장에 대해서만 점수를 매길 수 있단 것이다. 당연히 현실에 있는 문장은 완성된 문장일테니..

하지만 자연어처리에서 부분적으로 완성된 문장도 지금 까지 잘 생성하고 있는지 알기위해 중요하다.

 

위 두 문제를 해결하기 위해 연구자들은 자연어생성을 sequential decision making으로 보려고 했다.

generator를 agent로 지금 까지 생성된 토큰들을 state로 그리고 다음 생성될 토큰은 next action으로

그리고 점수를 매기는 것을 각 task에 특화된 점수 e.g) 번역에서의 BLEU가 아닌 discriminator가 문장의 점수를 매기도록 했다.

To solve the problem that the gradient cannot pass back to the generative model when the output is discrete, we regard the generative model as a stochastic parametrized policy. In our policy gradient, we employ Monte Carlo (MC) search to approximate the state-action value. We directly train the policy (generative model) via policy gradient (Policy gradient methods for reinforcement learning with function approximation), which naturally avoids the differentiation difficulty for discrete data in a conventional GAN.

monte carlo랑 stochastic parametrized policy같은 기법을 이용해 해결했다는데 강화학습에 대해 잘 몰라서 이해가 안된다..뭐 위방법을 사용하니 gradient를 전달할 수 없던 문제가 근본적으로 해결됐다함

그리고 실험해보니 NLLoss랑 PG-BLEU보다 잘 나왔다함

 

'deep learning' 카테고리의 다른 글

loss landscape에 대해 내가 이해한것  (0) 2023.08.17
transformer 논문리뷰  (0) 2023.01.27