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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

《深度学习入门:基于Python的理论与实现》第四章代码原理详细解析

發布時間:2023/12/20 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《深度学习入门:基于Python的理论与实现》第四章代码原理详细解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這一章的代碼解讀的難點是:
涉及到兩個函數的求導問題。

①sigmoid函數的求導:
?yj?xj=yj(1?yj)\frac{\partial y_j}{\partial x_j}=y_j(1-y_j)?xj??yj??=yj?(1?yj?)
出處是[2]

②softmax函數的求導:
?E?zi=ai?yi\frac{\partial E}{\partial z_i}=a_i-y_i?zi??E?=ai??yi?
出處是[1]

、------------------------------------------
第四章的整個神經網絡的結構是:
輸入層:784個節點(無激活函數)
隱藏層:50個節點(激活函數:sigmoid)
輸出層:10個節點(激活函數:softmax)
下面的維度檢查中的100,是因為一個batch_size=100
、------------------------------------------
代碼變量與神經網絡結構之間的具體對應關系:
輸入x,
第一層輸入a1,輸出z1
第二層輸入a2,輸出y
、------------------------------------------
理論與神經網絡結構之間的具體對應關系是:
輸入x,
第一層輸入x1,輸出y1
第二層輸入x2,輸出y2

、------------------------------------------
According to [2]:
△w
=-ε?E?w=-\varepsilon\frac{\partial E}{\partial w}=ε?w?E? (8)

=-ε?E?wji=-\varepsilon\frac{\partial E}{\partial w_{ji}}=ε?wji??E? (6)

=-ε?E?xj?yi=-\varepsilon\frac{\partial E}{\partial x_j}·y_i=ε?xj??E??yi?
≈-εy?tbatch_num?z1.T\approx -\varepsilon \frac{y-t}{batch\_num}·z1.Tεbatch_numy?t??z1.T(代碼中的變量)
=-ε?grads[′W2′]=-\varepsilon·grads['W2']=ε?grads[W2](代碼中的變量)

變量名稱對應的理論名稱變量維度
a1a1a1x1(隱藏層輸入)x_1(隱藏層輸入)x1?()(100,50)
z1z1z1y1(隱藏層輸出)y_1(隱藏層輸出)y1?()(100,50)
a2a2a2x2(輸出層輸入)x_2(輸出層輸入)x2?()(100,10)
yyyy2(輸出層輸出)y_2(輸出層輸出)y2?()(100,10)
da1da1da1?E?x2?w21\frac{\partial E}{\partial x_2}·w_{21}?x2??E??w21?(100,50)
dz1dz1dz1?E?x2??x2?y1??y1?x1\frac{\partial E}{\partial x_2}·\frac{\partial x_2}{\partial y_1}·\frac{\partial y_1}{\partial x_1}?x2??E???y1??x2????x1??y1?? =?E?x2?w21?[y1?(1?y1)]\frac{\partial E}{\partial x_2}·w_{21}·[y_1·(1-y_1)]?x2??E??w21??[y1??(1?y1?)](100,50)
dy=y?tbatch_numdy=\frac{y-t}{batch\_num}dy=batch_numy?t??E?x2\frac{\partial E}{\partial x_2}?x2??E?(這里的x2x_2x2?是一個矢量,整體表示100條數據對各個輸出節點的誤差貢獻)(100, 10)
z1.Tz1.Tz1.Tyiy_iyi?(50, 100)
grads[′b2′]grads['b2']grads[b2]?E?x2\frac{\partial E}{\partial x_2}?x2??E?(10,)
grads[′W2′]grads['W2']grads[W2]?E?w21\frac{\partial E}{\partial w_{21}}?w21??E?(50,10)
grads[′W1′]grads['W1']grads[W1]?E?x2??x2?y1??y1?x1??x1?w10=?E?x2?w21?[y1?(1?y1)]?x\frac{\partial E}{\partial x_2}·\frac{\partial x_2}{\partial y_1}·\frac{\partial y_1}{\partial x_1}·\frac{\partial x_1}{\partial w_{10}}=\frac{\partial E}{\partial x_2}·w_{21}·[y_1·(1-y_1)]·x?x2??E???y1??x2????x1??y1????w10??x1??=?x2??E??w21??[y1??(1?y1?)]?x(784,50)
grads[′b1′]grads['b1']grads[b1]?E?x1\frac{\partial E}{\partial x_1}?x1??E?(50,)

關于上述表格中的“y?t”“y-t”y?t的出處,可以參考[1]:

這里的grads[′b2′]grads['b2']grads[b2]推導如下:
?E?b2=?E?x2?x2?b2=?E?x2?(w21?y1+b2)?b2=?E?x2\frac{\partial E}{\partial b_2}=\frac{\partial E}{\partial x_2}\frac{\partial x_2}{\partial b_2}=\frac{\partial E}{\partial x_2}\frac{\partial(w_{21}·y_1+b2)}{\partial b_2}=\frac{\partial E}{\partial x_2}?b2??E?=?x2??E??b2??x2??=?x2??E??b2??(w21??y1?+b2)?=?x2??E?

grads[′b1′]grads['b1']grads[b1]推導推導同理。
--------------------------------------------

為什么在計算grads[′b1′]grads['b1']grads[b1]grads[′b2′]grads['b2']grads[b2]時進行求和?
與后面的batch_num進行配套使用,獲取該輪batch訓練得到的bjbjbj的平均值作為最終的模型參數
--------------------------------------------

關于這里batch_num出現在dy中不太好理解,其實我們可以看到batch_num最終進入了grads[′b2′]中,所以其含義是對100條數據產生的bj的和取了一個平均,作為這輪batch訓練后的得到的偏置bjgrads['b2']中,所以其含義是對100條數據產生的b_j的和取了一個平均, 作為這輪batch訓練后的得到的偏置b_jgrads[b2]100bj?batchbj?

--------------------------------------------

注意:
softmax以及sigmoid的求導結果是不一樣的.

參考:
[1]softmax with cross-entropy loss求導(轉載+細節整理)
[2]《learning representations by back-propagating errors》

總結

以上是生活随笔為你收集整理的《深度学习入门:基于Python的理论与实现》第四章代码原理详细解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。