---
# System prepended metadata

title: GPT-2 (RL fine tuning)

---

# GPT-2 (RL fine tuning)
## Dowload File (training_dataset & fine tune過一次的GPT2)
- 下載網址: [Google雲端](https://drive.google.com/drive/folders/1cFVYS0MRIWRFwLH6IDxcc5_Na2d2mhlR?usp=sharing)
## 1. Dataset
- **原始的資料架構。**
 ![](https://i.imgur.com/qmseSnd.png)
- **整理成第一次fine tune GPT-2的架構。**
![](https://i.imgur.com/e5XFXRo.png)
* <font color="#3338FF">所以模型的input是"post[emotional_label_of_reply 中文意義]"。</font>
## 2. 參考([CHAI](https://github.com/siddharthverma314/chai-naacl-2022))的流程: 
1. 使用已經fine tune過一次的GPT-2生成n個候選句子(n是可變的)。
2. 使用[這篇](https://github.com/natashamjaques/neural_chat/tree/master/BatchRL)的獎勵函數對上一步所生成的候選句子進行打分。(所需要用到的獎勵函數會在下面附上)。
3. 利用Soft Q sampling的方式(和CHAI的sample方式一樣)對打完分數的候選句子進行sample。
- <font color="#3338FF">模型要能夠分別輸出 "sample前所有的候選句子及其相應的分數" 以及 "sample後，被選中的那個結果"</font>
4. 利用[這篇](https://github.com/yzpang/gold-off-policy-text-gen-iclr21)如下的objective function對GPT-2進行update。
![](https://i.imgur.com/L7tGmGL.jpg)
* objective function裡的Q的R是用下面的獎勵函數算出來的。
## 3. 所需的獎勵函數(參考[[1]](https://github.com/natashamjaques/neural_chat/tree/master/BatchRL)[[2]](https://arxiv.org/pdf/1606.01541.pdf))
- 有以下7個，希望可以視情況自行選擇要用哪幾個獎勵函數的組合。ex: 要7個全用，還是只要其中部分幾個的組合，有點像ablation study的感覺(?) 
- 獎勵函數的1~4項是在[這裡](https://github.com/natashamjaques/neural_chat/blob/master/BatchRL/rewards.py)，括號()裡的數字代表在第幾行。
1. (85) reward_answer_length_words
2. (229) reward_deepmoji_coherence
3. (377) reward_question
4. (398) reward_traditional_embedding_metrics
5. reward_toxicity
- 類似像443行的reward_compliments的作法，會有一個字典檢測response是否含"敏感字眼"。<font color="#3338FF">此項為負獎勵(其餘為正獎勵)</font>
6. reward_ease_of_answering (額外的，請參考[[2]](https://arxiv.org/pdf/1606.01541.pdf)中，如下的式子)
$$
\begin{gathered}
r_{6}=-\frac{1}{N_{\mathbb{S}}} \sum_{s \in \mathbb{S}} \frac{1}{N_{s}} \log p_{\text {seq2seq }}(s \mid a) 
\end{gathered}
$$
* $$\mathbb{S} \text{: a  list of non-sense responses.}$$ 
* non-sense response，如: 我不知道、都可以、嗯嗯、還好...等。
7. reward_semantic_coherence (額外的，請參考[[2]](https://arxiv.org/pdf/1606.01541.pdf)中，如下的式子)
$$
\begin{gathered}
r_{7}=\frac{1}{N_{a}} \log p_{\text {seq2seq}}\left(a \mid q_{i}, p_{i}\right)+\frac{1}{N_{q_{i}}} \log p_{\mathrm{seq2seq} }^{\text {backward }}\left(q_{i} \mid a\right)
\end{gathered}
$$

- Total Reward with weighted sum:
$$
\begin{gathered}
R =\lambda_{1} r_{1}+\lambda_{2} r_{2}+\lambda_{3} r_{3}+\lambda_{4} r_{4}+\lambda_{5} r_{5}+\lambda_{6} r_{6}+\lambda_{7} r_{7}
\end{gathered}
$$
* 希望最後的模型，r的權重(lambda)可以依據r的重要程度而不同。
## 4. 問題
1. 各個r算出來的scale可能不同，所以要做normalize?
2. 如何得到最好的 "各個r其所對應的權重(lambda)? 權重要怎麼train或決定?

## 5. 檢測(最後的模型)
1. 跑BLEU score
2. 跑Perplexity (PPL)
3. 跑Accuracy


謝謝您!!