在前一篇中提到,我們可以透過y= bx+w 來當作機器用來預測的函數。但有時如果函數太過簡單,函數與實際輸出的值之間的差距無論怎麼調整都會存在,也就是前一節提到的Model Bias問題。
為了解決沒有彈性的問題,就有了sigmoid函數。Sigmoid
當一條linear curve無法有效的預測我們需要的值,這時我們可以透過precise linear curve來得到我們需要的函數。但是precise linear curve本身的函數是不容易寫出的,因此我們可以用sigmoid函數逼近該precise linear curve。
*precise linear curve: 一條由很多線段所組成的鋸齒線(constant + a set of linear curve)。
Sigmoid函數的定義:y = c * (1 / 1 + e-(b+wx) )
規則:
- 當w無限大,就會趨近於平線。改變W → 改變斜率
- 改變c → 改變高度
- 改變b → 平移shift

Part 1. 尋找函數Function
我們把sigmoid函數套用到原本的函數中,就會變成
y = b + wx1 -> y = Σci sigmoid(bi + wix1)
y=b+Σwijxj -> y= Σci sigmoid(bi + Σwijxj),j是天數。 wijxj為不同天數的數據與權重參數。
- 將函數展開:
r1 = b1 + w11x1 + w12x1 + w13x3
r2 = b2 + w21x1 + w22x1 + w23x3
r2 = b3 + w31x1 + w32x1 + w33x3
- 將展開的公式以矩陣表示:r = b + wx

- 最後乘上Ci加上b,就會得到預測的值y。同時我們也能將這個步驟轉為矩陣的方式表示:

透過以上三個步驟,我們就能完成第一步的尋找函數function過程。
*我們要尋找的參數w,b,c可以統一變為θ矩陣,透過訓練資料找到最適合的參數值。
Part 2. 尋找讓Loss最小的參數θ
接著我們要尋找讓loss最小的參數,讓L(θ)的值可以最小,因此我們挑選一個θ0當作初始值,讓L對每個θi微分,就可以得到一組gradient。
因此每次更新的公式: θ1 = θ0 - g * learning rate。
那要更新多久呢?
- gradient = 0
- 不想做了為止。
使用Batch
不過通常,我們在做gradient decent的時候,偏向於把大量的訓練資料區分為好幾個batch(隨機區分即可),然後先利用batch1 將θ0更新成θ1,接著再把batch2的資料拿來將θ1更新成θ2。
*把所有的batch更新過一次,被稱為1 epoch。
反覆進行Sigmoid,以得到最佳解
為什麼我們需要不斷地堆疊更多的sigmoid或是前面線性函數的層數?
因為我們在預測的輸出資料,通常不會精準的符合某個函數的圖形。因此我們需要透過不斷地堆疊,去近似於我們目標的模型,藉此找到預測的方程式。而這樣重複堆疊的過程,就是深度學習的由來。
我們也不一定要只使用一個sigmoid,當我們重複加上更多的sigmoid,也可以更優化模型。至於要做幾次(layer),這也由我們自己控制的部分(hyperparameter)。
-> 以上的步驟與以下的圖型,也說明了為什麼它被稱為神經網路,或是深度學習
(Deep的由來:很多hidden layer疊加在一起)。

參考資料: