【深度学习-吴恩达】L2-3 超参数调试

L2 改善深层神经网络

3 超参数调试

课程时长104min33s

3.1 调试过程

  • 需要调整的超参数较多

    • α , β , β 1 , β 2 , ξ , # l a y e r s , # h i d d e n   u n i t s , m i n i _ b a t c h   s i z e , l e a r n i n g   r a t e   d e c l a y \alpha,\beta,\beta_1,\beta_2,\xi,\#layers,\#hidden\ units,mini\_batch\ size,learning\ rate\ declay α,β,β1,β2,ξ,#layers,#hidden units,mini_batch size,learning rate declay
    • α:最重要的参数
    • β、#hidden units、mini-batch size:次重要参数
    • #layers、learning rate declay:次次重要参数
    • β1,β2 ξ \xi ξ:不重要参数
  • 不要使用网格选择参数,而是随机选取

    image-20220803094914130

  • 粗略搜索后,进行更小区域的选择

3.2 为超参数选择合适的范围

均匀随机取值

  • n[l]=50,…,100

  • #layers L=2,3,4

非均匀随机取直

  • α:0.0001,…,1
    • 使用非线性轴
    • 使用指数函数
  • β:0.9,…,0.999
    • 使用1-β后使用指数函数

3.3 超参数训练的实践:Pandas VS Caviar

不同领域超参数可能可以通用

  • 自然语言处理、计算机视觉、语音、广告、逻辑

超参数需要随着时间、数据变化进行调整

模型训练方法

  • 训练一个模型调整参数

    • Panda方式
    • 计算资源较少
  • 同时训练多个模型,设定不同参数

    • 鱼子酱方式
    • 计算资源较多

3.4 正则化网络的激活函数

batch normalization batch标准化

对于一个隐藏层,归一化a值

对于某层的隐藏值 z[l][1], z[l][2],…, z[l][m]
μ = 1 m ∑ i z ( i ) σ 2 = 1 m ∑ i ( z ( i ) − μ ) z n o r m ( i ) = z ( i ) − μ σ 2 + ξ z ~ ( i ) = γ z n o r m ( i ) + β i f   γ = σ 2 + ξ , β = μ   t h e n z ~ ( i ) = z ( i ) \mu = \frac 1m\sum_iz^{(i)}\\ \sigma^2=\frac 1m\sum_i(z^{(i)}-\mu)\\ z^{(i)}_{norm}=\frac{z^{(i)}-\mu}{\sqrt{\sigma^2+\xi}}\\ \tilde z^{(i)}=\gamma z^{(i)}_{norm}+\beta\\ if\ \gamma=\sqrt{\sigma^2+\xi},\beta=\mu\ then\\ \tilde z^{(i)}= z^{(i)} μ=m1iz(i)σ2=m1i(z(i)μ)znorm(i)=σ2+ξ z(i)μz~(i)=γznorm(i)+βif γ=σ2+ξ ,β=μ thenz~(i)=z(i)

  • 保证隐藏的单元进行均值和方差标准化
  • 使用γ和β可以控制均值和方差

3.5 将Batch Norm拟合进神经网络

Batch归一化发生在计算z和a之间

  • x → w [ 1 ] , b [ 1 ] z [ 1 ] → β [ 1 ] , γ [ 1 ] z ~ ( 1 ) → a [ 1 ] = g [ 1 ] ( z ~ ( 1 ) ) → w [ 2 ] , b [ 2 ] z [ 2 ] … x \xrightarrow{w^{[1]},b^{[1]}}z^{[1]} \xrightarrow{\beta^{[1]},\gamma^{[1]}}\tilde z^{(1)}\rightarrow a^{[1]}=g^{[1]}(\tilde z^{(1)}) \xrightarrow{w^{[2]},b^{[2]}}z^{[2]} \dots xw[1],b[1] z[1]β[1],γ[1] z~(1)a[1]=g[1](z~(1))w[2],b[2] z[2]

  • P a r a m e t e r s : w [ 1 ] , b [ 1 ] , β [ 1 ] , γ [ 1 ] , w [ 2 ] , b [ 2 ] , β [ 2 ] , γ [ 2 ] … β [ l ] = β [ l ] − α d β [ l ] Parameters:w^{[1]},b^{[1]},\beta^{[1]},\gamma^{[1]},w^{[2]},b^{[2]},\beta^{[2]},\gamma^{[2]}\dots\\ \beta^{[l]}=\beta^{[l]}-\alpha d\beta^{[l]} Parameters:w[1],b[1],β[1],γ[1],w[2],b[2],β[2],γ[2]β[l]=β[l]αdβ[l]

和Mini-batch一起应用

  • X { 1 } → w [ 1 ] , b [ 1 ] z [ 1 ] → β [ 1 ] , γ [ 1 ] z ~ ( 1 ) → a [ 1 ] = g [ 1 ] ( z ~ ( 1 ) ) → w [ 2 ] , b [ 2 ] z [ 2 ] … X { 2 } → w [ 1 ] , b [ 1 ] z [ 1 ] … ⋮ X^{\{1\}} \xrightarrow{w^{[1]},b^{[1]}}z^{[1]} \xrightarrow{\beta^{[1]},\gamma^{[1]}}\tilde z^{(1)}\rightarrow a^{[1]}=g^{[1]}(\tilde z^{(1)}) \xrightarrow{w^{[2]},b^{[2]}}z^{[2]} \dots\\ X^{\{2\}} \xrightarrow{w^{[1]},b^{[1]}}z^{[1]} \dots\\ \vdots X{1}w[1],b[1] z[1]β[1],γ[1] z~(1)a[1]=g[1](z~(1))w[2],b[2] z[2]X{2}w[1],b[1] z[1]

  • 使用batch norm时候,由于β[l]可以控制平均值的偏差,因此偏移值b[l]实际不起作用

  • 实现过程

  • for t = 1 to mini-batch num:

    • c o m p u t e   f o r w a r d   p o p   o n   X { t } compute\ forward\ pop\ on\ X^{\{t\}} compute forward pop on X{t}
      • 在每层隐藏层中,使用batch norm,将 z [ l ] z^{[l]} z[l]替换为 z ~ ( l ) \tilde z^{(l)} z~(l)
    • u s e   b a c k   p o p   t o   c o m p u t e   d w [ l ] , d b [ l ] , d β [ l ] , d γ [ l ] use\ back\ pop\ to\ compute\ dw^{[l]},db^{[l]},d\beta^{[l]},d\gamma^{[l]} use back pop to compute dw[l],db[l],dβ[l],dγ[l]
    • 更新参数

同样可以使用momentum、Adam、RMSprop

3.6 Batch Norm的解释

Batch标准化的作用

  • 加速训练
    • 类似将数据集从1-1000处理到0-1范围
  • 使得权重相比网络网络更滞后或者更深层
    • covariate shift
    • 减少隐藏值分布变化的数量,使得每层输入更加稳定
  • 一定的正则化作用
    • 向隐藏单元添加了噪音

batch归一化一次智能处理一个mini-batch数据

3.7 测试时的Batch Norm

batch标准化公式:
μ = 1 m ∑ i z ( i ) σ 2 = 1 m ∑ i ( z ( i ) − μ ) z n o r m ( i ) = z ( i ) − μ σ 2 + ξ z ~ ( i ) = γ z n o r m ( i ) + β \mu = \frac 1m\sum_iz^{(i)}\\ \sigma^2=\frac 1m\sum_i(z^{(i)}-\mu)\\ z^{(i)}_{norm}=\frac{z^{(i)}-\mu}{\sqrt{\sigma^2+\xi}}\\ \tilde z^{(i)}=\gamma z^{(i)}_{norm}+\beta\\ μ=m1iz(i)σ2=m1i(z(i)μ)znorm(i)=σ2+ξ z(i)μz~(i)=γznorm(i)+β

  • 对μ和σ2使用指数加权平均进行计算

3.8 Softmax回归

多分类而非单分类

  • C:分类的类别数目
    • n[L]=C,输出层单元数目为C,每个输出代表概率

Softmax层使用不同的激活函数

  • Z [ L ] = W [ L ] a [ L − 1 ] + b [ L ] Z^{[L]}=W^{[L]}a^{[L-1]}+b^{[L]} Z[L]=W[L]a[L1]+b[L]

  • 激活函数

    • t = e ( z [ L ] ) a [ L ] = e z [ L ] ∑ i = 1 C t i , a i [ L ] = t i ∑ i = 1 C t i t = e^{(z^{[L]})}\\ a^{[L]}=\frac{e^{z^{[L]}}}{\sum_{i=1}^{C}t_i},a_i^{[L]}=\frac{t_i}{\sum_{i=1}^{C}t_i} t=e(z[L])a[L]=i=1Ctiez[L],ai[L]=i=1Ctiti
  • 输出归一化,输出一个向量

3.9 训练一个Softmax分类器

Softmax <=> Hard max:只在最大值设为1
z [ L ] = [ 5 2 − 1 3 ] t = [ e 5 e 2 e − 1 e 3 ] a [ L ] = g [ L ] ( z [ L ] ) = [ 0.843 0.043 0.002 0.114 ] h a r d _ m a x = [ 1 0 0 0 ] z^{[L]}=\left[\begin{matrix}5\\2\\-1\\3\\ \end{matrix}\right]\qquad t = \left[\begin{matrix}e^5\\e^2\\e^{-1}\\e^3 \end{matrix}\right] \qquad \\ a^{[L]}=g^{[L]}(z^{[L]}) = \left[\begin{matrix}0.843\\0.043\\0.002\\0.114\\ \end{matrix}\right]\\ hard\_max=\left[\begin{matrix}1\\0\\0\\0\\ \end{matrix}\right] z[L]= 5213 t= e5e2e1e3 a[L]=g[L](z[L])= 0.8430.0430.0020.114 hard_max= 1000

  • C=2,则退化成logistic回归

损失函数对于单个训练样本


  • y = [ 0 1 0 0 ] a [ L ] = y ^ = [ 0.3 0.2 0.1 0.4 ] y=\left[\begin{matrix}0\\1\\0\\0\\ \end{matrix}\right]\qquad \\ a^{[L]}= \hat y=\left[\begin{matrix}0.3\\0.2\\0.1\\0.4\\ \end{matrix}\right]\\ y= 0100 a[L]=y^= 0.30.20.10.4

  • 则损失函数
    l ( y ^ , y ) = − ∑ j = 1 4 y j l o g   y ^ j l(\hat y,y)=-\sum_{j=1}^4 y_jlog\ \hat y_j l(y^,y)=j=14yjlog y^j

  • 也就为 − y 2 l o g   y ^ 2 = − l o g   y ^ 2 -y_2log\ \hat y_2=-log\ \hat y_2 y2log y^2=log y^2

    • 若要损失减小,也就是使得y2增大
  • 对于多个训练样本
    J ( w [ 1 ] , b [ 1 ] , …   ) = 1 m ∑ i = 1 m l ( y ^ ( i ) , y ( i ) ) J(w^{[1]},b^{[1]},\dots)=\frac 1m\sum_{i=1}^ml(\hat y^{(i)},y^{(i)}) J(w[1],b[1],)=m1i=1ml(y^(i),y(i))

    • 使用梯度下降法
      Y = [ y ( 1 ) , y ( 2 ) , … , y ( m ) ] = [ 0   1   0   … 1   0   0   … 0   0   1   … 0   0   0   … ] , Y : ( 4 , m ) Y ^ = [ y ^ ( 1 ) , y ^ ( 2 ) , … , y ^ ( m ) ] = [ 0.3 … 0.2 … 0.1 … 0.4   … ] , Y ^ : ( 4 , m ) Y =[y^{(1)}, y^{(2)},\dots,y^{(m)}] = \left[\begin{matrix}0\ 1\ 0\ \dots\\1\ 0\ 0\ \dots\\0\ 0\ 1\ \dots\\0\ 0\ 0\ \dots\\ \end{matrix}\right],Y:(4,m)\\ \hat Y=[\hat y^{(1)}, \hat y^{(2)},\dots,\hat y^{(m)}] = \left[\begin{matrix}0.3\dots\\0.2\dots\\0.1\dots\\0.4\ \dots\\ \end{matrix}\right],\hat Y:(4,m) Y=[y(1),y(2),,y(m)]= 0 1 0 1 0 0 0 0 1 0 0 0  ,Y:(4,m)Y^=[y^(1),y^(2),,y^(m)]= 0.30.20.10.4  ,Y^:(4,m)

使用Softmax的梯度下降法

  • 反向传播公式
    d z [ L ] = ∂ J ∂ z [ L ] = y ^ − y dz^{[L]} = \frac{\partial J}{\partial z^{[L]}}=\hat y-y dz[L]=z[L]J=y^y

使用深度学习框架,能够自动实现反向传播

3.10 深度学习框架

深度学习框架

  • Caffe/Caffe2
  • CNTK
  • DL4J
  • Keras
  • Lasagne
  • mxnet
  • PaddlePaddle
  • TensorFlow
  • Theano
  • Torch

选择框架的标准

  • 易于编程,使用人数较多
  • 运算速度较快
  • 框架是否开源

3.11 TensorFlow

  • 使用tf.Variable定义参数

    import numpy as np
    import tensorflow as tf
    # w是想要优化的参数,cost是损失函数
    # cost也可以写作:
    # cost = w**2 - 10*w + 25
    w = tf.Variable(0, dtype=tf.float32)
    cost = tf.add(tf.add(w**2, tf.multiply(-10, w)), 25)
    train = tf.train.GradientDescentOptimizer(0.01).minimize(cost)
    
    init = tf.global_variables_initializer()
    session = tf.Session()
    session.run(init)
    
    for i in range(1000):
        session.run(train)
    print(session.run(w))
    
  • 如何把数据集加入训练中

    import numpy as np
    import tensorflow as tf
    # w是想要优化的参数,cost是损失函数
    coefficients = np.array([[1.],[-10.],[25.]])
    
    w = tf.Variable(0, dtype=tf.float32)
    x = tf.placeholder(tf.float32, [3,1])
    
    cost = x[0][0]*w**2 + x[1][0]*w + x[2][0]
    train = tf.train.GradientDescentOptimizer(0.01).minimize(cost)
    
    init = tf.global_variables_initializer()
    session = tf.Session()
    session.run(init)
    
    for i in range(1000):
        session.run(train, feed_dict={x:coefficients})
    print(session.run(w))
    
    • tf.placeholder是一个之后会赋值的变量,方便把数据加入到损失方程中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值