截断梯度

2022-09-03 20:03:16 浏览数 (2)

强非线性函数往往倾向于非常大或非常小幅度的梯度。这导致的困难是,当参数梯度非常大时,梯度下降的参数更新可以将参数抛出很远,进入目标函数较大的区域,到达当前解所做的努力变成了无用功。梯度告诉我们,围绕当前参数的无穷小区域内最速下降的方向,这个无穷小区域之外,代价函数可能开始沿曲线背面而上。更新必须被选择为足够小,以避免过分穿越向上的曲面。我们通常使用衰减足够慢的学习率,使连续的步骤具有大致相同的学习率。适合于一个相对线性的地形部分的步长经常在下一步进入地形中更加弯曲的部分时变得不适合,会导致上坡运动。

一个简单的解决方案已被从业者使用多年:截断梯度(clipping the gradient)。此想法有不同实例。选择一种是在参数更新之前,逐元素地截断小批量参数梯度。另一种是在参数更新之前截断梯度g的范数||g||:

text { if }|g|>v, g leftarrow frac{g v}{|g|}

其中v是范数上界,g用来更新参数,因为所有参数(包括不同的参数组,如权重和偏置)的梯度被单个缩放因子联合重整化,所以最后一方法具有的优点保证了每个步骤仍是在方向上的,但实验表明两种形式类似。虽然参数更新与真实梯度具有相同的方向梯度,经过梯度范数截断,参数更新的向量范数现在变得有界。这种有界梯度能避免执行梯度爆炸时的有害一步。事实上,当梯度大小高于阈值时,即使采用简单的随机步骤往往工作得几乎一样好。如果爆炸非常严重,梯度数值上为Inf或Nan(无穷大或不是一个数字),则可以采取大小为v的随机一步,通常会离开数值不稳定的状态。截断每小批量梯度范数不会改变单个小批量的梯度方向。然而,许多小批量使用范数截断后的平均值不等于截断真实梯度(使用所有的实例形成的梯度)的范数。大导数范数的样本,和像这样的出现在同一小批量的样本,其最最终方向的贡献将消失。不像传统小批量梯度下降,其中真实梯度的方向是等于所有小批量梯度的平均。换句话说,传统的随机梯度使用梯度的无偏估计,而与真实梯度或小批量的梯度不再对齐,但是它仍是一个下降方向。

0 人点赞