对神经网络来说,目标函数具有组合的形式。如何计算梯度呢?有两种常见的方法可以计算:
(i) 解析微分:知道函数形式时,只需使用链式法则(基本微积分)计算计算导数。
(ii) 有限差分近似微分:这种方法运算量很大,因为函数求职的个数是 O(N),其中 N 是参数的个数。与解析微分相比,这种方法运算量极大。但是,有限差分通常用于在调试时验证反向传播实现。
2 — 随机梯度下降法对梯度下降的一种直观理解方法是,想象一条源自山顶向下的河流。梯度下降的目标正是河流努力要达到的目标:到达最低端(山脚处)。
现在,如果山势能够使河流在到达最终目的地之前(即山麓最低处)不必完全停留,这正是我们想要的理想情况。在机器学习中,这相当于是说,我们已经从初始点(山顶)开始找到解决方案的全局最小值(或最优值)。然而,可能由于地形的原因,河道中会形成几个坑洼,会迫使河流陷入困境并停滞不前。在机器学习术语中,这些坑洼被称为局部最小值,都是不可取的。有很多方法可以解决这个问题。限于篇幅,我不打算讨论这个问题。
因此,梯度下降法很容易陷入局部最小值,这取决于地势(或机器学习术语中的函数)。但是,当你有一种特殊的山地地势(比如像一只碗,用机器学习术语称为凸函数)时,算法总是能够保证找到最优解。你可以想象一下一条河流。这些特殊的地形(又称凸函数)对机器学习中的优化总是有好处。此外,你遵循什么样的路径,要取决于你最初是从山顶什么地方开始的(即函数的初始值)。类似的,根据不同的河流速度(即梯度下降算法的学习率或步长),你可能会以不同的方式到达最终目的地。这两个因素都会影响你是否掉坑(局部最小值)或能否避免。
3 — 学习率衰减调整随机梯度下降优化算法的学习率可以提高性能并缩短训练时间。有时这被称为学习率退火( learning rate annealing)或自适应学习率(adaptive learning rates)。在训练过程中,最简单、也是最常用的适应学习率的方法是逐渐降低学习率的技术。在训练初期使用较大的学习率,可以对学习率进行大幅调整;在训练后期,降低学习率,以一个较小的速率更新权重。这种方法在早期可以快速学习获得较好的权重,并在后期对权重进行微调。
两种常用且易于使用的学习率衰减方法如下:
- 线性逐步降低学习率。
- 在特定时点大幅降低学习率。
具有大量参数的深度神经网络是非常强大的机器学习系统。然而,在这样的网络中,过拟合是一个严重的问题。大型网络的使用起来也很慢,因此在测试时结合许多不同大型神经网络的预测,很难处理过拟合问题。Dropout 是解决这个问题的一种方法。
关键思想是在训练过程中从神经网络中随机删除单元 (以及它们的连接)。这就防止了单位之间的过度适应。在训练过程中,从指数级不同的“稀疏”网络中抽取 dropout 样本。在测试时,只需使用具有较小权重的单解开网络(single untwined network),就可以很容易地估计出所有这些稀疏网络的平均预测效果。这就大大减少了过拟合,并且对其他正则化方法进行了重大改进。Dropout 已被证明可以改善神经网络在视觉、语音识别、文档分类和计算生物学等监督学习的任务性能,在许多基准数据集上获得了最优秀的结果。
5 — 最大池化最大池化(Max pooling)是基于采样的离散化过程。目标是对输入表征(如图像、隐藏层输出矩阵等)进行降采样(down-sample),减小其维数,并允许对包含在子区域中的特征进行假设。