Numpy编写BP传播过程全解
?PaperWeekly 原創 ·?作者|孫裕道
學校|北京郵電大學博士生
研究方向|GAN圖像生成、情緒對抗樣本生成
引言
BP反向傳播矩陣推導圖示詳解一文中在矩陣視角下對 BP 的原理進行了詳細的介紹,神經網絡中權重的梯度由前一層前向傳播值與后一層的誤差值整合計算得到。該文中也對吳恩達的斯坦福機器學習的講義中的相關部分進行了證明。
BP 的矩陣形式的推導的好處在于它的矩陣表示形式對編程非常有指導意義,當前有很多的熱門的深度學習框架,例如 Pytorch 和 Tensorflow,像這種深度學習框架集成性很高,神經網絡中 BP 更新參數的過程幾行代碼就搞定,這對于從代碼中理解其原理造成了一定的困難。
Numpy 編寫 BP 更新參數的過程則是一個好的方式去了解其原理,代碼鏈接如下:
https://github.com/guidao20/BP_Numpy
文件并不復雜,兩個 py 文件加一個 mnist 數據集。本文會對該代碼進行詳細的介紹。
預備知識
一個 4 層的神經網絡如下圖所示,各個層的維度分別是 784,128,64,10;神經網絡的權重分別為 ,,,具體的前向計算過程如下所示。
▲ 圖1.神經網絡前向計算過程
根據 BP 反向傳播矩陣推導圖示詳解中 Section 6 的推導過程可得到各層網絡的權重梯度計算示意圖(示意圖中各字母代表的含義查閱 BP 反向傳播矩陣推導圖示詳解的 Section 6)。
▲ 圖2.神經網絡BP原理
BP 反向傳播矩陣推導圖示詳解中的 Section 8 是對吳恩達機器學習講義中的關于BP 原理部分的等價證明,所以可以將上圖 2 的示意圖重新整理如下,其中反向傳播的誤差 的計算公式在圖中藍色字體。本文的要介紹的 Numpy 代碼就按照下圖的形式進行編程。
▲ 圖3.神經網絡BP原理(吳)
代碼詳解?
本文的代碼結構非常簡單如下圖所示一共三個文件。data 文件夾下是 mnist 手寫體數字集的壓縮包 mnist.pkl.gz;mnist_loader.py 是用于加載 mnist 數據集的;BP_Numpy.py 是 BP 訓練神經網絡的程序,也是本文重點要講的程序。
由圖 4 可知程序中使用的激活函數為 Sigmoid 函數,其中 Sigmoid 函數的定義為:
Sigmoid 函數的導數定義為:
▲ 圖4.Sigmoid函數及其導數
圖 5 是類 NerualNetwork 的初始化,進而構建一個神經網絡,分別對神經網絡的尺寸(有幾層,每一層的單元數是多少),每一層的權重和偏置進行初始化。
▲?圖5.類初始化
圖 6 是神經網絡的前向計算過程,先做線性變換,然后再進行激活。以 Section 2 預備知識中圖 1 的神經網絡為例(以便更清楚的交代出各個矩陣的維度)。假如一共有四層神經網絡,各個層的單元數為 784,128,64,10,根據代碼則前向計算過程可以歸結為:
▲ 圖6.前向計算過程
圖 7 是 BP 反向傳播求梯度的過程,圖 7 中的黃色框區域是用列表存儲前計算的激活值,最后求出損失函數,這里損失函數為 。這里需要注意的是反向傳播求梯度并不是不需要前向計算值。圖 7 中的藍色框區域是計算輸出層的權重梯度,對應于圖 3 中 的計算過程:
圖 7 中的綠色框區域是從后往前以此計算各個層的權重梯度,對應于圖 3 中 和 的計算過程:
這里需要注意的是符號 表示的是矩陣相乘,符號 表示的是向量元素對應位置相乘。另外程序中有對偏置求梯度的操作,其原理跟求解權重的原理類似。
▲ 圖7. BP反向傳播
圖 8 主要是對神經網絡參數進行更新(圖中紅框所示),以上操作將各個層的權重和偏置的梯度求解出來,再利用梯度下降對各個層的權重和偏置的參數進行更新。
▲ 圖8.權重和偏置更新
設置學習率的步長為 0.1,epoch 為 1000,batch_size 為 10,則可得到如下圖程序結果,由結果可知,通過 BP 求解參數梯度,再利用梯度下降法,損失函數整體是減小的。
▲ 圖9.權重和偏置更新
更多閱讀
#投 稿?通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得或技術干貨。我們的目的只有一個,讓知識真正流動起來。
?????來稿標準:
? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?
? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志
?????投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發送?
? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結
以上是生活随笔為你收集整理的Numpy编写BP传播过程全解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电动车遗失后网上报失了,后来又找到了怎么
- 下一篇: 探月油箱多少升