点击上方“3D视觉工坊”,选择“星标”
干货第一时间送达
作者丨灯会
来源丨极市平台
编辑丨极市平台
极市导读
作者灯会为21届中部985研究生,凭借自己整理的面经,去年在腾讯优图暑期实习,七月份将入职百度cv算法工程师。在去年灰飞烟灭的算法求职季中,经过30+场不同公司以及不同部门的面试中积累出了CV总复习系列,此为深度学习上篇。
优化算法深度学习优化学习方法(一阶、二阶)
一阶方法:随机梯度下降(SGD)、动量(Momentum)、牛顿动量法(Nesterov动量)、AdaGrad(自适应梯度)、RMSProp(均方差传播)、Adam、Nadam。
二阶方法:牛顿法、拟牛顿法、共轭梯度法(CG)、BFGS、L-BFGS。
自适应优化算法有哪些?(Adagrad(累积梯度平方)、RMSProp(累积梯度平方的滑动平均)、Adam(带动量的RMSProp,即同时使用梯度的一、二阶矩))。
梯度下降陷入局部最优有什么解决办法? 可以用BGD、SGD、MBGD、momentum,RMSprop,Adam等方法来避免陷入局部最优。
1.梯度下降法原理梯度下降法又称最速下降法,是求解无约束最优化问题的一种最常用的方法,在对损失函数最小化时经常使用。梯度下降法是一种迭代算法。选取适当的初值x(0),不断迭代,更新x的值,进行目标函数的极小化,直到收敛。由于负梯度方向时使函数值下降最快的方向,在迭代的每一步,以负梯度方向更新x的值,从而达到减少函数值的目的。
我们首先确定损失函数:
其中,J(θ)是损失函数,m代表每次取多少样本进行训练,如果采用SGD进行训练,那每次随机取一组样本,m=1;如果是批处理,则m等于每次抽取作为训练样本的数量。θ是参数,对应(1式)的θ1和θ2。求出了θ1和θ2,h(x)的表达式就出来了:
我们的目标是让损失函数J(θ)的值最小,根据梯度下降法,首先要用J(θ)对θ求偏导:
由于是要最小化损失函数,所以参数θ按其负梯度方向来更新:
①批量梯度下降(BGD)
批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新
写成伪代码如下:
for i in range(nb_epochs): params_grad = evaluate_gradient(loss_function, data, params) params = params - learning_rate * params_grad
优点:(1)一次迭代是对所有样本进行计算,此时利用矩阵进行操作,实现了并行。(2)由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,BGD一定能够得到全局最优。
缺点:(1)当样本数目 m 很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。(2)不能投入新数据实时更新模型。
②随机梯度下降(SGD)
随机梯度下降法求梯度时选取一个样本j来求梯度。
写成伪代码如下:
for i in range(nb_epochs): np.random.shuffle(data) for example in data: params_grad = evaluate_gradient(loss_function , example ,params) params = params - learning_rate * params_grad
优点:(1)由于不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮参数的更新速度大大加快。
缺点:(1)准确度下降。由于即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。(2)可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。(3)不易于并行实现。SGD 因为更新比较频繁,会造成 cost function 有严重的震荡。
③小批量梯度下降算法(mini-batch GD)
小批量梯度下降法是是对于m个样本,我们采用x个样子来迭代,1


微信扫码登录