麵粉、砂糖、水、植物油為主,其它成份則視做法及口感需求而有不同。餅乾之所以會出現螺旋線,這是由於兩種顏色的麵糰桿成皮狀,再將彼此疊合而捲成柱狀,以刀切割成每一片厚度相當的餅乾,就可以看出每一片餅乾都帶有螺旋線,經過烘烤後成形,即可食用。
維基百科《螺仔餅》
我先承認我真的沒梗,引言就找這個了XD
昨天我們講到了貝氏分類器,希望大家都有稍微理解機器學習模型大概會是以什麼方式呈現。我們在進入羅吉斯回歸的模型之前,先來回顧一下所謂的機率性機器學習分類器(probabilistic machine learning classifier)的大致組成吧,其實幾乎所有的機器學習模型都是依循這樣的模式在進行分類的,即便是神經網路也是幾乎雷同,而自然語言處理的模型也不排除在外。
模型架構
- 特徵輸入
將資料整理成機器學習模型可以理解的形式,首先就是要將這些文字轉換成數字,相信大家都還記得。那其實這種所謂「不同種將文字轉成數字」的方式,也有個專有名詞,稱為特徵工程(feature engineering),特徵工程所得之資料即可作為特徵輸入至模型。
- 換算機率
完成前面的特徵工程之後,會得到一系列的特徵相關數字,由於這些數字並不是模型的理想輸出(因為記得前面所提模型需要輸出的是分類的機率)所以會經過一系列的數學運算過後,得到最後為0~1之間的機率呈現。
- 最大化與正確答案相符的可能性(Log-likelihood & Loss function)
接著得到的機率有可能也不會是最好的答案,因為我們需要最小化所謂的損失函數,那要最小化的話,可以透過梯度下降的方式來求得最佳解。
羅吉斯回歸
特徵輸入
在自然語言處理的領域中,除了可以透過直覺來判斷文本中可能的特徵之外,不同領域的文本也會有他們各自的特徵(比如說,前一陣子很有名的霸社,或者是將官首文化中的文本,可能就會有屬於其次文化的特殊語言特徵);另外,近期流行的自然語言處理方式,也會透過先前所說的 Word embedding 的方式作為特徵加入BERT語言模型中。
利用特徵計算原始分數
經過特徵工程之後,我們會得到一串數字(或是向量vector)羅吉斯回歸的第一步,就是先將這些向量x與權重 w(weight)進行內積(dot product)是不是又出現另外一個熟悉的名詞? ,內積過後得到的數字再加上 b (bias term, a.k.a intercept),這是為了避免有些過度表現的特徵影響了模型的判斷。
我會稱這段過程為計算原始分數。現在說考學測應該還不會暴露年齡吧?你可以這麼理解,我們計算的這個原始分數代表文章是正面或是負面的可能「程度」,就像是學測考完都會有一個「原始分數」。但這個所謂的程度或是原始分數,不是我們想要的結果,對吧?因為我們想要的是這個文本的可能是正面或是負面的「機率」是多少,就像是我們想要知道學測的「級分」,因為「級分」的高低才真正代表表現的好壞。為了要讓模型輸出機率,會再將這個「原始分數」加入激勵函數(activation function)將輸出數值轉換成機率。
利用激勵函數換算機率
經過前面的計算得到了原始分數之後,我們需要將這段原始分數加入激勵函數來輸出機率。激勵函數有很多種,其中包括今天會介紹的Sigmoid以及softmax,之後會再介紹另外兩種。同樣地,如同先前所說,這些函數各有優缺點,我們在下面來一一討論:
Sigmoid function
Sigmoid函數是最基礎,也是用來處理二元分類最常用的激勵函數。而Sigmoid activation function有幾個好處:
- Sigmoid可以將「原始分數」壓到[0, 1]之間,正好也是我們所需要的機率形式
- 在接近0以及接近1的地方,可以發現函數圖形逐漸趨平。這代表若有任何離群值(outlier),Sigmoid函數也可以把他壓縮到接近0或1,但卻又不會超過。
- 可微分(differentiable),在後續做最佳解時會是一個有利的工具。
softmax function
softmax跟Sigmoid不同的地方在於,這是做多元分類時常用的激勵函數,只是差別在於前者只會給一個機率,而softmax則是會給每個標籤相對應機率,然後加總起來都會等於1。
所以假如說加入「原始分數」,就會是這樣的結果。
最大化與正確答案相符的可能性
前面你可能會發現,咦?那權重是怎麼來的?這就要先從Loss function開始講起:
損失函數(loss function)
損失函數其實就是為了要評估實際答案跟預測答案之間的差距,而要找出這段差距,首先要先進行條件最大機率估算(conditional maximum likelihood estimation),聽起來很複雜,但其實就是要將預測正確的可能性最大化,也就是所謂的log-likelihood。而權重就會在每一次的計算過程中不斷調整,直到找到最佳解。在這邊不會有複雜的數學推演,我只會簡單介紹計算的邏輯。
這裡是一個最大化的最佳解問題。那為了將它變成損失函數,也就是最小化的最佳解問題,在這裡會乘上一個負號
梯度下降
那要解這個最小化問題,在這邊會使用的方法就是梯度下降(gradient descent)。
這名字聽起來好像很可怕,用手算確實可怕,回想我大學在資管系修作業研究的辛酸血淚史(一抹淚),簡單來說,梯度下降法是一種找出最小化最佳解的一種演算法,意味著找出在函數空間中,斜率(slope)往上升程度最大的方向,並往這個方向的反方向前進。是不是不知道我在講什麼?我們馬上來看看一維簡化圖。
首先我們可以先對 w1 微分(這就是為什麼可微分很重要),找出在w1這個點的切線斜率是正亦或是負。若是正(切線方向為/
)則代表應該要往左前進。而圖中 w1 的斜率是負的(切線方向為\
),所以方向則是往右,方能找到最佳最小值。
但實務上不可能會有這種只有一維的資料吧!所以事實上函數圖形長得會像這樣:
我自己是覺得很像螺仔餅啦,不覺得嗎?我也是去查知道這餅乾的正式名稱
圖片來源:TVBS
那因為 logistic regression 是一個凸函數(convex),而凸函數只會有一個最小值,所以 logistic regression 一定有解。但神經網路不是凸函數(non-convex),所以在進行梯度下降時,就有可能困在同一個地方出不來,因此找不到最佳解。
問題與討論
最後來比較看看貝氏分類模型跟羅吉斯回歸模型。首先,貝氏分類模型過度強調事件的獨立性,而這代表每個輸入的特徵都是獨立的。 這會有什麼問題?假如我們輸入了兩次一模一樣的特徵,貝氏分類會將其視為兩個 完全不同 的特徵,並將這些特徵彼此相乘,最後結果導致模型過度側重這個特徵。但相對的,羅吉斯回歸就不會有這個問題,因為權重會依照特徵進行調整,將權重分配到高度相關的特徵。
但這就代表貝氏分類一無是處嗎?倒也不然。貝氏分類在處理少量資料時,就可以有非常好的表現。且貝氏分類器簡單,訓練速度較快,因此貝氏分類器也是輸人不輸陣的喔!
這裡就再次回應先前所說,沒有什麼最好的方法,只有最適合的方法。最重要的,是了解需求後,找出最適合任務的處理方式,才是最重要的!
好,今天講到這裡,明天要進入深度學習的領域囉!
資料與圖片來源:
Speech and Language Processing