凸优化--优化器的选择

几乎所有的机器学习中,都面临着减少模型预测值和数据之间误差的问题,这类问题一般都转换成求目标函数的最小值问题,称为优化问题
这里写图片描述
如上图优化问题就是找最小值的问题。
1 常见几种优化器
首先来看一下梯度下降最常见的三种变形 BGD,SGD,MBGD,
1.1BGD
采用整个训练集的数据来计算 cost function 对参数的梯度
缺点:由于这种方法是在一次更新中,就对整个数据集计算梯度,所以计算起来非常慢。
1.2 SGD
和 BGD 的一次用所有数据计算梯度相比,SGD 每次更新时对每个样本进行梯度更新, 对于很大的数据集来说,可能会有相似的样本,这样 BGD 在计算梯度时会出现冗余, 而 SGD 一次只进行一次更新,就没有冗余,而且比较快,并且可以新增样本。
缺点:但是 SGD 因为更新比较频繁,会造成 cost function 有严重的震荡。
这里写图片描述
1.3MBGD
每一次利用一小批样本,即 n 个样本进行计算, 这样它可以降低参数更新时的方差,收敛更稳定, 另一方面可以充分地利用深度学习库中高度优化的矩阵操作来进行更有效的梯度计算。
缺点:不过 Mini-batch gradient descent 不能保证很好的收敛性,
learning rate 如果选择的太小,收敛速度会很慢,如果太大,loss function 就会在极小值处不停地震荡甚至偏离。有一种措施是先设定大一点的学习率,当两次迭代之间的变化低于某个阈值后,就减小 learning rate,不过这个阈值的设定需要提前写好,这样的话就不能够适应数据集的特点。
1.4Momentum(冲量)
SGD容易在鞍点处被困住。我们可以以一个简单的例子描述:一个石头从山顶沿着山坡滚落,石头在滚落时遇到一个坑。此时石头会出现两种情况,1 陷在坑里
2 跳出坑继续往下落。Momentum(冲量)就起到这样的作用:帮助石头跳出坑继续往下落。
算法
给定目标函数f(x) 和初始点X0,以及初始动量V0
重复:
这里写图片描述
停止达到终止条件。
算法解释:
首先求出所有位置的梯度,然后将梯度取负就是朝着极小值前进的方向进行迭代。
yita(n)控制更新的步长,也叫学习率。代表上一个时刻的冲量V加入其中,并且每次迭代的都会乘以上一个衰减因子r。
最后算出下一个时刻点的位置。

optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)

1.5 NAG(Nesterov Accelerated Gradient Desent)
算法描述:
给定目标函数f(x),初始点X0,以及初始动量V0
重复:
这里写图片描述
达到停止要求,停止
这里写图片描述这里写图片描述
NAG冲量梯度算法与冲量梯度下降算法不同的地方是。
只是求梯度的位置不再是当前位置,而是假设如果沿着当前冲量乘以衰减系数前一步之后所在的位置。
最后总结凸优化(Convex Optimization),简单来说可以认为凸优化就是要求解的函数局部最小就是全局最小。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值