一、Linear Models' Bias
上篇學習機器學習一文中,所構造的 $y = b + wx_0$ 函式是一個linear model亦即線性模型,但是linear models有缺陷的——它過於簡單了。實際應用中,我們所面臨的不會只是一個簡單的linear model,因此我們需要更復雜的models。
比如上圖中的紅色曲線,如何找到它的表示式呢?
可以透過許多條藍色的函式相加得到紅色曲線的函式。所有的Piecewise Linear Curves都可以用一組類似的“藍色函式 + 常數”來表達出來,即使是曲線也可以,如下圖:
二、如何找“藍色函式”?
Sigmoid Function
$y = c\frac{1}{1 + e ^ {-(b + wx_1)}} = c*sigmoid(b + wx_1)$
其函式影像如下表示:
我們可以對sigmoid函式中的引數做調整,得到不同形狀的sigmoid函式,來逼近藍色函式。
改變w可以改變sigmoid函式的斜率;改變b可以左右移動其位置;改變c可以改變其高度,如下圖:
所以不同的常數c,截距b和斜率w就會得到不同的sigmoid函式,然後將它們加起來就能夠逼近目標函式,即
三、深度學習裡的三個步驟
仿照前面ML裡的三個步驟,我們也可以將其完全套在DL中
1. Function with unkonwn parameters
不同於ML裡我們定義的簡單的linear model,透過上面的分析我們可以得到一個全新的model——擁有更多features的model!
將前面的linear表示式代入sigmoid函式:
其中:
\(j\)代表第\(j\)個feature(即第\(j\)天的點選量);\(i\)代表選擇第\(i\)個sigmoid函式;\(w_{ij}\)表示在第\(i\)個sigmoid函式中\(x_j\)的權值
如圖,分別代入計算就能得到:
由線性代數的知識可以發現,上面的三個式子可以寫作矩陣的乘法:
然後將\(r\)代入sigmoid函式,記作\(a = \sigma(r)\),乘上係數\(c\),再加上\(b\)就得到最後的\(y\),即\(y = b + c^Ta\)
最終得到:$$y = b + c^T \sigma({\bf b} + Wx)$$(\(b\)和\(\bf b\)區別開)
將W矩陣中的行或者列取出來,與\(b\),\(\bf b\)和\(c^T\)豎著排列起來組成:
就進入了第2步找Loss函式
2. Define Loss from Training Data
Loss函式與ML一節中講的一樣,定義函式\(L(\theta)\)
先給定一組引數代入\(y = b + c^T \sigma({\bf b} + Wx)\)計算出\(y\)的值,然後將其與真實值(label) \(\widehat{y}\)比較,得到誤差\(e\),最後便可得Loss函式的表示式:
進而到第3步找一個最優解的步驟
3. Optimization
記 \(\theta^\star = arg min_{\theta}L\)
-
(Randomly)Pick initial value \(\theta^0\)
gradient \(g = \begin{bmatrix} \dfrac{\partial L}{\partial \theta_1}|_{\theta = \theta^0} \\ \dfrac{\partial L}{\partial \theta_2}|_{\theta = \theta^0} \\ . \\ . \\ . \end{bmatrix}\)
可以記作:\(g =\nabla L(\theta^0)\)(就是梯度符號) -
Compute gradient again and again
\(g =\nabla L(\theta^0)\) \(\theta^1 \leftarrow \theta^0 - \eta g\)
\(g =\nabla L(\theta^1)\) \(\theta^2 \leftarrow \theta^1 - \eta g\)
\(g =\nabla L(\theta^2)\) \(\theta^3 \leftarrow \theta^2 - \eta g\)
還有另一種計算方式,將整個L中的資料分成N個batch(批),每批資料中有B個資料,與上面的方法略有差異,每次update時,是依次從每個batch裡取出資料來update,當把所有的batch更新過一遍,叫1個epoch(時期)
四、從sigmoid到ReLU
ReLU(Rectified Linear Unit)是另一種 Activation Function(啟用函式),前面提到的分段Sigmoid(Hard-Sigmoid)函式的表示式可能會很難寫出來,但是其可以看作是2個ReLU函式相加,ReLU函式的表示式如下: $$c*max(0, b + wx_1)$$
如此,我們前面y的表示式就可以變成:
注意換成ReLU函式後,\(i\)變為原來的2倍,因為2個ReLU函式才能合成一個Sigmoid函式
五、到底為什麼叫Deep Learning ?
上面的例子裡我們只套了一層啟用函式就得到了y的表示式,但是人們發現套的層數多一些預測的效果就會更好一些,所以不妨多套幾層:
其中我們用到的sigmoid或ReLU函式叫neuron(神經元),許多neuron套起來就叫neural network(神經網路)。後來人們又給它們取了新的名字,每一排的neuron叫作hidden layer(隱含層),有許多層layer所以叫作Deep Learning
但是層數越多不見得預測效果會越好,在課堂例項中,雖然隨著層數的增加,在訓練資料上的效果越來越好,但是在預測資料上誤差出現了增大,這便是overfitting(過擬合)