neural-network - 如果深度学习的大部分训练是在均值 0 和标准差 1 的数据上进行的,为什么深度学习不会出现 float 或数值精度错误?

标签 neural-network deep-learning precision conv-neural-network gradient-descent

受问题启发:

Why do different methods for solving Xc=y in python give different solution when they should not?

由于 float 、逆矩阵和限制值到[-1,1],这似乎有数值问题,我现在好奇的是为什么深度学习不会受到 float 或数值的影响如果它的大部分训练是在均值为 0 和标准差为 1 的数据上进行的,则精度误差(我想我假设大部分数据已经被预处理到那个范围内,而且我觉得考虑到高批量归一化的使用)。是因为深度学习不是通过将多项式提升到很高的次数来训练的,还是为什么深度学习通常很好? SGD 有什么特别之处,或者(流行的)激活函数、relu、elu 等在数值上不是不稳定的(与高次多项式相比)?或者 GPU 训练可能一起避免浮点表示?或者为什么深度学习训练在数值上是稳定的?

最佳答案

DL 本身并没有什么神奇之处——它也一直存在数值错误。然而,由于非线性的规模和数量,DL 中的数值不稳定性通常会导致无穷大或 nans,而不是错误的答案。因此,它们通常很容易被发现。特别是 [0,1] 区间没有什么难的,事实上,它是 float 的一个很好的存储点,如 quarter of representable floats actually live in [0,1] !您所指的问题在于采用这样一个数字的巨大指数,这非常接近机器精度。没有一种标准的 DL 技术需要任何激活的 30 次方。事实上,大多数最成功的 DL 技术(基于 sigmoids、tanhs 和 relus)几乎是线性的,因此数值不稳定性主要来自概率估计中的 exp 操作。

所以:

  • 是关于高次多项式的吗? ,这是主要问题,深度学习中没有遇到。
  • SGD 有什么特别之处吗?不是真的。
  • 是关于激活函数的吗?是的,他们不会让如此巨大的精度下降(不过指数是个异常(exception),它确实会导致数值问题)
  • GPU 是否避免 float ?不,不是,GPU 与它无关。

关于neural-network - 如果深度学习的大部分训练是在均值 0 和标准差 1 的数据上进行的,为什么深度学习不会出现 float 或数值精度错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46868237/

相关文章:

python - model.fit 给出 InvalidArgumentError : Graph execution error:

python - 为什么对于 Keras 中的 Theano 和 Tensorflow 后端,一对图像之间的 L2 距离会得到不同的结果?

ubuntu - 使用 caffe 运行神经网络时出错

machine-learning - 使用反向传播训练实值神经网络

machine-learning - 实现残差 block

python - tensorflow in_top_k 的输入应该是 1 级还是 2 级?

python - 有没有pytorch函数可以把张量的特定连续维度合二为一?

c++ - 打印 __float128,不使用 quadmath_snprintf

c++ - 使用 2 "double"s 模拟 "float"

rounding - 瑞士和阿根廷货币四舍五入