李宏毅机器学习第四周_机器学习攻略

目录

摘要

ABSTRACT

一、Framework of ML

二、机器学习攻略

一、训练集上的loss很大

一、model bias

 二、optimization

 三、model bias or optimization

 二、训练集上的loss较小

一、测试集上的loss也很小

二、测试集上的loss比较大

三、Cross Validation 

一、什么是Cross Validation

二、N-fold Cross Validation

三、局部最小值与鞍点

一、局部最小值

二、鞍点

三、critical point

四、Tayler Series Approximation 

五、Example

六、Don't afraid of saddle point

七、Empirical Study

四、批次(batch)和动量(momentum)

 一、Small Batch vs Large Batch

二、Momentum 

一、Momentum有什么作用?

二、gradient +momentum

五、自动调整学习率(Learning Rate)

一、Adagrad

二、RMSProp

三、Without Adaptive Learning Rate

四、Summary of Optimization

总结


摘要

在本周的学习中,我主要学习了机器学习攻略,鞍点和局部最小值,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:定义一组具有未知参数的函数,这一组参数统一用\theta来表示

Step2:从训练数据上计算未知参数为某组\theta的loss

Step3:优化参数,以得到使loss值最低的一组参数\theta

然后把最优的一组参数\theta代入到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(\theta)的形状我们是不太好知道的,但是我们可以利用其附近的参数\theta ^{'}来近似地表示这个L(\theta)。

其中,第一项L(\theta ^{'})的含义就是当θ趋近于θ'的时候,L(\theta)同时趋近于L(\theta ^{'})。

第二项绿色方框中的表达式:g是一个向量,其中的每一个分量是对每一个未知参数的偏导数。

第三项红色方框中的表达式:H是一个矩阵,H里放的是对L的二次微分。它第i个row,第j个column的值就是把θ的第i个component对L作微分,再把θ的第j个component对L作微分,做两次微分以后的结果就是这个。

如果该model训练到了一个critical point,那么该点的gradient的值为0,也就是绿色框中的表达式为0,所以L(\theta)就化简为了以下形式。

总的来说,你只要算出一个东西,这个东西的名字叫做hessian。它是一个矩阵,如果这个矩阵所有的eigen value都是正的,那就代表我们现在在local minima;如果它有正有负,就代表在saddle point。

五、Example

现在有如下network,它只有一层神经元,甚至连激活函数都没有,它只有两个未知参数w_{1}w_{2},它的输入是1,期望的输出也是1,它连bias都没有,因此它的图像是可以画出来的,在图中标出了一些critical point,其中左上和右下的loss比较高,在原点处,它是一个鞍点,因为它如果向左上更新参数或者向右下更新参数,它的loss会变大,反而,如果它向右上或左下更新参数,它的loss会变小。

能否通过数学计算来求得这些点是鞍点还是local minimal呢?

六、Don't afraid of saddle point

其中u是矩阵H的特征向量,\lambda是对应特征向量的特征值,若把(\theta -\theta ^{'})令为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

计算公式如下:

它通过不断迭代更新学习率,当曲线平缓时,\sigma会变小,那么整体学习率就是变大,那么就会变大;相反,步长就会变小。 

二、RMSProp

 其中可以手动调\alpha的大小,如果前一项更重要的话,就把其值调大;否则把其值调小。

当曲面平滑时,gradient的值较小,那么就把\alpha的值调小,可以使得分母变小,那么步长就会变大;相反,如果曲面陡峭的话,gradient的值较大,那么就把\alpha的值调小,使父母变大,从而步长就会变小。

三、Without Adaptive Learning Rate

当无法自动调整学习率时,我们update参数时,是无法达到critical point的。如果我们使用Adagrad的话,可以得到以下效果:

虽然能够达到critical point,但是图中有好几段突然向上或者突然向下的情况发生,这是因为当曲面平滑时, g的值会变小,一直一直积累的话,\sigma的值也会变小,从而分母变小,值变大,会使步长发生大变化。但是当其变化之后,g的值就会变大,从而\sigma的值变大,步长变小,慢慢又会自动恢复为原来的状态。

如果我们加上Learning Rate Scheduling的话,就不会发生这种情况,Learning Rate Decay就是在初始时学习率很大,随着时间的推移,学习率会变得越来越小。这是因为在前期离critical point很远,但是随着不断更新,我们肯定会越来越接近最优解,所以我们需要移动的步长会越来越小。

四、Summary of Optimization

Momentum是考虑方向的,它将上一次更新的方向和gradient的方向做综合,来得到参数更新的方向,而\sigma考虑某一项的重要性,从而调整参数\alpha的大小。

总结

Optimization时,通过使用Momentum、root mean square、Learning rate scheduling来更新参数,可以使得我们得到更好的结果,更新效果更佳。下周我将对Optimization of Deep Learning进行学习。

                                  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值