[笔记]Coursera Deep Learning笔记 超参数调试 Batch归一化 Softmax

调试(Tuning)

深度学习要处理很多参数, 从学习速率 α \alpha α 到 Momentum 的参数 β \beta β, 若使用 Adam 优化算法,还得处理 β 1 \beta_1 β1, β 2 \beta_2 β2 ε \varepsilon ε. 同时还得选择层数, 每一层隐藏单元的数量, mini-batch 大小, 甚至如果还要使用学习率衰减.

其中学习速率 α \alpha α 是最优先调试的超参数. mini-batch 大小与隐藏单元次之. 而 Momentum 的参数 β \beta β 通常使用默认值 0.9, Adam 的参数 β 1 \beta_1 β1, β 2 \beta_2 β2 ε \varepsilon ε 通常不进行调试, 使用默认的 0.9, 0.999 和 1 0 − 8 10^{-8} 108.

参数选择有以下一些方法:

  1. 随机选择点. 例如现在有 α \alpha α 与 Adam 的 ε \varepsilon ε 两个超参数要调试. 在更早的机器学习算法中, 常见的是在网格中等距离取样. 现在更推荐随机选择. 在参数取值范围内随机选择若干点, 可以发现哪个超参数更重要, 影响更大.

  2. 由粗糙到精细的策略. 由1, 发现在某个点效果最好, 可以预测在该点附近效果也很好, 于是放大这块区域, 更密集地取值.

  3. 随机选择点时, 有些参数不适合均匀(在线性轴上)的随机选择. 例如 α \alpha α, 我们希望其在对数轴上随机取点(0.0001, 0.001, 0.01, 0.1, 1), 我们可以 a = 10**(-4*np.random.rand()), 即可得到 a ∈ [ 1 0 − 4 , 1 0 0 ] a \isin [10^{-4}, 10^0] a[104,100].

Batch 归一化(Batch Norm)

训练 Logistic 回归时, 归一化 X 可以加快学习过程. 现在我们希望对隐藏层的 A 行归一化. 吴恩达老师介绍的版本是归一化 Z, 也有学者认为应该归一化 A.

我们对每一层的z, a 做如下操作:

μ = 1 m ∑ i z ( i ) σ 2 = 1 m ∑ i ( z ( i ) − μ ) 2 z norm ( i ) = z ( i ) − μ σ 2 + ε z ~ ( i ) = γ z norm ( i ) + β \mu = \frac{1}{m} \sum_i z^{(i)} \\ \sigma^2 = \frac{1}{m} \sum_i (z^{(i)} - \mu)^2 \\ z_{\text{norm}}^{(i)} = \frac{z^{(i)} - \mu}{\sqrt{\sigma^2 + \varepsilon}} \\ \widetilde{z}^{(i)} = \gamma z_{\text{norm}}^{(i)} + \beta μ=m1iz(i)σ2=m1i(z(i)μ)2znorm(i)=σ2+ε z(i)μz (i)=γznorm(i)+β

( ε \varepsilon ε是为了防止分母为0.)

z norm z_{\text{norm}} znorm 就是标准化的 z z z, 平均值为0, 方差为1. 当希望均值, 方差不是0和1时, 计算 z ~ \widetilde{z} z .

γ \gamma γ β \beta β 的作用是随意设置 z ~ ( i ) \widetilde{z}^{(i)} z (i) 的平均值. 当 A = σ 2 + ε A = \sqrt{\sigma^2+\varepsilon} A=σ2+ε B = μ B = \mu B=μ 时, z ~ ( i ) = z ( i ) \widetilde{z}^{(i)} = z^{(i)} z (i)=z(i). γ \gamma γ β \beta β是模型的学习参数, 梯度下降时会像更新神经网络的权重一样更新 γ \gamma γ β \beta β.

使用该方法时, 参数 w 和 b 中的 b 可以不设立, 毕竟 b 总是会被归一化减去. 于是参数只剩下了 w w w, β \beta β, γ \gamma γ.

Batch 归一化减少了输入值改变的问题, 它的确使这些值变得更稳定, 它减弱了前层参数的作用与后层参数的作用之间的联系, 它使得网络每层都可以自己学习, 稍稍独立于其它层, 有助于加速整个网络的学习.

另外, 每个 mini-batch 子数据集的均值和方差均有一些噪音, 而 Batch 归一化将 z z z 缩放到 z ~ \widetilde{z} z 的过程也有噪音, 因此有轻微的正则化效果.

在测试时, 我们很可能只想测一个样本, 此时均值 μ \mu μ 和方差 σ \sigma σ 没有意义. 因此我们要使用估算的 μ \mu μ σ \sigma σ 进行测试. 估算方法很多, 通常运用指数加权平均来追踪在训练过程中的 μ \mu μ σ \sigma σ. 还可以用指数加权平均.

Softmax 回归

类似 Logistic 回归, 但 Softmax 回归能识别多个分类. 因此 y ^ \hat{y} y^ 是 C×1 维的向量, 给出 C 个分类的概率,所有概率加起来应该为1.

在神经网络的最后一层, 我们像往常一样计算各层的线性部分, 当计算了 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] 之后, 使用 Softmax 激活函数.

a i [ L ] = e z i [ L ] ∑ j = 1 4 e z i [ L ] a^{[L]}_i = \frac{e^{z^{[L]}_i}}{\sum_{j=1}^{4} e^{z^{[L]}_i}} ai[L]=j=14ezi[L]ezi[L]

Softmax 分类中, 一般使用的损失函数及反向传播的导数是

L ( y ^ , y ) = − ∑ j = 1 n y j log  y ^ j J ( w [ 1 ] , b [ 1 ] , . . . ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) ∂ J ∂ z [ L ] = y ^ − y L(\hat{y}, y) = -\sum_{j=1}^{n}y_j \text{log } \hat{y}_j \\ J(w^{[1]}, b^{[1]}, ...) = \frac{1}{m} \sum_{i=1}^m L(\hat{y}^{(i)}, y^{(i)}) \\ \frac{\partial J}{\partial z^{[L]}} = \hat{y} - y L(y^,y)=j=1nyjlog y^jJ(w[1],b[1],...)=m1i=1mL(y^(i),y(i))z[L]J=y^y

Softmax 给出的是每个分类的概率. 而对应的 Hardmax 则是将最大的元素输出为 1, 其余元素置 0.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值