更新於 2024/05/16閱讀時間約 3 分鐘

BERT與GPT: 自監督學習的大型模型

Self-supervised Learning

以往我們的Training當中,在通過model輸出一組Y時,都會有參考比較的label Y',來得知model預測的值與實際值的差距,這被稱為supervised learning。

那在沒有參考的label存在,我們又需要訓練時,就可以使用self-supervised的方式訓練。

訓練方式:

  1. 將我們有的一堆input X,分成兩部分,x'與x''。
  2. 把x'輸入我們的model,得到y'。
  3. 將y'與x''做比較,讓兩者的差距盡可能地減少。

*self-supervised算是unsupervised的其中一種訓練方法。


我們可以使用BERT做Masking Input舉例:

  1. 假設我們原本要輸入台灣大學四個字。
  2. 我們將”灣” 這個字MASK住或者隨機替換成其他字
  3. 接著通過BERT的Transformer Encoder,這時會出現一組sequence輸出
  4. 將原本MASK住或者替換掉的字輸出的結果經過Linear與softmax,我們會得到一組分類結果
  5. 這個結果與”灣”字越接近,就是我們訓練的目標。(訓練Linear與BERT)

那其實將BERT進行Masking Input填空題的過程,其實就是在做pre-train。

神奇的是,之後只要再搭配需要進行任務的label調整(fine-tune),就能進行其他種與填空題無關的任務(downstream)。


Fine-Tune實例1-判斷句子本身是正面還負面

  1. 首先,我們把已經Pre-trained過的BERT拿來當作model。
  2. 接著額外加上一個CLS當作輸入。
  3. 在CLS的輸出後面再加上一個Linear 進行另外一個訓練。
  4. 那我們的目標是透過調整Linear的參數,讓CLS的output可以與label越接近越好。
  5. 透過這樣的方式會比從頭隨機訓練BERT與Linear的參數還要好得多。

*CLS是特殊符號,與原有的句子無關,目標是讓CLS再經過Linear之後可以判斷是正面還是負面。


為甚麼BERT訓練方式有用?

因為BERT本身就是Transformer,在透過填空題Pre-trained之後,學會觀察輸入的sequence文字的上下文關係。

訓練的結果就能判斷其分別,像是輸入文字,”吃蘋果”與”蘋果電腦”,”蘋”這個字從BERT中就會輸出不同的向量,因為它能夠透過上下文判定”蘋”這個字的意涵不同。

→ 但這部分還需要考證,到底是為甚麼有用。


GPT

那另外一個大型模型就是GPT,它的原理就是想辦法透過前一個字的輸出預測下一個token

假設我們要輸入的是"台灣大學”

  1. 給它BOS這個token,GPT會輸出一個embaded
  2. 接著我們利用這個embaded 經過linear預測下一個應該要輸出的值是甚麼
  3. 找到與”台”字越接近的答案越好
  4. 以此重複上面三個步驟,就能輸出一連串的文字。
  5. 只要讓GPT不斷地預測下一個token,就能產生完整的文章,具有生成的能力。


實例:假設我們要GPT進行翻譯,我們可以使用In-context Learning

我們可以透過即時的交代我們要的核心主題讓GPT進行訓練。

接著給它一些實際的例子,再請他依樣畫葫蘆,翻譯我們要的問題。

(這一點應該可以套用在chat-GPT上?!)

*Few-shot: 給它幾個例子

*one-shot: 只給他一個例子

*zero-shot: 不給它例子


那以上就是簡單介紹的self-supervised learning大型模型BERT, GPT。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.