【深度學(xué)習(xí)】嘿馬深度學(xué)習(xí)筆記第9篇:卷積神經(jīng)網(wǎng)絡(luò),2.4 BN與神經(jīng)網(wǎng)絡(luò)調(diào)優(yōu)【附代碼文檔】

??????教程全知識點簡介:1.深度學(xué)習(xí)概述包括深度學(xué)習(xí)與機器學(xué)習(xí)區(qū)別、深度學(xué)習(xí)應(yīng)用場景、深度學(xué)習(xí)框架介紹、項目演示、開發(fā)環(huán)境搭建(pycharm安裝)。2. TensorFlow基礎(chǔ)涵蓋TF數(shù)據(jù)流圖、TensorFlow實現(xiàn)加法運算、圖與TensorBoard(圖結(jié)構(gòu)、圖相關(guān)操作、默認(rèn)圖、創(chuàng)建圖、OP)、張量(張量概念、張量的階、張量數(shù)學(xué)運算)、變量OP(創(chuàng)建變量)、增加其他功能(命名空間、模型保存與加載、命令行參數(shù)使用)、邏輯回歸案例。3. 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)包括playground使用、多個神經(jīng)元效果演示、深層神經(jīng)網(wǎng)絡(luò)。4. 神經(jīng)網(wǎng)絡(luò)與tf.keras。5. 梯度下降算法改進涵蓋指數(shù)加權(quán)平均、動量梯度下降法、RMSProp算法、Adam算法、TensorFlow Adam算法API、學(xué)習(xí)率衰減、標(biāo)準(zhǔn)化輸入、神經(jīng)網(wǎng)絡(luò)調(diào)優(yōu)、批標(biāo)準(zhǔn)化。6. 卷積神經(jīng)網(wǎng)絡(luò)包括CNN原理、CIFAR類別分類(API使用、步驟分析代碼實現(xiàn)縮減版LeNet)、卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)特征可視化。7. 經(jīng)典分類網(wǎng)絡(luò)結(jié)構(gòu)涵蓋LeNet解析、AlexNet、卷積網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化、Inception結(jié)構(gòu)、pre_trained模型VGG預(yù)測(VGG模型使用、步驟代碼)。8. CNN網(wǎng)絡(luò)實戰(zhàn)技巧。9. 遷移學(xué)習(xí)案例包括基于VGG的五種圖片類別識別遷移學(xué)習(xí)(數(shù)據(jù)集遷移需求、思路步驟、訓(xùn)練時讀取本地圖片類別、特征圖平均值輸出替代全連接層)。10. 目標(biāo)檢測包括目標(biāo)檢測任務(wù)描述、目標(biāo)定位實現(xiàn)思路、產(chǎn)品物體檢測項目介紹、R-CNN(Overfeat模型、SPPNet)、Faster R-CNN(RPN原理)、YOLO(單元格grid cell、非最大抑制NMS、訓(xùn)練)、SSD。11. 產(chǎn)品檢測數(shù)據(jù)集訓(xùn)練涵蓋標(biāo)注數(shù)據(jù)讀取存儲(xml讀取本地文件存儲pkl、解析結(jié)構(gòu)、one_hot編碼函數(shù))、訓(xùn)練(案例訓(xùn)練結(jié)果、多GPU訓(xùn)練代碼修改)、本地預(yù)測測試(預(yù)測代碼)、模型導(dǎo)出(keras模型TensorFlow導(dǎo)出)。12. 模型部署包括Web與模型服務(wù)對接邏輯、Docker部署環(huán)境、TF Serving與Web開啟服務(wù)(安裝Tensorflow Serving、commodity模型服務(wù)運行)、TensorFlow Client對接模型服務(wù)、Web Server開啟。


??????????本站這篇博客:???http://www.itdecent.cn/p/973f527eb9ae ???中查看

??????????本站這篇博客:???http://www.itdecent.cn/p/c8a3900bd3f3 ???中查看

??????????本站這篇博客:???http://www.itdecent.cn/p/e3af9a39ce83 ???中查看

? 本教程項目亮點

?? 知識體系完整:覆蓋從基礎(chǔ)原理、核心方法到高階應(yīng)用的全流程內(nèi)容
?? 全技術(shù)鏈覆蓋:完整前后端技術(shù)棧,涵蓋開發(fā)必備技能
?? 從零到實戰(zhàn):適合 0 基礎(chǔ)入門到提升,循序漸進掌握核心能力
?? 豐富文檔與代碼示例:涵蓋多種場景,可運行、可復(fù)用
?? 工作與學(xué)習(xí)雙參考:不僅適合系統(tǒng)化學(xué)習(xí),更可作為日常開發(fā)中的查閱手冊
?? 模塊化知識結(jié)構(gòu):按知識點分章節(jié),便于快速定位和復(fù)習(xí)
?? 長期可用的技術(shù)積累:不止一次學(xué)習(xí),而是能伴隨工作與項目長期參考


??????全教程總章節(jié)


??????本篇主要內(nèi)容

卷積神經(jīng)網(wǎng)絡(luò)

2.4 BN與神經(jīng)網(wǎng)絡(luò)調(diào)優(yōu)

學(xué)習(xí)目標(biāo)

  • 目標(biāo)

    • 知道常用的一些神經(jīng)網(wǎng)絡(luò)超參數(shù)
    • 知道BN層的意義以及數(shù)學(xué)原理
  • 應(yīng)用

2.4.1 神經(jīng)網(wǎng)絡(luò)調(diào)優(yōu)

經(jīng)常會涉及到參數(shù)的調(diào)優(yōu),也稱之為超參數(shù)調(diào)優(yōu)。目前 從第二部分中講過的超參數(shù)有

  • 算法層面:

    • 學(xué)習(xí)率<span>α\alphaα</span>

    • <span>β1,β2,?\beta1,\beta2, \epsilonβ1,β2,?</span><span>10?810^{-8}10?8</span>

    • <span>λ\lambdaλ</span>

  • 網(wǎng)絡(luò)層面:

    • hidden units:各隱藏層神經(jīng)元個數(shù)
    • layers:神經(jīng)網(wǎng)絡(luò)層數(shù)

2.4.1.1 調(diào)參技巧

對于調(diào)參,通常采用跟機器學(xué)習(xí)中介紹的網(wǎng)格搜索一致,讓所有參數(shù)的可能組合在一起,得到N組結(jié)果。然后去測試每一組的效果去選擇。

假設(shè) 現(xiàn)在有兩個參數(shù)

<span>α\alphaα</span><span>β\betaβ</span>

這樣會有9種組合,[0.1, 0.8], [0.1, 0.88], [0.1, 0.9]…….

  • 合理的參數(shù)設(shè)置

    • 學(xué)習(xí)率<span>α\alphaα</span>
    • 算法參數(shù)<span>β\betaβ</span>

注:而指數(shù)移動平均值參數(shù):β 從 0.9 (相當(dāng)于近10天的影響)增加到 0.9005 對結(jié)果(1/(1-β))幾乎沒有影響,而 β 從 0.999 到 0.9995 對結(jié)果的影響會較大,因為是指數(shù)級增加。通過介紹過的式子理解<span>S100=0.1Y100+0.1?0.9Y99+0.1?(0.9)2Y98+...S_{100} = 0.1Y_{100} + 0.1 * 0.9Y_{99} + 0.1 * {(0.9)}^2Y_{98} + ...S100=0.1Y100+0.1?0.9Y99+0.1?(0.9)2Y98+...</span>

2.4.1.2 運行

通常 有這么多參數(shù)組合,每一個組合運行訓(xùn)練都需要很長時間,但是如果資源允許的話,可以同時并行的訓(xùn)練多個參數(shù)模型,并觀察效果。如果資源不允許的話,還是得一個模型一個模型的運行,并時刻觀察損失的變化

所以對于這么多的超參數(shù),調(diào)優(yōu)是一件復(fù)雜的事情,怎么讓這么多的超參數(shù)范圍,工作效果還能達到更好,訓(xùn)練變得更容易呢?

2.4.2 批標(biāo)準(zhǔn)化(Batch Normalization)

Batch Normalization論文地址:https://arxiv.org/abs/1502.03167

其中最開頭介紹是這樣的:

訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)很復(fù)雜,因為在訓(xùn)練期間每層輸入的分布發(fā)生變化,因為前一層的參數(shù)發(fā)生了變化。這通過要求較低的學(xué)

習(xí)率和仔細(xì)的參數(shù)初始化來減慢訓(xùn)練速度,并且使得訓(xùn)練具有飽和非線性的模型變得非常困難。 將這種現(xiàn)象稱為** 內(nèi)部協(xié)

變量偏移** ,并通過 **標(biāo)準(zhǔn)化層** 輸入來解決問題。 的方法的優(yōu)勢在于使標(biāo)準(zhǔn)化成為模型體系結(jié)構(gòu)的一部分,并為每

個培訓(xùn)小批量執(zhí)行標(biāo)準(zhǔn)化。批量標(biāo)準(zhǔn)化允許 使用更高的學(xué)習(xí)率并且不太關(guān)心初始化。它還可以充當(dāng)調(diào)節(jié)器,在某些情況

下可以消除對Dropout的需求。應(yīng)用于最先進的圖像分類模型,批量標(biāo)準(zhǔn)化實現(xiàn)了相同的精度,培訓(xùn)步驟減少了14倍,并

且顯著地超過了原始模型。使用批量標(biāo)準(zhǔn)化網(wǎng)絡(luò)的集合, 改進了ImageNet分類的最佳發(fā)布結(jié)果:達到4.9%的前5個

驗證錯誤(和4.8%的測試錯誤),超出了人類評估者的準(zhǔn)確性。

首先 還是回到之前, 對輸入特征 X 使用了標(biāo)準(zhǔn)化處理。標(biāo)準(zhǔn)化化后的優(yōu)化得到了加速。

對于深層網(wǎng)絡(luò)呢? 接下來看一下這個公式,這是向量的表示。表示每Mini-batch有m個樣本。

  • m個樣本的向量表示

<span>Z[L]=W[L]A[L?1]+b[L]Z^{[L]} = W{[L]}A{[L-1]}+b^{[L]}Z[L]=W[L]A[L?1]+b[L]</span>

<span>A[L]=gLA{[L]}=g{[L]}(Z^{[L]})A[L]=gL</span>

輸入<span>A[L?1]A{[L-1]}A[L?1]</span><span>A[L]A{[L]}A[L]</span>

深層網(wǎng)絡(luò)當(dāng)中不止是初始的特征輸入,而到了隱藏層也有輸出結(jié)果,所以 是否能夠?qū)﹄[層的輸入<span>Z[L]Z{[L]}Z[L]</span><span>A[L]A{[L]}A[L]</span>

2.4.2.1 批標(biāo)準(zhǔn)化公式

所以假設(shè)對于上圖第二個四個神經(jīng)元隱層。記做<span>Z[l]Z{[l]}Z[l]</span><span>z[i][l]z{[l]}_{[i]}z[i][l]</span><span>lll</span>

<span>μ=1m∑iz(i)\mu = \frac{1}{m} \sum_i z^{(i)}μ=m1∑iz(i)</span>

<span>σ2=1m∑i(zi?μ)2\sigma^2 = \frac{1}{m} \sum_i {(z_i - \mu)}^2σ2=m1∑i(zi?μ)2</span>

<span>znorm(i)=z(i)?μσ2+?z_{norm}^{(i)} = \frac{z^{(i)} - \mu}{\sqrt{\sigma^2 + \epsilon}}znorm(i)=√σ2+?z(i)?μ</span>

其中<span>?\epsilon?</span><span>10?810{-8}10?8</span><span>z[i][l]z{[l]}_{[i]}z[i][l]</span>

<span>z~(i)=γznorm(i)+β\tilde z^{(i)} = \gamma z^{(i)}_{norm} + \betaz~(i)=γznorm(i)+β</span>

其中,<span>γ\gammaγ</span><span>β\betaβ</span>

  • 為什么要使用這樣兩個參數(shù)

如果各隱藏層的輸入均值在靠近0的區(qū)域,即處于激活函數(shù)的線性區(qū)域,不利于訓(xùn)練非線性神經(jīng)網(wǎng)絡(luò),從而得到效果較差的模型。因此,需要用 γ 和 β 對標(biāo)準(zhǔn)化后的結(jié)果做進一步處理。

2.4.2.2 過程圖

每一層中都會有兩個參數(shù)<span>β,γ\beta, \gammaβ,γ</span>

注:原論文的公式圖

2.4.2.2 為什么批標(biāo)準(zhǔn)化能夠是優(yōu)化過程變得簡單

之前在原文中標(biāo)記了一個問題叫做叫做"internal covariate shift"。這個詞翻譯叫做協(xié)變量偏移,但是并不是很好理解。那么有一個解釋叫做 在網(wǎng)絡(luò)當(dāng)中數(shù)據(jù)的分布會隨著不同數(shù)據(jù)集改變 。這是網(wǎng)絡(luò)中存在的問題。那 一起來看一下數(shù)據(jù)本身分布是在這里會有什么問題。

也就是說如果 在訓(xùn)練集中的數(shù)據(jù)分布如左圖,那么網(wǎng)絡(luò)當(dāng)中學(xué)習(xí)到的分布狀況也就是左圖。那對于給定一個測試集中的數(shù)據(jù),分布不一樣。這個網(wǎng)絡(luò)可能就不能準(zhǔn)確去區(qū)分。這種情況下,一般要對模型進行重新訓(xùn)練。

Batch Normalization的作用就是減小Internal Covariate Shift 所帶來的影響,讓模型變得更加健壯,魯棒性(Robustness)更強。即使輸入的值改變了,由于 Batch Normalization 的作用,使得均值和方差保持固定(由每一層<span>γ\gammaγ</span><span>β\betaβ</span>

2.4.2.3 BN總結(jié)

Batch Normalization 也起到微弱的正則化效果,但是不要將 Batch Normalization 作為正則化的手段,而是當(dāng)作加速學(xué)習(xí)的方式。Batch Normalization主要解決的還是反向傳播過程中的梯度問題(梯度消失和爆炸)。

2.4.3 總結(jié)

  • 掌握基本的超參數(shù)以及調(diào)參技巧
  • 掌握BN的原理以及作用

卷積神經(jīng)網(wǎng)絡(luò)

2.4 經(jīng)典分類網(wǎng)絡(luò)結(jié)構(gòu)

學(xué)習(xí)目標(biāo)

  • 目標(biāo)

    • 知道LeNet-5網(wǎng)絡(luò)結(jié)構(gòu)

    • 了解經(jīng)典的分類網(wǎng)絡(luò)結(jié)構(gòu)

    • 知道一些常見的卷機網(wǎng)絡(luò)結(jié)構(gòu)的優(yōu)化

      • 知道NIN中1x1卷積原理以及作用
      • 知道Inception的作用
    • 了解卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)過程內(nèi)容

  • 應(yīng)用

下面 主要以一些常見的網(wǎng)絡(luò)結(jié)構(gòu)去解析,并介紹大部分的網(wǎng)絡(luò)的特點。這里看一下卷積的發(fā)展歷史圖。

Python 官方文檔

2.4.1 LeNet-5解析

首先 從一個稍微早一些的卷積網(wǎng)絡(luò)結(jié)構(gòu)LeNet-5(這里稍微改了下名字),開始的目的是用來識別數(shù)字的。從前往后介紹完整的結(jié)構(gòu)組成,并計算相關(guān)輸入和輸出。

2.4.1.1 網(wǎng)絡(luò)結(jié)構(gòu)

  • 激活層默認(rèn)不畫網(wǎng)絡(luò)圖當(dāng)中,這個網(wǎng)絡(luò)結(jié)構(gòu)當(dāng)時使用的是sigmoid和Tanh函數(shù),還沒有出現(xiàn)Relu函數(shù)
  • 將卷積、激活、池化視作一層,即使池化沒有參數(shù)

2.4.1.2 參數(shù)形狀總結(jié)

shape size parameters
Input (32,32,3) 3072 0
Conv1(f=5,s=1) (28,28,6) 4704 450+6
Pool1 (14,14,6) 1176 0
Conv2(f=5,s=1) (10,10,16) 1600 2400+16
Pool2 (5,5,16) 400 0
FC3 (120,1) 120 48000+120
FC4 (84,1) 84 10080+84
Ouput:softmax (10,1) 10 840+10
  • 中間的特征大小變化不宜過快

事實上,在過去很多年,許多機構(gòu)或者學(xué)者都發(fā)布了各種各樣的網(wǎng)絡(luò),其實去了解設(shè)計網(wǎng)絡(luò)最好的辦法就是去研究現(xiàn)有的網(wǎng)絡(luò)結(jié)構(gòu)或者論文。大多數(shù)網(wǎng)絡(luò)設(shè)計出來是為了Image Net的比賽(解決ImageNet中的1000類圖像分類或定位問題),后來大家在各個業(yè)務(wù)上進行使用。

2.4.2 AlexNet

PyQt5 文檔

2012年,Alex Krizhevsky、Ilya Sutskever在多倫多大學(xué)Geoff Hinton的實驗室設(shè)計出了一個深層的卷積神經(jīng)網(wǎng)絡(luò)AlexNet,奪得了2012年ImageNet LSVRC的冠軍,且準(zhǔn)確率遠(yuǎn)超第二名(top5錯誤率為15.3%,第二名為26.2%),引起了很大的轟動。AlexNet可以說是具有歷史意義的一個網(wǎng)絡(luò)結(jié)構(gòu)。

  • 總參數(shù)量:60M=6000萬,5層卷積+3層全連接
  • 使用了非線性激活函數(shù):ReLU
  • 防止過擬合的方法:Dropout
  • 批標(biāo)準(zhǔn)化層的使用

2.4.3 卷積網(wǎng)絡(luò)結(jié)構(gòu)的優(yōu)化

2.4.3.1 常見結(jié)構(gòu)特點

整個過程:AlexNet—NIN—(VGG—GoogLeNet)—ResNet

  • NIN:引入1 * 1卷積

  • VGG,斬獲2014年分類第二(第一是GoogLeNet),定位任務(wù)第一。

    • 參數(shù)量巨大,140M = 1.4億

    • 19layers

    • VGG 版本

      • VGG16
      • VGG19

![](https://upload-images.jianshu.io/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容