【深度学习】嘿马深度学习系统性知识教程第6篇:深度学习进阶,2.4 BN与神经网络调优【附代码文档】
🏆🏆🏆教程全知识点简介:1.1 深度学习介绍 深度学习与神经网络 1.2 神经网络基础 1.3 浅层神经网络 2.1 多分类与 TensorFlow 5、得出每次训练的准确率(通过真实值和预测值进行位置比较,每个样本都比较) 2.2 梯度下降算法改进 2.3.4 其它正则化方法 2.4 BN 与神经网络调优 3.1 图像数据与边缘检测 3.2 卷积神经网络(CNN)原理 3.3 经典分类网络结构 4.1 循环神经网络 4.1.4 GRU(门控循环单元) 4.1.5 LSTM(长短记忆网络) 4.2 词嵌入与 NLP 学习目标 4.2.2 词嵌入 4.2.3 Word2Vec案例 4.3 seq2seq 与 Attention机制 4.3.2 注意力机制 4.3.3 机器翻译案例 4.3.4 集束搜索(Beam Search) 4.3.5 BLEU-机器翻译的自动评估方法 4.7.3.6 完整代码 5.1 生成对抗网络(GAN) 5.2 自动编码器
📚📚👉👉👉 https://gitee.com/yinuo112/AI/blob/master/深度学习/嘿马深度学习系统性知识教程/note.md 🍅🍅
🎯🎯🎯全教程总章节
🚀🚀🚀本篇主要内容
深度学习进阶
知道softmax回归的原理
应用softmax_cross_entropy_with_logits实现softamx以及交叉熵损失计算
应用matmul实现多隐层神经网络的计算
应用TensorFlow完成Mnist手写数字势识别
了解深度学习遇到的一些问题
知道批梯度下降与MiniBatch梯度下降的区别
知道指数加权平均的意义
知道动量梯度、RMSProp、Adam算法的公式意义
知道学习率衰减方式
知道参数初始化策略的意义
了解偏差与方差的意义
知道L2正则化与L1正则化的数学意义
知道Droupout正则化的方法
了解早停止法、数据增强法的其它正则化方式
知道常用的一些神经网络超参数
知道BN层的意义以及数学原理
2.4 BN与神经网络调优
学习目标
-
目标
-
知道常用的一些神经网络超参数
-
知道BN层的意义以及数学原理
-
应用
-
无
2.4.1 神经网络调优
我们经常会涉及到参数的调优,也称之为超参数调优。目前我们从第二部分中讲过的超参数有
-
算法层面:
-
学习率α\alphaα
-
β1,β2,ϵ\beta1,\beta2, \epsilonβ1,β2,ϵ10−810^{-8}10−8
-
λ\lambdaλ
-
网络层面:
-
hidden units:各隐藏层神经元个数
- layers:神经网络层数
2.4.1.1 调参技巧
对于调参,通常采用跟机器学习中介绍的网格搜索一致,让所有参数的可能组合在一起,得到N组结果。然后去测试每一组的效果去选择。
假设我们现在有两个参数
α\alphaαβ\betaβ
这样会有9种组合,[0.1, 0.8], [0.1, 0.88], [0.1, 0.9]…….
-
合理的参数设置
-
学习率α\alphaα
- 算法参数β\betaβ
注:而指数移动平均值参数:β 从 0.9 (相当于近10天的影响)增加到 0.9005 对结果(1/(1-β))几乎没有影响,而 β 从 0.999 到 0.9995 对结果的影响会较大,因为是指数级增加。通过介绍过的式子理解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+...
2.4.1.2 运行
通常我们有这么多参数组合,每一个组合运行训练都需要很长时间,但是如果资源允许的话,可以同时并行的训练多个参数模型,并观察效果。如果资源不允许的话,还是得一个模型一个模型的运行,并时刻观察损失的变化
所以对于这么多的超参数,调优是一件复杂的事情,怎么让这么多的超参数范围,工作效果还能达到更好,训练变得更容易呢?
2.4.2 批标准化(Batch Normalization)
Batch Normalization论文地址:[
其中最开头介绍是这样的:
训练深度神经网络很复杂,因为在训练期间每层输入的分布发生变化,因为前一层的参数发生了变化。这通过要求较低的学
习率和仔细的参数初始化来减慢训练速度,并且使得训练具有饱和非线性的模型变得非常困难。我们将这种现象称为** 内部协
变量偏移** ,并通过 **标准化层** 输入来解决问题。我们的方法的优势在于使标准化成为模型体系结构的一部分,并为每
个培训小批量执行标准化。批量标准化允许我们使用更高的学习率并且不太关心初始化。它还可以充当调节器,在某些情况
下可以消除对Dropout的需求。应用于最先进的图像分类模型,批量标准化实现了相同的精度,培训步骤减少了14倍,并
且显着地超过了原始模型。使用批量标准化网络的集合,我们改进了ImageNet分类的最佳发布结果:达到4.9%的前5个
验证错误(和4.8%的测试错误),超出了人类评估者的准确性。
首先我们还是回到之前,我们对输入特征 X 使用了标准化处理。标准化化后的优化得到了加速。
对于深层网络呢?我们接下来看一下这个公式,这是向量的表示。表示每Mini-batch有m个样本。
- m个样本的向量表示
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]
A[L]=g[L]A^{[L]}=g^{[L]}(Z^{[L]})A[L]=g[L](Z[L])
输入A[L−1]A^{[L-1]}A[L−1]A[L]A^{[L]}A[L]
深层网络当中不止是初始的特征输入,而到了隐藏层也有输出结果,所以我们是否能够对隐层的输入Z[L]Z^{[L]}Z[L]A[L]A^{[L]}A[L]
2.4.2.1 批标准化公式
[TutorialsPoint Python]
所以假设对于上图第二个四个神经元隐层。记做Z[l]Z^{[l]}Z[l]z[i][l]z^{[l]}_{[i]}z[i][l]lll
μ=1m∑iz(i)\mu = \frac{1}{m} \sum_i z^{(i)}μ=m1∑iz(i)
σ2=1m∑i(zi−μ)2\sigma^2 = \frac{1}{m} \sum_i {(z_i - \mu)}^2σ2=m1∑i(zi−μ)2
znorm(i)=z(i)−μσ2+ϵz_{norm}^{(i)} = \frac{z^{(i)} - \mu}{\sqrt{\sigma^2 + \epsilon}}znorm(i)=√σ2+ϵz(i)−μ
其中ϵ\epsilonϵ10−810^{-8}10−8z[i][l]z^{[l]}_{[i]}z[i][l]
z~(i)=γznorm(i)+β\tilde z^{(i)} = \gamma z^{(i)}_{norm} + \betaz~(i)=γznorm(i)+β
其中,γ\gammaγβ\betaβ
- 为什么要使用这样两个参数
如果各隐藏层的输入均值在靠近0的区域,即处于激活函数的线性区域,不利于训练非线性神经网络,从而得到效果较差的模型。因此,需要用 γ 和 β 对标准化后的结果做进一步处理。
2.4.2.2 过程图
每一层中都会有两个参数β,γ\beta, \gammaβ,γ
注:原论文的公式图
2.4.2.2 为什么批标准化能够是优化过程变得简单
我们之前在原文中标记了一个问题叫做叫做"internal covariate shift"。这个词翻译叫做协变量偏移,但是并不是很好理解。那么有一个解释叫做 在网络当中数据的分布会随着不同数据集改变 。这是网络中存在的问题。那我们一起来看一下数据本身分布是在这里会有什么问题。
也就是说如果我们在训练集中的数据分布如左图,那么网络当中学习到的分布状况也就是左图。那对于给定一个测试集中的数据,分布不一样。这个网络可能就不能准确去区分。这种情况下,一般要对模型进行重新训练。
Batch Normalization的作用就是减小Internal Covariate Shift 所带来的影响,让模型变得更加健壮,鲁棒性(Robustness)更强。即使输入的值改变了,由于 Batch Normalization 的作用,使得均值和方差保持固定(由每一层γ\gammaγβ\betaβ
2.4.2.3 BN总结
Batch Normalization 也起到微弱的正则化效果,但是不要将 Batch Normalization 作为正则化的手段,而是当作加速学习的方式。Batch Normalization主要解决的还是反向传播过程中的梯度问题(梯度消失和爆炸)。
2.4.3 总结
- 掌握基本的超参数以及调参技巧
- 掌握BN的原理以及作用
2.5 总结
[pytz 文档]
2.6 每日
- 1、梯度下降算法优化
对于给定这样的两个类别数据,请进行神经网络分类
-
要求
-
自实行并使用动量梯度进行优化算法
-
自实现并使用Adam进行优化算法
-
2、正则化
问题陈述:假如法国足球公司招聘AI专家。他们希望你推荐法国队的守门员应该踢球的位置,以便法国队的球员可以用他们的头来击球。
守门员将球踢到空中,每支球队的球员都在用头撞击球。我们提供了法国过去10场比赛位置数据集。
每个点对应于足球场上的位置,在法国守门员从足球场的左侧射球之后,足球运动员用他/她的头击球。
- 如果点是蓝色,则意味着法国球员设法用他们的头击球
- 如果点是红色,则表示其他球队的球员用他们的头击球
分类目的:使用深度学习模型找到守门员应该踢球的场地位置。
题目,要求采用两种自己实现的方式来进行预测:
- 自带有L2正则化的网络,λ=0.7\lambda=0.7λ=0.7
- 自实现带有Droupout的网络, keep_prob=0.86
结果:
