Self-supervised Learning
以往我們的Training當中,在通過model輸出一組Y時,都會有參考比較的label Y',來得知model預測的值與實際值的差距,這被稱為supervised learning。
那在沒有參考的label存在,我們又需要訓練時,就可以使用self-supervised的方式訓練。
訓練方式:- 將我們有的一堆input X,分成兩部分,x'與x''。
- 把x'輸入我們的model,得到y'。
- 將y'與x''做比較,讓兩者的差距盡可能地減少。
*self-supervised算是unsupervised的其中一種訓練方法。
我們可以使用BERT做Masking Input舉例:
- 假設我們原本要輸入台灣大學四個字。
- 我們將”灣” 這個字MASK住或者隨機替換成其他字
- 接著通過BERT的Transformer Encoder,這時會出現一組sequence輸出
- 將原本MASK住或者替換掉的字輸出的結果經過Linear與softmax,我們會得到一組分類結果
- 這個結果與”灣”字越接近,就是我們訓練的目標。(訓練Linear與BERT)
那其實將BERT進行Masking Input填空題的過程,其實就是在做pre-train。
神奇的是,之後只要再搭配需要進行任務的label調整(fine-tune),就能進行其他種與填空題無關的任務(downstream)。

Fine-Tune實例1-判斷句子本身是正面還負面
- 首先,我們把已經Pre-trained過的BERT拿來當作model。
- 接著額外加上一個CLS當作輸入。
- 在CLS的輸出後面再加上一個Linear 進行另外一個訓練。
- 那我們的目標是透過調整Linear的參數,讓CLS的output可以與label越接近越好。
- 透過這樣的方式會比從頭隨機訓練BERT與Linear的參數還要好得多。
*CLS是特殊符號,與原有的句子無關,目標是讓CLS再經過Linear之後可以判斷是正面還是負面。

為甚麼BERT訓練方式有用?
因為BERT本身就是Transformer,在透過填空題Pre-trained之後,學會觀察輸入的sequence文字的上下文關係。
訓練的結果就能判斷其分別,像是輸入文字,”吃蘋果”與”蘋果電腦”,”蘋”這個字從BERT中就會輸出不同的向量,因為它能夠透過上下文判定”蘋”這個字的意涵不同。
→ 但這部分還需要考證,到底是為甚麼有用。
GPT
那另外一個大型模型就是GPT,它的原理就是想辦法透過前一個字的輸出預測下一個token。
假設我們要輸入的是"台灣大學”
- 給它BOS這個token,GPT會輸出一個embaded
- 接著我們利用這個embaded 經過linear預測下一個應該要輸出的值是甚麼
- 找到與”台”字越接近的答案越好
- 以此重複上面三個步驟,就能輸出一連串的文字。
- 只要讓GPT不斷地預測下一個token,就能產生完整的文章,具有生成的能力。

實例:假設我們要GPT進行翻譯,我們可以使用In-context Learning
我們可以透過即時的交代我們要的核心主題讓GPT進行訓練。
接著給它一些實際的例子,再請他依樣畫葫蘆,翻譯我們要的問題。
(這一點應該可以套用在chat-GPT上?!)
*Few-shot: 給它幾個例子
*one-shot: 只給他一個例子
*zero-shot: 不給它例子

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