BN(Batch Normalization)層的詳細介紹
1.BN層的前世:LRN層( Local Response Normalization)
沒有提出BN層之前,Alexnet網路使用LRN層來處理歸一化的。
LRN(區域性響應歸一化)
- 是歸一化後的值,i是通道的位置,代表更新第幾個通道的值,x與y代表待更新畫素的位置。
- 是輸入值,是啟用函式Relu的輸出值
- k、alpha、beta、n/2 都是自定義係數,可以先不用理會有什麼用。
- N是總的通道數,不同通道累加的平方和。 累加多少個通道的畫素值呢?這個是取決於自定義係數 n/2
sqr_sum[a, b, c, d] = sum(input[a,b, c, d - depth_radius : d + depth_radius + 1] ** 2)
output = input / (bias +alpha * sqr_sum) ** beta
LRN現在用的很少了
2.BN層的引入原因
參考部落格:https://www.cnblogs.com/guoyaohua/p/8724433.html
BN的提出是為了解決“Internal Covariate Shift”問題的。
機器學習領域有個很重要的假設:IID獨立同分布假設,就是假設訓練資料和測試資料是滿足相同分佈的,這是通過訓練資料獲得的模型能夠在測試集獲得好的效果的一個基本保障。
但對於深度學習這種包含很多隱層的網路結構,在訓練過程中,因為各層引數不停在變化,所以每個隱層都會面臨covariate shift的問題,也就是在訓練過程中,隱層的輸入分佈老是變來變去,這就是所謂的“Internal Covariate Shift”,Internal指的是深層網路的隱層,是發生在網路內部的事情,而不是covariate shift問題只發生在輸入層。
3.BN層的本質
BN的基本思想其實相當直觀:因為深層神經網路在做非線性變換前的啟用輸入值(就是那個x=WU+B,U是輸入)隨著網路深度加深或者在訓練過程中,其分佈逐漸發生偏移或者變動,之所以訓練收斂慢,一般是整體分佈逐漸往非線性函式的取值區間的上下限兩端靠近(對於Sigmoid函式來說,意味著啟用輸入值WU+B是大的負值或正值),所以這導致反向傳播時低層神經網路的梯度消失,這是訓練深層神經網路收斂越來越慢的本質原因,而BN就是通過一定的規範化手段,把每層神經網路任意神經元這個輸入值的分佈強行拉回到均值為0方差為1的標準正態分佈,其實就是把越來越偏的分佈強制拉回比較標準的分佈,這樣使得啟用輸入值落在非線性函式對輸入比較敏感的區域,這樣輸入的小變化就會導致損失函式較大的變化,意思是這樣讓梯度變大,避免梯度消失問題產生,而且梯度變大意味著學習收斂速度快,能大大加快訓練速度。
相關文章
- tensorflow使用BN—Batch NormalizationBATORM
- 【深度學習筆記】Batch Normalization (BN)深度學習筆記BATORM
- 卷積神經網路CNN(2)—— BN(Batch Normalization) 原理與使用過程詳解卷積神經網路CNNBATORM
- 解毒batch normalizationBATORM
- TensorFlow實現Batch NormalizationBATORM
- 深度學習中 Batch Normalization深度學習BATORM
- javascript this詳細介紹JavaScript
- JDBC 詳細介紹JDBC
- Kafka詳細介紹Kafka
- Git詳細介紹Git
- batch normalization學習理解筆記BATORM筆記
- Http Module 的詳細介紹HTTP
- asmcmd工具的詳細介紹ASM
- Mysqldump工具的詳細介紹MySql
- Go Channel 詳細介紹Go
- Nacos 介面詳細介紹
- MQ詳細命令介紹MQ
- Recovery命令詳細介紹
- Vmstat 命令詳細介紹
- Apache (http server)的詳細介紹ApacheHTTPServer
- 神經網路基礎部件-BN層詳解神經網路
- PHP 的Closure的bind 詳細介紹PHP
- Flutter系列(一)——詳細介紹Flutter
- Nginx服務詳細介紹Nginx
- python字典詳細介紹Python
- Spring bean詳細介紹SpringBean
- Java異常詳細介紹Java
- 【SCN】Oracle SCN 詳細介紹Oracle
- SOLIDWORKS API詳細介紹SolidAPI
- Webpack 打包 Javascript 詳細介紹WebJavaScript
- mysql binlog詳細介紹MySql
- java泛型詳細介紹Java泛型
- 【工具】Sublime使用詳細介紹
- json詳細介紹(for Java)JSONJava
- rman超詳細命令介紹
- Aix 上NFS詳細介紹AINFS
- ApplicationContext 詳細介紹APPContext
- JavaScript FormData的詳細介紹及使用JavaScriptORM