优化器、激活函数总结

一、优化器

深度学习的目标是通过不断学习改变网络参数,使得参数能够对输入做各种非线性变换拟合输出,本质上就是一个函数去寻找最优解,所以如何去更新参数是深度学习研究的重点。通常将更新参数的算法称为优化器,通过算法去优化网络模型的参数。

梯度下降法(Gradient Descent)

  • BGD:Batch gradient descent
    批量梯度下降,每次使用整个数据集计算损失后来更新参数,计算速度很慢,占用内存大且不能实时更新,优点是能够收敛到全局最小点,对于异常数据不敏感。
  • SGD:Stochastic gradient descent
    随机梯度下降,每次更新度随机采用一个样本计算损失来更新参数,计算比较快,占用内存小,可以随时新增样本。对于样本中的异常数据敏感,损失函数容易震荡。容易收敛到局部极小值,但由于震荡严重,会跳出局部极小,从而寻找到接近全局最优的解。
  • MBGD: Mini-batch gradient descent
    小批量梯度下降,将BGD和SGD结合在一起,每次从数据集合中选取一小批数据来计算损失并更新网络参数。

动量优化法

动量是模拟物理中的概念。一般而言,一个物体的动量指的是这个物体在它运动方向上保持运动的趋势,是物体的质量和速度的乘积。
动量优化方法是在梯度下降法的基础上进行的改变,具有加速梯度下降的作用。一般有标准动量优化方法Momentum、NAG(Nesterov accelerated gradient)动量优化方法。

  1. Momentum
    使用动量(Momentum)的随机梯度下降法(SGD),主要思想是参数更新时在一定程度上保留之前更新的方向,同时又利用当前batch的梯度微调最终的更新方向,通过积累之前的动量来加速当前的梯度。
    在这里插入图片描述

  2. NAG
    牛顿加速梯度(NAG, Nesterov accelerated gradient)算法,是Momentum动量算法的变种。

自适应学习率优化算法

自适应学习率优化算法针对于机器学习模型的学习率,传统的优化算法将学习率设置为常数或根据训练次数调节学习率。极大忽视了学习率其他变化的可能性。因此需要采取一些策略自适应更新学习率,从而加快模型训练速度。
目前的自适应学习率优化算法主要有:AdaGrad算法,RMSProp算法,Adam算法以及AdaDelta算法。

  • AdaGrad

在这里插入图片描述
AdaGrad 基于平方梯度之和的倒数的平方根来缩放每个参数的学习率。该过程将稀疏梯度方向放大,以允许在这些方向上进行较大调整。在具有稀疏特征的场景中,AdaGrad 能够更快地收敛。

  • RMSprop

在这里插入图片描述

RMSprop其理念类似于 AdaGrad,但是梯度的重新缩放不太积极:用平方梯度的移动均值替代平方梯度的总和。RMSprop 通常与动量一起使用,可以理解为 Rprop 对小批量设置的适应。

  • Adam
    在这里插入图片描述
    Adam 将 AdaGrad、RMSprop 和动量方法结合到一起。下一步的方向由梯度的移动平均值决定,步长大小由全局步长大小设置上限。此外,类似于 RMSprop,Adam 对梯度的每个维度进行重新缩放。Adam 和 RMSprop(或 AdaGrad)之间一个主要区别是对瞬时估计 m 和 v 的零偏差进行了矫正。Adam 以少量超参数微调就能获得良好的性能著称。

二、激活函数

激活函数(activation function)又称非线性映射函数,是神经网络中中最主要的组成部分之一。

功能

数据的分布绝大多数是非线性的,而一般神经网络的计算是线性的,引入激活函数,是在神经网络中引入非线性,以此来模拟复杂的非线性关系,强化网络的学习能力。

Sigmoid函数

sigmoid函数也称Logistic函数,取值范围在(0, 1)之间,可以将网络的输出映射在这一范围。用于将一个实值输入压缩至[0,1]的范围,也可用于二分类的输出层。
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/a209107aa01845229b2f2dae67f6c37f.png

  • 激活函数计算量大(在正向传播和反向传播中都包含幂运算和除法),训练比较耗时;
  • Sigmoid导数取值范围是[0, 0.25],由于神经网络反向传播时的“链式反应”,如果层数过多很容易就会出现梯度消失的情况。
  • Sigmoid的输出不是0均值(即zero-centered);导致后一层的神经元将得到上一层输出的非0均值的信号作为输入,随着网络的加深,会改变数据的原始分布。
  1. tanh
    tanh和 sigmoid 相似,输出范围由 (0,1) 变为了 (-1,1)。
    在这里插入图片描述
  • 相比Sigmoid函数,tanh的输出范围时(-1, 1),解决了Sigmoid函数的不是zero-centered输出问题;
  • tanh导数范围在(0, 1)之间,相比sigmoid的(0, 0.25),梯度消失(gradient vanishing)问题会得到缓解,但仍然还会存在。
    在这里插入图片描述
    ReLU
    Relu(Rectified Linear Unit)——修正线性单元函数。如果单独看一个ReLU激活函数,那它是线性的,但是这种激活函数在多层的神经网络中却是非线性的。ReLU函数的非线性能力是由负值带来的,如果ReLU的自变量全部都是正数,那么ReLU就没有意义了,所以可以片面的理解,输入的负数越多,ReLU的拟合非线性的能力就越大。很显然单个ReLU函数并没有非线性能力,然后很多个ReLU函数连接在一起就存在非线性能力。
    relu(x)=max(0,x)

在这里插入图片描述

  • ReLU的输出不是zero-centered
  • Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。
    解决方法:可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
    Leaky Relu
y = max(0, x) + leak*min(0,x)

在这里插入图片描述
与 ReLu 相比 ,leak 给所有负值赋予一个非零斜率, leak是一个很小的常数,这样保留了一些负轴的值,使得负轴的信息不会全部丢失.
ELU
在这里插入图片描述

在这里插入图片描述

  • 梯度对于所有负值都是非零的。没有神经元死亡的问题。
  • 作为非饱和激活函数,不会遇到梯度爆炸或消失的问题。
  • 与其他激活函数(如 ReLU 和变体、Sigmoid 和双曲正切)相比,它实现了更高的准确性。
  • 与 ReLU 及其变体相比,由于负输入涉及非线性,因此计算速度较慢。

三、损失函数

平方损失(预测问题)、交叉熵(分类问题)、hinge损失(SVM支持向量机)、CART回归树的残差损失
交叉熵(cross-entropy)刻画了两个概率分布之间的距离,更适合用在分类问题上,因为交叉熵表达预测输入样本属于某一类的概率。
平方损失函数数理统计中演化而来,均方误差是指参数估计值和参数真实值之差平方的期望值。在此处其主要是对每个预测值与真实值作差求平方的平均值

四、防止过拟合

1、数据增强或扩充数据集;
2、添加正则化项;
3、dropout;
4、Batch Normalization

batch normalization和layer normalization?

Batch Normalization 的处理对象是一个batch的样本, Layer Normalization 的处理对象是单个样本。Batch Normalization 是对这批样本的同一维度特征做归一化, Layer Normalization 是对这单个样本的所有维度特征做归一化。
BN
在这里插入图片描述
倾向于认为同一位置的特征的同一维度的信息应该具有相同的分布,也可以认为同一位置的特征具有相同分布。
BN优点
1、加快神经网络的训练时间。BN强行拉平了数据分布,可以让收敛速度更快。
2、BN能够动态的调整数据分布,能容忍更高的学习率和简化初始化权重。
3、可以支持更多的损失函数。有些损失函数在一定的业务场景下表现的很差,就是因为输入落入了激活函数的死亡区域——饱和区域。而BN的本质作用就是可以重新拉正数据分布,避免输入落入饱和区域,从而减缓梯度消失的问题。
4、提供了一定的正则化的作用,可能使得结果更好。BN在一定的程度上起到了dropout的作用,因此在适用BN的网络中可以不用dropout来实现。
BN缺点
(1)BN是在batch size样本上各个维度做标准化的,所以size越大肯定越能得出合理的μ和σ来做标准化,对于batch_size的大小较敏感;
(2)在训练的时候,是分批量进行填入模型的,但是在预测的时候,如果只有一个样本或者很少量的样本来做inference,这个时候用BN显然偏差很大,例如在线学习场景。
(3)对于序列网络(RNN、lstm等模型)的效果不好。因为输入序列长度是不一致的,造成多样本维度都没法对齐,所以不适合用BN。
LN
倾向于认为一个样本内部的所有feature是相似的,可以直接在样本内各个维度上norm。这一假设在nlp任务中比较得到明显。一个句子的各个特征就是各个字词处理后得到的,基本是相似的。但假如输入特征是类似年龄,性别,身高这种多个不同特征concat起来的,再直接求样本内部的norm,由于各个feature的分布不一样,就会存在很大的问题。
在这里插入图片描述

LN优点
(1)Layer Normalization是每个样本内部做标准化,因此对batch_size的大小并不敏感。
(2)LN比较适合NLP任务.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值