使用随机梯度下降进行参数更新期间下溢的意义是什么?

数据挖掘 Python 神经网络 梯度下降
2022-02-15 04:09:37

背景

我正在使用 scikit-learnMLPRegressor来学习具有以下参数的模型:

hidden_layer_sizes=(16, 16),
learning_rate_init=1e-2,
solver='sgd',
momentum=0.9,
activation='tanh',
learning_rate='constant'

我用partial_fit()增量拟合模型。有时我会FloatingPointErrorMLPRegressor's 代码的这一行得到一个:

updates = [self.momentum * velocity - self.learning_rate * grad
                   for velocity, grad in zip(self.velocities, grads)]

>>> FloatingPointError: underflow encountered in multiply

问题

当模型通过乘以学习率、动量、速度和误差梯度来计算更新参数的数量时,我得到了一个下溢错误。

下溢不是意味着更新太小了吗?这是否意味着该模型已达到某个局部最小值?我是否应该以此为暗示:

  • 我已经用尽了我的数据并且训练已经结束,
  • 我应该提高学习率以保持更新
  • 还有什么?
1个回答

发生下溢是因为该计算的结果是一个比您的计算机在内存中实际可以表示的更小的绝对值。

下溢与模型的性能没有直接关系(例如,学习率或局部最小值)。下溢是计算机软件和硬件之间的相互作用。

我建议重新调整数据。例如,批量标准化通常会阻止下溢错误。