深度學習屬於機器學習,機器學習的三個步驟就是:模型,策略和計算方法。比如LR,模型使用的LR模型(LR是基於伯努利假設,伯努利屬於指數分布族,指數分布族屬於廣義線性模型),策略使用的是聯合概率分布最大,計算方法是梯度下降法或擬牛頓法等。
深度學習的模型是神經網絡,如下圖:
策略就是我們說的損失函數,cost function,反映了模型的預測誤差,如交叉熵、均方誤差等。給定N個訓練數據集:
基於訓練集找到一組最佳的參數
使得C(θ)最小;
具體表示方法是什麼?這就需要明白神經網絡模型如何表示的,如下圖所示,對於l層來說:
第l層的第i個神經元的輸入Zi,它是上一層所有神經元的輸入之和:
第l層的第i個神經元的輸出ai,是zi經過非線性變化(我們稱為激活函數,如ReLu,sigmoid等):
因此,我們說的θ就是所有的
,則損失函數的偏導
就是求出所有的
和
。
一般地,我們求出
和
,會更新參數,即
。但神經網絡的參數非常多,比如很簡單的alexnet的參數個數在千萬級別,一個一個地求是不切實際的,所以,這裡需要用到反向傳播:back propagation!
求解之前,需要了解一下鏈式法則,就是g(f(x))對x的求導,會等於 g對f的求導 乘 f對x的求導。由於z是w的函數,所以:
可以通過前向傳播求出(即,是已知的不用求)
接下來求解
。令
表示
,(不表示也可以,它有對應的實際的意義,不知道實際的意義也沒關係,因為這是我們一步一步推導下來的)。求解
會比較困難,因為
-->
-->...-->
。這是層層傳遞下去的。
如果,我們能夠知道如何層層傳遞,即l層第i個神經元
和l+1層
(會影響所有神經元)的關係,然後又能算出最後一層L的
,是不是就可以了?所以,我們需要解決2個問題:
(1)最後一層L的
如何計算?
(2)
和
的關係?
對於問題(1),
是一個向量,我們看看如何求其中一個值n,
, 而
就是最後的輸出值
(對於多分類問題,比如分10類,最後一層的節點數是10個,激活函數是softmax)
,
為最後一層採用的激活函數(多分類一般是softmax),
是激活函數的一級導數。
取決於採用的損失函數,如果採用的是均方誤差,則
(能夠直接得到)
綜上:
可以求得。
對於問題(2),第l層的第i個神經元是如何影響到l+1層所有的神經元呢?
,
為激活函數(一般是ReLu),
是激活函數的一級導數,可以直接求得。
如何求?可以這麼理解,
會影響[
],而[
]影響C(θ)。
綜上:
額?辛苦碼的那麼多,不知道怎麼沒了,好吧,再打一遍吧~
神經網絡的訓練說白了就是給你N個訓練集,然後讓你選擇一組參數θ使得在這N個訓練集上的損失C(θ)最小。如果找到這組參數呢?用梯度下降法找到這些參數。
梯度下降法就是隨機取一組參數,然後每次迭代都朝下降最快的方向更新,即:
有因為θ其實是由很多的參數組成,這些參數分別是權重w和偏差b,權重
表示第l-1層的第j個神經元的輸出,對第l層的第i個神經元的輸入的貢獻。
根據推導,前者等於
,可通過反向傳遞求得,後者等於
後者通過前向傳播求得,如下圖所示: