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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

02.改善深层神经网络:超参数调试、正则化以及优化 W3. 超参数调试、Batch Norm和程序框架

發布時間:2024/7/5 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 02.改善深层神经网络:超参数调试、正则化以及优化 W3. 超参数调试、Batch Norm和程序框架 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 調試處理
    • 2. 為超參數選擇合適的范圍
    • 3. 超參數調試的實踐
    • 4. 歸一化網絡的激活函數
    • 5. 將 Batch Norm 擬合進神經網絡
    • 6. Batch Norm 為什么奏效
    • 7. 測試時的 Batch Norm
    • 8. Softmax 回歸
    • 9. 訓練一個 Softmax 分類器
    • 10. 深度學習框架
    • 11. TensorFlow
    • 作業

參考:
吳恩達視頻課
深度學習筆記

1. 調試處理

需要處理的參數:

參數重要程度
學習率 α\alphaα★★★★
Momentum(動量梯度下降法)參數 β=0.9\beta = 0.9β=0.9★★★
隱藏單元數量★★★
mini-batch size★★★
網絡層數★★
學習衰減率★★
Adam 優化算法的 β1=0.9,β2=0.999,ε=1e?8\beta_1=0.9,\beta_2=0.999, \varepsilon=1e^{-8}β1?=0.9,β2?=0.999,ε=1e?8
  • 在深度學習領域,常采用隨機選點進行參數搜索(試驗了更多的不同的超參數值)
  • 由粗糙到精細的策略(集中計算資源到可能更優的小區域進行更密集的搜索)

2. 為超參數選擇合適的范圍

隨機取值,并不是在范圍內均勻取值

  • 使用對數標尺搜索超參數的方式會更合理

比如想取參數 α∈[0.0001,1]\alpha \in [0.0001, 1]α[0.0001,1]

  • r=-4*np.random.rand(),r∈[?4,0]r \in [-4,0]r[?4,0],然后取 α=10r\alpha = 10^{r}α=10r,在 r 的區間均勻取值

再比如計算指數的加權平均值參數 β∈[0.9,0.999]\beta \in [0.9, 0.999]β[0.9,0.999]

  • 我們考察 1?β∈[0.001,0.1]1-\beta \in [0.001, 0.1]1?β[0.001,0.1],那么我們令 r∈[?3,?1]r \in [-3, -1]r[?3,?1], r 在里面均勻取值
  • 1?β=10r→β=1?10r1-\beta=10^r \rightarrow \beta = 1-10^r1?β=10rβ=1?10r

因為加權平均值大概是基于過去 11?β\frac{1}{1-\beta}1?β1? 個值進行平均,當 β\betaβ 接近 1 的時候,對細微的變化非常敏感,需要更加密集的取值

如果你使用均勻取值,應用從粗到細的搜索方法,取足夠多的數值,最后也會得到不錯的結果

3. 超參數調試的實踐

  • 在數據更新后,要重新評估超參數是否依然合適
  • 沒有計算資源,你可以試驗一個或者少量的模型,不斷的調試和觀察效果
  • 如果有計算資源,盡管試驗不同參數的模型,最后選擇一個最好的

4. 歸一化網絡的激活函數

Batch歸一化 會使你的參數搜索問題變得很容易,使神經網絡對超參數的選擇更加穩定,超參數的范圍會更加龐大,工作效果也很好,也會使你的訓練更加容易

那么對于任意一層的輸入 我們將其歸一化 z[l]z^{[l]}z[l](有爭議,歸一化激活函數值a[l]a^{[l]}a[l]

znorm?(i)=z(i)?μσ2+εz_{\text {norm }}^{(i)}=\frac{z^{(i)}-\mu}{\sqrt{\sigma^{2}+\varepsilon}}znorm?(i)?=σ2+ε?z(i)?μ?

但是我們不想讓每一層的均值都為0,方差為1,也許有不同的分布有意義,加上2個超參數 γ,β\gamma, \betaγ,β
z~(i)=γznorm?(i)+β\tilde{z}^{(i)}=\gamma z_{\text {norm }}^{(i)}+\betaz~(i)=γznorm?(i)?+β

  • 通過賦予 γ,β\gamma, \betaγ,β 其它值,可以使你構造含其它均值和方差的隱藏單元值

5. 將 Batch Norm 擬合進神經網絡

前向傳播:

計算完前一層的輸出,先進行歸一化,再計算激活函數值


反向傳播:

現在網絡里引入了新的參數 β,γ\beta, \gammaβ,γ(跟優化算法的 β\betaβ 是兩個東西) ,然后可以用之前學到的 Adam、RMSprop、Momentum梯度下降來更新參數
β[l]=β[l]?α?dβ[l]\beta^{[l]}=\beta^{[l]}-\alpha* d \beta^{[l]}β[l]=β[l]?α?dβ[l]
γ[l]=γ[l]?α?dγ[l]\gamma^{[l]}=\gamma^{[l]}-\alpha *d \gamma^{[l]}γ[l]=γ[l]?α?dγ[l]
w[l]=w[l]?α?dw[l]w^{[l]}=w^{[l]}-\alpha* d w^{[l]}w[l]=w[l]?α?dw[l]

b[l]b^{[l]}b[l] 參數沒有用,做歸一化會被減去。

6. Batch Norm 為什么奏效

原因1,使得輸入特征、隱藏單元的值獲得類似的范圍,可以加速學習

原因2,在前面層輸入值改變的情況下,BN 使得他們的均值和方差不變(更穩定),即使輸入分布改變了一些,它會改變得更少。
減弱前層參數的作用與后層參數的作用之間的聯系,它使得網絡每層都可以自己學習,稍稍獨立于其它層,這有助于加速整個網絡的學習

BN 有輕微的正則化效果,因為它在 mini-batch 上計算的均值和方差是有小的噪聲,給隱藏單元添加了噪聲,迫使后部單元不過分依賴任何一個隱藏單元(類似于 dropout)。
因為添加的噪聲很微小,所以正則化效果也很小

當增大 mini-batch size ,那么噪聲會降低,因此正則化效果減弱

不要把 Batch歸一化當作正則化
把它當作將你歸一化隱藏單元激活值并加速學習的方式

注意:
Batch歸一化一次只能處理一個mini-batch數據

7. 測試時的 Batch Norm

μ=1m∑iz(i)σ2=1m∑i(z(i)?μ)2znorm?(i)=z(i)?μσ2+εz~(i)=γznorm?(i)+β\begin{aligned} \mu &=\frac{1}{m} \sum_{i} z^{(i)} \\ \sigma^{2} &=\frac{1}{m} \sum_{i}\left(z^{(i)}-\mu\right)^{2} \\ z_{\text {norm }}^{(i)} &=\frac{z^{(i)}-\mu}{\sqrt{\sigma^{2}+\varepsilon}} \\ \tilde{z}^{(i)} &=\gamma z_{\text {norm }}^{(i)}+\beta \end{aligned}μσ2znorm?(i)?z~(i)?=m1?i?z(i)=m1?i?(z(i)?μ)2=σ2+ε?z(i)?μ?=γznorm?(i)?+β?
Batch歸一化 將你的數據以 mini-batch 的形式逐一處理,但是測試的時候,你可能不能將一個 mini-batch 中的所有樣本同時處理。

  • 指數加權平均來估算,這個平均數涵蓋了所有 mini-batch(訓練過程中計算 μ,σ2\mu, \sigma^2μ,σ2 的加權平均)
  • 其他合理的方法也可以,比如對整個訓練集進行估計 μ,σ2\mu, \sigma^2μ,σ2

使用 Batch歸一化,你能夠訓練更深的網絡,學習算法運行速度更快

8. Softmax 回歸

可以用于多分類問題

Softmax 激活函數:

  • 先計算 t=ez[l]t = e^{z^{[l]}}t=ez[l]
  • 再每個元素除以總和a[l]=ez[l]∑j=1Ctia^{[l]}=\frac{e^{z^{[l]}}}{\sum_{j=1}^{C} t_{i}}a[l]=j=1C?ti?ez[l]?

Softmax 激活函數需要將所有可能的輸出歸一化,需要輸入一個向量,最后輸出一個向量

9. 訓練一個 Softmax 分類器

Softmax 層反向傳播時的梯度計算 :dz[l]=y^?yd z^{[l]}=\hat{y}-ydz[l]=y^??y

Softmax分類可以運用學習算法將輸入分成不止兩類,而是 C 個不同類別

10. 深度學習框架

Caffe/Caffe2
CNTK
DL4J
Keras
Lasagne
mxnet
Paddlepaddle
TensorFlow
Theano
Torch

選擇標準:

  • 便于編程,包括神經網絡的開發和迭代,還包括為產品進行配置,為巨大的用戶的實際使用考慮

  • 運行速度,特別是訓練大數據集時,一些框架能讓你更高效地運行和訓練神經網絡

  • 框架是否真的開放,不僅需要開源,而且需要良好的管理。

程序框架 通過提供比數值線性代數庫更高程度的抽象化,讓你在開發深度學習應用時更加高效

11. TensorFlow

不安裝TF,直接在Google Colab 編程

import numpy as np import tensorflow as tf import tensorflow.compat.v1 as tf # 防止1.0版本語句報錯 tf.disable_v2_behavior() # 定義參數w w = tf.Variable(0, dtype=tf.float32)# 定義損失函數 w**2-10w+25 # cost = tf.add(tf.add(w**2,tf.multiply(-10.,w)),25) # 以下寫法也是可以的 cost = w**2-10*w+25# 0.01的學習率,目標是最小化損失函數 # train 為學習算法,使用梯度下降 train = tf.train.GradientDescentOptimizer(0.01).minimize(cost)# 初始化 init = tf.global_variables_initializer()# 開啟 tf session session = tf.Session()# 初始化全局變量 session.run(init)# 讓tf評估一個變量 session.run(train) # 運行一次梯度下降 print(session.run(w)) # 打印w的現在的值 0.099999994# 運行1000次梯度下降迭代 for i in range(1000):session.run(train) print(session.run(w)) # 4.999988 很接近最優值5了 # 定義參數w w = tf.Variable(0, dtype=tf.float32)# 定義損失函數 w**2-10w+25 # cost = tf.add(tf.add(w**2,tf.multiply(-10.,w)),25) # 以下寫法也是可以的 # cost = w**2-10*w+25# 上面是對固定的函數而言的 # 給上面的函數添加變化的3個系數(placeholder,稍后給你數據) x = tf.placeholder(tf.float32, [3,1]) cost = x[0][0]*w**2 + x[1][0]*w + x[2][0]# 定義系數 coeff 提供給 x coefficient = np.array([[1.],[-10.],[25.]])# 0.01的學習率,目標是最小化損失函數 # train 為學習算法,使用梯度下降 train = tf.train.GradientDescentOptimizer(0.01).minimize(cost)# 初始化 init = tf.global_variables_initializer()# 開啟 tf session session = tf.Session()# 初始化全局變量 session.run(init)# 讓tf評估一個變量 session.run(train, feed_dict={x:coefficient}) # 運行一次梯度下降 print(session.run(w)) # 打印w的現在的值 0.099999994# 運行1000次梯度下降迭代 for i in range(1000):session.run(train, feed_dict={x:coefficient}) print(session.run(w)) # 4.999988

TensorFlow中的placeholder是一個你之后會賦值的變量,這種方式便于把訓練數據加入損失方程

運行訓練迭代,用feed_dict來讓x=coefficients。
如果在做mini-batch梯度下降,在每次迭代時,需要插入不同的mini-batch,那么每次迭代,你就用feed_dict來喂入訓練集的不同子集,把不同的mini-batch喂入損失函數需要數據的地方

TensorFlow如此強大,只需說明如何計算損失函數,它就能求導,用一兩行代碼就能運用梯度優化器,Adam優化器 或 其他優化器

作業

02.改善深層神經網絡:超參數調試、正則化以及優化 W3. 超參數調試、Batch Norm和程序框架(作業:TensorFlow教程+數字手勢預測)


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的02.改善深层神经网络:超参数调试、正则化以及优化 W3. 超参数调试、Batch Norm和程序框架的全部內容,希望文章能夠幫你解決所遇到的問題。

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