您的位置:首页 > 理论基础 > 计算机网络

吴恩达深度学习笔记之改善神经网络(三)

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 深度学习框架

现在主要存在一下一些深度学习框架,他们能够帮助我们更高效的训练我们的网络。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐