首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深层神经网络参数调优(五) ——超参数调试、batch归一化、softmax回归

深层神经网络参数调优(五) ——超参数调试、batch归一化、softmax回归

作者头像
用户1327360
发布2018-03-07 10:41:16
1.8K0
发布2018-03-07 10:41:16
举报
文章被收录于专栏:决胜机器学习决胜机器学习

深层神经网络参数调优(五)

——超参数调试、batch归一化、softmax回归

(原创内容,转载请注明来源,谢谢)

一、超参数调试

1、超参数

超参数是不直接参与优化的参数,例如学习速率α、adam算法的β1、β2等,这些参数主要是影响学习的速率。

根据视频中ng的工作经验,超参数有其重要性,按照重要性分类,如下:

1)最重要

学习速率α

2)次重要

动量梯度下降的β、mini-batch的批次大小、神经网络中隐藏层的神经元数量

3)再次

神经网络层数、α衰减涉及的衰减率与衰减公式

4)基本不用改变

adam算法的β1=0.9,β2=0.999,ε=10-8等。

2、超参数调试方式

下图左边是普通神经网络的调试,一般会用网格形,然后逐个去尝试。但是对于神经网络来说,建议用你右边的随机的方式,这样每个点,其中涉及的若干维的超参数,会用到不同的值去尝试。

经过上面的尝试,接着会发现在某一片的区域内,效果比较好。此时,可以收缩范围,在一个小范围内,再随机取一些超参数的取值,进行尝试。

3、超参数是随机

1)普通随机

如果是一些取值范围的数量级相似的参数,例如隐藏层神经元个数一般取50~100个,层数取2~4层,这种就就可以直接随机取。

2)分段随机

对于取值范围不完全是一个数量级的,例如α,其取值范围在0.0001~1之间。如果此时直接用随机取,那么会出现一个问题,90%概率会落在0.1~1之间,这个不是我们要的随机的结果。

因此,可以按照数量级进行分段,分为0.0001~0.001~0.01~0.1~1,这4段内,每段都随机取一些数,进行随机取值。

实际做法,可以为: r =-4 * np.random.randn() , α = np.power(10,r)。这样r的取值会在-4~0之间,而α则是10的-4~0之间,即可以取到不同的数量级。这时可以给α再乘以一个1~9的随机数,就可以获取到对应的随机值了。

对于动量梯度下降的β,也可以这样做。其需要的值是在0.9~0.999,可以反向随机,随机出0.001~0.1的数,再用1减去这个数,即可得到所需的结果。

对于需要这样取值的原因,拿β举例,其从0.9变成0.9005,根据公式,影响范围是等于1/(1-β),实际上影响的随机数的范围是从10个变成20个;而如果从0.999变成0.9995,则影响范围从1000个变成2000个,有很明显的不一样。

4、训练模式

有两种模式,一种类似照顾一个婴儿,则会对模型悉心照料,经常去更改参数,以期训练出更好的结果;另一种类似鱼子模式,一次性对一个模型拿一堆的超参数去尝试,让其自己跑,最终最好的那个则作为最佳选择。

二、Batch归一化

1、概述

归一化的概念,机器学习的时候已经提到过,主要是对于样本特征值之间,如果数量级差距太大,可以用这种方式,保证样本维持在一个数量级。

深度学习中,不止一个层次,因此,就引入了batch归一化,其不止对输入样本进行归一化,还对中间的每个隐藏层的输出进行归一化,并且还可以自定均值和方差。

这里要说明的是,每层的输出是a,但是更常见的是,在计算出z的时候,就对其进行初始化,而不是激励函数之后进行初始化。

2、公式

计算方式,和普通的归一化是一样的,区别在于:

1)均值和方差是可以控制的,即最终返回的并不是归一化的结果,而是归一化后的值乘以方差超参数,再加上均值超参数的结果。

2)这个是每一层都用到的。

3)ε是防止出现除以0,是一个很小的数字。

4)当r和β的值正好等于归一化算出来的均值和方差,则此时的z和batch归一化之前的z的值是一样的。

5)这里的β,和adam、动量、RMS中的β,没有任何关系。

3、前向传播与反向传播

根据上面的说明,batch即加在z和a之间,即a的激励函数g(z)中的z,是用batch归一化后的值。

需要特别说明的是,由于batch归一化,用参数重置了均值,因此之前一直用到的wx+b中的b,在带有batch归一化的神经网络中,可以忽略,因为其值被包含在β中,计算b是没有意义的,可以省略。

如果batch用于mini-batch,则对于每个样本子集,都运行一遍,实际过程是一样的。

梯度下降的过程,实际上也是一样的,但是由于新引入的r和β,以及去掉了b,因此所需要计算的参数有所不同,但是过程是一样的。

下面的算法,是用普通的梯度下降算法。实际上,也可以用adam或者其他算法,来更新w、β、r。

4、batch归一化起作用的原因

1)普通训练存在的问题

假设现在已经训练好关于样本集X的分类器,可以分类出y。当样本集的数值分布有所变化时,如果不用batch,则需要调整算法。

实际应用中,可以认为已经训练好判别图片是否是猫,但是样本中只有黑猫。现在要考虑其他颜色的猫,则原来的分类器不好实现。

下图中第一个数据分布和第二个数据分布,实际上根据第一个数据分布,分类出绿色的线的可能是很低的,因此对于第二个分布,则原来训练的东西可能没法用。

2)解决

batch有效解决样本数据分布散乱的问题。考虑神经网络的某一层,现在假设前面的层是黑盒,仅提供输出的a,对于本层,做了batch后,相当于让之前的输出更加平缓,则样本分布不均的事情也被这样给减少了影响。

再考虑到每层都用了batch,则样本分布不均的影响会被逐渐消除。

3)其他优点

对于mini-batch,如果用上batch归一化,其还可以优化mini中每次只取一部分值,导致的波动太大的问题。batch让mini的数值也都趋向于设定的均值和方差。

5、batch的测试方式

由于batch,每次的计算都需要用到所有数据的均值和方差,但是测试的时候,每次只有1条数据,故没法独立计算均值和方差。

解决方案是,在训练的时候,就存好每层的均值和方差,在测试的时候直接使用。

另外,为了速度更快,通常计算均值和方差,都是用指数加权平均。

三、sfotmax归一化

1、概述

softmax归一化,就是解决多分类的问题,相当于是对logistic回归的一种扩种。假设分类结果的数量是C,则最终输出层的神经元个数就是C,且每个神经元的输出,表示的是结果是该神经元表示的值的概率。

因此,输出层所有输出结果的和,为1。

2、计算方式

具体计算方式,即在最后一层,对于输出,进行了一个计算,具体公式见下图,可以看到如果某个神经元对应的值比较大,则用softmax计算后,其概率也是比较接近1的。

3、分类效果

softmax类似logistic,是一种线性分类器,因此多分类结果类似下图:

4、softmax和hardmax

与softmax对应,有一种称为hardmax,其是将结果的若干值,取最大值对于的元素,将其设定为1,其他元素设定为0,比较简单粗暴,故称为hardmax。

而softmax相对来说缓和一些,不会直接返回0和1,而是返回对应的概率。

5、损失函数与代价函数

损失函数,还是类似logistic的方式,但是根据正确分类结果y,可以看出,正确结果是一种hardmax的结果,因此只有1个1,其他都是0,这就造成计算损失函数的时候,求和实际上变成仅仅对预计需要的那个元素的log计算。

这也比较好理解,为了让代价函数小,就是要那个预计结果对应的元素尽量大,尽量接近1。由于所有的输出的和是1,一个元素增大,其他元素自然就减小了。

代价函数还是损失函数的和,即所有样本对应损失函数的和(对于mini-batch即样本子集)。

四、简单tensorfow代码

ng这一章中,还说到了tf,但是没有详细讲,这个后面我会详细其学习,这里就不展开来说。

对于tf,只需要定义代价函数、定义梯度下降的方式,保证能够顺利实现前向传播,而框架会自己其求导和计算反向传播,非常方便。

五、总结

针对神经网络的各个部分,总结如下:

1)输入层

输入层,可以做归一化处理,就会用到batch归一化。

2)过拟合

预防过拟合,可以用到正则化、dropout(随机失活)。

3)验证效果

验证学习效果,可以用到梯度检验。

4)数据集的使用

为了在深度学习中优化更快,可以将数据集拆分成子集,这就有了随机梯度下降算法和mini-batch算法。

5)加快学习速度

为了让优化可以直接朝着最优值进行,而避免了分散,则可以用到动量梯度下降、RMSprop、Adam算法,其中Adam最常用。

6)减少解决最优值的抖动

为了减少在接近最优值区域内的抖动,可以用到学习速率衰减。

7)超参数的选择

超参数的选择,需要在一个指定的范围,为了避免随机过程不符合要求,可以分段随机。

8)多分类结果

对于超过2个分类结果的算法,则可以用到多分类算法softmax来取代logistic。

上述每点内部只能选一个(有的在不同的层还可以有不同的选择),但是每点之间可以组合使用,例如可以是batch归一化+正则化+mini-batch+softmax+adam等,根据实际需要可以结合起来效果更好。

——written by linhxx 2018.02.08

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 决胜机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档