目录
为什么不能将权重初始值设为0呢?严格地说,为什么不能将权重初始 值设成一样的值呢?
接着,我们尝试使用Xavier Glorot等人的论文[9]中推荐的权重初始值(俗 称“Xavier初始值”)
优化器
泛化能力是指处理未被观察过的数据
SGD的缺点
是梯度的方向并没有指向最小值的方向,走的“之”字
Momentum
比SGD好在 在下坡时会加速(模拟的小球在山上滚动,在这个力的作用下,物体的速度增 加这一物理法则)和SGD相比,我们发现 “之”字形的“程度”减轻了
AdaGrad
学习率衰减即随着学习的进行,使学习率逐渐减小
AdaGrad会为参数的每个元素适当地调整学习率,与此同时进行学习
Adam
Momentum参照小球在碗中滚动的物理规则进行移动,AdaGrad为参 数的每个元素适当地调整更新步伐
果将这两个方法融合在一起
Adam会设置 3个超参数。一个是学习率(论文中以α出现),另外两 个是一次momentum系数β1和二次momentum系数β2。根据论文, 标准的设定值是β1为 0.9,β2 为 0.999。设置了这些值后,大多数情 况下都能顺利运行。
总截图
权重
权重的初始值
权重的初始值特别重要。实际上,设定什么样的 权重初始值,经常关系到神经网络的学习能否成功
为什么不能将权重初始值设为0呢?严格地说,为什么不能将权重初始 值设成一样的值呢?
这是因为在误差反向传播法中,所有的权重值都会进行 相同的更新。比如,在2层神经网络中,假设第1层和第2层的权重为0。这 样一来,正向传播时,因为输入层的权重为0,所以第2层的神经元全部会 被传递相同的值。第2层的神经元中全部输入相同的值,这意味着反向传播 时第2层的权重全部都会进行相同的更新
为了防止“权重均一化” (严格地讲,是为了瓦解权重的对称结构),必须随机生成初始值。
隐藏层的激活值的分布
有一个实验就是用不同的权重初始值 一个初始值是1 一个是0.01络(激活函数使用 sigmoid函数)
将1000随机数据输给5个输出层
发现数据经过激活函数或集中分布在0 1 这会造成梯度消失
接着,我们尝试使用Xavier Glorot等人的论文[9]中推荐的权重初始值(俗 称“Xavier初始值”)
使用Xavier初始值后,前一层的节点数越多,要设定为目标节点的初始 值的权重尺度就越小。
ReLU的权重初始值
首先说一点Xavier初始值是以激活函数是线性函数为前提而推导出来的
sigmoid函数和tanh函数左右对称,且中央附近可以视作线性函数,所以适 合使用Xavier初始值
但当激活函数使用ReLU时,一般推荐使用ReLU专 用的初始值,也就是Kaiming He等人推荐的初始值,也称为“He初始值”
Batch Normalization
为了使各层拥有适当的广度,“强制性”地调整激活值的分布 会怎样呢?
实际上,Batch Normalization[11]方法就是基于这个想法而产生的。
Batch Normalization 的算法
为什么Batch Norm这么惹人注目呢?因为Batch Norm有以下优点。
- 抑制过拟合(降低Dropout等的必要性)。
- 不那么依赖初始值(对于初始值不用那么神经质)
- 可以使学习快速进行(可以增大学习率)。
Batch Norm的思路是调整各层的激活值分布使其拥有适当的广度。
以进行学习时的mini-batch为单位,按minibatch进行正规化。具体而言,就是进行使数据分布的均值为0、方差为1的 正规化。
非常简单。通过将这个处理插入到 激活函数的前面(或者后面)A,可以减小数据分布的偏向。
Batch Norm层会对正规化后的数据进行缩放和平移的变换
正则化
过拟合原因
发生过拟合的原因,主要有以下两个。
- 模型拥有大量参数、表现力强。
- 训练数据少。
权值衰减
权值衰减是一直以来经常被使用的一种抑制过拟合的方法
。该方法通过 在学习的过程中对大的权重进行惩罚,来抑制过拟合。
为损失函数加上权重的L2范 数的权值衰减方法。
Dropout
训练时,随机 选出隐藏层的神经元,然后将其删除。被删除的神经元不再进行信号的传递
超参数的验证
神经网络中,除了权重和偏置等参数,超参数(hyper-parameter)也经 常出现。
这里所说的超参数是指,比如各层的神经元数量、batch大小、参 数更新时的学习率或权值衰减等
如果这些超参数没有设置合适的值,模型 的性能就会很差。虽然超参数的取值非常重要,但是在决定超参数的过程中 一般会伴随很多的试错。
本节将介绍尽可能高效地寻找超参数的值的方法。
验证数据
之前我们使用的数据集分成了训练数据和测试数据,训练数据用于学习, 测试数据用于评估泛化能力
不能使用测试数据评估超参数的性能。这一点非常重要,但也容易被忽视。
为什么不能用测试数据评估超参数的性能呢?
这是因为如果使用测试数 据调整超参数,超参数的值会对测试数据发生过拟合
超参数的最优化
在超参数的最优化中,减少学习的epoch,缩短一次评估所需的时间 是一个不错的办法
步骤0 设定超参数的范围。
步骤1 从设定的超参数范围中随机采样。
步骤2 使用步骤1中采样到的超参数的值进行学习,通过验证数据评估识别精 度(但是要将epoch设置得很小)。
步骤3 重复步骤1和步骤2(100次等),根据它们的识别精度的结果,缩小超参 数的范围。
在超参数的最优化中,如果需要更精炼的方法,可以使用贝叶斯最优 化(Bayesian optimization)。贝叶斯最优化运用以贝叶斯定理为中 心的数学理论,能够更加严密、高效地进行最优化。详细内容请 参 考 论 文“Practical Bayesian Optimization of Machine Learning Algorithms”[16]等
卷积神经网络
Affine层实现了全连接层
学会的就略过了
批处理
神经网络的处理中进行了将输入数据打包的批处理。之前的全连接神经 网络的实现也对应了批处理,通过批处理,能够实现处理的高效化和学习时 对mini-batch的对应。
我们希望卷积运算也同样对应批处理。为此,需要将在各层间传递的数 据保存为4维数据。具体地讲,就是按(batch_num, channel, height, width) 的顺序保存数据。比如,将图7-12中的处理改成对N个数据进行批处理时, 数据的形状如图7-13所示。
这就是为什么要reshape(加一个维度
基于 im2col的展开
如果老老实实地实现卷积运算,估计要重复好几层的for语句。这样的 实现有点麻烦,还慢
im2col是一个函数,将输入数据展开以适合滤波器(权重)。如图7-17所示, 对3维的输入数据应用im2col后,数据转换为2维矩阵(正确地讲,是把包含 批数量的4维数据转换成了2维数据)。
im2col会把输入数据展开以适合滤波器(权重)。具体地说,如图7-18所示, 对于输入数据,将应用滤波器的区域(3维方块)横向展开为1列。im2col会 在所有应用滤波器的地方进行这个展开处理。
在 滤波器的应用区域重叠的情况下,使用im2col展开后,展开后的元素个数会 多于原方块的元素个数。因此,使用im2col的实现存在比普通的实现消耗更 多内存的缺点。但是,汇总成一个大的矩阵进行计算,对计算机的计算颇有 益处。
transpose会更改多维数组的轴的顺序
深度学习
只需通过 叠加层,就可以创建深度网络。本章我们将看一下深度学习的性质、课题和 可能性,然后对当前的深度学习进行概括性的说明。
加深网络
如图8-1所示,这个网络的层比之前实现的网络都更深。这里使用的卷 积层全都是3 × 3的小型滤波器,特点是随着层的加深,通道数变大(卷积 层的通道数从前面的层开始按顺序以16、16、32、32、64、64的方式增加)。 此外,如图8-1所示,插入了池化层,以逐渐减小中间数据的空间大小;并且, 后面的全连接层中使用了Dropout层。
这个网络使用He初始值作为权重的初始值,使用Adam更新权重参数。 把上述内容总结起来,这个网络有如下特点。 • 基于3×3的小型滤波器的卷积层。 • 激活函数是ReLU。 • 全连接层的后面使用Dropout层。 • 基于Adam的最优化。 • 使用He初始值作为权重初始值。
参考刚才排行榜中前几名的方法,可以发现进一步提高识别精度的技术和 线索。比如,集成学习、学习率衰减、Data Augmentation(数据扩充)等都有 助于提高识别精度。
Data Augmentation
对于输入图像,通过施加旋转、垂直或水平方向上 的移动等微小变化,增加图像的数量。