损失函数及优化算法汇总
损失函数汇总
- 1. 常用损失函数
- 1.1 0-1损失函数(0-1 lossfunction)
- 1.2 感知损失函数(Perceptron Loss)
- 1.3 平方损失函数(Quadratic Loss Function)
- 1.4 Hinge损失函数(Hinge Loss Function)
- 1.5 对数损失函数(Log Loss Function)
- 1.6 交叉熵损失函数(Cross-entropy Loss Function)
- 1.7 回归损失函数(Huber Loss Function)
- 2. 人工智能常用损失函数
- 2.1 L1范数损失 L1Loss
- 2.2 平滑版L1损失 SmoothL1Loss
- 2.3 均方误差损失 MSELoss
- 2.4 交叉熵损失 CrossEntropyLoss
- 2.5 KL 散度损失 KLDivLoss
- 2.6 二进制交叉熵损失 BCELoss
- 2.7 BCEWithLogitsLoss
- 2.8 MarginRankingLoss
- 2.9 HingeEmbeddingLoss
- 2.10 多标签分类损失 MultiLabelMarginLoss
- 2.11 二分类的logistic损失 SoftMarginLoss
- 2.12 多标签one-versus-all损失 MultiLabelSoftMarginLoss
- 2.13 cosine 损失 CosineEmbeddingLoss
- 2.14 多类别分类的hinge损失 MultiMarginLoss
- 2.15 三元组损失 TripletMarginLoss
- 2.16 连接时序分类损失 CTCLoss
- 2.17 负对数似然损失 NLLLoss
- 2.18 NLLLoss2d
- 2.19 PoissonNLLLoss
- 3 优化算法
- 3.1 随机梯度下降算法 SGD算法
- 3.2 平均随机梯度下降算法 ASGD算法
- 3.3 Adagrad算法
- 3.4 自适应学习率调整 Adadelta算法
- 3.5 RMSprop算法
- 3.6 自适应矩估计 Adam算法
- 3.7 Adamax算法(Adamd的无穷范数变种)
- 3.8 SparseAdam算法
- 3.9 L-BFGS算法
- 3.10 弹性反向传播算法 Rprop算法
损失函数(loss function)又叫做代价函数(cost function),是用来评估模型的预测值与真实值不一致的程度,也是神经网络中优化的目标函数,神经网络训练或者优化的过程就是最小化损失函数的过程,损失函数越小,说明模型的预测值就越接近真是值,模型的健壮性也就越好。
1. 常用损失函数
1.1 0-1损失函数(0-1 lossfunction)
0-1损失函数是最为简单的一种损失函数,多适用于分类问题中,如果预测值与目标值不相等,说明预测错误,输出值为1;如果预测值与目标值相同,说明预测正确,输出为0,言外之意没有损失。
L ( y , f ( x ) ) = { 1 , y ≠ f ( x ) 0 , y = f ( x ) L\left( y,~f(x) \right) = \left\{ \begin{matrix} {1,~y \neq f(x)} \\ {0,~y = f(x)} \\ \end{matrix} \right. L(y,f(x))={1,y=f(x)0,y=f(x)
1.2 感知损失函数(Perceptron Loss)
感知损失函数是对0-1损失函数的改进,它并不会像0-1损失函数那样严格,哪怕预测值为0.99,真实值为1,都会认为是错误的;而是给一个误差区间,只要在误差区间内,就认为是正确的。其数学公式可表示为:
L ( y i , y i ^ ) = { 1 , | y i − y i ^ | > t 0 , | y i − y i ^ | ≤ t L\left( y_{i},\hat{y_{i}} \right) = \left\{ \begin{matrix} \left. {}1,~ \middle| y_{i} - \hat{y_{i}} \middle| > t \right. \\ \left. {}0,~ \middle| y_{i} - \hat{y_{i}} \middle| \leq t \right. \\ \end{matrix} \right. L(yi,yi^)={1,∣yi−yi^∣>t0,∣yi−yi^∣≤t
1.3 平方损失函数(Quadratic Loss Function)
顾名思义,平方损失函数是指预测值与真实值差值的平方。损失越大,说明预测值与真实值的差值越大。平方损失函数多用于线性回归任务中。
单样本数学公式可表示为:
L ( y , f ( x ) ) = ( y − f ( x ) ) 2 L\left(y,f\left(x\right)\right)={(y-f(x))}^2 L(y,f(x))=(y−f(x))2
多样本数学公式可表示为:
L ( y , f ( x ) ) = ∑ i = 1 n ( y − f ( x ) ) 2 L\left(y,f\left(x\right)\right)=\sum_{i=1}^{n}{(y-f(x))}^2 L(y,f(x))=i=1∑n(y−f(x))2
1.4 Hinge损失函数(Hinge Loss Function)
Hinge损失函数通常适用于二分类的场景中,可以用来解决间隔最大化的问题,常应用于著名的SVM算法中。其数学公式为:
L ( y ) = m a x ( 0 , 1 − t ∙ y ) L(y) = max(0,1 - t \bullet y) L(y)=max(0,1−t∙y)
t是目标值{-1,+1},y为预测值的输出,取值范围在(-1,1)之间。
1.5 对数损失函数(Log Loss Function)
对数损失函数也是常见的一种损失函数,常用于逻辑回归问题中,其标准形式为:
L ( y , P ( y | x ) ) = − l o g P ( y | x ) L\left( {y,P\left( y \middle| x \right)} \right) = - logP\left( y \middle| x \right) L(y,P(y∣x))=−logP(y∣x)
y为已知分类的类别,x为样本值,我们需要让概率p(y|x)达到最大值,也就是说我们要求一个参数值,使得输出的目前这组数据的概率值最大。因为概率P(Y|X)的取值范围为[0,1],log(x)函数在区间[0,1]的取值为负数,所以为了保证损失值为正数要在log函数前加负号。
1.6 交叉熵损失函数(Cross-entropy Loss Function)
交叉熵损失函数本质上也是一种对数损失函数,常用于多分类问题中。其数学公式为:
L = − [ y l o g y ^ + ( 1 − y ) l o g ( 1 − y ^ ) ] L=-[ylog\hat{y}+(1-y)log(1-\hat{y})] L=−[ylogy^+(1−y)log(1−y^)]
x表示样本,y代表预测的输出,a为实际输出,n表示样本总数量。交叉熵损失函数常用于当sigmoid函数作为激活函数的情景,因为它可以完美解决平方损失函数权重更新过慢的问题。
1.7 回归损失函数(Huber Loss Function)
一种使用鲁棒性回归的损失函数,它相比均方误差来说,它对异常值不敏感。常常被用于分类问题上。
L ( y , f ( x ) ) = { 1 2 ( y − f ( x ) ) 2 , f o r | y − f ( x ) | ≤ δ δ | y − f ( x ) | − 1 2 δ 2 , o t h e r w i s e L\left( y,~f(x) \right) = \left\{ \begin{matrix} \left. {}{\frac{1}{2}\left( y - f(x) \right)}^{2},~for \middle| y - f(x) \middle| \leq \delta \right. \\ \left. {}\delta \middle| y - f(x) \middle| - \frac{1}{2}\delta^{2},~otherwise \right. \\ \end{matrix} \right. L(y,f(x))={21(y−f(x))2,for
Huber Loss 是对均方误差(Mean Square Error)和平均绝对误差(Mean Absolute Error)的综合,包含了一个超参数 δ \delta δ。 δ \delta δ值的大小决定了 Huber Loss 对 MSE 和 MAE 的侧重性,当 |y−f(x)| ≤ δ \delta δ 时,变为 MSE;当 |y−f(x)| > δ \delta δ 时,则变成类似于 MAE,因此 Huber Loss 同时具备了 MSE 和 MAE 的优点,减小了对离群点的敏感度问题,实现了处处可导的功能。
2. 人工智能常用损失函数
2.1 L1范数损失 L1Loss
计算 output 和 target 之差的绝对值。
torch.nn.L1Loss(reduction='mean')
参数:
reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean。
2.2 平滑版L1损失 SmoothL1Loss
也被称为 Huber 损失函数。
torch.nn.SmoothL1Loss(reduction='mean')
L ( x , y ) = 1 n ∑ i z i L\left( {x,y} \right) = \frac{1}{n}{\sum\limits_{i}z_{i}} L(x,y)=n1i∑zi
z i = { 0.5 ( x i − y i ) 2 , i f | x i − y i | < 1 ∣ x i − y i | − 0.5 , o t h e r w i s e z_{i} = \left\{ \begin{matrix} \left. {}0.5\left( x_{i} - y_{i} \right)^{2},~if~ \middle| x_{i} - y_{i} \middle| < 1 \right. \\ \left| x_{i} - y_{i} \middle| - 0.5,~otherwise \right. \\ \end{matrix} \right. zi={0.5(xi−yi)2,if
2.3 均方误差损失 MSELoss
计算 output 和 target 之差的均方差。
torch.nn.MSELoss(reduction='mean')
参数:
reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean。
2.4 交叉熵损失 CrossEntropyLoss
当训练有 C 个类别的分类问题时很有效. 可选参数 weight 必须是一个1维 Tensor, 权重将被分配给各个类别. 对于不平衡的训练集非常有效。
在多分类任务中,经常采用 softmax 激活函数+交叉熵损失函数,因为交叉熵描述了两个概率分布的差异,然而神经网络输出的是向量,并不是概率分布的形式。所以需要 softmax激活函数将一个向量进行“归一化”成概率分布的形式,再采用交叉熵损失函数计算 loss。
torch.nn.CrossEntropyLoss(weight=None,ignore_index=-100, reduction='mean')
参数:
weight (Tensor, optional) – 自定义的每个类别的权重. 必须是一个长度为 C 的 Tensor
ignore_index (int, optional) – 设置一个目标值, 该目标值会被忽略, 从而不会影响到 输入的梯度。
reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean。
2.5 KL 散度损失 KLDivLoss
计算 input 和 target 之间的 KL 散度。KL 散度可用于衡量不同的连续分布之间的距离, 在连续的输出分布的空间上(离散采样)上进行直接回归时很有效。
torch.nn.KLDivLoss(reduction='mean')
参数:
reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean。
2.6 二进制交叉熵损失 BCELoss
二分类任务时的交叉熵计算函数。用于测量重构的误差, 例如自动编码机. 注意目标的值 t[i] 的范围为0到1之间。
torch.nn.BCELoss(weight=None, reduction='mean')
参数:
weight (Tensor, optional) – 自定义的每个 batch 元素的 loss 的权重. 必须是一个长度为 “nbatch” 的 的 Tensor
2.7 BCEWithLogitsLoss
BCEWithLogitsLoss损失函数把 Sigmoid 层集成到了 BCELoss 类中. 该版比用一个简单的 Sigmoid 层和 BCELoss 在数值上更稳定, 因为把这两个操作合并为一个层之后, 可以利用 log-sum-exp 的 技巧来实现数值稳定。
torch.nn.BCEWithLogitsLoss(weight=None, reduction='mean', pos_weight=None)
参数:
weight (Tensor, optional) – 自定义的每个 batch 元素的 loss 的权重. 必须是一个长度 为 “nbatch” 的 Tensor
2.8 MarginRankingLoss
torch.nn.MarginRankingLoss(margin=0.0, reduction='mean')
对于 mini-batch(小批量) 中每个实例的损失函数如下:
L ( x , y ) = m a x ( 0 , − y ∗ ( x 1 − x 2 ) + m a r g i n L\left( {x,y} \right) = max\left( 0, - y*(x1 - x2) + margin \right. L(x,y)=max(0,−y∗(x1−x2)+margin
2.9 HingeEmbeddingLoss
torch.nn.HingeEmbeddingLoss(margin=1.0, reduction='mean')
对于 mini-batch(小批量) 中每个实例的损失函数如下:
L n = { x n , i f y n = 1 m a x { 0 , Δ − x n } , i f y n = − 1 ) L_{n} = \left\{ \begin{matrix} {x_{n},~if~y_{n} = 1} \\ {max\left\{ 0,\mathrm{\Delta} - x_{n} \right\}\left. ,~if~y_{n} = - 1 \right)} \\ \end{matrix} \right. Ln={xn,ifyn=1max{0,Δ−xn},ifyn=−1)
参数:
margin:默认值1
2.10 多标签分类损失 MultiLabelMarginLoss
torch.nn.MultiLabelMarginLoss(reduction='mean')
对于mini-batch(小批量) 中的每个样本按如下公式计算损失:
L ( x , y ) = ∑ i j m a x ( 0 , 1 − ( x ⌊ y ⌊ j ⌋ ⌋ − x ⌊ i ⌋ ) ) x . s i z e ( 0 ) L\left( {x,y} \right) = {\sum\limits_{ij}\frac{max\left( 0,1 - \left( x\left\lfloor {y\left\lfloor j \right\rfloor} \right\rfloor - x\left\lfloor i \right\rfloor \right) \right)}{x.size(0)}} L(x,y)=ij∑x.size(0)max(0,1−(x⌊y⌊j⌋⌋−x⌊i⌋))
2.11 二分类的logistic损失 SoftMarginLoss
torch.nn.SoftMarginLoss(reduction='mean')
L ( x , y ) = ∑ i l o g ( 1 + e x p ( − y [ i ] ∗ x [ i ] ) x . n e l e m e n t ( ) L\left( {x,y} \right) = {\sum\limits_{i}\frac{log\left( 1 + exp\left( - y\lbrack i\rbrack*x\lbrack i\rbrack \right) \right.}{x.nelement{()}}} L(x,y)=i∑x.nelement()log(1+exp(−y[i]∗x[i])
2.12 多标签one-versus-all损失 MultiLabelSoftMarginLoss
torch.nn.MultiLabelSoftMarginLoss(weight=None, reduction='mean')
L ( x , y ) = − 1 C ∑ i y [ i ] ∗ l o g ( ( 1 + e x p ( − x [ i ] ) ) − 1 ) + ( 1 − y [ i ] ) ∗ l o g ( e x p ( − x [ i ] ) 1 + e x p ( − x [ i ] ) ) L\left( {x,y} \right) = - \frac{1}{C}{\sum\limits_{i}{y\lbrack i\rbrack*log\left( \left( 1 + exp\left( - x\lbrack i\rbrack \right) \right)^{- 1} \right) + \left( 1 - y\lbrack i\rbrack \right)*log\left( \frac{exp\left( - x\lbrack i\rbrack \right)}{1 + exp\left( - x\lbrack i\rbrack \right)} \right)}} L(x,y)=−C1i∑y[i]∗log((1+exp(−x[i]))−1)+(1−y[i])∗log(1+exp(−x[i])exp(−x[i]))
2.13 cosine 损失 CosineEmbeddingLoss
torch.nn.CosineEmbeddingLoss(margin=0.0, reduction='mean')
L ( x , y ) = { 1 − c o s ( x 1 , x 2 ) , i f y = = 1 m a x ( 0 , c o s ( x 1 , x 2 ) − m a r g i n ) , i f y = = − 1 L(x,y) = \left\{ \begin{matrix} {1 - cos\left( x_{1},x_{2} \right),~if~y = = 1} \\ {max\left( 0,cos\left( x_{1},x_{2} \right) - margin \right),~if~y = = - 1} \\ \end{matrix} \right. L(x,y)={1−cos(x1,x2),ify==1max(0,cos(x1,x2)−margin),ify==−1
参数:
margin:默认值0
2.14 多类别分类的hinge损失 MultiMarginLoss
torch.nn.MultiMarginLoss(p=1, margin=1.0, weight=None, reduction='mean')
L ( x , y ) = ∑ i m a x ( 0 , w [ y ] ∗ ( m a r g i n − x [ y ] + x [ i ] ) ) p x . s i z e ( ) L\left(x,y\right)=\frac{\sum_{i}{max(0,w\left[y\right]*(margin-x\left[y\right]+x\left[i\right]))}^p}{x.size()} L(x,y)=x.size()∑imax(0,w[y]∗(margin−x[y]+x[i]))p
参数:
p=1或者2 默认值:1
margin:默认值1
2.15 三元组损失 TripletMarginLoss
给一个A,然后再给B、C,看看B、C谁和A更像。
torch.nn.TripletMarginLoss(margin=1.0, p=2.0, eps=1e-06, swap=False, reduction='mean')
L ( a , p , n ) = m a x ( d ( a i , p i ) − d ( a i , n i ) + m a r g i n , 0 ) L\left( {a,p,n} \right) = max\left( d\left( a_{i},p_{i} \right) - d\left( a_{i},n_{i} \right) + margin,0 \right) L(a,p,n)=max(d(ai,pi)−d(ai,ni)+margin,0)
d ( x i , y i ) = ∥ x i − y i ∥ p d\left( x_{i},y_{i} \right) = \left\| {x_{i} - y_{i}} \right\|_{p} d(xi,yi)=∥xi−yi∥p
2.16 连接时序分类损失 CTCLoss
CTC连接时序分类损失,可以对没有对齐的数据进行自动对齐,主要用在没有事先对齐的序列化数据训练上。比如语音识别、ocr识别等等。
torch.nn.CTCLoss(blank=0, reduction='mean')
参数:
reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean。
2.17 负对数似然损失 NLLLoss
负对数似然损失. 用于训练 C 个类别的分类问题。
torch.nn.NLLLoss(weight=None, ignore_index=-100, reduction='mean')
参数:
weight (Tensor, optional) – 自定义的每个类别的权重. 必须是一个长度为 C 的 Tensor
ignore_index (int, optional) – 设置一个目标值, 该目标值会被忽略, 从而不会影响到 输入的梯度.
2.18 NLLLoss2d
对于图片输入的负对数似然损失. 它计算每个像素的负对数似然损失。
torch.nn.NLLLoss2d(weight=None, ignore_index=-100, reduction='mean')
参数:
weight (Tensor, optional) – 自定义的每个类别的权重. 必须是一个长度为 C 的 Tensor
reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean。
2.19 PoissonNLLLoss
目标值为泊松分布的负对数似然损失。
torch.nn.PoissonNLLLoss(log_input=True, full=False, eps=1e-08, reduction='mean'
参数:
log_input (bool, optional) – 如果设置为 True , loss 将会按照公 式 exp(input) - target * input 来计算, 如果设置为 False , loss 将会按照 input - target * log(input+eps) 计算.
full (bool, optional) – 是否计算全部的 loss, i. e. 加上 Stirling 近似项 target * log(target) - target + 0.5 * log(2 * pi * target).
eps (float, optional) – 默认值: 1e-8
3 优化算法
3.1 随机梯度下降算法 SGD算法
torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)
参数:
params (iterable) :待优化参数的iterable或者是定义了参数组的dict
lr (float) :学习率
momentum (float, 可选) :动量因子(默认:0)
weight_decay (float, 可选) :权重衰减(L2惩罚)(默认:0)
dampening (float, 可选) :动量的抑制因子(默认:0)
nesterov (bool, 可选) :使用Nesterov动量(默认:False)
可实现 SGD 优化算法,带动量 SGD 优化算法,带 NAG(Nesterov accelerated gradient)动量 SGD 优化算法,并且均可拥有 weight_decay 项。
对于训练数据集,我们首先将其分成n个batch,每个batch包含m个样本。我们每次更新都利用一个batch的数据,而非整个数据集。这样做使得训练数据太大时,利用整个数据集更新往往时间上不现实。batch的方法可以减少机器的压力,并且可以快速收敛。
当训练集有冗余时,batch方法收敛更快。
优缺点:
SGD完全依赖于当前batch的梯度,所以η可理解为允许当前batch的梯度多大程度影响参数更新。对所有的参数更新使用同样的learning rate,选择合适的learning rate比较困难,容易收敛到局部最优。
3.2 平均随机梯度下降算法 ASGD算法
ASGD 就是用空间换时间的一种 SGD。
torch.optim.ASGD(params, lr=0.01, lambd=0.0001, alpha=0.75, t0=1000000.0, weight_decay=0)
参数:
params (iterable) :待优化参数的iterable或者是定义了参数组的dict
lr (float, 可选) : 学习率(默认:1e-2)
lambd (float, 可选) :衰减项(默认:1e-4)
alpha (float, 可选) :eta更新的指数(默认:0.75)
t0 (float, 可选) :指明在哪一次开始平均化(默认:1e6)
weight_decay (float, 可选) :权重衰减(L2惩罚)(默认: 0)
3.3 Adagrad算法
AdaGrad算法就是将每一个参数的每一次迭代的梯度取平方累加后在开方,用全局学习率除以这个数,作为学习率的动态更新。
其中,r为梯度累积变量,r的初始值为0。ε为全局学习率,需要自己设置。δ为小常数,为了数值稳定大约设置为10^-7 。
torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0)
参数:
params (iterable) :待优化参数的iterable或者是定义了参数组的dict
lr (float, 可选) :学习率(默认: 1e-2)
lr_decay (float, 可选) :学习率衰减(默认: 0)
weight_decay (float, 可选) : 权重衰减(L2惩罚)(默认: 0)
优缺点:
Adagrad 是一种自适应优化方法,是自适应的为各个参数分配不同的学习率。这个学习率的变化,会受到梯度的大小和迭代次数的影响。梯度越大,学习率越小;梯度越小,学习率越大。缺点是训练后期,学习率过小,因为 Adagrad 累加之前所有的梯度平方作为分母。随着算法不断迭代,r会越来越大,整体的学习率会越来越小。所以,一般来说AdaGrad算法一开始是激励收敛,到了后面就慢慢变成惩罚收敛,速度越来越慢。在深度学习算法中,深度过深会造成训练提早结束。
3.4 自适应学习率调整 Adadelta算法
Adadelta是对Adagrad的扩展,主要针对三个问题:
学习率后期非常小的问题;
手工设置初始学习率;
更新xt时,两边单位不统一
针对以上的三个问题,Adadelta提出新的Adag解决方法。Adagrad会累加之前所有的梯度平方,而Adadelta只累加固定大小的项,并且也不直接存储这些项,仅仅是近似计算对应的平均值。
torch.optim.Adadelta(params, lr=1.0, rho=0.9, eps=1e-06, weight_decay=0)
参数:
params (iterable) :待优化参数的iterable或者是定义了参数组的dict
rho (float, 可选) : 用于计算平方梯度的运行平均值的系数(默认:0.9)
eps (float, 可选): 为了增加数值计算的稳定性而加到分母里的项(默认:1e-6)
lr (float, 可选): 在delta被应用到参数更新之前对它缩放的系数(默认:1.0)
weight_decay (float, 可选) :权重衰减(L2惩罚)(默认: 0)
优缺点:
Adadelta已经不依赖于全局学习率。训练初中期,加速效果不错,很快,训练后期,反复在局部最小值附近抖动。
3.5 RMSprop算法
RMSprop 和 Adadelta 一样,也是对 Adagrad 的一种改进。 RMSprop 采用均方根作为分
母,可缓解 Adagrad 学习率下降较快的问题, 并且引入均方根,可以减少摆动。
torch.optim.RMSprop(params, lr=0.01, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0, centered=False)
参数:
params (iterable) :待优化参数的iterable或者是定义了参数组的dict
lr (float, 可选) :学习率(默认:1e-2)
momentum (float, 可选) : 动量因子(默认:0)
alpha (float, 可选) : 平滑常数(默认:0.99)
eps (float, 可选) : 为了增加数值计算的稳定性而加到分母里的项(默认:1e-8)
centered (bool, 可选):如果为True,计算中心化的RMSProp,并且用它的方差预测值对梯度进行归一化
weight_decay (float, 可选):权重衰减(L2惩罚)(默认: 0)
3.6 自适应矩估计 Adam算法
基于低阶矩的自适应估计的随机目标函数一阶梯度优化算法。
torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)
参数:
params (iterable) – 待优化参数的iterable或者是定义了参数组的dict
lr (float, 可选) – 学习率(默认:1e-3)
betas (Tuple[float, float], 可选) – 用于计算梯度以及梯度平方的运行平均值的系数(默认:0.9,0.999)
eps (float, 可选) – 为了增加数值计算的稳定性而加到分母里的项(默认:1e-8)
weight_decay (float, 可选) – 权重衰减(L2惩罚)(默认: 0)
优缺点:
Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。
Adam结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点。
3.7 Adamax算法(Adamd的无穷范数变种)
Adamax 是对 Adam 增加了一个学习率上限的概念,所以也称之为 Adamax。
torch.optim.Adamax(params, lr=0.002, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)
参数:
params (iterable) – 待优化参数的iterable或者是定义了参数组的dict
lr (float, 可选) – 学习率(默认:2e-3)
betas (Tuple[float, float], 可选) – 用于计算梯度以及梯度平方的运行平均值的系数
eps (float, 可选) – 为了增加数值计算的稳定性而加到分母里的项(默认:1e-8)
weight_decay (float, 可选) – 权重衰减(L2惩罚)(默认: 0)
优缺点:
Adamax是Adam的一种变体,此方法对学习率的上限提供了一个更简单的范围。
Adamax学习率的边界范围更简单。
3.8 SparseAdam算法
针对稀疏张量的一种“阉割版”Adam 优化方法。
torch.optim.SparseAdam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08)
参数:
params (iterable) – 待优化参数的iterable或者是定义了参数组的dict
lr (float, 可选) – 学习率(默认:2e-3)
betas (Tuple[float, float], 可选) – 用于计算梯度以及梯度平方的运行平均值的系数
eps (float, 可选) – 为了增加数值计算的稳定性而加到分母里的项(默认:1e-8)
3.9 L-BFGS算法
L-BFGS 属于拟牛顿算法。 L-BFGS 是对 BFGS 的改进,特点就是节省内存。
torch.optim.LBFGS(params, lr=1, max_iter=20, max_eval=None,
tolerance_grad=1e-05, tolerance_change=1e-09,
history_size=100, line_search_fn=None)
参数:
lr (float) – 学习率(默认:1)
max_iter (int) – 每一步优化的最大迭代次数(默认:20))
max_eval (int) – 每一步优化的最大函数评价次数(默认:max * 1.25)
tolerance_grad (float) – 一阶最优的终止容忍度(默认:1e-5)
tolerance_change (float) – 在函数值/参数变化量上的终止容忍度(默认:1e-9)
history_size (int) – 更新历史的大小(默认:100)
3.10 弹性反向传播算法 Rprop算法
该优化方法适用于 full-batch,不适用于 mini-batch。不推荐。
torch.optim.Rprop(params, lr=0.01, etas=(0.5, 1.2), step_sizes=(1e-06, 50))
参数:
params (iterable) – 待优化参数的iterable或者是定义了参数组的dict
lr (float, 可选) – 学习率(默认:1e-2)
etas (Tuple[float, float], 可选) – 一对(etaminus,etaplis), 它们分别是乘法的增加和减小的因子(默认:0.5,1.2)
step_sizes (Tuple[float, float], 可选) – 允许的一对最小和最大的步长(默认:1e-6,50)
优缺点:
该优化方法适用于 full-batch,不适用于 mini-batch。
损失函数及优化算法汇总相关推荐
- 算法函数_关于损失函数和优化算法,看这一篇就够了
在进行神经网络训练时,很多同学都不太注重损失函数图和损失函数的优化算法的理解,造成的结果就是:看起来效果不错,但是不知道训练的参数是否合理,也不知道有没有进一步优化的空间,也不知道初始点的选择是否恰当 ...
- adam算法_关于损失函数和优化算法,看这一篇就够了
在进行神经网络训练时,很多同学都不太注重损失函数图和损失函数的优化算法的理解,造成的结果就是:看起来效果不错,但是不知道训练的参数是否合理,也不知道有没有进一步优化的空间,也不知道初始点的选择是否恰当 ...
- 机器学习损失函数 / 激活函数 / 优化算法 总览
- 人工智能 自动规划 ppt 蔡自兴_分布式优化算法及其在多智能体系统与机器学习中的应用【附PPT与视频资料】...
关注微信公众号:人工智能前沿讲习对话框回复"张家绮"获取PPT与视频资料视频资料可点击→播放视频查看 导读 分布式优化理论和算法近年来在多智能体系统中得到了广泛的发展与应用,目前在 ...
- 机器学习/算法面试笔记1——损失函数、梯度下降、优化算法、过拟合和欠拟合、正则化与稀疏性、归一化、激活函数
正值秋招,参考网络资源整理了一些面试笔记,第一篇包括以下7部分. 1.损失函数 2.梯度下降 3.优化算法 4.过拟合和欠拟合 5.正则化与稀疏性 6.归一化 7.激活函数 损失函数 损失函数分为经验 ...
- Python主要智能优化算法库汇总
最近几年简单浏览和对比了一些智能算法的库.现将各种库的主要信息.相关优缺点简单整理如下,各位同学可根据自己的需求和喜好进行选择. 文章目录 1.DEAP 2.mealpy 3.scikit-opt ( ...
- 深度学习经典优化算法-公式汇总
-----整理自DeepLearning chapter8,主要是方便做算法的对比. 1.基础算法 1.1 随机梯度下降(SGD,Stochastic Gradient Descent) 随机梯度下降 ...
- python算法库执行效率_Python智能优化算法库小汇总
最近查了一圈python的智能优化算法库,发现在python里面这样的库相对一些传统的语言还真是不太多(比如Matlab).总的看起来似乎起步都还比较晚(个人认为有可能是因为智能算法本身相对复杂并且过 ...
- 全网最全:机器学习算法模型自动超参数优化方法汇总
什么是超参数? 学习器模型中一般有两类参数,一类是可以从数据中学习估计得到,我们称为参数(Parameter).还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,我们称为超参数(Hyper ...
最新文章
- 5月书讯:藏一个愿望等风来
- 十大python开发软件-7款公认比较出色的Python IDE,你值得拥有!
- Hibernate:根据配置文件自动生成表结构的2种方式
- 影响程序员薪资的,从来不止是学历!
- ocr python opencv_如何使用(opencv/python)来实现OCR处
- 连分数求解Pell方程
- 以 B2C 和 B2B 方式启动 SAP Spartacus 的批处理文件
- 【汇编语言】王爽实验5(5)(6)的解答 建立数据类型匹配的观念
- redis 附近的人_使用redis—geo api实现搜索附近的人,自己写的一个composer包
- Sql Server发布订阅如何添加新表如何不初始化整个快照
- 端口被占用,怎么解决?
- JavaScript逻辑运算符“”和“||”短路原则的应用
- 解决 git pull/push 每次都要输入用户名密码的问题
- Linux /etc/rc.d 下面 rc${runlevel}.d rc.local init.d 区别
- java es api jar包_Elasticsearch 搜索服务器 Java API 使用详解
- java碰到乱码如何解决方法_如何处理java的乱码
- 战疫,微软资深高管的十余年远程办公管理经验
- VC++动态链接库(DLL)编程(六)――DLL***
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。
- 如何查找计算机密码cmd,教你如何查看计算机所连wifi密码
热门文章
- java获取摄像头信息_Windows下JavaCV获取摄像头图像
- 数字孪生技术在建筑行业的应用详情分析
- 黑马程序员—java毕老师视频个人总结01
- abap中对采购订单进项税VOFM 例程增强
- Android多媒体信息获取
- 修改Kali双系统引导模式的默认系统和启动延迟
- 使用ssh公钥私钥登陆服务器并配置Sublime的SFTP通过私钥登陆
- 平板电脑可以打开HTML吗,网页体验 Flash无压力_平板电脑_平板电脑评测-中关村在线...
- zero-copy加速GNN训练笔记
- Java中多态弊端以及解决方案