[机器学习]Lecture 2:如何训练类神经网络

目录

(一)如何把进行更好的training,如下图:

1. training data的loss很大

2. training data的loss较小

实际操作

(二)类神经网络训练不起来——解决办法

1. Critical point

2. batch and momentum

3. 自动调整学习速率(Adaptive Learning Rate)

4. 损失函数(Loss)也可能有影响


(一)如何把进行更好的training,如下图:

如果在kaggle上结果不满意,首先检查training data的loss。

1. training data的loss很大

说明在训练资料上没学好,在训练资料上没学好的可能原因:

    1. model Bias——把model变大
    2. Optimization Issue——见下面详述

那么在training data上的loss很大到底是原因a还是b呢?先用一个浅的network或一些其他的小model训练,这些模型比较容易optimize。然后在深的networks上训练,如果没有获得比浅的network更低的loss,那么就是Optimization Issue。具体流程如下图:

下面讨论Optimization的时候,怎么把Gradient descent做的更好:

——解决类神经网络训练不起来的问题

Optimization失败的原因可能是走到了critical point(包括local minima和saddle point),如下图:

用Hessian矩阵的正定性、负定性及不定性可以判断出critical point属于哪种类型:

正定——local minima,负定——local maxima,不定——Saddle point

不过在实际操作中通常不会这么做,因为计算出Hessian矩阵以及对Hessian矩阵进行一系列的运算,运算量是非常大的。

local minima vs saddle point:从经验上看,在高维数据的情况下,local minima是很少出现的,主要出现的都是saddle point。

2. training data的loss较小

training data的loss较小的话,就可以看testing data的loss了。testing data的loss小就可以结束了,如果testing data的loss大,可能原因:

    1. Overfitting
    2. Mismatch

Mismatch: Training data and testing data have different distributions. 这个问题会在HW11中遇到,解决办法在HW11的作业讲解中。

解决Overfitting的办法——增加资料:

解决Overfitting的办法——constrained model,不让model有太大的弹性:

  • 实际操作

实际在作业中,我们应该把Training Set的data分为Training Set和Validation Set(可以按Training Set占原Training Set的90%,Validation Set占原Training Set的10%的比例来分,当然也可以是别的比例)。用Training Set训练得到模型后,测试模型在Validation Set上的效果,效果好的时候再把Testing Set的data放到训练好的model上跑。流程如下图:

(二)类神经网络训练不起来——解决办法

1. Critical point

Critical point have zero gradients.

Optimization失败的原因可能是走到了critical point(包括local minima和saddle point),如下图:

用Hessian矩阵的正定性、负定性及不定性可以判断出critical point属于哪种类型:

正定——local minima,负定——local maxima,不定——Saddle point

沿着Hessian矩阵(负特征值)对应的特征向量的方向,是有可能escape saddle points的,不过在实际操作中通常不会这么做,因为计算出Hessian矩阵以及对Hessian矩阵进行一系列的运算,运算量是非常大的。

local minima vs saddle point:从经验上看,在高维数据的情况下,local minima是很少出现的,主要出现的都是saddle point。

2. batch and momentum

——Smaller batch size and momentum help escape critical points.

1. batch

Batch size is a hyperparameter.

Review: Optimization with Batch.

Small Batch v.s. Large Batch:

 2. Momentum

——有可能可以对抗Critical point的技术。通俗的讲就是考虑上一步移动的惯性对目前这一步移动的影响。

3. 自动调整学习速率(Adaptive Learning Rate)

上面讲到了Critical point的问题,但Critical point不一定是训练一个network时会遇到的最大障碍。训练过程中loss不再下降的时候gradient不一定真的变得很小,例如下图:

 所以我们需要去使用一个Adaptive Learning Rate。下面介绍三个版本的Learning Rate

① 首先是训练过程中一直不会改变的一个Learning Rate:

 ② 改进之后如下,这一版本的learning rate被用于Adagrad:

 下面看看使用Adagrad后的改进效果,下图左上角是使用固定不变的Learning Rate训练出来的结果,可以看到训练推进不下去,下图右边是使用Adagrad后,可以看到训练继续下去了。

 从上图可以看出Adagrad会出现走着走着突然爆炸的问题,可以用Learning Rate Scheduling解决这个问题。

 ③ 继续改进:

 今天最常用的optimization的策略是Adam。

Adam: RMSProp + Momentum

最后做个总结,Summary of Optimization:

4. 损失函数(Loss)也可能有影响

——Changing the loss function can change the difficulty of optimization

注:这一节知识更加详细的原理讲解参见Lecture1(Extra Material)的Pokemon classification和Logistic Regression两个小节,这里仅简短的说明不同的loss function会对训练过程造成很大的影响

Cross-entropy比Mean Square Error更加适合用在分类上。如下图,假设我们开始training的地方都是左上角。

如果选择Cross-entropy作为loss function,那么左上角的的地方是有斜率的,所以有办法通过gradient一路往右下的地方走。

如果选择Mean Square Error作为loss function,就会在左上角卡住。Mean Square Error在左上角这种Loss很大的地方是非常平坦的,它的gradient非常小趋近于0。如果初始的时候在左上方,离目标很远,但是gradient又很小,就会没办法用gradient descent顺利走到右下角的地方(在没有好的optimizer的情况下,如果用Adam,也许还是有机会走到右下角,不过training还是会困难一点)。

 Cross-entropy和Softmax在pytorch中是被绑定在一起的,是一个set,用Cross-entropy时已经包含了Softmax,而不需要在network里面再加一层Softmax。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值