几次面试下来,优化算法被问到的频率非常的高,所以在这里简单记录一个常见优化算法的特点。因自己对AI领域的了解还不是很深,只能浅浅地记录一下
批量梯度下降,Batch gradient descent
训练集较小( m ≤ 2000 m \leq 2000 m≤2000),直接使用批量梯度下降
随机梯度下降,Stochastic gradient descent
这里的“随机”指的是对样本进行随机采样
SGD由于每次只选取了一个样本,失去了用动量进行加速的机会
小批量梯度下降,mini-batch gradient descent
综合了批量梯度下降和随机梯度下降的优点,适合处理大型数据集
该算法每次只处理一个小批量样例,而不是处理一个完整的训练集。比如现在有500万条数据,就可以将它划分成5000个批次,每个批次有1000个样例
mini-batch size通常设置为2的幂数
好处:
动量梯度下降
计算梯度的指数加权平均,然后利用梯度来更新权重
v d W = β v d W + ( 1 − β ) d W v_{dW}=\beta v_{dW}+(1-\beta)dW vdW=βvdW+(1−β)dW
v d b = β v d b + ( 1 − β ) d b v_{db}=\beta v_{db}+(1-\beta)db vdb=βvdb+(1−β)db
W = W − α v d W , b = b − α v d b W=W-\alpha v_{dW},b=b-\alpha v_{db} W=W−αvdW,b=b−αvdb
均方根传播,Root Mean Square prop
基于权重梯度最近量级的均值为每一个参数适应性地保留学习率。这意味着算法在非稳态和在线问题上有很有优秀的性能
适应性梯度算法(AdaGrad)为每一个参数保留一个学习率以提升在稀疏梯度(即自然语言和计算机视觉问题)上的性能
适应性矩估计
是动量和RMSProp的结合
优势:
与传统SGD的区别: