吴恩达深度学习笔记之改善神经网络(三)
2017-12-23 22:09
531 查看
3.1 调试处理(Tuning process)
神经网路的改变会涉及到许多不同的超参数的设置。下面我们介绍一些指导性原则。关于训练深度最难的事情之一就是,我们要处理的参数的数量,从学习速率α到momentum的β,如果使用momentum或者Adam优化算法的参数即β1,β2以及ε,也许我们还得选择隐藏层的层数,以及隐藏单元的数量。
实验证明,有一些超参数会比另外一些超参数重要,比如最广泛地学习应用是α,学习速率α是最重要的超参数。我们列举一下常用的超参数,如下所示:
红色的超参数最重要,其次是黄色的,然后是紫色的。
在早起的机器学习算法中,我们都是用网格取点的方式来确定哪个参数效果最好,如下图所示:
在深度学习领域,我们的做法是随机选择点,接着用这些随机选择的点实验超参数的效果,先用如下图举个例子:
假设我们有两个超参数需要调整,一是学习率α,二是Adam算法中的ε,我们实验了α的5个取值,发现无论ε如何取值,结果基本没什么变化,我们就可以发现哪个参数最重要了。如果有3个超参数,就用立方体搜索。
随机取值而不是网格取值,我们可以探索更多重要的超参数的潜在值。其次可以采用粗糙到精细的策略。如下所示:
3.2 超参数的训练与实践:pandas vs Caviar
深度学习中存在两种训练深度网络的方式。我们通常形象的称之为熊猫模型和鱼子酱方式。熊猫方式:
这种模型就是所谓的照看模型,通常是有庞大的数据组,但没有足够的计算资源,也就是说我们只能负担起实验一个模型或者一小批模型,这种情况下,我们可以逐渐改良它。
鱼子酱方式:
我们同时试验多种模型,我们设置一些超参数,尽管让其自己运行,然后获得多个学习曲线,不同模型学习不同的学习曲线,这种方式我们可以试验许多不同的参数设定,然后知识最后快速选择工作效果最好的那个。
如下图形象的表示这两种模型。
3.3 正则化网络的激活函数(Normalizing activation in a network)
在深度学习兴起后,最重要的一个思想是它的一种的Batch归一化算法。Batch归一化会使我们的参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定,超参数的范围会更庞大,工作效果会很好。当训练一个模型时,比如logistic回归时,我们知道,归一化输入会加速学习过程,我们再次过程中,计算平均值,从训练集中减去平均值,计算方差,接着根据方差,归一化我们的数据集。
那么更深的神经网络呢?其实对于更深的神经网络,我们同样可以归一化a值,比如下列神经网络的a[2],以更快的速度训练w[3],b[3],因为a[2]是下一层的输入值,所以会影响w[3],b[3]的训练。
下面就是Batch归一化的使用方法,假设给定神经网络的中间值z(1),z(2),z(3),…,z(m),此时我们要用下面4个式子进行batch归一化。
μ=1m∑iz(i)δ2=1m∑i(zi−μ)2z(i)norm=z(i)−μδ2+ε−−−−−√z˜(i)=γz(i)norm+β
(1)式计算平均值,(2)计算方差,(3)取每个z(i)值,使其规范化,加上ε作为分母,是为了始数值更加稳定,防止δ为0,所以现在我们已经把这些Z值标准化,化为含平均值为0和标准单位方差,但我们不想隐藏单元总是含有平均值为0和方差为1,也许隐藏单元有了不同的分布会有意义,我们要做的就是计算(4)式,这里γ和β是我们模型的学习参数,所以我们使用梯度下降或者一些其他的类型的梯度下降的算法,比如momentum或者Adam,用来更新γ和β,这里γ和β的作用是达到随意设置z˜(i)的值。事实上,如果γ=δ2+ε−−−−−√,β=μ,那么γz(i)norm+β的作用就是它会使得z˜(i)=z(i)。
Batch归一化的作用就是它适用的归一化过程不只是输入层,甚至同样适用于神经网络中的深度隐藏层,我们应用Batch归一化了一些影藏单元值中的平均值和方差。
3.4 将Batch Norm拟合进神经网络
我们知道,每个单元负责计算两件事,第一先计算,然后应用其到激活函数中再计算a,如下所示:上述是没有进行Batch归一化的做法,Batch归一化的做法是将z[1]进行归一化,简称BN,次过程将由β[1]和γ[l]两个参数进行控制,这一步会给我们一个新的规范化后的z[1]值,然后将其输入到激活函数中,得到a[1],然后再通过激活函数g,下图可以表示我们的计算流程:
由上图可知,batch归一化是发生在计算z和a之间的。如果我们使用的深度学习框架,通常我们不必自己把batch归一化步骤应用到batch归一化层,我们可以直接用下面一行代码实现batch归一化:
tf.nn.batch_normalization()
实践中,batch归一化通常和训练集的mini-batch一起使用,应用bacht归一化的方式如下:
与单个训练集基本相似。
最后我们来看看如何用batch归一化来使用梯度下降。
for t=1 . . . num of mini-batches
Computed forword prop on x{t}
In each hidden layer ,use BN to replace z[l] with z˜[l]
use backprop to compute dw[l],dβ[l],dγ[l]
updates parameters:
w[l]=w[l]−αdw[l],
β[l]=β[l]−αdβ[l],
γ[l]=γ[l]−αdγ[l]
上述步骤同样适用于momentum,RMSProp,Adam的梯度下降法。
3.5 Batch Norm 为什么有效?(why batch norm work?)
(1)batch归一化可以加速学习算法(2)batch归一化可以是我们的权重比我们的网络更滞后或者更深层。因为batch归一化减少了影藏值分布变化的数量,如果是绘制这些隐藏单元值得分布,batch归一化可确保无论其怎么样变化,某个神经网络的z1[l],z2[l]的均值和方差保持不变。因为β,γ可以限制前层的参数更新,会影响数值的分布程度。
(3)batch归一化还会有轻微的正则化效果。
3.6 测试时的Batch Norm(Batch Norm at test time)
Batch归一化讲我们的数据以mini-batch的形式逐一处理,但是在测试时,我们需要对每一个样本逐一处理。注意: μ和δ2是在整个mini-batch上进行计算。但是在测试同时处理,我们不可能讲一个mini-batch中的2056或者1024个样本,同时处理,因此我们需要用其他方式来得到μ,δ2,此时我们单独计算μ,δ2,在典型的Batch归一化中,我们需要用一个指数加权平均来估算,这个平均数涵盖了所有的mini-batch。
3.7 softmax 回归(softmax regression)
有一种logistic回归的一般式叫做softmax回归,能让我们在试图识别某以分类时做出预测。我们 举一个例子,假设我们建立一个神经网络,其输出层有4个人,我们要输出层单元的数字告诉我们,这4种类型中每一个概率有多大。如下:
z[l]=w[l]a[l−1]+b[l]
算出z之后,我们需要用softmax激活函数,这个激活函数对于softmax层而言有些不同,它的作用是这样的,我们要计算一个临时变量,我们把它叫做t=ez[l],z[l]是一个四维向量,t=ez[l]这是对所有元素求幂,t也是四维向量,然而输出a[l]也是四维向量,但是会归一化为1,如下所示:
a[l]=tj∑j=14tj
如下图所示是softmax激活函数的计算过程:
softmax激活函数的的特别之处在于,因为需要将所有可能的输出归一化,就需要输入一个向量,最后输出一个向量。
3.8 深度学习框架
现在主要存在一下一些深度学习框架,他们能够帮助我们更高效的训练我们的网络。相关文章推荐
- 吴恩达-深度学习笔记《改善深层神经网络:超参数调试、正则化以及优化》
- 吴恩达深度学习笔记之改善神经网络(一)
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(1-3)-- 浅层神经网络(转载)
- 吴恩达神经网络和深度学习课程自学笔记(二)之神经网络基础
- 吴恩达深度学习笔记一:神经网络和深度学习
- 吴恩达(Andrew Ng)深度学习工程师笔记 - 第一门课-神经网络和深度学习-第一周深度学习概论-第六节:课程资源
- 吴恩达深度学习课程笔记之卷积神经网络基本操作详解
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(1-4)-- 深层神经网络(转载)
- 深度学习第二课 改善深层神经网络:超参数调试、正则化以及优化 第三周超参数调试+Batch normalization笔记和作业
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(1-2)-- 神经网络基础
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(1-2)-- 神经网络基础
- 吴恩达深度学习课程笔记 1.2什么是神经网络?
- 深度学习与神经网络_吴恩达 学习笔记(二)
- [DeeplearningAI笔记]改善深层神经网络1.1_1.3深度学习实用层面_偏差/方差/欠拟合/过拟合/训练集/验证集/测试集
- 吴恩达深度学习入门学习笔记之神经网络和深度学习(第二周:神经网络基础)
- 吴恩达深度学习笔记 3.1~3.11 浅层神经网络
- 吴恩达深度学习入门学习笔记之神经网络和深度学习(第二周:神经网络基础)
- 吴恩达老师深度学习视频课笔记:单隐含层神经网络公式推导及C++实现(二分类)
- 吴恩达深度学习笔记 (补)1.1~1.5 神经网络概述
- 吴恩达深度学习视频笔记1-1:《神经网络和深度学习》之《深度学习概论》