Dropout

10 March 2020
cs nlp dropout regularization

Dropout這個概念是在2014年被提出的,它的概念其實很簡單,在訓練的時候,隨機將一些神經元關閉,這樣避免神經元之間過度依賴(prevents units from co-adapting too much),並在Inference時將所有神經元開啟,這樣可以輕鬆估計各個不同小的神經網路的平均值,使用dropout可以大幅降低overfitting的可能


搞懂Back Propagation的微分推導過程

20 February 2020
cs nlp back-propagtion loss-function optimization

Back Propagation


假設一個簡單兩顆神經元$x_{1}, x_{2}$的神經網路,對於每顆神經元的更新$\frac{ \partial C}{ \partial w_{i}}$,可以分為Forward PassBackward Pass兩個步驟,Forward Pass非常容易計算,而Backward則是須從最後一層推回來,故得其名


交叉熵(cross entropy)

19 February 2020
cs nlp entropy cross-entropy loss

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)

11 February 2020
cs nlp word-vector skip-gram softmax CBOW hierarchical-softmax negative-sampling NCE

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

7 February 2020
nlp BERT DistilBERT Distillation

今天要介紹的是 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)

30 December 2019
nlp evaluation machine-learning pr-curve roc-curve

在一個二分類模型中,我們的模型通常不會直接輸出0,1直接預測出分類,而是對每個分類輸出一個機率,例如加上sigmoid function對各分類輸出機率,這樣讓我們能夠自己設定一個門檻(threshold)來決定機率大於多少時我們判定為正樣本,反之為負樣本。而 ROC CurvePR Curve 可以幫助我們分析在設定不同的門檻值(threshold),對於模型的表現如何,進而選擇適合的門檻值,以及分析模型的好壞。


ALBERT

2 December 2019
nlp BERT ALBERT SOP-loss parameter-sharing matrix-decomposition

今天要整理的這篇ALBERT,利用一些技術減少原先BERT中的參數,並且改進在BERT中使用的NSP,提出了SOP Loss有效地提升了下游任務的表現。BERT雖然在很多NLP的任務上取得成功,但是由於其巨大的模型架構,很難被應用在講求速度的實際應用上,像是聊天機器人,所以近期有許多研究都是針對怎麼讓BERT更小,怎麼讓BERT訓練更快等等。ALBERT的預訓練模型以及相關程式碼都已經開源出來了,所以讓我們好好了解一下ALBERT,並且試試看拿它來取代原先我們模型中BERT的部分


RoBERTa

30 October 2019
nlp BERT RoBERTa dynamic-masking

近幾年,隨著ELMo, BERT, GPT, XLNet等超大型模型在NLP任務上達到很好的成績,在許多資料集的Leaderboard上也都霸佔前幾名的位置:

RoBERTa這篇論文是使用原始論文BERT的架構,但在訓練的過程做了一些改變,例如:增大batch-size動態遮罩(Dynamic Masking)等改變,當然還有使用更大更多的訓練資料,因為作者認為原始的BERT是訓練不足的(undertrained),所以這篇論文主要是採取各種不同的優化方法來增進BERT的效能 就如RoBERTa的名字: Robustly optimized BERT approach,經過各種優化方法後,能夠提升許多效能


Fscore / Precision / Recall

28 October 2019
nlp Evaluation machine-learning

繼續上次混淆矩陣的主題,我們快速複習一下,二元混淆矩陣包含四個要素:TP(True Positive), TN(True Negative), FP(False Positive), FN(False Negative)

但光是直接看這些數值,我們很難一眼看出一個分類模型的好壞,所以我們通常會透過Recall, Precision, F1-score這些指標來評估一個模型的好壞

\[\textit{Recall(召回率)} = \frac{TP}{(TP + FN )}\] \[\textit{Precision(準確率)} = \frac{TP}{(TP+FP)}\] \[\textit{F1-score} = \frac{ 2 \times \textit{Precision} \times \textit{Recall} }{(Precision + Recall)}\]

召回率是在所有正樣本當中,能夠預測多少正樣本的比例,準確率為在所有預測為正樣本中,有多少為正樣本

所以拿我們上次的例子來說,在小明家的門禁系統中,哪個比較重要呢?

以這個例子來說,準確率應比較重要,我們希望判定成正樣本就一定要是正確的,不要有小王的臉可以打開小明家的門的情況,而召回率低的話,也不過是常常無法判斷出來小明的臉,但至少不是誤判


讓我們再舉一個實際在NLP領域上會遇到的例子

假設我們今天要做一個NER(命名實體識別)的模型,每個字我們都會輸出一個標籤,如果該字我們認為不屬於命名實體的任一部分,也會有一個標籤代表非標籤(ex. UNK),那麼你是否能解釋一下,一個Precision高而Recall低的模型跟一個Recall高而Precision低的模型,分別代表什麼意義呢?

前者,可以看作一個比較謹慎的模型,雖然常常沒辦法抓出命名實體,但只要有抓出幾乎都是正確的(Precision高),而後者則是一個寬鬆的模型,雖然有時候會抓錯,但幾乎該抓的都有抓到(Recall高)

在極端的場合,兩個模型都是不好的,以NER這個例子,前者可能幾乎無法預測出命名實體,那等於沒有功用,後者可能預測錯誤太多,也無法拿來使用,這時候我們就希望有一個指標,能夠調和兩者

F1-score則是兩者的調和平均數,算是一個比較概略的指標來看這個模型的表現


混淆矩陣(Confusion Matrix)介紹

25 October 2019
nlp Evaluation machine-learning confusion-matrix classifier

在機器學習中,最常見的就是分類模型,像是垃圾郵件分類、手寫數字判定等等,那我們要怎麼去判定一個分類模型表現的到底好不好,基本上混淆矩陣(confusion matrix)的各項指標會被拿來參考,所以今天我們就來認識一下組成混淆矩陣的四個元素(TP,TN,FP,FN)吧


PCA - 主成分分析(Principal Component Analysis)

20 July 2019
nlp math PCA eigen-vector eigen-value data-visualization

PCA是一個非常有名的降維方法,我認為通過降維我們可以得到很多好處

  1. 資料視覺化: 在視覺化的時候通常是投影到二維的平面或三維的空間,所以需要降維投影
  2. 提取特徵: 將維度高轉到維度低本身就是一個資訊壓縮的過程,所以我們可以期待有跟像CNN提取特徵的效果
  3. 加快速度: 資料的維度會大大影響模型的運算速度

但是降維的過程免不了損失資訊量,PCA即是以損失最小Variance的想法,所以損失的全局資料量應是最少的

此外,PCA原理簡單、且計算速度很快,我們只需要求共變異數矩陣的特徵向量(eigen vector)特徵值(eigen value)就能算出投影軸

那就讓我們來看看PCA是怎麼運作的吧!


隱藏式馬可夫模型 - HMM(Hidden Markov Model)

9 June 2018
cs nlp hmm markov-chain

HMM是利用觀測值來推斷狀態的一個算法,而狀態被稱為隱藏狀態(hidden state)是因為我們看不到狀態,只能看到觀測值,所以實際上我們對狀態是不了解的,例如:我們可以觀察到身體狀態是正常、咳嗽、暈眩,從而透過HMM推斷背後的狀態為健康還是生病。

HMM可以被用在許多應用上,例如語音識別,我們觀察得到聲波,但該聲波對應到的文字我們是不知道的,可以透過HMM從聲波推回狀態來得到可能的文字,除此之外,在許多序列型任務都有HMM的應用

我們雖然對隱藏狀態(hidden state)不了解,但我們知道狀態之間的轉移機率(transition probability)還有狀態對應到觀測值的發射機率(emission probability),從這兩者搭配觀測序列