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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解读Batch Normalization

發布時間:2024/8/23 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解读Batch Normalization 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【活動】Python創意編程活動開始啦!!!???? CSDN日報20170424 ——《技術方向的選擇》????程序員4月書訊:Angular來了!

解讀Batch Normalization

5262人閱讀 評論(1) 收藏 舉報 本文章已收錄于: 分類: 深度學習基礎(10) 作者同類文章X

    目錄(?)[+]

  • 目錄
  • 1-Motivation
  • 2-Normalization via Mini-Batch Statistics
  • 測試
  • BN before or after Activation
  • 3-Experiments
  • 目錄

      • 目錄
        • 1-Motivation
        • 2-Normalization via Mini-Batch Statistics
          • 測試
          • BN before or after Activation
        • 3-Experiments

    本次所講的內容為Batch Normalization,簡稱BN,來源于《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》,是一篇很好的paper。

    1-Motivation

    作者認為:網絡訓練過程中參數不斷改變導致后續每一層輸入的分布也發生變化,而學習的過程又要使每一層適應輸入的分布,因此我們不得不降低學習率、小心地初始化。作者將分布發生變化稱之為 internal covariate shift

    大家應該都知道,我們一般在訓練網絡的時會將輸入減去均值,還有些人甚至會對輸入做白化等操作,目的是為了加快訓練。為什么減均值、白化可以加快訓練呢,這里做一個簡單地說明:

    首先,圖像數據是高度相關的,假設其分布如下圖a所示(簡化為2維)。由于初始化的時候,我們的參數一般都是0均值的,因此開始的擬合y=Wx+b,基本過原點附近,如圖b紅色虛線。因此,網絡需要經過多次學習才能逐步達到如紫色實線的擬合,即收斂的比較慢。如果我們對輸入數據先作減均值操作,如圖c,顯然可以加快學習。更進一步的,我們對數據再進行去相關操作,使得數據更加容易區分,這樣又會加快訓練,如圖d。

    白化的方式有好幾種,常用的有PCA白化:即對數據進行PCA操作之后,在進行方差歸一化。這樣數據基本滿足0均值、單位方差、弱相關性。作者首先考慮,對每一層數據都使用白化操作,但分析認為這是不可取的。因為白化需要計算協方差矩陣、求逆等操作,計算量很大,此外,反向傳播時,白化操作不一定可導。于是,作者采用下面的Normalization方法。

    2-Normalization via Mini-Batch Statistics

    數據歸一化方法很簡單,就是要讓數據具有0均值和單位方差,如下式:

    但是作者又說如果簡單的這么干,會降低層的表達能力。比如下圖,在使用sigmoid激活函數的時候,如果把數據限制到0均值單位方差,那么相當于只使用了激活函數中近似線性的部分,這顯然會降低模型表達能力。

    為此,作者又為BN增加了2個參數,用來保持模型的表達能力。
    于是最后的輸出為:

    上述公式中用到了均值E和方差Var,需要注意的是理想情況下E和Var應該是針對整個數據集的,但顯然這是不現實的。因此,作者做了簡化,用一個Batch的均值和方差作為對整個數據集均值和方差的估計。
    整個BN的算法如下:

    求導的過程也非常簡單,有興趣地可以自己再推導一遍或者直接參見原文。

    測試

    實際測試網絡的時候,我們依然會應用下面的式子:

    特別注意: 這里的均值和方差已經不是針對某一個Batch了,而是針對整個數據集而言。因此,在訓練過程中除了正常的前向傳播和反向求導之外,我們還要記錄每一個Batch的均值和方差,以便訓練完成之后按照下式計算整體的均值和方差:

    BN before or after Activation

    作者在文章中說應該把BN放在激活函數之前,這是因為Wx+b具有更加一致和非稀疏的分布。但是也有人做實驗表明放在激活函數后面效果更好。這是實驗鏈接,里面有很多有意思的對比實驗:https://github.com/ducha-aiki/caffenet-benchmark

    3-Experiments

    作者在文章中也做了很多實驗對比,我這里就簡單說明2個。
    下圖a說明,BN可以加速訓練。圖b和c則分別展示了訓練過程中輸入數據分布的變化情況。

    下表是一個實驗結果的對比,需要注意的是在使用BN的過程中,作者發現Sigmoid激活函數比Relu效果要好。

    6
    0

    我的同類文章

    深度學習基礎(10) http://blog.csdn.net
    • ?CNN不能識別Negative圖像2017-04-10閱讀849
    • ?深度模型一些新的運行框架或者輔助庫工具等2016-11-04閱讀1399
    • ?深度學習——PReLU激活2016-05-08閱讀4060
    • ?GoogLeNet系列解讀2016-02-25閱讀13083
    • ?多尺度競爭卷積2016-01-12閱讀1248
    • ?思考深度學習的泛化能力2017-02-20閱讀617
    • ?深度學習——MSRA初始化2016-05-08閱讀3364
    • ?深度學習——Xavier初始化方法2016-05-07閱讀9004
    • ?系列解讀Dropout2016-01-25閱讀1880
    • ?mxnet學習記錄【1】2015-12-01閱讀10031

    參考知識庫

    軟件測試知識庫

    4519關注|318收錄

    算法與數據結構知識庫

    15752關注|2320收錄

    更多資料請參考: 猜你在找
    使用決策樹算法對測試數據進行分類實戰
    使用決策樹算法對測試數據進行分類實戰
    《C語言/C++學習指南》加密解密篇(安全相關算法)
    數據結構與算法在實戰項目中的應用
    C語言系列之 字符串相關算法
    深入淺出深度學習中的Batch Normalization使用
    Batch Normalization 學習
    Batch Normalization導讀
    Batch Normalization 神經網絡加速算法
    Batch Normalization導讀
    關閉 查看評論 1樓 meadl 2016-11-23 18:20發表 [回復] [引用] [舉報]
    博主 具體到一個batch,假設為20,要對每個map在激活前使用BN,我要對y=wx+b的中的y求和,然后除以20 ,這樣就是這個神經元的均值嗎?那么方差是多少了?難道把輸入的20張map看成一個數來求方差嗎?比如2*1的向量方差是2*2的呀
    * 以上用戶言論只代表其個人觀點,不代表CSDN網站的觀點或立場
    核心技術類目
    全部主題HadoopAWS移動游戲JavaAndroidiOSSwift智能硬件DockerOpenStackVPNSparkERPIE10EclipseCRMJavaScript數據庫UbuntuNFCWAPjQueryBIHTML5SpringApache.NETAPIHTMLSDKIISFedoraXMLLBSUnitySplashtopUMLcomponentsWindows MobileRailsQEMUKDECassandraCloudStackFTCcoremailOPhone CouchBase云計算iOS6Rackspace Web AppSpringSideMaemoCompuware大數據aptechPerlTornadoRubyHibernateThinkPHPHBasePureSolrAngularCloud FoundryRedisScalaDjangoBootstrap

    總結

    以上是生活随笔為你收集整理的解读Batch Normalization的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。