-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
反向傳播推導(dǎo)(反向傳播推導(dǎo)方法)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于反向傳播推導(dǎo)的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、Layer Normalization反向傳播推導(dǎo)
Layer Normalization來源于這篇文章:
其目的為減少深度神經(jīng)網(wǎng)絡(luò)中層與層之間的Covariate Shift,增加網(wǎng)絡(luò)收斂速度。與Batch Normalization對比,Layer Normalization可顯著減少參數(shù)量,特別適用于RNN系結(jié)構(gòu)。
Layer Normalization的公式如下所示:
其中 和 是可學(xué)習(xí)的參數(shù), 為element-wise乘法。
Layer Normalization的梯度分三個部分:輸入的部分和兩個可學(xué)習(xí)參數(shù)的部分
可學(xué)習(xí)參數(shù)包括 和 。此處令 :
原公式可變?yōu)椋?/p>
則輸入的梯度為:
下面重點分析最右部分:
其中 if ,否則為0。易得 。下面將式(1)和式(2)分別代回原式:
式(1):
式(2):
注意式中 。合并兩式:
二、卷積神經(jīng)網(wǎng)絡(luò)的反向傳播
首先回顧深度神經(jīng)網(wǎng)絡(luò)(DNN)的反向傳播
forward:
Loss Function:
backward:
w的梯度:
b的梯度:
令:
已知 ,推導(dǎo)上一層 :
( 1) 單通道(極簡情況)
為了簡單起見,設(shè)輸入X為3* 3,單通道,卷積核K為2*2,輸出Y為2*2,單通道。 ,即:
在計算時會轉(zhuǎn)化為:
所以,卷積運算最終轉(zhuǎn)化為矩陣運算。即X、K、Y變形在之后對應(yīng)矩陣變?yōu)閄C、KC、YC,則
Y和K只要reshape一下就可以了,但X需要特別處理,這個處理過程叫im2col(image to column),就是把卷積窗口中的數(shù)拉成一行,每行 列,共(X.w-k+1)(X.h-k+1)行。
(2)多通道(實際情況)
下面是一張被廣泛引用的說明圖,圖中顯示的輸入是3通道(3層,比如R、G、B共3個channel),輸出是2通道(channel),于是總共有3*2=6個卷積核,每個核有4個元素,3*4=12,所以6個卷積核排成一個12*2的核矩陣,即為權(quán)重矩陣,把這6個KC的組合(權(quán)重矩陣)記為WC。
圖中最底下一行表示兩個矩陣乘積運算,就是卷積層的前向傳播算法。實際編碼時還會加上偏置,而且還要考慮Batchs。
如圖中所示,如果輸入的維度為 ,那么
上圖中顯示的乘法維度是:
最后將 即可
池化(Pooling):也稱為欠采樣或下采樣。主要用于特征降維,壓縮數(shù)據(jù)和參數(shù)的數(shù)量,減小過擬合,同時提高模型的容錯性。主要有:
Max Pooling:最大池化
Average Pooling:平均池化
池化層的反向傳播比較容易理解,我們以最大池化舉例,上圖中,池化后的數(shù)字6對應(yīng)于池化前的紅色區(qū)域,實際上只有紅色區(qū)域中最大值數(shù)字6對池化后的結(jié)果有影響,權(quán)重為1,而其它的數(shù)字對池化后的結(jié)果影響都為0。假設(shè)池化后數(shù)字6的位置誤差為 誤差反向傳播回去時,紅色區(qū)域中最大值對應(yīng)的位置誤差即等于 ,而其它3個位置對應(yīng)的 誤差為0。因此,在卷積神經(jīng)網(wǎng)絡(luò)最大池化前向傳播時,不僅要記錄區(qū)域的最大值,同時也要記錄下來區(qū)域最大值的位置,方便誤差的反向傳播。
而平均池化就更簡單了,由于平均池化時,區(qū)域中每個值對池化后結(jié)果貢獻(xiàn)的權(quán)重都為區(qū)域大小的倒數(shù),所以誤差反向傳播回來時,在區(qū)域每個位置的誤差都為池化后誤差 除以區(qū)域的大小。
由前面的前向傳播可知卷積核的計算為:
記:
在反向傳播中, 是從后面一層(一般是激活函數(shù)層或池化層)傳過來的,是一個已知量,在此基礎(chǔ)上求
1.求
只需要reshape一下就可以得到
2.求
根據(jù)反向傳播公式,
但是從 還原到 并非易事,im2col的逆映射計算復(fù)雜度高得不能接受,要計算 還得另尋它途。
下面是新的計算方式的推導(dǎo):
根據(jù)前向傳播:
可以計算每個 的導(dǎo)數(shù):
所以:
3.求
我們的 是一個列向量,它給卷積結(jié)果的每一個通道都加上同一個標(biāo)量。因此,在反向傳播時,它的導(dǎo)數(shù)等于卷積結(jié)果的 誤差在每一個通道上將所有 誤差進(jìn)行求和的結(jié)果,即:
由于有些公式支持的不好,所以有些地方我用了截圖,如果有讀不懂的,可以在評論區(qū)回復(fù)郵箱,我把word版發(fā)給你們。另外,如果大家發(fā)現(xiàn)我有地方寫得不對或者有疑問的,麻煩評論, 我會回復(fù)并改正
三、深度學(xué)習(xí)入門課程學(xué)習(xí)筆記06 反向傳播
深度學(xué)習(xí)入門課程學(xué)習(xí)筆記06 反向傳播
反向傳播:
咱們在之前的課程講了一系列的前向傳播的知識點,前向傳播也就是從輸入到最終計算出LOSS值這一系列過程,那么這節(jié)課咱們要講一個更重要的知識點也就是反向傳播。反向傳播最直觀的意思就是說咱們要從LOSS值入手一步步的往回看,看什么呢?就是要看咱們的每一個權(quán)重參數(shù)對最終的LOSS值做了多大的貢獻(xiàn)。
最簡單的小例子
首先咱們用一個最簡單的小例子來看一下反向傳播是怎么一回事,如上圖最終的LOSS值等于-12下面咱們就要算對于X,Y,Z三個輸入來說分別對于LOSS值做了多大的貢獻(xiàn),首先咱們用q=x+y,f=qz分別表示中間的計算過程。那么咱們要算什么呢?反向傳播最終要算的就是最終的LOSS值對X,Y,Z三個輸入的偏導(dǎo)數(shù),這個偏導(dǎo)數(shù)該怎么算呢?在這里我們遵循一個鏈?zhǔn)椒▌t也就是對于輸入來說他對于最終LOSS的貢獻(xiàn)等于他前面?zhèn)鞑ハ聛淼奶荻仍俪艘宰陨淼奶荻取?/p>
鏈?zhǔn)椒▌t
這里就是梯度傳播的計算方式,我們要算X和Y對于最終LOSS的貢獻(xiàn)(換句話說就是反向傳播到X和Y的梯度的大?。┮人闱懊嬉粚觽鞑サ絏和Y的梯度再去計算X和Y自身的梯度。
稍難的例子
咱們再來看一個稍微難一些的例子,上圖表示的是咱們之前說過的這個SIGMOID函數(shù),咱們接下來要算的就是這個函數(shù)梯度傳播的過程,導(dǎo)數(shù)計算的公式我已經(jīng)寫在圖上了,咱們只需要根據(jù)導(dǎo)數(shù)的計算方式一步步的從最終的LOSS值往回算就可以了,下面淺紅色的值就是梯度傳播的值。
這里我們可以看到梯度傳播可以是一步一步的傳播也可以一步傳播一整塊,這一整塊我們把它當(dāng)做是一個整體,相應(yīng)的就要計算這一整個塊的梯度了,也就是直接對SIGMOID函數(shù)求導(dǎo)。
梯度傳播的門
這里咱們所說的門就是一個單位區(qū)域,我們可以從圖中看出來咱們在計算梯度傳播的過程中無外乎就是這幾種門的操作,每種門也都有它各自的特性,他們的特性是怎么得出的呢?這里就不帶大家一步步算了,咱們可以動動筆算一下梯度的傳播然后就知道為什么這些門有不同的特性了。
反向傳播就先說到這里了,這里只是很簡單的談了一下反向傳播具體的計算過程如果同學(xué)們還是不太理解建議看一下原始課程會有很詳細(xì)的推導(dǎo)。
四、一文徹底搞懂BP算法:原理推導(dǎo)+數(shù)據(jù)演示+項目實戰(zhàn)(上篇)
反向傳播算法(Backpropagation Algorithm,簡稱BP算法)是深度學(xué)習(xí)的重要思想基礎(chǔ),對于初學(xué)者來說也是必須要掌握的基礎(chǔ)知識!本文希望以一個清晰的脈絡(luò)和詳細(xì)的說明,來讓讀者徹底明白BP算法的原理和計算過程。
全文分為上下兩篇,上篇主要介紹BP算法的原理(即公式的推導(dǎo)),介紹完原理之后,我們會將一些具體的數(shù)據(jù)帶入一個簡單的三層神經(jīng)網(wǎng)絡(luò)中,去完整的體驗一遍BP算法的計算過程;下篇是一個項目實戰(zhàn),我們將帶著讀者一起親手實現(xiàn)一個BP神經(jīng)網(wǎng)絡(luò)(不使用任何第三方的深度學(xué)習(xí)框架)來解決一個具體的問題。
圖 1 所示是一個簡單的三層(兩個隱藏層,一個輸出層)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),假設(shè)我們使用這個神經(jīng)網(wǎng)絡(luò)來解決二分類問題,我們給這個網(wǎng)絡(luò)一個輸入樣本 ,通過前向運算得到輸出 。輸出值 的值域為 ,例如 的值越接近0,代表該樣本是"0"類的可能性越大,反之是"1"類的可能性大。
為了便于理解后續(xù)的內(nèi)容,我們需要先搞清楚前向傳播的計算過程,以圖1所示的內(nèi)容為例:
輸入的樣本為:
第一層網(wǎng)絡(luò)的參數(shù)為:
第二層網(wǎng)絡(luò)的參數(shù)為:
第三層網(wǎng)絡(luò)的參數(shù)為:
第一層隱藏層有三個神經(jīng)元: 、 和 。該層的輸入為:
以 神經(jīng)元為例,則其輸入為:
同理有:
假設(shè)我們選擇函數(shù) 作為該層的激活函數(shù)(圖1中的激活函數(shù)都標(biāo)了一個下標(biāo),一般情況下,同一層的激活函數(shù)都是一樣的,不同層可以選擇不同的激活函數(shù)),那么該層的輸出為: 、 和 。
第二層隱藏層有兩個神經(jīng)元: 和 。該層的輸入為:
即第二層的輸入是第一層的輸出乘以第二層的權(quán)重,再加上第二層的偏置。因此得到和的輸入分別為:
該層的輸出分別為: 和 。
輸出層只有一個神經(jīng)元 :。該層的輸入為:
即:
因為該網(wǎng)絡(luò)要解決的是一個二分類問題,所以輸出層的激活函數(shù)也可以使用一個Sigmoid型函數(shù),神經(jīng)網(wǎng)絡(luò)最后的輸出為: 。
在1.1節(jié)里,我們已經(jīng)了解了數(shù)據(jù)沿著神經(jīng)網(wǎng)絡(luò)前向傳播的過程,這一節(jié)我們來介紹更重要的反向傳播的計算過程。假設(shè)我們使用隨機(jī)梯度下降的方式來學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的參數(shù),損失函數(shù)定義為 ,其中 是該樣本的真實類標(biāo)。使用梯度下降進(jìn)行參數(shù)的學(xué)習(xí),我們必須計算出損失函數(shù)關(guān)于神經(jīng)網(wǎng)絡(luò)中各層參數(shù)(權(quán)重 和偏置 )的偏導(dǎo)數(shù)。
假設(shè)我們要對第 層隱藏層的參數(shù) 和 求偏導(dǎo)數(shù),即求 和 。假設(shè) 代表第 層神經(jīng)元的輸入,即 ,其中 為前一層神經(jīng)元的輸出,則根據(jù)鏈?zhǔn)椒▌t有:
因此,我們只需要計算偏導(dǎo)數(shù) 、 和 。
前面說過,第k層神經(jīng)元的輸入為: ,因此可以得到:
上式中, 代表第 層神經(jīng)元的權(quán)重矩陣 的第 行, 代表第 層神經(jīng)元的權(quán)重矩陣 的第 行中的第 列。
我們以1.1節(jié)中的簡單神經(jīng)網(wǎng)絡(luò)為例,假設(shè)我們要計算第一層隱藏層的神經(jīng)元關(guān)于權(quán)重矩陣的導(dǎo)數(shù),則有:
因為偏置b是一個常數(shù)項,因此偏導(dǎo)數(shù)的計算也很簡單:
依然以第一層隱藏層的神經(jīng)元為例,則有:
偏導(dǎo)數(shù) 又稱為 誤差項(error term,也稱為“靈敏度”) ,一般用 表示,例如 是第一層神經(jīng)元的誤差項,其值的大小代表了第一層神經(jīng)元對于最終總誤差的影響大小。
根據(jù)第一節(jié)的前向計算,我們知道第 層的輸入與第 層的輸出之間的關(guān)系為:
又因為 ,根據(jù)鏈?zhǔn)椒▌t,我們可以得到 為:
由上式我們可以看到,第 層神經(jīng)元的誤差項 是由第 層的誤差項乘以第 層的權(quán)重,再乘以第 層激活函數(shù)的導(dǎo)數(shù)(梯度)得到的。這就是誤差的反向傳播。
現(xiàn)在我們已經(jīng)計算出了偏導(dǎo)數(shù) 、 和 ,則 和 可分別表示為:
下面是基于隨機(jī)梯度下降更新參數(shù)的反向傳播算法:
單純的公式推導(dǎo)看起來有些枯燥,下面我們將實際的數(shù)據(jù)帶入圖1所示的神經(jīng)網(wǎng)絡(luò)中,完整的計算一遍。
我們依然使用如圖5所示的簡單的神經(jīng)網(wǎng)絡(luò),其中所有參數(shù)的初始值如下:
輸入的樣本為(假設(shè)其真實類標(biāo)為"1"):
第一層網(wǎng)絡(luò)的參數(shù)為:
第二層網(wǎng)絡(luò)的參數(shù)為:
第三層網(wǎng)絡(luò)的參數(shù)為:
假設(shè)所有的激活函數(shù)均為Logistic函數(shù): 。使用均方誤差函數(shù)作為損失函數(shù):
為了方便求導(dǎo),我們將損失函數(shù)簡化為:
我們首先初始化神經(jīng)網(wǎng)絡(luò)的參數(shù),計算第一層神經(jīng)元:
上圖中我們計算出了第一層隱藏層的第一個神經(jīng)元的輸入 和輸出 ,同理可以計算第二個和第三個神經(jīng)元的輸入和輸出:
接下來是第二層隱藏層的計算,首先我們計算第二層的第一個神經(jīng)元的輸入z₄和輸出f₄(z₄):
同樣方法可以計算該層的第二個神經(jīng)元的輸入 和輸出 :
最后計算輸出層的輸入 和輸出 :
首先計算輸出層的誤差項 ,我們的誤差函數(shù)為 ,由于該樣本的類標(biāo)為“1”,而預(yù)測值為 ,因此誤差為 ,輸出層的誤差項為:
接著計算第二層隱藏層的誤差項,根據(jù)誤差項的計算公式有:
最后是計算第一層隱藏層的誤差項:
以上就是關(guān)于反向傳播推導(dǎo)相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
神經(jīng)網(wǎng)絡(luò)反向傳播公式的推導(dǎo)(神經(jīng)網(wǎng)絡(luò)反向傳播公式的推導(dǎo)方法)
nginx反向代理內(nèi)網(wǎng)訪問(nginx反向代理內(nèi)網(wǎng)訪問是什么)
反向傳播神經(jīng)網(wǎng)絡(luò)模型(反向傳播神經(jīng)網(wǎng)絡(luò)模型有哪些)
中國銀聯(lián)在線支付開通官網(wǎng)(中國銀聯(lián)官網(wǎng)登錄)
加油站景觀設(shè)計品種有哪些(加油站景觀設(shè)計品種有哪些圖片)