在前一篇中提到,我們可以透過y= bx+w 來當作機器用來預測的函數。但有時如果函數太過簡單,函數與實際輸出的值之間的差距無論怎麼調整都會存在,也就是前一節提到的Model Bias問題。
為了解決沒有彈性的問題,就有了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) )
規則:
我們把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
透過以上三個步驟,我們就能完成第一步的尋找函數function過程。
*我們要尋找的參數w,b,c可以統一變為θ矩陣,透過訓練資料找到最適合的參數值。
接著我們要尋找讓loss最小的參數,讓L(θ)的值可以最小,因此我們挑選一個θ0當作初始值,讓L對每個θi微分,就可以得到一組gradient。
因此每次更新的公式: θ1 = θ0 - g * learning rate。
那要更新多久呢?
使用Batch
不過通常,我們在做gradient decent的時候,偏向於把大量的訓練資料區分為好幾個batch(隨機區分即可),然後先利用batch1 將θ0更新成θ1,接著再把batch2的資料拿來將θ1更新成θ2。
*把所有的batch更新過一次,被稱為1 epoch。
為什麼我們需要不斷地堆疊更多的sigmoid或是前面線性函數的層數?
因為我們在預測的輸出資料,通常不會精準的符合某個函數的圖形。因此我們需要透過不斷地堆疊,去近似於我們目標的模型,藉此找到預測的方程式。而這樣重複堆疊的過程,就是深度學習的由來。
我們也不一定要只使用一個sigmoid,當我們重複加上更多的sigmoid,也可以更優化模型。至於要做幾次(layer),這也由我們自己控制的部分(hyperparameter)。
-> 以上的步驟與以下的圖型,也說明了為什麼它被稱為神經網路,或是深度學習
(Deep的由來:很多hidden layer疊加在一起)。
參考資料: