optimizor优化器及梯度截断
深度学习网络中,模型底层优化也是必不可少的。模型底层优化将分成两部分来讲解,主要为1)optimizor(优化器)的选择,2)参数initialize(初始化)和loss设计。这一节先讲一下optimizor的选择。
梯度下降的方法(Gradient Descent)在机器学习中应用很广泛,用于求解可导目标函数的最优解。传统机器学习中(例如LR,FM)的目标函数是一个凸函数,梯度下降方法找到的具体最优解即是全局最优解。所以optimizor的选择更多是决定收敛的速度,例如一阶梯度优化和二阶梯度优化(牛顿法等)。在深度学习网络中,本身是非凸的,优化器的选择很多时候决定了收敛的结果。学习率等的选择也变得异常困难,现在多采用自适应学习率的算法。
结合目前tensorflow中的使用,我们分成两部分来说说业界和论文中的optimizor方法。在tensorflow中,梯度的更新分成两个函数,一个是computer_gradient算出梯度,另一个是apply_gradient应用梯度。
梯度的计算:
SGD
原始的随机梯度下降,计算batch样本的梯度。可以加入momentum,保持沿着当前方向前进,减少样本波动。
Ftrl
用在lr上的更新,保持更新点距离当前位置不会太远,可以加入l1,l2的正则项。