深度學習—反向傳播的理解


1、反向傳播

  簡單的理解,反向傳播的確就是復合函數的鏈式法則,但其在實際運算中的意義比鏈式法則要大的多。

  鏈式求導十分冗余,因為很多路徑被重復訪問了,對於權值動則數萬的深度模型中的神經網絡,這樣的冗余所導致的計算量是相當大的。

   同樣是利用鏈式法則,BP算法則機智地避開了這種冗余,它對於每一個路徑只訪問一次就能求頂點對所有下層節點的偏導值。正如反向傳播(BP)算法的名字說的那樣,BP算法是反向(自上往下)來尋找路徑的。

  

  以上圖為例,節點c接受e發送的1*2並堆放起來,節點d接受e發送的1*3並堆放起來,至此第二層完畢,求出各節點總堆放量並繼續向下一層發送。節點c向a發送2*1並對堆放起來,節點c向b發送2*1並堆放起來,節點d向b發送3*1並堆放起來,至此第三層完畢,節點a堆放起來的量為2,節點b堆放起來的量為2*1+3*1=5, 即頂點e對b的偏導數為5.
  舉個不太恰當的例子,如果把上圖中的箭頭表示欠錢的關系,即c→e表示e欠c的錢。以a, b為例,直接計算e對它們倆的偏導相當於a, b各自去討薪。a向c討薪,c說e欠我錢,你向他要。於是a又跨過c去找e。b先向c討薪,同樣又轉向e,b又向d討薪,再次轉向e。可以看到,追款之路,充滿艱辛,而且還有重復,即a, b 都從c轉向e。
2、公式推導
  純公式:https://my.oschina.net/findbill/blog/529001
      https://blog.csdn.net/u014313009/article/details/51039334
  舉例代數:https://blog.csdn.net/dare_kz/article/details/77603522

 3、反向傳播理解舉例

  一個展示反向傳播的例子。加法操作將梯度相等地分發給它的輸入。取最大操作將梯度路由給更大的輸入。乘法門拿取輸入激活數據,對它們進行交換,然后乘以梯度。

  (1)加法門單元把輸出的梯度相等地分發給它所有的輸入,這一行為與輸入值在前向傳播時的值無關。這是因為加法操作的局部梯度都是簡單的+1,所以所有輸入的梯度實際上就等於輸出的梯度,因為乘以1.0保持不變。上例中,加法門把梯度2.00不變且相等地路由給了兩個輸入。

  (2)取最大值門單元對梯度做路由。和加法門不同,取最大值門將梯度轉給其中一個輸入,這個輸入是在前向傳播中值最大的那個輸入。這是因為在取最大值門中,最高值的局部梯度是1.0,其余的是0。上例中,取最大值門將梯度2.00轉給了z變量,因為z的值比w高,於是w的梯度保持為0。

  (3)乘法門單元相對不容易解釋。它的局部梯度就是輸入值,但是是相互交換之后的,然后根據鏈式法則乘以輸出值的梯度。上例中,x的梯度是-4.00x2.00=-8.00。

  非直觀影響及其結果。注意一種比較特殊的情況,如果乘法門單元的其中一個輸入非常小,而另一個輸入非常大,那么乘法門的操作將會不是那么直觀:它將會把大的梯度分配給小的輸入,把小的梯度分配給大的輸入。在線性分類器中,權重和輸入是進行點積w^Tx_i,這說明輸入數據的大小對於權重梯度的大小有影響。例如,在計算過程中對所有輸入數據樣本x_i乘以1000,那么權重的梯度將會增大1000倍,這樣就必須降低學習率來彌補。這就是為什么數據預處理關系重大,它即使只是有微小變化,也會產生巨大影響。對於梯度在計算線路中是如何流動的有一個直觀的理解,可以幫助讀者調試網絡。

轉載自:https://zhuanlan.zhihu.com/p/21407711?refer=intelligentunit

    https://www.zhihu.com/question/27239198/answer/89853077

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM