- 对于神经网络的 输出层, 一般而言, 回归问题采用
恒等函数
:a(x)=xa(x)=xa(x)=x, 分类问题采用softmax
函数 :yk^=eak∑i=1neaihat{y_k}=frac{e^{a_{k}}}{sum_{i=1}^ne^{a_i}}yk^=∑i=1neaieak softmax
的特征:
- softmax 的输出总和为 1
- 可以把 softmax 的输出解释为概率
- 一般而言, 输出层 的 softmax 函数会被省略 (原因见P68)
-
神经网络的学习中所用的指标称为
损失函数(loss function)
, 一般使用均方误差(mean squared error
:E=1n∑k(yk^−yk)2E=frac1nsum_k(hat{y_k}-y_k)^2E=n1k∑(yk^−yk)2或交叉熵误差 (cross entropy error)
:E=−∑kyklogyk^E=-sum_ky_klog hat{y_k}E=−k∑yklogyk^
注意:
上面两式的 yky_kyk(标签) 为独热编码的形式, 即只有正确标签为 1 ,其他均为 0.y^hat{y}y^ 为模型预测.
因此, 交叉熵误差 实际上只是计算对应正确解标签的输出的自然对数. 比如, 假设正确解标签的索引是 “2”, 与之对应的神经网络的输出是0.6, 则交叉熵误差是−log(0.6)=0.51-log(0.6)=0.51−log(0.6)=0.51; 若 “2” 对应的输出是 0.1, 则交叉熵误差为 −log0.1=2.30-log0.1=2.30−log0.1=2.30 (就很大). 也就是说, 交叉熵误差的值是由正确解标签所对应的的输出结果决定的. ( 即模型预测正确标签的概率 ) (P87) -
当我们使用
batch gradient descent
进行模型优化时, 实际上是对 所有训练数据的损失函数的和 进行优化.这样计算代价太大. 以交叉熵误差为例, 我们可以通过求平均损失函数
来解决这个问题:E=−1N∑n∑ktnk logynkE=-frac1Nsum_nsum_kt_{nk} log y_{nk}E=−N1n∑k∑tnk logynk通过这样的平均化, 可以获得和训练数据的数量无关的统一指标. 比如, 即便训练数据有 1000 或 10000 个 , 也可以求得单个数据的平均损失函数.
有了平均损失函数
, 我们就可以使用mini-batch
来对模型进行训练了. -
Momentum
没有学习率衰减,adagrad
和adam
有学习率衰减. -
Batch Normalization
的思路是调整各层的激活值分布使其拥有适当的广度. 为此, 要向神经网络中插入对数据分布进行正规化的层, 即 Batch Normalization 层.Batch Norm, 顾名思义就是以进行学习时的 mini-batch 为单位, 按 mini-batch 进行正规化. 具体而言, 就是进行使数据分布的均值为 0, 方差为 1 的正规化.
为什么 Batch Norm 这么惹人注目呢?因为 Batch Norm 有以下 优点:
- 可以使学习快速进行 ( 可以增大学习率 )
- 不那么依赖初始值 ( 对于初始值不用那么神经质 )
- 抑制过拟合 ( 降低 Dropout 等的必要性 )
-
抑制
过拟合
的方法:- 权值衰减
- Dropout
-
超参数(hyper-parameter)
有哪些:
- 各层神经元的数量
- batch 大小
- 学习率
- 权值衰减
-
超参数的优化:
有报告显示, 在进行神经网络的超参数的最优化时, 与
网格搜索
等有规律的搜索相比,随机采样
的搜索方式更好. 这是因为在多个超参数中, 各个超参数对最终的识别精度的影响程度不同.在超参数的最优化中, 要注意的是深度学习需要很长时间(比如, 几天或几周). 因此, 在超参数的搜索中, 需要尽早放弃那些不符合逻辑的超参数. 于是, 在超参数的最优化中, 减少学习的 epoch, 缩短一次评估所需的时间是一个不错的办法.
超参数最优化步骤简单归纳如下:
- 设定超参数的范围
- 从设定的超参数范围中随机采样
- 使用步骤 2 中采样得到的超参数的值进行学习, 通过验证数据评估识别精度(但是要将epoch设置的很小).
- 重复步骤 2 和步骤 3 (100次等), 根据它们的识别精度的结果, 缩小超参数的范围.
-
卷积层
和全连接层
的比较全连接层忽视输入数据的形状, 将全部输入数据作为相同的神经元(同一维度的神经元)处理, 所以无法利用与形状相关的信息.
而卷积层可以保持形状不变. 当输入数据是图像时, 卷积层会以 3 维数据的形式接受输入数据, 并同样以3 维数据的形式输出至下一层. 因此, 在 CNN 中,可以正确理解图像等具有形状的数据.
-
卷积层进行的处理就是卷积运算. 卷积运算相当于图像处理中的 “滤波运算”. 因此卷积层也叫
滤波器(filter)
-
同一卷积层含多个滤波器的优点: 不同滤波器有不同的权重参数, 它们可以对上一层网络提取不同的特征信息
-
在进行卷积层的处理之前, 有时要向输入数据的周围填入固定的数据(比如 0 等), 这称为
填充 (padding)
. 幅度为 1 的填充是指用幅度为 1 像素的 0 填充周围.使用填充主要是为了调整输出的大小. 比如, 对大小为 (4,4) 的输入数据应用 (3,3) 的滤波器时, 输出大小变为 (2,2) , 如此反复运算最后的输出就会变为 1, 将无法继续卷积运算. 使用填充就可以保持数据大小(scale)不变.
-
应用滤波器的位置间隔称为
步幅(stride)
.增大步幅后, 输出大小会变小. 而增大填充后, 输出大小会变大.OH=H+2P−FHS−1OW=W+2P−FWS−1egin{aligned} OH&=frac{H+2P-FH}{S}-1 \ OW&=frac{W+2P-FW}{S}-1 end{aligned}OHOW=SH+2P−FH−1=SW+2P−FW−1
-
在 3 维数据的卷积运算中, 输入数据和滤波器的 通道数 要设为相同的值.
如果要在通道方向上也拥有多个卷积运算的输出, 该怎么做呢? 为此, 就需要用到多个滤波器 (权重).(P211)
-
批处理
举例: 将保存 100 个图像数据的 100 个二维数组 (28×28) 展开成 100 个一维数组 (28×28 列). 通过批处理可以实现处理的高效化和学习时对 mini-batch 的对应.
-
池化层
是可以省略的.池化是缩小高, 长方向上的空间的运算. 一般来说, 池化的窗口大小会和步幅设定成相同的值. 比如, 3×3 的窗口的步幅会设为 3.除了
Max池化
外, 还有Average池化
等. 相对于 Max池化 是从目标区域中取出最大值, Average池化 则是计算目标区域的平均值. 在图像识别领域, 主要使用 Max 池化. -
在获取图像的卷积特征后, 通过
最大池采样
方法对卷积特征进行降维. 我们将卷积特征划分为数个 n×n 的不相交区域, 用这些区域的最大(或平均)特征来表示降维后的卷积特征. 这些降维后的特征更容易进行分类. -
池化层的特征
- 没有要学习的参数.
池化层和卷积层不同,没有要学习的参数. 池化只是从目标区域中取最大值 (或者平均值), 所以不存在要学习的参数. - 通道数不发生变化
经过池化运算, 输入数据和输出数据的通道数不会发生变化. - 对微小的位置变化具有鲁棒性(健壮)
输入数据发生微小偏差时, 池化仍会返回相同的结果, 池化会吸收输入数据的偏差. - 减小计算复杂度
- 没有要学习的参数.
-
深度学习喜欢 小而深, 任何一个大卷积层都可以由几个小卷积层叠加来等效, 且后者的复杂度大大低于前者