Task1.1
主要介绍了局部极小值和鞍点两个概念,这两个概念在这里主要是用于解决深度学习中优化失败,即训练损失不够小的问题。
3.1.1介绍了同时身为临界值,二者之间的区别。局部极小值是真正使得损失降到最低的点,在其邻域内的任何一个点所对应的训练损失都比这个点的大;而鞍点则不同,虽然鞍点的梯度也为零,但在其邻域内存在对应的训练损失更小的点,因此只要找对方向就还存在进一步优化的空间。这么看来,鞍点是更具有研究价值的点。
3.1.2讲述了当我们遇到梯度为零的点时,如何判断它是局部极小值还是鞍点。这里介绍的一种方法是计算海森矩阵,根据海森矩阵的特征值来进行判断。如果海森矩阵存在负的特征值,那么将其对应的特征向量与给定的参数相加就可以得到一个损失更低的点。结合图例可以很清楚地理解这种方法,但其缺点也很明显,就是计算海森矩阵及其特征值特征向量的工作量非常大,使用起来并不方便。
3.1.3名为逃离鞍点的方法,但这里并没有给出详细的方法。从神话故事的角度切入引起了我们的思考。当我们从二维空间转变到三维空间时,原本的局部极小值变成了鞍点,在我们习惯的三维及以下空间,这种变化可以很直观地体现出来;而当我们遇到三维空间的局部极小值时,在四维甚至更高的维度去观察它,可能也会发现其变成了一个鞍点。而我们平时观测的参数的数量往往是非常巨大的,因此遇到鞍点的数量可能远大于局部极小值的数量。图3.6支持了这一观点,因此在很多情况下当我们的梯度接近于0时,有很大的概率只是遇到了鞍点,而并非损失已经无法继续降低。
Task1.2
主要介绍了批量和动量两个概念。批量有点像是在计算梯度的过程中对数据进行分组,遍历所有批量的过程称为一个回合,每个回合会计算出一个梯度。
3.2.1中介绍了两种梯度下降法,分别是批量梯度下降法和随机梯度下降法。前者的批量大小等于训练数据大小,1个回合中仅包含1个批量的过程;后者的批量大小为1,1个回合中需遍历与训练数据大小相同的批量的过程。在确定批量大小时,我们往往会从计算时间和优化结果两个层面来进行评估。计算时间的公式如下所示:
跑完1个回合的时间=1个回合所包含的更新个数*跑完1次更新的时间
=(训练数据总数/批量大小) *跑完1次更新的时间
一般来说,批量大小越大,1次更新所花费的时间也就越长,但由于并行计算能力的存在,当批量大小不大时,不同批量大小跑完1次更新所花费的时间也十分接近。因此设置适当的批量大小可以减少时间的耗费。在实际的计算过程中,大批量所花费的时间往往比小批量更少。
而从另一个层面来说,小批量梯度的方向比较存在噪声,这使得其在优化结果上的表现更为出众,因为不同批量所对应的损失函数并不相同,因此其不容易在鞍点被卡住,从而能够顺利地继续向着损失降低的方向训练。而大批量由于其较强的稳定性,当遇到局部最小值或鞍点时就会被卡住,从而无法继续进行优化。因此,大批量和小批量分别有各自的优缺点,需要根据实际需要进行调整。
3.2.2介绍了另一种用于对抗鞍点和局部最小值的方法——动量法。在这种方法下,参数的移动是由梯度的反方向和前一次移动的方向来共同决定的,或者说是由之前所有梯度加权来共同决定的。它与一般梯度下降的区别在于,一般梯度下降会被困在局部最小值和鞍点处,虽然在负梯度的单一作用下会导致无法进行下一步的移动,但在引入动量之后,下一步的移动也会受到前一次移动的作用,因此在二者的共同作用下,即使遇到鞍点或者局部最小值也是有可能得以继续移动的,从而也就有可能得到一个更好的结果。