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

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

——超参数调试、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

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2018-02-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据挖掘DT机器学习

你看到的最直白清晰的CNN讲解

这篇博客介绍的是深度神经网络中常用在图像处理的模型——卷积神经网络(CNN),CNN在图像分类中(如kaggle的猫狗大战)大显身手。这篇博客将带你了解图像在...

40510
来自专栏IT派

福利 | 纵览机器学习基本词汇与概念

机器之心曾开放过人工智能术语集 ,该术语库项目目前收集了人工智能领域 700 多个专业术语,但仍需要与各位读者共同完善与修正。本文编译自谷歌开发者机器学习术语表...

3779
来自专栏真皮专栏

Some methods of deep learning and dimensionality reduction

上一篇主要是讲了全连接神经网络,这里主要讲的就是深度学习网络的一些设计以及一些权值的设置。神经网络可以根据模型的层数,模型的复杂度和神经元的多少大致可以分成两类...

561
来自专栏IT技术精选文摘

机器学习之预测分析模型

介绍 预测分析是基于以前收集的数据来预测未来的结果。它包括两个阶段: 训练阶段:从训练数据中学习一个模型。 预测阶段:使用模型预测未知或未来的结果。 预测模...

2306
来自专栏深度学习自然语言处理

深度学习之RNN、LSTM及正向反向传播原理

总说 RNN( Recurrent Neural Network 循环(递归)神经网络) 跟人的大脑记忆差不多。我们的任何决定,想法都是根据我们之前已经学到的...

7309
来自专栏技术小站

吴恩达深度学习笔记 course2 week2 优化算法

batch:之前所用的都是将m个样本放在一起组成向量来就行训练,称为batch,所存在的问题:当样本的数量比较庞大的时候,迭代一次所需要的时间比较多

621
来自专栏算法channel

深度学习|神经网络模型简介和梯度下降求解

《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来...

4118
来自专栏深度学习

神经网络相关名词解释

很多人认为深度学习很枯燥,大部分情况是因为对深度学习的学术词语,特别是专有名词很困惑,即便对相关从业者,亦很难深入浅出地解释这些词语的含义。  相信读过此文的圈...

41910
来自专栏闪电gogogo的专栏

吴恩达机器学习笔记

(1)Field of study that gives computers the ability to learn without being explic...

651
来自专栏PPV课数据科学社区

收藏!机器学习与深度学习面试问题总结.....

后向传播是在求解损失函数L对参数w求导时候用到的方法,目的是通过链式法则对参数进行一层一层的求导。这里重点强调:要将参数进行随机初始化而不是全部置0,否则所有隐...

772

扫描关注云+社区