目录
六、Don't afraid of saddle point
三、Without Adaptive Learning Rate
摘要
在本周的学习中,我主要学习了机器学习攻略,鞍点和局部最小值,batch size和自动调整学习率。学到了当测试集上的loss不好时,是因为哪些原因造成的。还学到了当gradient不在进行时,不一定是遇到了local minimal,还有可能是遇到了saddle point。学到了small batch和large batch的好坏。最后学习了如何自动调整学习率,使得gradient能有更好的结果。
ABSTRACT
In this week's learning, I mainly learned machine learning tactics, saddle points and local minima, batch size and automatic adjustment of learning rate. I learned that when the loss on the test set is not good, it is caused by some reasons. I also learned that when the gradient does not proceed, it is not necessarily a local minimum, but may also be a saddle point. I learned the pros and cons of small batch and large batch. Finally, I learned how to automatically adjust the learning rate to get better gradients.
一、Framework of ML
Step1:定义一组具有未知参数的函数,这一组参数统一用来表示
Step2:从训练数据上计算未知参数为某组的loss
Step3:优化参数,以得到使loss值最低的一组参数
然后把最优的一组参数代入到function中,根据输入的测试数据来得到相应的预测值。
二、机器学习攻略
如果所定义的model在测试集上的表现不好,那么就要考虑一下问题:
一、训练集上的loss很大
训练集上的loss很大要考虑两方面内容:
一、model bias
如果使因为模型过于简单而导致的loss偏大,那么我们可以通过增加未知参数的个数或者考虑更多的特征来定义model,使其更具有弹性。
二、optimization
然而并不是所有的loss较大都是因为定义的定义的model比较简单,如果定义的function比较复杂,那么就可能使我们在优化参数的时候出现的问题。我们一般优化参数的方式是通过gradient descent,而通过这种方式,我们得到的参数可能只是局部最优解,而不是全局最优解。
三、model bias or optimization
那么如果loss较大的时候,到底是因为model bias还是因为optimization呢?我们可以做以下判断:
若在测试集上,56层的function表现效果不如20层的function,那么肯定是发生了optimization问题,而不是因为过拟合,为什么这么说呢?在测试集上,20层的function的loss比56层的loss更低,56层的function的弹性肯定比20层的function的弹性更大,那么20层function所能做到的事,56层function都能做到,那么56层function表现不好的原因不是model bias,也不是overfitting,而是optimization没有做好。
首先从较浅的networks开始,计算loss,如果更深的networks不能比较浅的networks获得更低的loss,那么一定是存在optimization问题。
二、训练集上的loss较小
一、测试集上的loss也很小
则该model是比较理想的model
二、测试集上的loss比较大
发生这样的情况可能有两种原因:
(1)Overfitting
什么是Overfitting?
Overfitting 是指模型在训练数据上表现良好,但在测试数据上表现不佳的现象。这种现象表明模型过于复杂,导致了在训练数据上出现的拟合现象,即在训练数据上能够获得很高的准确率,但在测试数据上的表现却很平庸。
发生Overfitting后解决方式:
(1)数据增强:通过增加训练数据的数量或数据来源,来增加模型的样本量,从而提高模型的泛化能力,降低 overfitting 的风险。
什么是Data augmentation?
Data augmentation 是一种在机器学习中常用的数据增强技术,它通过在训练数据上进行一系列的变换操作,从而扩充训练数据集,提高模型的泛化能力,降低过拟合的风险。
(2)通过剪枝来删除模型中不必要的参数或层,从而减少模型的复杂度,降低模型在训练数据上的拟合程度,提高模型在测试数据上的表现。
通过对模型设置一些限制,使得模型的拟合程度更好。
(3)Early stopping
在训练过程中,可以使用验证集来监控模型的性能,并在模型性能不再提升时停止训练,以避免模型在训练数据上过度拟合。
(4)Regularization
Regularization 是一种在机器学习中常用的技术,它通过在损失函数中添加正则化项,来对模型的复杂度进行惩罚,从而避免模型在训练数据上过度拟合。
L1 正则化:通过对模型的权重进行 L1 正则化,来对模型的复杂度进行惩罚,从而减少模型在训练数据上的拟合程度。
L2 正则化:通过对模型的权重进行 L2 正则化,来对模型的复杂度进行惩罚,从而减少模型在训练数据上的拟合程度,同时避免过拟合。
L1/L2 正则化:同时使用 L1 和 L2 正则化,以达到更好的正则化效果。
注:但是也不能对model有过多的限制,如果限制过多,会导致模型过于简单,导致出现model bias的问题。
三、Cross Validation
一、什么是Cross Validation
Cross validation 是一种在机器学习中常用的数据集划分技术,它通过将数据集划分为训练集、验证集和测试集,以便对模型进行训练、评估和调优。
首先可以将训练集上的数据划分为训练集和验证集,首先将训练集上的数据对模型进行训练,然后用验证集上的数据计算loss,然后挑选出具有较小的loss的function,然后计算在public上的测试集和private上的测试集。
二、N-fold Cross Validation
N-fold Cross Validation 是一种常用的交叉验证方法,它将数据集划分为 n 个部分 (其中 n 小于数据集的大小),每个部分用于训练模型,其余 n-1 个部分用于验证模型,最后将验证集的性能汇总来计算模型的整体性能。
三、局部最小值与鞍点
一、局部最小值
局部最小值(Local Minima)是指在某个局部区域内的函数最小值,但并不一定是整个定义域内的最小值。它表示相比周围点,该点的值比较小,但在全局还可能存在更小的点。在该区域内的gradient的值非常接近0。
二、鞍点
鞍点(Saddle Point)是指函数的一个特殊点,其值为局部最小值和局部最大值之间,既不是最高也不是最低。鞍点的特点是:
1.在某个局部区域内,不满足函数值小于或大于所有相邻点。
2. 函数在该点会改变增减趋势。通常在鞍点两侧,函数值分别处于上升和下降状态。
三、critical point
关键点(Critical Point)是指函数的极值点,也包括鞍点等特征点。在优化问题和机器学习中,我们常常需要找到函数的最优解,这通常就是关键点。
注:那么如果出现gradient的值非常接近0,那么它是local minima还是saddle point?
四、Tayler Series Approximation
L()的形状我们是不太好知道的,但是我们可以利用其附近的参数来近似地表示这个L()。
其中,第一项L()的含义就是当θ趋近于θ'的时候,L()同时趋近于L()。
第二项绿色方框中的表达式:g是一个向量,其中的每一个分量是对每一个未知参数的偏导数。
第三项红色方框中的表达式:H是一个矩阵,H里放的是对L的二次微分。它第i个row,第j个column的值就是把θ的第i个component对L作微分,再把θ的第j个component对L作微分,做两次微分以后的结果就是这个。
如果该model训练到了一个critical point,那么该点的gradient的值为0,也就是绿色框中的表达式为0,所以L()就化简为了以下形式。
总的来说,你只要算出一个东西,这个东西的名字叫做hessian。它是一个矩阵,如果这个矩阵所有的eigen value都是正的,那就代表我们现在在local minima;如果它有正有负,就代表在saddle point。
五、Example
现在有如下network,它只有一层神经元,甚至连激活函数都没有,它只有两个未知参数和,它的输入是1,期望的输出也是1,它连bias都没有,因此它的图像是可以画出来的,在图中标出了一些critical point,其中左上和右下的loss比较高,在原点处,它是一个鞍点,因为它如果向左上更新参数或者向右下更新参数,它的loss会变大,反而,如果它向右上或左下更新参数,它的loss会变小。
能否通过数学计算来求得这些点是鞍点还是local minimal呢?
六、Don't afraid of saddle point
其中u是矩阵H的特征向量,是对应特征向量的特征值,若把()令为u,则可以通过u的方向来更新参数,从而降低loss。
通过向特征向量的方向,可以逃离鞍点,已达到降低loss的效果。
七、Empirical Study
下图中,横轴是Minimum Ratio的值,纵轴是训练误差,从图中可以看出两者之间的关系,以及Minimum Ratio如何计算。
从公式中可以看出,发生local minimal的概率很小,因为Minimum Ratio一般最大在0.5到0.6之间,也就是有一半的特征值是正,一般特征值是负。所以发生saddle point的概率更大一点。
四、批次(batch)和动量(momentum)
一般情况下,我们更新参数时,并不是利用所有的数据去直接更新参数,而是把这批数据分成一个一个的batch,然后利用一个batch的数据来更新参数,然后把这次更新完的参数,代入下次更新时使用。
一、Small Batch vs Large Batch
如果我们考虑20个example,Large Batch它的Batch size是20,Small Batch的size是1,那么update参数时,Large Batch是观察完所有的example之后,对这一大批数据进行更新;而Small Batch 是对每一个batch进行update,它一共要update 20次,而Large Batch只update 1次。那么对比这两个Batch。
Large Batch在没有使用parallel计算时,所花费的时间更久,但它的结果比较有力。而Small Batch它花费的时间更少,但是因为它更新参数的次数很多,所以它比较noisy。
但是如果我们用GPU进行加速的话,使用平行计算,Large batch更新参数所需要的时间跟Small batch更新参数所需要的时间基本上持平,除非batch size过于大的话,Large batch所需要的时间才会明显变久。
反而,如果我们计算一次update的时间或者update一个epoch的时间的话,我们可以发现如下规律:
batch size较小的时候,一次update所耗费的时间会很少,但是因为它被分为了很多组,所以update完这所有的数据所需要的时间反而会更长;batch size较大的时候,因为它要看完所有的example之后才去update,所以它update的次数就会变少,只是一次update的时间更久一点而已。
从上图中可以看出,当batch size较小的时候,train和validation的数据的正确率都会比较高,但是当batch size变得很大的时候,正确率反而会降低,那么是什么原因导致出现的这种现象呢?是overfitting吗?显然不是,因为其model都是同一个model,只是batch size不同而已。其实真正的原因就是Optimization做的不够好。
其实small batch不论是在训练集还是测试集,它的表现都要比large batch的执行效率要更好。因为在update参数的时候,因为large batch它可能在update参数时遇到saddle point或local minimal时就会停下来,而利用small batch时,它在遇到这种情况时,就不一定会停下来,因为它要把当前的参数代入下一个function中用。
二、Momentum
一、Momentum有什么作用?
1. 加速梯度下降法的收敛。因为加入了速度项,可以在坡度方向上达到更快速度,因此收敛更快。
2. 避免局部最小值。由于加入动量项,更新不仅仅依赖于当前梯度,之前的更新也会影响当前方向和速度。这可以增强更新的惯性,跳出局部最小值。
3. 稳定更新方向。动量项可以平滑不同批次的梯度更新,避免因批量选择不同导致更新方向抖动。
二、gradient +momentum
在update参数时,gradient是以g的反方向来更新参数,但是加上momentum之后,它需要考虑g的方向以及上次更新参数的方向,然后利用这两者的方向,才能确定参数更新的方向。
五、自动调整学习率(Learning Rate)
当训练被卡住时,loss值不在下降时,不一定是遇到了critical point,从图中给可以看到,当loss不再变化时,但是 norm of gradient(代表梯度向量的大小)的值并非为0,反而在不断变化,那么是什么原因导致这样的情况发生呢?有没有可能把这种情况给解决呢?
其实,就算没有在critical point时,训练也有可能会十分difficult。从下图中,可以看出,从黑色的点不断更新参数,始终无法达到loss最低的点,即使我们将学习率降低,也无法到达loss最低的点。那么我们就想到能不能使学习率动态变化,以使得更新参数能够到达loss最低的点。
在曲面陡峭时,我们使用更大的学习率,可以使得步长变小,以至于不会错过critical point;而如果曲面比较平缓时,就降低学习率,使得步长边大,使得更新速度变快。
一、Adagrad
计算公式如下:
它通过不断迭代更新学习率,当曲线平缓时,会变小,那么整体学习率就是变大,那么就会变大;相反,步长就会变小。
二、RMSProp
其中可以手动调的大小,如果前一项更重要的话,就把其值调大;否则把其值调小。
当曲面平滑时,gradient的值较小,那么就把的值调小,可以使得分母变小,那么步长就会变大;相反,如果曲面陡峭的话,gradient的值较大,那么就把的值调小,使父母变大,从而步长就会变小。
三、Without Adaptive Learning Rate
当无法自动调整学习率时,我们update参数时,是无法达到critical point的。如果我们使用Adagrad的话,可以得到以下效果:
虽然能够达到critical point,但是图中有好几段突然向上或者突然向下的情况发生,这是因为当曲面平滑时, g的值会变小,一直一直积累的话,的值也会变小,从而分母变小,值变大,会使步长发生大变化。但是当其变化之后,g的值就会变大,从而的值变大,步长变小,慢慢又会自动恢复为原来的状态。
如果我们加上Learning Rate Scheduling的话,就不会发生这种情况,Learning Rate Decay就是在初始时学习率很大,随着时间的推移,学习率会变得越来越小。这是因为在前期离critical point很远,但是随着不断更新,我们肯定会越来越接近最优解,所以我们需要移动的步长会越来越小。
四、Summary of Optimization
Momentum是考虑方向的,它将上一次更新的方向和gradient的方向做综合,来得到参数更新的方向,而考虑某一项的重要性,从而调整参数的大小。
总结
Optimization时,通过使用Momentum、root mean square、Learning rate scheduling来更新参数,可以使得我们得到更好的结果,更新效果更佳。下周我将对Optimization of Deep Learning进行学习。