[翻譯4.7 ]Gradient descent and backpropagation

PS:翻譯來源:

http://shop.oreilly.com/product/9781939902351.do

欠了5天的翻譯,今天來還債來了 ,? 這是第一篇



////////第一篇///////////


梯度下降和反向傳播

關(guān)于基本的機(jī)器學(xué)習(xí)章節(jié),我們一直沒有解釋我們?cè)谑褂玫膶W(xué)習(xí)算法的工作原理。

梯度下降是一個(gè)能夠找到函數(shù)最小值的算法。注意,我們將學(xué)習(xí)定義為通過一定量的訓(xùn)練步驟,對(duì)模型參數(shù)的改進(jìn)(improving),使得模型的loss值最小化。在這個(gè)概念里,使用梯度下降可以找到loss function(損失函數(shù))的最小值。

如果你不知道梯度下降的話,來了解一下什么是梯度下降。梯度下降是一個(gè)數(shù)學(xué)操作,通常會(huì)使用這個(gè)符號(hào)來表示:

倒三角形的希臘字母

它類似于一個(gè)導(dǎo)數(shù),但適用于輸入向量和輸出一個(gè)值的函數(shù),就像我們的損失函數(shù)一樣。梯度的輸出是一個(gè)偏導(dǎo)數(shù)的向量,輸出的向量的每個(gè)位置的值是每一個(gè)函數(shù)的輸入向量的位置的。(PS:這里大致上是說輸出的元素就是對(duì)輸出的每個(gè)元素做偏導(dǎo))



你可以把偏導(dǎo)數(shù)理解為就好像只接收一個(gè)變量的函數(shù),用常量替換所有其他變量,然后用單變量求導(dǎo)過程去求解。偏導(dǎo)數(shù)是可以測(cè)量函數(shù)的輸出相對(duì)于某一特定輸入變量的變化率。換句話說,就是如果當(dāng)輸入的變量值增加多少輸出的變量值會(huì)增加多少。

在繼續(xù)講解之前,需要提醒: 我們討論 損失函數(shù)的輸出變量是指的模型的權(quán)重而不是數(shù)據(jù)集中的特征輸入。輸入特征智能通過數(shù)據(jù)集合去修改,而不能被優(yōu)化(Those are fixed by our dataset and cannot be optimized.)我們計(jì)算的偏導(dǎo)數(shù)是關(guān)于推理模型中每個(gè)單獨(dú)權(quán)重的。

我們關(guān)心梯度,因?yàn)樗妮敵鱿蛄勘硎緭p失函數(shù)的最大增長(zhǎng)方向。你可以把它當(dāng)成一個(gè)小箭頭,這個(gè)箭頭將在你應(yīng)該移動(dòng)的每一個(gè)點(diǎn)上指出,以增加它的價(jià)值。



假設(shè)上圖中表示的loss function(損失函數(shù))。紅點(diǎn)代表你所在的當(dāng)前權(quán)重值。梯度使用箭頭表示,表示(indicating)您應(yīng)該向右側(cè)去增加損失。而且,箭頭的長(zhǎng)度代表著如果要移動(dòng)的話,大概移動(dòng)多少距離。

現(xiàn)在,如果你按照梯度相反的方向去移動(dòng),loss值也會(huì)和之前做的相反:會(huì)下降。



在這張圖中,如果我們?nèi)ハ喾吹奶荻确较颍ㄋ{(lán)色箭頭指向的方向),我們會(huì)走向loss減小的方向中。

如果我們每次朝著這個(gè)方向(PS藍(lán)色箭頭指向的方向),且再次計(jì)算梯度,然后重復(fù)著這個(gè)過程直到梯度的長(zhǎng)度成為0,我們會(huì)達(dá)到損失函數(shù)的最小值。這是我們的目標(biāo),應(yīng)該如下圖所示:




僅此而已(that is it)我們可以簡(jiǎn)單的定義梯度下降的算法:


注意,我們應(yīng)該添加n是為了放大or縮小梯度。我們把n稱作學(xué)習(xí)率。由于實(shí)際上梯度向量的長(zhǎng)度是可以衡量每個(gè)單元的損失函數(shù)(loss functgion units),卻不能衡量權(quán)重單元(weight units),所以我們有必要在公式中去添加這個(gè)變量。

學(xué)習(xí)率不是模型推斷出的值。它是一個(gè)超參數(shù)(hyperparameter),也可以是手動(dòng)配置到模型設(shè)置中。我們需要找出正確的學(xué)習(xí)率的值。如果它的值太小了,那么需要很多學(xué)習(xí)周期才能找到損失最小值。如果它太大了,算法可能會(huì)簡(jiǎn)單的跳過最小值或者是無法找到最小值,不斷的在跳過最小值。這被稱為超調(diào)(overshooting)。在我們的例子損失函數(shù)圖中,它將如下所示:



實(shí)際上,因?yàn)閾p失函數(shù)有太多的變量了所以我們無法真正的畫出來損失函數(shù)。所以要知道我們被困在超調(diào)中,我們必須看一下計(jì)算出的總損耗的時(shí)間,我們可以通過使用tf.scalar_summary對(duì)損失在Tensorboard中獲得。





PS: This is how a well behaving loss should diminish through time, indicating a good

learning rate這句話可以用在寫作上。


藍(lán)色的線是Tensorbord圖, 紅色的線代表著loss的趨勢(shì)(the tendency line of the loss.)

當(dāng)學(xué)習(xí)率overshooting(超調(diào))的時(shí)候,就會(huì)成為一下的樣子:



如果是出現(xiàn)上圖的樣子, 那么你應(yīng)該調(diào)整學(xué)習(xí)率,讓學(xué)習(xí)足夠小直到不會(huì)出現(xiàn)超調(diào)現(xiàn)象(overshoot),但又要足夠大以使其快速衰減,這樣可以使用更少的周期來實(shí)現(xiàn)更快的學(xué)習(xí)。

除了學(xué)習(xí)率,也有其他的問題會(huì)在算法上影響到梯度下降。損失函數(shù)會(huì)存在局部最優(yōu)解(The presence of local optima is in the loss function)。

回到小示例損失函數(shù)圖中,如果我們的初始權(quán)重靠近損失函數(shù)的右側(cè)“谷”,那么算法將如何工作?




算法會(huì)找到谷底之后停下來,因?yàn)樗鼤?huì)認(rèn)為這個(gè)地方是最優(yōu)值所在的地方。所有最小值的梯度值都為0。這個(gè)算法是沒法區(qū)分自己是否停留在了函數(shù)的最小值上、全局最小值,或局部最小值、在最佳值附近的地方。

在隨機(jī)初始化權(quán)重的時(shí)候,我們盡量的會(huì)避免這些問題。記住,權(quán)重的初始值是人為設(shè)置的。通過使用隨機(jī)的值,我們可以提高從全局最低點(diǎn)開始下降的機(jī)會(huì)。

我們將在后面的章節(jié)中看到,在深層網(wǎng)絡(luò)環(huán)境中本地最小化現(xiàn)象是非常頻繁的。解釋這一點(diǎn)的一個(gè)簡(jiǎn)單的方法是考慮相同的輸入如何可以將許多不同的路徑傳輸?shù)捷敵?,從而產(chǎn)生相同的結(jié)果。幸運(yùn)的是,有文獻(xiàn)顯示,所有這些最低標(biāo)準(zhǔn)在損失方面都是非常相似的,并沒有真正比全局最低。

到目前為止,我們還沒有明確地計(jì)算任何導(dǎo)數(shù)(derivatives),因?yàn)槲覀儧]有必要這樣做。Tensorflow包括的方法tf.gradients可以象征性地計(jì)算指定圖形步長(zhǎng)的梯度,并將其作為張量輸出。甚至不需要手動(dòng)調(diào)用,因?yàn)閠ensorflow也實(shí)現(xiàn)了梯度下降等其他的算法。這就是為什么我們會(huì)給出高級(jí)公式卻不要求大家去深入的了解實(shí)現(xiàn)細(xì)節(jié)和數(shù)學(xué)公式。

我們準(zhǔn)備給出反向傳播的過程。這是在計(jì)算圖中有效的計(jì)算梯度的方法。

假設(shè)(assume)有一個(gè)這樣簡(jiǎn)單的網(wǎng)絡(luò):有一個(gè)輸入和一個(gè)輸出,兩個(gè)擁有單個(gè)神經(jīng)元的隱含層。這兩個(gè)隱含層以及輸出神經(jīng)元都會(huì)使用sigmoids并會(huì)將會(huì)用交叉熵的方式去計(jì)算loss。 網(wǎng)絡(luò)的樣子如下:



將L1定義為第一個(gè)隱含層的輸出,L2是第二個(gè)隱含層的輸出,L3是最后的輸出層:



最后,網(wǎng)絡(luò)的loss將會(huì)是:


為了運(yùn)行梯度下降,我們需要計(jì)算loss的偏導(dǎo)數(shù)以及網(wǎng)絡(luò)中3個(gè)權(quán)重的表達(dá)式。我們從輸出曾的權(quán)重開始,使用鏈?zhǔn)揭?guī)則計(jì)算:



L2在本案例中只是一個(gè)常數(shù)。因?yàn)樘灰蕾嘩3。

為了簡(jiǎn)化表達(dá)式,我們可以這樣的定義:




偏導(dǎo)函數(shù)的結(jié)果表達(dá)式應(yīng)該是:



現(xiàn)在,來計(jì)算第二個(gè)隱含層的權(quán)重W2 :


最后對(duì)w1求導(dǎo)數(shù):


你應(yīng)該注意到這個(gè)模式:每個(gè)層上的導(dǎo)數(shù)是之前的層的輸出之后的層的導(dǎo)數(shù)的乘積。這就是鏈?zhǔn)椒▌t的神奇之處,也是這個(gè)算法的優(yōu)勢(shì)所在。(That’s the magic of the chain rule and what the algorithm takes

advantage of)。

我們會(huì)向前從輸入開始計(jì)算每個(gè)隱含層的輸出以及到輸出的輸入。然后我們又返回開始計(jì)算隱含層的導(dǎo)出,并將結(jié)果傳播出到下一層,這是為了通過再利用都已經(jīng)計(jì)算出的元素少做計(jì)算傳播的結(jié)果。(這里有動(dòng)態(tài)歸化的思想在里面)這就是為什么腳反向傳播。:)


///////////////////Conclusion//////////////

注意我們?nèi)绾螞]有使用S形或交叉熵衍生物的定義。我們可以在一個(gè)網(wǎng)絡(luò)中使用不同的激勵(lì)函數(shù)或者是損失函數(shù),其結(jié)果可能會(huì)是一樣的。

舉個(gè)簡(jiǎn)單的例子,對(duì)擁有成千上百權(quán)重的網(wǎng)絡(luò)計(jì)算損失率的話,使用該算法可以節(jié)省訓(xùn)練時(shí)間的數(shù)量級(jí)。進(jìn)一步說(to close),在Tensorflow中有一些不同的優(yōu)化算法,盡管它們都基于這種計(jì)算梯度的方法。哪個(gè)算法的效果更好,這取決于你你輸入數(shù)據(jù)的形狀和你要解決的問題。

Sigmoid隱含層、softmax輸出層以及基于梯度下降的反向傳播都是構(gòu)建更加復(fù)雜模型的最常見的基本模塊。我們會(huì)在下一個(gè)chapter中講到。



下一期:

Part III.Implementing Advanced Deep

Models in TensorFlow

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容