網站首頁 編程語言 正文
BP算法是適用于多層神經網絡的一種算法,它是建立在梯度下降法的基礎上的。本文著重推導怎樣利用梯度下降法來minimise Loss Function。
給出多層神經網絡的示意圖:
1.定義Loss Function
每一個輸出都對應一個損失函數L,將所有L加起來就是total loss。
那么每一個L該如何定義呢?這里還是采用了交叉熵,如下所示:
最終Total Loss的表達式如下:
2.Gradient Descent
L對應了一個參數,即Network parameters θ(w1,w2…b1,b2…),那么Gradient Descent就是求出參數 θ?來minimise Loss Function,即:
梯度下降的具體步驟為:
3.求偏微分
從上圖可以看出,這里難點主要是求偏微分,由于L是所有損失之和,因此我們只需要對其中一個損失求偏微分,最后再求和即可。
先抽取一個簡單的神經元來解釋:
因為我們并不知道后面到底有多少層,也不知道情況到底有多復雜,我們不妨先取一種最簡單的情況,如下所示:
4.反向傳播
l對兩個z的偏導我們假設是已知的,并且在這里是作為輸入,三角形結構可以理解為一個乘法運算電路,其放大系數為 σ′(z)。但是在實際情況中,l對兩個z的偏導是未知的。假設神經網絡最終的結構就是如上圖所示,那么我們的問題已經解決了:
其中:
但是假如該神經元不是最后一層,我們又該如何呢?比如又多了一層,如下所示:
原理跟上面類似,如下所示:
那假設我們再加一層呢?再加兩層呢?再加三層呢?。。。,情況還是一樣的,還是先求l對最后一層z的導數,乘以權重相加后最后再乘上 σ′(z′′,z′′′,...)即可。
最后給一個實例:
它的反向傳播圖長這樣:
我們不難發現,這種計算方式很清楚明了地體現了“反向傳播”四個字。好了,目標達成!!
5.總結
原文鏈接:https://blog.csdn.net/Cyril_KI/article/details/107030538
相關推薦
- 2022-07-04 python數據分析matplotlib的基礎繪圖使用_python
- 2022-08-22 Android中關于Binder常見面試問題小結_Android
- 2022-05-03 ASP.NET?Core基于滑動窗口實現限流控制_實用技巧
- 2022-08-07 gRPC超時攔截器實現示例_Golang
- 2021-12-14 go調用shell命令兩種方式實現(有無返回值)_Golang
- 2023-01-18 RabbitMq如何做到消息的可靠性投遞_Golang
- 2021-12-13 Gin?框架快速創建靜態文件下載Web服務_Golang
- 2022-07-09 C語言堆與二叉樹的順序結構與實現_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支