1、自适应学习率
- 理论上:在训练一个网络,训练到现在参数在临界点附近,再根据特征值的正负号判断该
临界点是鞍点还是局部最小值 - 实际上:①在训练的时候,要走到鞍点或局部最小值非常困难;②多数还未走到临界值训练已经结束;
学习率:决定了更新参数的时候的步伐;太大无法快速收敛,甚至不收敛;学习率太小,训练时长比较长;因此在梯度下降里面,所有的参数都是设同样的学习率,这显然是不够的,应该要为每一个参数定制化学习率,即引入自适应学习率(adaptive learning rate)的方法,给每一个参数不同的学习
率。
如果在某一个方向上,梯度的值很小,非常平坦,我们会希望学习率调大一点;如果在某一个方向上非常陡峭,坡度很大,我们会希望学习率可以设得小一点。
1.1 AdaGrad
AdaGrad(Adaptive Gradient)是典型的自适应学习率方法,其能够根据梯度大小自动调整学习率。
AdaGrad 可以做到梯度比较大的时候,学习率就减小,梯度比较小的时候,学习率就放大。
更新公式:
学习率 η \eta η跟迭代次数t和迭代参数相关,即不同的参数跟自己每一次迭代的梯度值相关。
1.2 RMSProp
RMSprop(Root Mean Squared propagation):同一个参数的同个方向,学习率也是需要动态调整
其中 0 < α < 1,其是一个可以调整的超参数。
RMSProp 通过 α 可以决定不同迭代次数的梯度重要性有多大,如果 α \alpha α趋近于1,则表示当前计算出来的梯度很重要;最初计算出来的梯度不重要。
1.3 Adam
Adam(Adaptive moment estimation)可以看做是RMSprop加上动量,使用动量作为参数更新方向,并且能够自适应调整学习。
1.4 学习率调度
- 学习率衰减(learning rate decay)== 学习率退火(learning rate annealing)。随着参数的不断更新,让学习率 η \eta η越来越小
- 预热:预热的方法是让学习率先变大后变小,至于变到多大、变大的速度、变小的速度是超参数。
2、分类
分类问题预测数据所属的类别,一般采用独热向量表示;如果是二分类,采用0和1就可以进行区别;
如果是三分类采用0/1/3来区分显然是不合适的,这样目标就可以理解为连续的数值类型,不符合我们分类的预测需求;因此:
如果有三个类,标签 y 就是一个三维的向量,比如类 1 是 [ 1 , 0 , 0 ] T [1, 0, 0]^T [1,0,0]T,类 2 是 [ 0 , 1 , 0 ] T [0, 1, 0]^T [0,1,0]T,类
3 是 [ 0 , 0 , 1 ] T [0, 0, 1]^T [0,0,1]T。如果每个类都用一个独热向量来表示,就没有类 1 跟类 2 比较接近,类 1 跟
类 3 比较远的问题。如果用独热向量计算距离的话,类两两之间的距离都是一样的。
2.1 softmax函数
多分类用softmax,二分类用sigmoid
2.2 分类损失
交叉熵损失函数
梯度与最后一层的激活函数的导数成正比,多分类交叉熵损失求导更简单,损失仅与正确类别的概率有关
3 批量归一化
批量归一化(Batch Normalization,BN)
为特征归一化(feature normalization)