
而 generator 其實就是典型的 seq2seq model ,可以把 GAN 應用到這個任務中。

用 sampling 后求平均來近似求期望:
但是 R_θ 近似后並沒有體現 θ(隱藏到 sampling 過程中去了),怎么算梯度?先對 P_θ (x | h) 求梯度,然后分子分母同乘 P_θ (x | h) ,而 grad(P_θ (x | h)) / P_θ (x | h) 就等於 grad(log P_θ (x | h)),所以就在 R_θ 原本的近似項上乘一個 grad(log P_θ (x | h))
如果是 positive 的 reward(R(hi, xi) > 0), 更新 θ 后 P_θ (xi | hi) 會增加;反之會減小(所以最好人類給的 reward 是有正有負的)
整個 implement 的過程就如下圖所示,注意每次更新 θ 后,都要重新 sampling
RL 的方法和之前所說的 seq2seq model (based on maximum likelihood)的區別

訓練流程。訓練 D 來分辨 <c, x> pair 到底是來自於 chatbot 還是人類的對話;訓練 G 來使得固定的 D 給來自 chatbot 的 (c', x~) 高分。
仔細想一下,訓練 G 的過程中是存在問題的,因為決定 LSTM 在每一個 time step 的 token 的時候實際上做了 sampling (或者取argmax),所以最后的 discriminator 的輸出的梯度傳不到 generator(不可微)。
怎么解決?
1. Gumbel-softmax https://casmls.github.io/general/2017/02/01/GumbelSoftmax.html
首先需要可以采樣,使得離散的概率分布有意義而不是只能取 argmax。對於 n 維概率向量 π,其對應的離散隨機變量 x π 添加 Gumbel 噪聲再采樣。

2. Continuous Input for Discriminator
避免 sampling 過程,直接把每一個 time step 的 word distribution 當作 discriminator 的輸入。
這樣做有問題嗎?明顯有,real sentence 的 word distribution 就是每個詞 one-hot 的,而 generated sentence 的 word distribution 本質上就不會是 1-of-N,這樣 discriminator 很容易就能分辨了,而且判斷准則沒有在考慮語義了(直接看是不是 one-hot 就行了)。
3. Reinforcement Learning
把 discriminator 的 output 看作是 reward:
• Update generator to increase discriminator = to get maximum reward

也可以用映射到 common space 的方法,sampling 后離散化的問題,可以用一個新的技巧解決:把 decoder LSTM 的 hidden layer 當作 discriminator 的輸入,就是連續的了。