Dropout
Dropout
這個概念是在2014年被提出的,它的概念其實很簡單,在訓練的時候,隨機將一些神經元關閉,這樣避免神經元之間過度依賴(prevents units from co-adapting too much),並在Inference時將所有神經元開啟,這樣可以輕鬆估計各個不同小的神經網路的平均值,使用dropout
可以大幅降低overfitting的可能
搞懂Back Propagation的微分推導過程
Back Propagation
假設一個簡單兩顆神經元$x_{1}, x_{2}$的神經網路,對於每顆神經元的更新$\frac{ \partial C}{ \partial w_{i}}$,可以分為Forward Pass
及Backward Pass
兩個步驟,Forward Pass
非常容易計算,而Backward
則是須從最後一層推回來,故得其名
交叉熵(cross entropy)
In information theory, the cross entropy between two probability distributions $p$ and $q$ over the same underlying set of events measures the average number of bits needed to identify an event drawn from the set if a coding scheme used for the set is optimized for an estimated probability distribution $q$ , rather than the true distribution $p$ .
詞向量(Word Vector)
Stanford CS 224N
課程第一週內容
在2014年,Mikolov Tomàs等人提出的這篇 Distributed Representations of Words and Phrases and their Compositionality
為接下來許多以詞向量為基礎的模型定下根基,以往使用神經網路(Neural Network)訓練詞向量耗時長,這篇論文提出了一些方法進行改善,不僅提升效能也大幅降低訓練成本。
使用詞向量(word vector)讓我們能夠將詞彙轉換成能夠被機器理解的向量,並且這個向量能夠有效反應出詞義,近義詞之間有著相近的詞向量,例如:紅茶、奶茶、綠茶它們都是飲料類,所以會具備類似的詞向量,且在訓練的過程中我們只需提供足夠大的語料,不需要透過人工標記就能夠訓練這樣的模型(Skip-Gram, CBOW, …),甚至也能直接使用網路上其他人預訓練的模型(Google, Facbook, …)
You shall know a word by the company it keeps - J. R. Firth 1957
一個字的意思是由周遭的字決定,這樣的想法基本上就是skip-gram
所做的事情,我們藉由一個訓練目標函式,讓一個中間字(center word)
能夠對預測周遭的字給出較高的機率,經過這樣的訓練過程,擁有相近的前後文的詞,就會得到更相近的詞向量
DistilBERT
今天要介紹的是 Distilled BERT,是由hugging face在今年(2019)所提出的一篇論文,相信用pytorch來做BERT的朋友一定對 hugging face 不陌生,他們在 Github上開源的transformers專案提供許多Pytorch用戶可以方便的使用BERT相關模型
回到今天的主題,Distill的意思是蒸餾,我們可以從字面上猜測,我們要從一個很大的模型,蒸餾成比較小的模型,也可以用一種角度想,我們讓大的模型當作小的模型的老師,而小模型這個學生,只會盡可能的學老師的每個動作
大致上Distilled BERT的思想就是這樣簡單,根據作者的實驗數據,DistilBERT的參數大約只有BERT的40%,而速度快了60%,並保有一定一精準度
深入介紹PR曲線以及ROC曲線(A deep dive into PR-curve and ROC curve)
在一個二分類模型中,我們的模型通常不會直接輸出0,1直接預測出分類,而是對每個分類輸出一個機率,例如加上sigmoid function對各分類輸出機率,這樣讓我們能夠自己設定一個門檻(threshold)來決定機率大於多少時我們判定為正樣本,反之為負樣本。而 ROC Curve
和 PR Curve
可以幫助我們分析在設定不同的門檻值(threshold),對於模型的表現如何,進而選擇適合的門檻值,以及分析模型的好壞。
ALBERT
今天要整理的這篇ALBERT,利用一些技術減少原先BERT中的參數,並且改進在BERT中使用的NSP,提出了SOP Loss
有效地提升了下游任務的表現。BERT雖然在很多NLP的任務上取得成功,但是由於其巨大的模型架構,很難被應用在講求速度的實際應用上,像是聊天機器人,所以近期有許多研究都是針對怎麼讓BERT更小,怎麼讓BERT訓練更快等等。ALBERT的預訓練模型以及相關程式碼都已經開源出來了,所以讓我們好好了解一下ALBERT,並且試試看拿它來取代原先我們模型中BERT的部分
RoBERTa
近幾年,隨著ELMo
, BERT
, GPT
, XLNet
等超大型模型在NLP任務上達到很好的成績,在許多資料集的Leaderboard上也都霸佔前幾名的位置:
- GLUE: LeaderBoard
- RACE: LeaderBoard
- SQuAD: LeaderBoard
RoBERTa
這篇論文是使用原始論文BERT的架構,但在訓練的過程做了一些改變,例如:增大batch-size
、動態遮罩(Dynamic Masking)
等改變,當然還有使用更大更多的訓練資料,因為作者認為原始的BERT是訓練不足的(undertrained),所以這篇論文主要是採取各種不同的優化方法來增進BERT的效能
就如RoBERTa的名字: Robustly optimized BERT approach,經過各種優化方法後,能夠提升許多效能
Fscore / Precision / Recall
繼續上次混淆矩陣的主題,我們快速複習一下,二元混淆矩陣包含四個要素:TP(True Positive)
, TN(True Negative)
, FP(False Positive)
, FN(False Negative)
但光是直接看這些數值,我們很難一眼看出一個分類模型的好壞,所以我們通常會透過Recall
, Precision
, F1-score
這些指標來評估一個模型的好壞
召回率是在所有正樣本當中,能夠預測多少正樣本的比例,準確率為在所有預測為正樣本中,有多少為正樣本
所以拿我們上次的例子來說,在小明家的門禁系統中,哪個比較重要呢?
以這個例子來說,準確率應比較重要,我們希望判定成正樣本就一定要是正確的,不要有小王的臉可以打開小明家的門的情況,而召回率低的話,也不過是常常無法判斷出來小明的臉,但至少不是誤判
讓我們再舉一個實際在NLP領域上會遇到的例子
假設我們今天要做一個NER(命名實體識別)的模型,每個字我們都會輸出一個標籤,如果該字我們認為不屬於命名實體的任一部分,也會有一個標籤代表非標籤(ex. UNK),那麼你是否能解釋一下,一個Precision高而Recall低的模型跟一個Recall高而Precision低的模型,分別代表什麼意義呢?
前者,可以看作一個比較謹慎的模型,雖然常常沒辦法抓出命名實體,但只要有抓出幾乎都是正確的(Precision高),而後者則是一個寬鬆的模型,雖然有時候會抓錯,但幾乎該抓的都有抓到(Recall高)
在極端的場合,兩個模型都是不好的,以NER這個例子,前者可能幾乎無法預測出命名實體,那等於沒有功用,後者可能預測錯誤太多,也無法拿來使用,這時候我們就希望有一個指標,能夠調和兩者
F1-score則是兩者的調和平均數,算是一個比較概略的指標來看這個模型的表現
混淆矩陣(Confusion Matrix)介紹
在機器學習中,最常見的就是分類模型,像是垃圾郵件分類、手寫數字判定等等,那我們要怎麼去判定一個分類模型表現的到底好不好,基本上混淆矩陣(confusion matrix)
的各項指標會被拿來參考,所以今天我們就來認識一下組成混淆矩陣的四個元素(TP,TN,FP,FN)吧
PCA - 主成分分析(Principal Component Analysis)
PCA是一個非常有名的降維方法,我認為通過降維我們可以得到很多好處
- 資料視覺化: 在視覺化的時候通常是投影到二維的平面或三維的空間,所以需要降維投影
- 提取特徵: 將維度高轉到維度低本身就是一個資訊壓縮的過程,所以我們可以期待有跟像CNN提取特徵的效果
- 加快速度: 資料的維度會大大影響模型的運算速度
但是降維的過程免不了損失資訊量,PCA即是以損失最小Variance
的想法,所以損失的全局資料量應是最少的
此外,PCA原理簡單、且計算速度很快,我們只需要求共變異數矩陣的特徵向量(eigen vector)
及特徵值(eigen value)
就能算出投影軸
那就讓我們來看看PCA是怎麼運作的吧!
隱藏式馬可夫模型 - HMM(Hidden Markov Model)
HMM
是利用觀測值來推斷狀態的一個算法,而狀態被稱為隱藏狀態(hidden state)
是因為我們看不到狀態,只能看到觀測值,所以實際上我們對狀態是不了解的,例如:我們可以觀察到身體狀態是正常、咳嗽、暈眩,從而透過HMM推斷背後的狀態為健康還是生病。
HMM可以被用在許多應用上,例如語音識別,我們觀察得到聲波,但該聲波對應到的文字我們是不知道的,可以透過HMM從聲波推回狀態來得到可能的文字,除此之外,在許多序列型任務都有HMM的應用
我們雖然對隱藏狀態(hidden state)不了解,但我們知道狀態之間的轉移機率(transition probability)
還有狀態對應到觀測值的發射機率(emission probability)
,從這兩者搭配觀測序列