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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

batch normalization時的一些缺陷

深度學習自然語言處理 ? 來源:深度學習自然語言處理 ? 作者:Sahil Uppal ? 2020-11-03 17:27 ? 次閱讀

導讀

batch normalization時的一些缺陷。

Batch Normalization確實是深度學習領域的重大突破之一,也是近年來研究人員討論的熱點之一。Batch Normalization是一種被廣泛采用的技術(shù),使訓練更加快速和穩(wěn)定,已成為最有影響力的方法之一。然而,盡管它具有多種功能,但仍有一些地方阻礙了該方法的發(fā)展,正如我們將在本文中討論的那樣,這表明做歸一化的方法仍有改進的余地。

我們?yōu)槭裁匆肂atch Normalization?

在討論任何事情之前,首先,我們應該知道Batch Normalization是什么,它是如何工作的,并討論它的用例。

什么是Batch Normalization

在訓練過程中,當我們更新之前的權(quán)值時,每個中間激活層的輸出分布會在每次迭代時發(fā)生變化。這種現(xiàn)象稱為內(nèi)部協(xié)變量移位(ICS)。所以很自然的一件事,如果我想防止這種情況發(fā)生,就是修正所有的分布。簡單地說,如果我的分布變動了,我會限制住這個分布,不讓它移動,以幫助梯度優(yōu)化和防止梯度消失,這將幫助我的神經(jīng)網(wǎng)絡訓練更快。因此減少這種內(nèi)部協(xié)變量位移是推動batch normalization發(fā)展的關(guān)鍵原則。

它如何工作

Batch Normalization通過在batch上減去經(jīng)驗平均值除以經(jīng)驗標準差來對前一個輸出層的輸出進行歸一化。這將使數(shù)據(jù)看起來像高斯分布。

其中μ和*σ^2^*分別為批均值和批方差。

并且,我們學習了一個新的平均值和協(xié)方差γ和β。所以,簡而言之,你可以認為batch normalization是幫助你控制batch分布的一階和二階動量。

vgg16網(wǎng)絡的中間卷積層的特征分布輸出。(左)沒有任何歸一化,(右)應用了batch normalization

優(yōu)點

我將列舉使用batch normalization的一些好處,但是我不會詳細介紹,因為已經(jīng)有很多文章討論了這個問題。

更快的收斂。

降低初始權(quán)重的重要性。

魯棒的超參數(shù)。

需要較少的數(shù)據(jù)進行泛化。

1. 更快的收斂,2. 對超參數(shù)更魯棒

Batch Normalization的詛咒

好,讓我們回到本文的出發(fā)點,在許多情況下batch normalization開始傷害性能或根本不起作用。

在使用小batch size的時候不穩(wěn)定

如上所述,batch normalization必須計算平均值和方差,以便在batch中對之前的輸出進行歸一化。如果batch大小比較大的話,這種統(tǒng)計估計是比較準確的,而隨著batch大小的減少,估計的準確性持續(xù)減小。

ResNet-50在Batch Norm使用32、16、8、4、2張/GPU圖像時的驗證錯誤

以上是ResNet-50的驗證錯誤圖??梢酝茢啵绻鸼atch大小保持為32,它的最終驗證誤差在23左右,并且隨著batch大小的減小,誤差會繼續(xù)減小(batch大小不能為1,因為它本身就是平均值)。損失有很大的不同(大約10%)。

如果batch大小是一個問題,為什么我們不使用更大的batch?我們不能在每種情況下都使用更大的batch。在finetune的時候,我們不能使用大的batch,以免過高的梯度對模型造成傷害。在分布式訓練的時候,大的batch最終將作為一組小batch分布在各個實例中。

導致訓練時間的增加

NVIDIA和卡耐基梅隆大學進行的實驗結(jié)果表明,“盡管Batch Normalization不是計算密集型,而且收斂所需的總迭代次數(shù)也減少了。”但是每個迭代的時間顯著增加了,而且還隨著batch大小的增加而進一步增加。

ResNet-50 在ImageNet上使用 Titan X Pascal

你可以看到,batch normalization消耗了總訓練時間的1/4。原因是batch normalization需要通過輸入數(shù)據(jù)進行兩次迭代,一次用于計算batch統(tǒng)計信息,另一次用于歸一化輸出。

訓練和推理時不一樣的結(jié)果

例如,在真實世界中做“物體檢測”。在訓練一個物體檢測器時,我們通常使用大batch(YOLOv4和Faster-RCNN都是在默認batch大小= 64的情況下訓練的)。但在投入生產(chǎn)后,這些模型的工作并不像訓練時那么好。這是因為它們接受的是大batch的訓練,而在實時情況下,它們的batch大小等于1,因為它必須一幀幀處理??紤]到這個限制,一些實現(xiàn)傾向于基于訓練集上使用預先計算的平均值和方差。另一種可能是基于你的測試集分布計算平均值和方差值。

對于在線學習不好

與batch學習相比,在線學習是一種學習技術(shù),在這種技術(shù)中,系統(tǒng)通過依次向其提供數(shù)據(jù)實例來逐步接受訓練,可以是單獨的,也可以是通過稱為mini-batch的小組進行。每個學習步驟都是快速和便宜的,所以系統(tǒng)可以在新的數(shù)據(jù)到達時實時學習。

典型的在線學習pipeline

由于它依賴于外部數(shù)據(jù)源,數(shù)據(jù)可能單獨或批量到達。由于每次迭代中batch大小的變化,對輸入數(shù)據(jù)的尺度和偏移的泛化能力不好,最終影響了性能。

對于循環(huán)神經(jīng)網(wǎng)絡不好

雖然batch normalization可以顯著提高卷積神經(jīng)網(wǎng)絡的訓練和泛化速度,但它們很難應用于遞歸結(jié)構(gòu)。batch normalization可以應用于RNN堆棧之間,其中歸一化是“垂直”應用的,即每個RNN的輸出。但是它不能“水平地”應用,例如在時間步之間,因為它會因為重復的重新縮放而產(chǎn)生爆炸性的梯度而傷害到訓練。

[^注]: 一些研究實驗表明,batch normalization使得神經(jīng)網(wǎng)絡容易出現(xiàn)對抗漏洞,但我們沒有放入這一點,因為缺乏研究和證據(jù)。

可替換的方法

這就是使用batch normalization的一些缺點。在batch normalization無法很好工作的情況下,有幾種替代方法。

Layer Normalization

Instance Normalization

Group Normalization (+ weight standardization)

Synchronous Batch Normalization

總結(jié)

所以,看起來訓練深度神經(jīng)網(wǎng)絡很簡單,但我不認為它很容易。從這個意義上說,我可以選擇的架構(gòu)很少,每個模型都有固定的學習速度,固定的優(yōu)化器和固定的技巧。這些技巧是通過自然選擇選擇的,就像有人想出了一些技巧,人們引入之后如果有效,就會保留,如果無效,人們最終會忘記,并沒有人再去使用它。除此之外,batch normalization是深度學習發(fā)展中的一個里程碑技術(shù)。然而,正如前面所討論的,沿著batch 維度進行歸一化引入了一些問題,這表明歸一化技術(shù)仍有改進的空間。

責任編輯:xj

原文標題:【重點】Batch Normalization的詛咒

文章出處:【微信公眾號:深度學習自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

    關(guān)注

    8

    文章

    6715

    瀏覽量

    88316
  • Batch
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    7136
  • 深度學習
    +關(guān)注

    關(guān)注

    73

    文章

    5422

    瀏覽量

    120593

原文標題:【重點】Batch Normalization的詛咒

文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    【大規(guī)模語言模型:從理論到實踐】- 每日進步點點

    據(jù)中微小變化的敏感度,從而提高模型的泛化能力。 二、常見的歸化方法 Batch Normalization(BatchNorm) 原理:在batch數(shù)據(jù)中對數(shù)據(jù)的
    發(fā)表于 05-31 19:54

    一些有關(guān)通信電路的資料?

    有關(guān)嵌入式之間DSP、ARM、FPGA三者之間和這三款芯片和外部電路之間通信的一些資料,比如說芯片之間的并行通信和芯片和外部電路之間的串行通信,MODBUS、DP、CAN等,一些一些常用的通信協(xié)議的
    發(fā)表于 03-03 18:53

    基于深度學習的芯片缺陷檢測梳理分析

    雖然表面缺陷檢測技術(shù)已經(jīng)不斷從學術(shù)研究走向成熟的工業(yè)應用,但是依然有一些需要解決的問題?;谝陨戏治隹梢园l(fā)現(xiàn),由于芯片表面缺陷的獨特性質(zhì),通用目標檢測算法不適合直接應用于芯片表面缺陷
    發(fā)表于 02-25 14:30 ?959次閱讀
    基于深度學習的芯片<b class='flag-5'>缺陷</b>檢測梳理分析

    對于大模型RAG技術(shù)的一些思考

    大模型或者句向量在訓練時,使用的語料都是較為通用的語料。這導致了這些模型,對于垂直領域的知識識別是有缺陷的。它們沒有辦法理解企業(yè)內(nèi)部的一些專用術(shù)語,縮寫所表示的具體含義。這樣極大地影響了生成向量的精準度,以及大模型輸出的效果。
    的頭像 發(fā)表于 12-07 09:41 ?987次閱讀
    對于大模型RAG技術(shù)的<b class='flag-5'>一些</b>思考

    提高嵌入式代碼質(zhì)量的一些方法

    的事情搞復雜,我希望這些文字能給迷惑中的人們指出一些正確的方向,讓他們少走一些彎路,基本做到一分耕耘一分收獲。
    的頭像 發(fā)表于 11-30 09:15 ?349次閱讀

    我們?yōu)槭裁葱枰私?b class='flag-5'>一些先進封裝?

    我們?yōu)槭裁葱枰私?b class='flag-5'>一些先進封裝?
    的頭像 發(fā)表于 11-23 16:32 ?466次閱讀
    我們?yōu)槭裁葱枰私?b class='flag-5'>一些</b>先進封裝?

    西門子伺服驅(qū)動器維修的一些基本知識

    西門子伺服驅(qū)動器維修的一些基本知識
    的頭像 發(fā)表于 11-23 10:55 ?1476次閱讀

    分享一些SystemVerilog的coding guideline

    本文分享一些SystemVerilog的coding guideline。
    的頭像 發(fā)表于 11-22 09:17 ?580次閱讀
    分享<b class='flag-5'>一些</b>SystemVerilog的coding  guideline

    PCB抄板的一些方法

    拆掉所有器多層板抄板件,并且將PAD孔里的錫去掉。用酒精將PCB清洗干凈,然后放入掃描儀內(nèi),掃描儀掃描的時候需要稍調(diào)高一些掃描的像素, 以便得到較清晰的圖像。
    的頭像 發(fā)表于 11-15 17:04 ?770次閱讀
    PCB抄板的<b class='flag-5'>一些</b>方法

    STM32F10x中一些專業(yè)術(shù)語解釋

    STM32F10x中一些專業(yè)術(shù)語解釋
    的頭像 發(fā)表于 11-01 16:59 ?417次閱讀

    針對RF PCBA設計的一些建議

    射頻(RF)PCBA設計涉及系列復雜的考慮因素,包括天線設計、濾波器設計以及傳輸線(RF Trace)的優(yōu)化。這些因素對于無線通信和射頻應用的性能至關(guān)重要。以下是針對RF PCBA設計的一些建議。
    的頭像 發(fā)表于 10-30 10:19 ?370次閱讀

    單片機C代碼嵌套匯編的一些方法

    單片機C代碼嵌套匯編的一些方法
    的頭像 發(fā)表于 10-18 16:39 ?423次閱讀
    單片機C代碼嵌套匯編的<b class='flag-5'>一些</b>方法

    單片機“低耦合”的一些方法

    單片機“低耦合”的一些方法
    的頭像 發(fā)表于 10-17 18:30 ?416次閱讀

    gvim中常用的一些指令介紹

    在 Vim 編輯器中,有一些常用的指令可以幫助我們更高效地編輯文本。以下是一些在 gvim 中常用的指令
    的頭像 發(fā)表于 10-10 15:47 ?1660次閱讀

    nmcli命令的一些常用選項和用法

    以下是nmcli命令的一些常用選項和用法: connection show -- 顯示所有網(wǎng)絡連接的詳細信息。 connection up --啟動網(wǎng)絡連接。 connection down -- 停止網(wǎng)絡連接。
    發(fā)表于 10-08 11:15 ?917次閱讀
    nmcli命令的<b class='flag-5'>一些</b>常用選項和用法