上一節課講到了評價函式,了解了損失函式。損失函式有兩部分組成,資料損失和正則化損失。我們要做的是對損失函式進行優化操作。
計算梯度的方法有兩種:
數值梯度:寫起來容易,但運算慢
解析梯度:(微積分運算得到)運算快,但有時會出錯,所以要進行梯度檢查的操作。
強調,在處理程式時,我們更多的要去思考一步一步計算的計算圖,而不僅僅是乙個複雜的表示式。
引數的值結合一些函式在計算圖中會通過計算得到最終的損失函式。表示式一般都非常的簡短,但是計算圖一般都非常的巨大。但是一些複雜的神經網路結構像圖靈機和cnn都沒有辦法用表示式來表示。而且有時候像在rnn網路裡一樣,計算圖會被重複執行上百次上千次,這個時候我們是沒有辦法進行公示推導的。所以我們要轉換思想,用資料結構的方式去思考它,用一些函式將中間變數轉化成最終的損失值。
學習的重點是在計算圖中,結合輸入和梯度得到最終的選擇函式。
用乙個簡單的前向傳播的例子來說明了一下計算圖的執行方式。從左到右的前向傳播和從右到左的反向傳播。
在介紹反向傳播的時候,詳細介紹了利用求偏導來求梯度的方式,同時也說明了輸入引數的變化對於結果變化的影響。
通過計算輸出,對於中間引數的偏導和中間引數對不同輸入的偏導,就可以使用鏈式法則計算出輸入的引數對於最終結果的影響。鏈式法則裡的每乙個中間引數都會對最終結果造成或正或負的影響。
這裡舉了乙個例子,將乙個複雜的公式轉換成了一張計算圖,計算了這個圖里的所有輸入引數對於輸出的影響。因為我們知道每乙個區域性函式的導數怎麼求,所以我們最終可以利用鏈式法則計算出輸出對於某乙個輸入引數的偏導。前向傳播計算出了loss函式,然後根據loss函式針對每一層運算計算對輸入的梯度。
這裡的學生提問讓我們知道了前向和反向傳播的時間基本上是一樣的,但是反向傳播會稍慢一點。(冷知識)
講解了一下bp的分解粒度,可以將一系列的基礎運算組合成乙個函式,看作是乙個基本的處理單元,只要我們能知道這個區域性的梯度怎麼求,就可以這麼做。
這裡已經能知道了,之所以要用計算圖來思考,是因為它能幫助我直觀的理解梯度是如何在整個神經網路裡流動的。
這裡又舉了乙個例子,是max函式的梯度怎麼計算。對於最大值來說,它的區域性梯度是1,而對於較小值來說,它的區域性梯度是0。那麼max函式就相當於是乙個梯度路由,而加法運算則相當於是乙個梯度分配器。這只是乙個比較直觀的理解。
反向傳播時,當遇到同乙個引數,經過不同的路徑對輸出產生影響的時候,在計算梯度值的時候需要對他們進行相加。通過學生提問,我們知道計算圖中是絕對不會出現迴路的。
在實際執行中,怎麼在計算門的基礎上構建整個圖形,計算門之間是怎麼連線的,這些通常在物件中進行說明,而這個物件有兩部分前向傳播和反向傳播。這裡的門和我們通常說的神經網路的層有著相似之處。
接下來介紹了一些門的實現方法,**,乘法門的前向和反向執行實現。
這裡需要注意的是在前向傳播時是會儲存大量的資料的,在反向傳播的過程中會利用這些資料計算梯度。如果我們不進行反向傳播的話,其實可以刪除很多中間值。所以當我們使用嵌入式裝置進行開發的時候,在測試階段如果不需要反向傳播,我們可以修改**,使耗費的記憶體更小。
課程實現使用的是torch框架,所以這裡簡單介紹了一下torch。說明了每乙個單位都必須要具備前向傳播和反向傳播兩個功能。
神經網路前向傳播與反向傳播
神經網路 神經網路可以理解為乙個輸入x到輸出y的對映函式,即f x y,其中這個對映f就是我們所要訓練的網路引數w,我們只要訓練出來了引數w,那麼對於任何輸入x,我們就能得到乙個與之對應的輸出y。只要f不同,那麼同乙個x就會產生不同的y,我們當然是想要獲得最符合真實資料的y,那麼我們就要訓練出乙個最...
神經網路反向傳播理解
訓練神經網路的目標是 優化代價函式,使得代價函式找到乙個 全域性最小值或者區域性最小值。不管使用何種梯度下降演算法 bgd,sgd adam 都需要先算出各個引數的梯度。反向傳播的作用 就是快速算出所有引數的偏導數。求導數通常可以分為兩類,一類是直接用定義,第二類是公式法 包括鏈式法 定義法 定義法...
多層神經網路與反向傳播演算法
本篇文章是 感知機詳解 圖1 多層前饋網路的決策區域 這裡顯示的網路是用來訓練識別10種出現在 h d 例如 had hid 間的母音。這個網 絡的輸入由兩個引數f1和f2組成,它們是通過對聲音的頻譜分析得到的。網路的10個輸出對應於10個可能的母音。這個網路的 是其中有最大值的輸出。右圖畫出了學到...