0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

BN算法和過程

gVTR_Unf ? 來源: 機(jī)器學(xué)習(xí)煉丹術(shù) ? 作者:機(jī)器學(xué)習(xí)煉丹術(shù) ? 2020-09-07 16:35 ? 次閱讀

1 BN的優(yōu)點(diǎn)

這里簡單的介紹一下BN,在之前的文章中已經(jīng)詳細(xì)的介紹了BN算法和過程。

BN于2015年由 Google 提出,Google在ICML論文中描述的非常清晰,即在每次SGD時,通過mini-batch來對相應(yīng)的activation做規(guī)范化操作,使得結(jié)果(輸出信號各個維度)的均值為0,方差為1。最后的“scale and shift”操作則是為了訓(xùn)練所需而“刻意”加入的BN能夠有可能還原最初的輸入,從而保證數(shù)據(jù)中有用信息的留存。

【BN的好處】

BN使得網(wǎng)絡(luò)中每層輸入數(shù)據(jù)的分布相對穩(wěn)定,加速模型學(xué)習(xí)速度;

BN使得模型對網(wǎng)絡(luò)中的參數(shù)不那么敏感,簡化調(diào)參過程,使得網(wǎng)絡(luò)學(xué)習(xí)更加穩(wěn)定;

BN允許網(wǎng)絡(luò)使用飽和性激活函數(shù)(例如sigmoid,tanh等),緩解梯度消失問題;

BN具有一定的正則化效果。

2 BN的缺點(diǎn)

2.1 受限于Batch size

BN 沿著 batch 維度進(jìn)行歸一化,其受限于 Batch Size,當(dāng) Batch Size 很小時,BN 會得到不準(zhǔn)確的統(tǒng)計(jì)估計(jì),會導(dǎo)致模型誤差明顯增加

【一般每塊 GPU 上 Batch Size =32 最合適?!?/p>

但對于目標(biāo)檢測,語義分割,視頻場景等,輸入圖像尺寸比較大,而限于GPU顯卡的顯存限制,導(dǎo)致無法設(shè)置較大的 Batch Size,如 經(jīng)典的Faster-RCNN、Mask R-CNN 網(wǎng)絡(luò)中,由于圖像的分辨率較大,Batch Size 只能是 1 或 2.

2.2 訓(xùn)練集與測試集的分布

BN處理訓(xùn)練集的時候,采用的均值和方差是整個訓(xùn)練集的計(jì)算出來的均值和方差(這一部分沒有看懂的話,可能需要去看一下BN算法的詳解)

所以測試和訓(xùn)練的數(shù)據(jù)分布如果存在差異,那么就會導(dǎo)致訓(xùn)練和測試之間存在不一致現(xiàn)象(Inconsistency)。

3 Group Normalzation

Group Normalization(GN)是由2018年3月份何愷明團(tuán)隊(duì)提出,GN優(yōu)化了BN在比較小的mini-batch情況下表現(xiàn)不太好的劣勢。

Group Normalization(GN) 則是提出的一種 BN 的替代方法,其是首先將 Channels 劃分為多個 groups,再計(jì)算每個 group 內(nèi)的均值和方法,以進(jìn)行歸一化。GB的計(jì)算與Batch Size無關(guān),因此對于高精度圖片小BatchSize的情況也是非常穩(wěn)定的,

下圖是比較BN和GN在Batch Size越來越小的變化中,模型錯誤率變化的對比圖:

因此在實(shí)驗(yàn)的時候,可以在嘗試使用GN來代替BN哦~

其實(shí)不難發(fā)現(xiàn),GN和LN是存在一定的關(guān)系的。

上圖中有四種Normalization的方法。就先從最簡單的Instance Normalization開始分析:

IN:僅僅對每一個圖片的每一個通道最歸一化。也就是說,對【H,W】維度做歸一化。假設(shè)一個特征圖有10個通道,那么就會得到10個均值和10個方差;要是一個batch有5個樣本,每個樣本有10個通道,那么IN總共會計(jì)算出50個均值方差;

LN:對一個特征圖的所有通道做歸一化。5個10通道的特征圖,LN會給出5個均值方差;

GN:這個是介于LN和IN之間的一種方法。假設(shè)Group分成2個,那么10個通道就會被分成5和5兩組。然后5個10通道特征圖會計(jì)算出10個均值方差。

BN:這個就是對Batch維度進(jìn)行計(jì)算。所以假設(shè)5個100通道的特征圖的話,就會計(jì)算出100個均值方差。5個batch中每一個通道就會計(jì)算出來一個均值方差。

在GN的論文中,給出了GN推薦的group Number:

第一個表格展示GN的group Number不斷減小,退化成LN的過程。其實(shí),分組32個group效果最好;

第二個表格展示GN的每一組的channel數(shù)目不斷減小,退化成IN的過程。每一組16個channel的效果最好,我個人在項(xiàng)目中也會有優(yōu)先嘗試16個通道為一組的這種參數(shù)設(shè)置。

4 PyTorch實(shí)現(xiàn)GN

importnumpyasnp importtorch importtorch.nnasnn classGroupNorm(nn.Module): def__init__(self,num_features,num_groups=32,eps=1e-5): super(GroupNorm,self).__init__() self.weight=nn.Parameter(torch.ones(1,num_features,1,1)) self.bias=nn.Parameter(torch.zeros(1,num_features,1,1)) self.num_groups=num_groups self.eps=eps defforward(self,x): N,C,H,W=x.size() G=self.num_groups assertC%G==0 x=x.view(N,G,-1) mean=x.mean(-1,keepdim=True) var=x.var(-1,keepdim=True) x=(x-mean)/(var+self.eps).sqrt() x=x.view(N,C,H,W)

當(dāng)然,你要是想問PyTorch是否已經(jīng)集成了GN?那必然的。下面的代碼比較了PyTorch集成的GN和我們手算的GN的結(jié)果。

importtorch importtorch.nnasnn x=torch.randn([2,10,3,3])+1 #Torch集成的方法 m=torch.nn.GroupNorm(num_channels=10,num_groups=2) #先計(jì)算前面五個通道的均值 firstDimenMean=torch.Tensor.mean(x[0,0:5]) #先計(jì)算前面五個通道的方差 firstDimenVar=torch.Tensor.var(x[0,0:5],False) #減去均值乘方差 y2=((x[0][0][0][1]-firstDimenMean)/(torch.pow(firstDimenVar+m.eps,0.5)))*m.weight[0]+m.bias[0] print(y2) y1=m(x) print(m.weight) print(m.bias) print(y1[0,0,0,1])

輸出結(jié)果:

tensor(0.4595,grad_fn=) Parametercontaining: tensor([1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],requires_grad=True) Parametercontaining: tensor([0.,0.,0.,0.,0.,0.,0.,0.,0.,0.],requires_grad=True) tensor(0.4595,grad_fn=)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Google
    +關(guān)注

    關(guān)注

    5

    文章

    1752

    瀏覽量

    57333
  • 圖像
    +關(guān)注

    關(guān)注

    2

    文章

    1078

    瀏覽量

    40359
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    795

    瀏覽量

    13088

原文標(biāo)題:小白學(xué)圖像 | Group Normalization詳解+PyTorch代碼

文章出處:【微信號:Unfinished_coder,微信公眾號:機(jī)器視覺CV】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    AIGC算法解析及其發(fā)展趨勢

    、AIGC算法解析 核心基礎(chǔ) 人工智能算法 :AIGC技術(shù)的基礎(chǔ)和靈魂,如深度學(xué)習(xí)、機(jī)器學(xué)習(xí)等算法,使機(jī)器能夠模擬人類的思考和行為過程,從而自主地完成各種任務(wù)。這些
    的頭像 發(fā)表于 10-25 15:35 ?144次閱讀

    MHMF042L43N-MINAS A6BN 系列 標(biāo)準(zhǔn)規(guī)格書 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF042L43N-MINAS A6BN 系列 標(biāo)準(zhǔn)規(guī)格書相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有MHMF042L43N-MINAS A6BN
    發(fā)表于 10-16 19:13
    MHMF042L43N-MINAS A6<b class='flag-5'>BN</b> 系列 標(biāo)準(zhǔn)規(guī)格書 松下

    MHMF042L33N-MINAS A6BN 系列 標(biāo)準(zhǔn)規(guī)格書 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF042L33N-MINAS A6BN 系列 標(biāo)準(zhǔn)規(guī)格書相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有MHMF042L33N-MINAS A6BN
    發(fā)表于 10-15 19:16
    MHMF042L33N-MINAS A6<b class='flag-5'>BN</b> 系列 標(biāo)準(zhǔn)規(guī)格書 松下

    MHMF041L41N-MINAS A6BN 系列 標(biāo)準(zhǔn)規(guī)格書 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF041L41N-MINAS A6BN 系列 標(biāo)準(zhǔn)規(guī)格書相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有MHMF041L41N-MINAS A6BN
    發(fā)表于 09-20 19:08
    MHMF041L41N-MINAS A6<b class='flag-5'>BN</b> 系列 標(biāo)準(zhǔn)規(guī)格書 松下

    MHMF022L74N-MINAS A6BN 系列 標(biāo)準(zhǔn)規(guī)格書 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF022L74N-MINAS A6BN 系列 標(biāo)準(zhǔn)規(guī)格書相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有MHMF022L74N-MINAS A6BN
    發(fā)表于 08-23 19:06
    MHMF022L74N-MINAS A6<b class='flag-5'>BN</b> 系列 標(biāo)準(zhǔn)規(guī)格書 松下

    充電也要算法?儲能充電芯片中的算法處理器

    電子發(fā)燒友網(wǎng)報(bào)道(文/黃山明)充電算法處理器是一種專門設(shè)計(jì)用于執(zhí)行充電算法的微處理器或ASIC,這些算法可以優(yōu)化電池的充電過程,提高充電效率,延長電池壽命,并確保充電安全。這種處理器通
    的頭像 發(fā)表于 07-30 00:07 ?3494次閱讀

    MHMF021L44N-MINAS A6BN 系列 標(biāo)準(zhǔn)規(guī)格書 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF021L44N-MINAS A6BN 系列 標(biāo)準(zhǔn)規(guī)格書相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有MHMF021L44N-MINAS A6BN
    發(fā)表于 07-29 19:20
    MHMF021L44N-MINAS A6<b class='flag-5'>BN</b> 系列 標(biāo)準(zhǔn)規(guī)格書 松下

    信號采樣的算法原理是什么

    信號采樣是一種將連續(xù)信號轉(zhuǎn)換為離散信號的過程,它是數(shù)字信號處理的基礎(chǔ)。本文將詳細(xì)介紹信號采樣的算法原理,包括采樣過程、采樣定理、采樣方法、采樣率、量化誤差、抗混疊濾波器、插值技術(shù)等方面的內(nèi)容。 采樣
    的頭像 發(fā)表于 07-15 14:20 ?425次閱讀

    bp神經(jīng)網(wǎng)絡(luò)算法過程包括

    算法過程,包括網(wǎng)絡(luò)結(jié)構(gòu)、激活函數(shù)、訓(xùn)練過程、反向傳播算法、權(quán)重更新策略等。 網(wǎng)絡(luò)結(jié)構(gòu) BP神經(jīng)網(wǎng)絡(luò)由輸入層、隱藏層和輸出層組成,每層包含若干神經(jīng)元。輸入層的神經(jīng)元數(shù)量與問題的特征維度
    的頭像 發(fā)表于 07-04 09:45 ?292次閱讀

    神經(jīng)網(wǎng)絡(luò)反向傳播算法的推導(dǎo)過程

    反向傳播算法的推導(dǎo)過程,包括前向傳播、損失函數(shù)、梯度計(jì)算和權(quán)重更新等步驟。 前向傳播 前向傳播是神經(jīng)網(wǎng)絡(luò)中信息從輸入層到輸出層的傳遞過程。在多層前饋神經(jīng)網(wǎng)絡(luò)中,每個神經(jīng)元都與前一層的所有神經(jīng)元相連,并通過激活函數(shù)進(jìn)行非線性變換。
    的頭像 發(fā)表于 07-03 11:13 ?368次閱讀

    深度學(xué)習(xí)模型訓(xùn)練過程詳解

    深度學(xué)習(xí)模型訓(xùn)練是一個復(fù)雜且關(guān)鍵的過程,它涉及大量的數(shù)據(jù)、計(jì)算資源和精心設(shè)計(jì)的算法。訓(xùn)練一個深度學(xué)習(xí)模型,本質(zhì)上是通過優(yōu)化算法調(diào)整模型參數(shù),使模型能夠更好地?cái)M合數(shù)據(jù),提高預(yù)測或分類的準(zhǔn)確性。本文將
    的頭像 發(fā)表于 07-01 16:13 ?827次閱讀

    如何對MD5加密算法優(yōu)化?

    有人針對程序安全啟動過程,進(jìn)行MD5算法的優(yōu)化嘛。目前采用標(biāo)準(zhǔn)算法,時間稍長,如果有人做過優(yōu)化的話,可以分享一下,謝謝。
    發(fā)表于 02-18 08:20

    fpga布局布線算法加速

    現(xiàn)代電子設(shè)備中,針對復(fù)雜的數(shù)字電路,F(xiàn)PGA(Field-Programmable Gate Array)是一種非常優(yōu)秀的可編程邏輯器件。在FPGA的設(shè)計(jì)過程中,布局布線算法是關(guān)鍵步驟之一,其主要
    的頭像 發(fā)表于 12-20 09:55 ?690次閱讀

    21489可以在啟動加載程序過程中將SPIFLASH中的程序按照一定的解密算法解密后,加載到內(nèi)部RAM運(yùn)行嗎?

    由于21489無內(nèi)部ROM,程序都是放到SPIFLASH上的,這樣做好的程序很容易將SPIFLASH中的程序讀出來。21489可不以做到,在啟動加載程序過程中,將SPIFLASH中的程序按照一定
    發(fā)表于 11-30 07:47

    理解Mahony濾波算法的實(shí)現(xiàn)過程

    ,進(jìn)行9軸姿態(tài)解算時,我深深地感受到對四元數(shù)與姿態(tài)陣之間關(guān)系的理解是非常重要的。在此之前,我檢索了網(wǎng)絡(luò)文章,并記錄了《MEMS_慣性傳感器09 - Mahony姿態(tài)解算算法詳解》、《MEMS_慣性傳感器
    的頭像 發(fā)表于 11-13 10:55 ?1644次閱讀
    理解Mahony濾波<b class='flag-5'>算法</b>的實(shí)現(xiàn)<b class='flag-5'>過程</b>