日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

反向传播算法_反向传播算法:定义,概念,可视化

發(fā)布時(shí)間:2024/4/13 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 反向传播算法_反向传播算法:定义,概念,可视化 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

定義

向前傳播

通常,當(dāng)我們使用神經(jīng)網(wǎng)絡(luò)時(shí),我們輸入某個(gè)向量x,然后網(wǎng)絡(luò)產(chǎn)生一個(gè)輸出y,這個(gè)輸入向量通過(guò)每一層隱含層,直到輸出層。這個(gè)方向的流動(dòng)叫做正向傳播。

在訓(xùn)練階段,輸入最后可以計(jì)算出一個(gè)代價(jià)標(biāo)量J(θ)。

反向傳播算法

然后,代價(jià)通過(guò)反向算法返回到網(wǎng)絡(luò)中,調(diào)整權(quán)重并計(jì)算梯度。未完待續(xù)……

分析

可能是你們?cè)趯W(xué)校里做過(guò)用代數(shù)的方法來(lái)分析反向傳播。對(duì)于普通函數(shù),這很簡(jiǎn)單。但當(dāng)解析法很困難時(shí),我們通常嘗試數(shù)值微分。

數(shù)值微分

由于代數(shù)操作很困難,在數(shù)值方法中,我們通常使用計(jì)算量大的方法,因此經(jīng)常需要用到計(jì)算機(jī)。一般有兩種方法,一種是利用近鄰點(diǎn),另一種是利用曲線擬合。

隨機(jī)梯度下降法

負(fù)責(zé)“學(xué)習(xí)”的算法。它使用了由反向傳播算法產(chǎn)生的梯度。

反向傳播算法

然后,反向傳播算法返回到網(wǎng)絡(luò)中,調(diào)整權(quán)重來(lái)計(jì)算梯度。一般來(lái)說(shuō),反向傳播算法不僅僅適用于多層感知器。它是一個(gè)通用的數(shù)值微分算法,可以用來(lái)找到任何函數(shù)的導(dǎo)數(shù),只要給定函數(shù)是可微的。

該算法最重要的特點(diǎn)之一是,它使用了一個(gè)相對(duì)簡(jiǎn)單和廉價(jià)的程序來(lái)計(jì)算微分,提高效率。

如何計(jì)算一個(gè)代價(jià)函數(shù)的梯度

給定一個(gè)函數(shù)f,我們想要找到梯度:

x是一組我們需要它的導(dǎo)數(shù)的變量,y是額外的變量,我們不需要它的導(dǎo)數(shù)。

為了使網(wǎng)絡(luò)繼續(xù)學(xué)習(xí),我們想要找到代價(jià)函數(shù)的梯度。

損失函數(shù)

這個(gè)函數(shù)通常應(yīng)用于一個(gè)數(shù)據(jù)點(diǎn),尋找預(yù)測(cè)點(diǎn)和實(shí)際點(diǎn)之間的距離。大多數(shù)情況下,這是距離的平方損失。

代價(jià)函數(shù)

這個(gè)函數(shù)是所有損失函數(shù)的組合,它不總是一個(gè)和。但有時(shí)是平均值或加權(quán)平均值。例如:

如何計(jì)算一個(gè)代價(jià)函數(shù)的梯度

給定一個(gè)函數(shù)f,我們想要找到梯度:

x是一組我們需要它的導(dǎo)數(shù)的變量,y是額外的變量,我們不需要它的導(dǎo)數(shù)。

為了網(wǎng)絡(luò)的學(xué)習(xí),我們想要找到代價(jià)函數(shù)的梯度。

微積分鏈?zhǔn)椒▌t

假設(shè)x是實(shí)數(shù),f和g都是實(shí)數(shù)到實(shí)數(shù)的映射函數(shù)。此外,

根據(jù)鏈?zhǔn)椒▌t,

多變量鏈?zhǔn)椒▌t

已知x和y是不同維數(shù)的向量,

g和f也是從一個(gè)維度映射到另一個(gè)維度的函數(shù),

或者說(shuō),

?y /?x是g的n×m雅可比矩陣。

梯度

而導(dǎo)數(shù)或微分是沿一個(gè)軸的變化率。梯度是一個(gè)函數(shù)沿多個(gè)軸的斜率矢量。

雅可比矩陣

有時(shí)我們需要找出輸入和輸出都是向量的函數(shù)的所有偏導(dǎo)數(shù)。包含所有這些偏導(dǎo)數(shù)的矩陣就是雅可比矩陣。

有函數(shù)

雅可比矩陣J為:

張量的鏈?zhǔn)椒▌t

我們大部分時(shí)間都在處理高維數(shù)據(jù),例如圖像和視頻。所以我們需要將鏈?zhǔn)椒▌t擴(kuò)展到張量。

想象一個(gè)三維張量,

z值對(duì)這個(gè)張量的梯度是,

對(duì)于這個(gè)張量, i?? 指數(shù)給出一個(gè)向量,

所以考慮到這一點(diǎn),

張量的鏈?zhǔn)椒▌t是,

概念

計(jì)算圖

這是一個(gè)關(guān)于直線方程的計(jì)算圖的例子。開(kāi)始節(jié)點(diǎn)是你將在方程中看到的,為了計(jì)算圖的方便,總是需要為中間節(jié)點(diǎn)定義額外的變量,在這個(gè)例子中是節(jié)點(diǎn)u。節(jié)點(diǎn)“u”等價(jià)于“mx”。

我們引入這個(gè)概念來(lái)說(shuō)明復(fù)雜的計(jì)算流程的支撐算法。

還記得之前,當(dāng)我們把損失函數(shù)定義為差的平方,這就是我們?cè)谟?jì)算圖的最后一層使用的。其中y是實(shí)際值a是預(yù)測(cè)值。

請(qǐng)注意,我們的損失值嚴(yán)重依賴于最后的激活值,而最后的激活值又依賴于前一個(gè)激活值,再依賴于前一個(gè)激活值,以此類(lèi)推。

在神經(jīng)網(wǎng)絡(luò)的前進(jìn)過(guò)程中,我們最終得到一個(gè)預(yù)測(cè)值a。在訓(xùn)練階段,我們有一個(gè)額外的信息,這就是網(wǎng)絡(luò)應(yīng)該得到的實(shí)際結(jié)果,y。我們的損失函數(shù)就是這些值之間的距離。當(dāng)我們想要最小化這個(gè)距離時(shí),我們首先要更新最后一層的權(quán)重。但這最后一層依賴于它的前一層,因此我們更新它們。所以從這個(gè)意義上說(shuō),我們是在向后傳遞神經(jīng)網(wǎng)絡(luò)并更新每一層。

敏感性改變

當(dāng)x的一個(gè)小變化導(dǎo)致函數(shù)f的一個(gè)大變化時(shí),我們說(shuō)函數(shù)對(duì)x非常敏感如果x的一個(gè)小變化導(dǎo)致f的一個(gè)小變化,我們說(shuō)它不是很敏感。

例如,一種藥物的有效性可用f來(lái)衡量,而x是所使用的劑量。靈敏度表示為:

為了進(jìn)一步擴(kuò)展,我們假設(shè)現(xiàn)在的函數(shù)是多變量的。

函數(shù)f可以對(duì)每個(gè)輸入有不同的敏感度。舉個(gè)例子,也許僅僅進(jìn)行數(shù)量分析是不夠的,所以我們把藥物分解成3種活性成分,然后考慮每種成分的劑量。

最后一點(diǎn)擴(kuò)展,如果其中一個(gè)輸入值,比如x也依賴于它自己的輸入。我們可以用鏈?zhǔn)椒▌t來(lái)找出敏感性。同樣的例子,也許x被分解成它在身體里的組成部分,所以我們也要考慮這個(gè)。

我們考慮x的組成,以及它的成分如何影響藥物的整體效果。

在這里,我們測(cè)量的是整個(gè)藥物的效果對(duì)藥物中這個(gè)小成分的敏感度。

一個(gè)簡(jiǎn)單的模型

這個(gè)計(jì)算圖考慮了節(jié)點(diǎn)a和它前面的節(jié)點(diǎn)a '之間的連接。

用鏈?zhǔn)椒▌t,

它測(cè)量了a對(duì)u的微小變化有多敏感。然后我們繼續(xù)前面的3次計(jì)算,

測(cè)量u對(duì)以下每一項(xiàng)的微小變化的敏感度:

  • 權(quán)重,w

  • 之前的激活值,a '

  • 偏質(zhì),b

把這些放在一起,

簡(jiǎn)單模型的復(fù)雜性

如果在前面的例子中,我們有兩個(gè)節(jié)點(diǎn)和它們之間的一個(gè)鏈接。在這個(gè)例子中,我們有3個(gè)節(jié)點(diǎn)和2個(gè)鏈接。

因?yàn)殒準(zhǔn)椒▌t的鏈?zhǔn)介L(zhǎng)度是沒(méi)有限制的。我們可以對(duì)任意數(shù)量的層繼續(xù)這樣做。對(duì)于這一層,注意計(jì)算圖是這樣的,

請(qǐng)注意,需要用附加的刻度對(duì)每個(gè)節(jié)點(diǎn)進(jìn)行注釋。這些刻度不是衍生物,它們只是表示u和u '是不同的、唯一的值或?qū)ο?/p>

復(fù)雜模型的復(fù)雜性

到目前為止的例子都是線性的,鏈表式的神經(jīng)網(wǎng)絡(luò)。把它擴(kuò)展到現(xiàn)實(shí)的網(wǎng)絡(luò)是這樣的,

我們需要給網(wǎng)絡(luò)添加一些額外的符號(hào)。

讓我們通過(guò) a1?計(jì)算一下計(jì)算圖 a2?。

實(shí)際上你會(huì)發(fā)現(xiàn)兩個(gè)計(jì)算圖有一個(gè)很大的共同點(diǎn),特別是到a1?。這意味著,如果一個(gè)計(jì)算已經(jīng)被計(jì)算過(guò),那么它可以在下一次和下下次被重用,依此類(lèi)推。雖然這增加了內(nèi)存的占用,但它顯著減少了計(jì)算時(shí)間,而且對(duì)于大型神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō),這是必要的。

如果我們用鏈?zhǔn)椒▌t,得到的公式幾乎是一樣的,只是增加了索引。

復(fù)雜模型的進(jìn)一步復(fù)雜化

你會(huì)發(fā)現(xiàn)一個(gè)a2? 會(huì)有幾個(gè)路徑輸出層節(jié)點(diǎn),。

所以我們需要對(duì)前一層求和。我們從所有前面的節(jié)點(diǎn)和它們的梯度的總和中得到的這個(gè)值有更新它的指令,以便我們最小化損失。

最小化成本函數(shù)

如果你還記得定義6和7,特別是定義7,你會(huì)記得成本函數(shù)在概念上是預(yù)測(cè)產(chǎn)出和實(shí)際產(chǎn)出之差的平均值或加權(quán)平均值。

如果我們使用線性回歸或邏輯回歸的梯度下降算法來(lái)最小化代價(jià)函數(shù)。

對(duì)于神經(jīng)網(wǎng)絡(luò),我們使用反向傳播算法。我想現(xiàn)在已經(jīng)很清楚為什么我們不能對(duì)神經(jīng)網(wǎng)絡(luò)使用單一方程了。神經(jīng)網(wǎng)絡(luò)并不是我們可以很好地求導(dǎo)數(shù)的連續(xù)函數(shù)。相反,它們近似一個(gè)函數(shù)的離散節(jié)點(diǎn)。因此需要一個(gè)遞歸算法來(lái)找到它的導(dǎo)數(shù)或梯度,這需要考慮到所有的節(jié)點(diǎn)。

完整的成本函數(shù)是這樣的:

從概念上講

符號(hào)對(duì)符號(hào)導(dǎo)數(shù)

到目前為止,您已經(jīng)了解了如何得到神經(jīng)網(wǎng)絡(luò)中節(jié)點(diǎn)梯度的代數(shù)表達(dá)式。通過(guò)鏈?zhǔn)椒▌t在張量上的應(yīng)用和計(jì)算圖的概念。

代數(shù)表達(dá)式或計(jì)算圖不處理具體問(wèn)題,而只是給我們的理論背景,以驗(yàn)證我們正在正確地計(jì)算它們。它們幫助指導(dǎo)我們的編碼。

在下一個(gè)概念中,我們將討論符號(hào)對(duì)數(shù)值導(dǎo)數(shù)的影響。

符號(hào)-數(shù)值導(dǎo)數(shù)

這里我們開(kāi)始脫離理論,進(jìn)入實(shí)踐領(lǐng)域。

算法

基本設(shè)置+計(jì)算節(jié)點(diǎn)的梯度

首先我們要做一些設(shè)置,包括神經(jīng)網(wǎng)絡(luò)的順序以及與網(wǎng)絡(luò)相關(guān)的節(jié)點(diǎn)的計(jì)算圖。我們把它們排列好。

每個(gè)節(jié)點(diǎn)u^{(n)} 都與一個(gè)操作f^{(i)}相關(guān)聯(lián),使得:

在?^ {(i)}是所有節(jié)點(diǎn)的集合,u^ {(n)}的父節(jié)點(diǎn)。

首先我們需要計(jì)算所有的輸入節(jié)點(diǎn),為此我們需要將所有的訓(xùn)練數(shù)據(jù)以x向量的形式輸入:

?for i = 1, ...., n_i u_i = get_u(x_i)

注意,n_i為輸入節(jié)點(diǎn)數(shù),其中輸入節(jié)點(diǎn)為:

如果這些是輸入節(jié)點(diǎn),則節(jié)點(diǎn):

是輸入節(jié)點(diǎn)之后最后一個(gè)節(jié)點(diǎn)之前的節(jié)點(diǎn)u^{(n)}。

?for i = n_i+1, ..., n A_i = { u_j = get_j(Pa(u_i)) } u_i = fi(A_i)

你會(huì)注意到,這和我們鏈?zhǔn)椒▌t計(jì)算圖的概念上的方向是相反的。這是因?yàn)檫@部分詳細(xì)說(shuō)明了正向傳播。

我們稱(chēng)這個(gè)圖為:

利用這個(gè)圖,我們可以構(gòu)造另一個(gè)圖:

G中的每個(gè)節(jié)點(diǎn)計(jì)算正向圖節(jié)點(diǎn)u^i,而B(niǎo)中的每個(gè)節(jié)點(diǎn)使用鏈?zhǔn)椒▌t計(jì)算梯度。

如果你考慮神經(jīng)網(wǎng)絡(luò)中的所有節(jié)點(diǎn)和連接它們的邊,你就能想到反向傳播所需的計(jì)算量隨著邊的數(shù)量線性增加。因?yàn)槊織l邊都代表了一條鏈規(guī)則的計(jì)算,它將一些節(jié)點(diǎn)連接到它的一個(gè)父節(jié)點(diǎn)。

附加約束+簡(jiǎn)單的反向傳播

如前所述,該算法的計(jì)算復(fù)雜度與網(wǎng)絡(luò)的邊數(shù)呈線性關(guān)系。但這是假設(shè)求每條邊的偏導(dǎo)數(shù)需要一個(gè)常數(shù)時(shí)間。

在這里,我們的目標(biāo)是建立一個(gè)具體反向傳播算法。

?Run forward propagation

這將獲得處于隨機(jī)的或非有用狀態(tài)的網(wǎng)絡(luò)的激活值。

?Initialize grad_table

在這個(gè)數(shù)據(jù)結(jié)構(gòu)中,我們將存儲(chǔ)所有我們計(jì)算的梯度。

?To get an individual entry, we use grad_table(u_i)

這將存儲(chǔ)計(jì)算值:

?grad_table[u_n] = 1

這將最后一個(gè)節(jié)點(diǎn)設(shè)置為1。

?for j = n-1 to 1 grad_table[u_j] = \\sum grad_table[u_i] du_i/du_j

理論上是這樣的:

?return grad_table

反向傳播算法只訪問(wèn)每個(gè)節(jié)點(diǎn)一次來(lái)計(jì)算偏置,這避免了不必要的重新計(jì)算子表達(dá)式的步驟。請(qǐng)記住,這是以更多內(nèi)存占用為代價(jià)的。

作者:Tojo Batsuuri

deephub翻譯組:孟翔杰

總結(jié)

以上是生活随笔為你收集整理的反向传播算法_反向传播算法:定义,概念,可视化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。