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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LRN和Batch Norm

發(fā)布時(shí)間:2023/12/31 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LRN和Batch Norm 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

LRN

LRN全稱為Local Response Normalization,局部相應(yīng)歸一化層。

message LRNParameter {optional uint32 local_size = 1 [default = 5];optional float alpha = 2 [default = 1.]; optional float beta = 3 [default = 0.75];enum NormRegion {ACROSS_CHANNELS = 0; WITHIN_CHANNEL = 1; }optional NormRegion norm_region = 4 [default = ACROSS_CHANNELS];optional float k = 5 [default = 1.]; enum Engine {DEFAULT = 0; CAFFE = 1; CUDNN = 2; }optional Engine engine = 6 [default = DEFAULT]; }

NormRegion選擇通道間歸一化還是通道內(nèi)空間區(qū)域歸一化,默認(rèn)是AcrOSS_CHANNELS,通道間。

local_size表示:通道間時(shí)為求和的通道數(shù),通道內(nèi)是為求和的區(qū)間邊長,默認(rèn)為5。

alpha縮放因子,beta指數(shù)項(xiàng)。

在通道間歸一化模式中,局部區(qū)域范圍是:local_size*1*1;在通道內(nèi)歸一化模式中,局部區(qū)域范圍是:1*local_size*local_size。歸一化后的值:

實(shí)現(xiàn)代碼見:lrn_layer.cpp,也比較簡單。

Batch Normalization

ZCA白化:http://blog.csdn.net/hjimce/article/details/50864602

對輸入數(shù)據(jù)進(jìn)行預(yù)處理,減均值->zscore->白化可以逐級提升隨機(jī)初始化的權(quán)重對數(shù)據(jù)分割的有效性,還可以降低overfit的可能性。Google的這篇論文http://arxiv.org/pdf/1502.03167v3.pdf, 提出了BN層。

首先,BN不是針對x(輸入的),而是針對Wx+b的,論文的解釋是:Wx+b每維的均值本身就接近0、方差接近1,所以在Wx+b后使用Batch Normalization能得到更穩(wěn)定的結(jié)果。

文中使用了類似z-score的歸一化方式:每一維度減去自身均值,再除以自身標(biāo)準(zhǔn)差。由于使用的是隨機(jī)梯度下降法,這些均值和方差也只能在當(dāng)前迭代的batch中計(jì)算。Wx+b的均值和方差是對整張map求得的,在batch_size * channel * height * width這么大的一層中,對總共batch_size*height*width個(gè)像素點(diǎn)統(tǒng)計(jì)得到一個(gè)均值和一個(gè)標(biāo)準(zhǔn)差,共得到channel組參數(shù)

在Normalization完成后,Google的研究員仍對數(shù)值穩(wěn)定性不放心,又加入了兩個(gè)參數(shù)gamma和beta,使得:

在BP的時(shí)候,我們需要求最終的損失函數(shù)對gamma和beta兩個(gè)參數(shù)的導(dǎo)數(shù),還要求損失函數(shù)對Wx+b中的x的導(dǎo)數(shù),以便使誤差繼續(xù)向后傳播。

在訓(xùn)練的最后一個(gè)epoch時(shí),要對這一epoch所有的訓(xùn)練樣本的均值和標(biāo)準(zhǔn)差進(jìn)行統(tǒng)計(jì),這樣在一張測試圖片進(jìn)來時(shí),使用訓(xùn)練樣本中的標(biāo)準(zhǔn)差的期望和均值的期望對測試數(shù)據(jù)進(jìn)行歸一化,注意這里標(biāo)準(zhǔn)差使用的期望是其無偏估計(jì):

優(yōu)勢是:更高的學(xué)習(xí)率,更快的訓(xùn)練過程;防止過擬合,移除或使用較小的dropout;取消LRN層。

caffe的BN

參數(shù)定義:

message BatchNormParameter {// If false, accumulate global mean/variance values via a moving average. If// true, use those accumulated values instead of computing mean/variance// across the batch.optional bool use_global_stats = 1;// How much does the moving average decay each iteration?optional float moving_average_fraction = 2 [default = .999];// Small value to add to the variance estimate so that we don't divide by// zero.optional float eps = 3 [default = 1e-5]; }

use_global_stats如果是真使用保存的均值和方差,否則使用滑動(dòng)平均計(jì)算新的均值和方差。測試時(shí)為真,訓(xùn)練時(shí)為假。

moving_average_fraction滑動(dòng)平均的衰減系數(shù);eps為分母附加項(xiàng)。

均值和方差的更新

BN層共存儲(chǔ)了3個(gè)數(shù)值:均值滑動(dòng)和、方差滑動(dòng)和、滑動(dòng)系數(shù)和,計(jì)算公式如下:

設(shè)moving_average_fraction為, 計(jì)算元素的數(shù)目為,均值滑動(dòng)和為,方差滑動(dòng)和為,滑動(dòng)系數(shù)和為。

如果當(dāng)前batch的均值和方差為,,則更新后:

(無偏估計(jì))

均值和方差的使用

caffe到目前仍然沒有實(shí)現(xiàn)和論文原文保持一致的BN層,即沒有 α和β 參數(shù),因此更新公式就比較簡單了,為每一個(gè)channel施加如下公式:

但是需要注意的是,我們存儲(chǔ)的是均值和方差的滑動(dòng)和,因此還要做一些處理。

首先計(jì)算縮放因子: .如果,s=0.

處理后得:

均值:

標(biāo)準(zhǔn)差:??

caffe中使用batch_norm_layer和scale_layer兩個(gè)層可以達(dá)到google論文中的效果,示例:https://github.com/KaimingHe/deep-residual-networks/blob/master/prototxt/ResNet-50-deploy.prototxt

總結(jié)

以上是生活随笔為你收集整理的LRN和Batch Norm的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。