日本在线看黄a美女久草|日本动漫亚洲在线一区|日韩人妻无码免费视频|A√有码中文字幕|日韩一级片视频热久久久|一区二区三区四区精品无码在线|亚洲AV成人无码一二三app|亚洲综合图片绯色|91极品人妻在线网站|国产成人精品一区二三区四区五区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給AI研習社
發(fā)送

0

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理

本文作者: AI研習社 編輯:賈智龍 2017-09-27 17:20
導語:反向傳播最近爭議這么大,數(shù)學原理是什么呢?

雷鋒網(wǎng)按:本文原作者李飛騰,本文整理自知乎專欄——數(shù)字編程。雷鋒網(wǎng)已獲得轉載授權。


如果能二秒內在腦袋里解出下面的問題,本文便結束了。

已知:神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理,其中神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理

求:神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理,神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理,神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理。


到這里,請耐心看完下面的公式推導,無需長久心里建設。

首先,反向傳播的數(shù)學原理是 “求導的鏈式法則” :

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理的可導函數(shù),則神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理。

接下來介紹

  • 矩陣、向量求導的維數(shù)相容原則

  • 利用維數(shù)相容原則快速推導反向傳播

  • 編程實現(xiàn)前向傳播、反向傳播

  • 卷積神經(jīng)網(wǎng)絡的反向傳播

快速矩陣、向量求導

這一節(jié)展示如何使用鏈式法則、轉置、組合等技巧來快速完成對矩陣、向量的求導

一個原則維數(shù)相容,實質是多元微分基本知識,沒有在課本中找到下列內容,維數(shù)相容原則是我個人總結:

維數(shù)相容原則:通過前后換序、轉置 使求導結果滿足矩陣乘法且結果維數(shù)滿足下式:

如果神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理,那么神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理。

利用維數(shù)相容原則解上例:

step1:把所有參數(shù)當做實數(shù)來求導,神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理,

依據(jù)鏈式法則有神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理,神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理

可以看出除了神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理,神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理的求導結果在維數(shù)上連矩陣乘法都不能滿足。

step2:根據(jù) step1 的求導結果,依據(jù)維數(shù)相容原則做調整:前后換序、轉置

依據(jù)維數(shù)相容原則神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理,但神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理、神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理,自然得調整為神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理;

同理:神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理,但 神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理、神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理,那么通過換序、轉置我們可以得到維數(shù)相容的結果神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理。

對于矩陣、向量求導:

  • “當做一維實數(shù)使用鏈式法則求導,然后做維數(shù)相容調整,使之符合矩陣乘法原則且維數(shù)相容” 是快速準確的策略;

  • “對單個元素求導、再整理成矩陣形式” 這種方式整理是困難的、過程是緩慢的,結果是易出錯的(不信你試試)。

如何證明經(jīng)過維數(shù)相容原則調整后的結果是正確的呢?直覺!簡單就是美...

快速反向傳播

神經(jīng)網(wǎng)絡的反向傳播求得 “各層” 參數(shù)神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理的導數(shù),使用梯度下降(一階 GD、SGD,二階 LBFGS、共軛梯度等)優(yōu)化目標函數(shù)。

接下來,展示不使用下標的記法(神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理, 神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理or神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理)直接對神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理求導,反向傳播是鏈式法則維數(shù)相容原則的完美體現(xiàn),對每一層參數(shù)的求導利用上一層的中間結果完成。

這里的標號,參考 UFLDL 教程 - Ufldl

前向傳播:

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理 (公式 1)

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理         (公式 2)

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理為第神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理層的中間結果,神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理為第神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理層的激活值,其中第神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理層包含元素:輸入神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理,參數(shù)神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理、神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理,激活函數(shù)神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理,中間結果神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理,輸出神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理。

設神經(jīng)網(wǎng)絡的損失函數(shù)為神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理(這里不給出具體公式,可以是交叉熵、MSE 等),根據(jù)鏈式法則有:

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理

這里記 神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理,其中神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理 、 神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理可由 公式 1 得出,神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理加轉置符號神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理是根據(jù)維數(shù)相容原則作出的調整。

如何求 神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理? 可使用如下遞推(需根據(jù)維數(shù)相容原則作出調整):

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理

其中神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理、 神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理。

那么我們可以從最頂層逐層往下,便可以遞推求得每一層的神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理

注意:神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理是逐維求導,在公式中是點乘的形式。

反向傳播整個流程如下:

1) 進行前向傳播計算,利用前向傳播公式,得到隱藏層和輸出層 的激活值。

2) 對輸出層 (第神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理層),計算殘差:

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理(不同損失函數(shù),結果不同,這里不給出具體形式)

3) 對于神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理的隱藏層,計算:

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理

4) 計算各層參數(shù)神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理、神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理偏導數(shù):

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理
神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理

編程實現(xiàn)

大部分開源 library(如:caffe,Kaldi/src/{nnet1,nnet2})的實現(xiàn)通常把神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理、神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理作為一個 layer,激活函數(shù)神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理作為一個 layer(如:sigmoid、relu、softplus、softmax)。

反向傳播時分清楚該層的輸入、輸出即能正確編程實現(xiàn), 如:

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理                             (公式 1)

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理                                     (公式 2)

(1) 式 AffineTransform/FullConnected 層,以下是偽代碼:

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理

注: out_diff = 神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理 是上一層(Softmax 或 Sigmoid/ReLU 的 in_diff)已經(jīng)求得:

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理 (公式 1-1)

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理              (公式 1-2)

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理                    (公式 1-3)

(2) 式激活函數(shù)層(以 Sigmoid 為例)

注:out_diff = 神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理是上一層 AffineTransform 的 in_diff,已經(jīng)求得,

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理

在實際編程實現(xiàn)時,in、out 可能是矩陣 (通常以一行存儲一個輸入向量,矩陣的行數(shù)就是 batch_size),那么上面的 C++ 代碼就要做出變化(改變前后順序、轉置,把函數(shù)參數(shù)的 Vector 換成 Matrix,此時 Matrix out_diff 每一行就要存儲對應一個 Vector 的 diff,在 update 的時候要做這個 batch 的加和,這個加和可以通過矩陣相乘 out_diff*input(適當?shù)霓D置)得到。

如果熟悉 SVD 分解的過程,通過 SVD 逆過程就可以輕松理解這種通過乘積來做加和的技巧。

丟掉那些下標記法吧!

卷積層求導

卷積怎么求導呢?實際上卷積可以通過矩陣乘法來實現(xiàn)(是否旋轉無所謂的,對稱處理,caffe 里面是不是有 image2col),當然也可以使用 FFT 在頻率域做加法。

那么既然通過矩陣乘法,維數(shù)相容原則仍然可以運用,CNN 求導比 DNN 復雜一些,要做些累加的操作。具體怎么做還要看編程時選擇怎樣的策略、數(shù)據(jù)結構。

快速矩陣、向量求導之維數(shù)相容大法已成。

雷峰網(wǎng)版權文章,未經(jīng)授權禁止轉載。詳情見轉載須知。

神經(jīng)網(wǎng)絡反向傳播的數(shù)學原理

分享:
相關文章

編輯

聚焦數(shù)據(jù)科學,連接 AI 開發(fā)者。更多精彩內容,請訪問:yanxishe.com
當月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設置密碼以方便用郵箱登錄
立即設置 以后再說