昨天舉的例子 是一個線性模型(linear model),隨著
越大,
就越大,可以透過設定不同的
來改變斜率,或是設定不同的
來改變直線與 y 軸的交叉點,但它永遠會是一條直線。
然而實際情況可能會是紅色曲線這樣子,但不管怎麼設定 也沒辦法變成紅色那條曲線。由此可知線性模型會有很大的限制(Model Bias),因此如要產生紅色曲線我們就需要更複雜的模型。
紅色曲線可以看成是一個常數加上很多個藍色的函式,從下圖中可以看到紅色的曲線可以由 0(常數項), 1, 2, 3 這四個函數所組成。而這個紅色曲線是由很多線段所組成的,我們稱之為分段線性曲線(Piecewise Linear Curves)。
那剛剛提到的藍色曲線要如何表示呢?
我們可以使用 S型函數(Sigmoid function) 去逼近它,其式子寫成 ,當
趨近於無窮大,
,
就會收斂在
,而當
趨近於無窮小,分母會趨近於無窮大,即
會趨近於 0。這些藍色曲線我們稱之為 Hard Sigmoid。
調整 即會改變斜率,調整
就能將 Sigmoid funtion 左右移動,調整
則會改變高度。
藉由調整不同的參數來產生各種Sigmoid function,再透過這些Sigmoid function產生各種不同的 Piecewise linear function,最後甚至能夠逼近各種連續函數。
根據上述方法我們就可以將原本的 改成
。
我們將上述的數學式子透過圖形來表示,每個圖形都代表著一矩陣或是數值,而我們將這些未知的參數拉直,拼成一個很長的向量 ,即為所有未知的參數。
計算Loss的方法跟昨天教的方法一樣,首先設定一組 的值,接著把feature
代入,得出預測的
,再去計算預測的值與真實的值的差距
,最後加總誤差。
方法也跟昨天教的一樣,使用Gradient descent,首先隨機選一個初始數值 ,接著去計算每一個參數對Loss的微分,會得到一個向量
,即為Gradient,我們可以用
來表示,將式子寫成
,最後去重複更新所有的參數。
而實際上在做Gradient descent的時候,我們會將我們有的 筆資料隨意分成好幾個Batch
,並對其中一個Batch計算它的Loss
,並使用
來計算Gradient並更新參數,接著再取下一個Batch去計算Loss,以此類推。
每次更新一次參數,我們叫做一次Update,而將所有Batch看過一次,我們稱之為一次Epoch,
Hard sigmoid也可以看成是兩個 Rectified Linear Unit(ReLU) 的加總,其式子寫成 。
將原本Sigmoid換成ReLU,而這兩種function我們稱之為Activation function。