Skip to main content

充分利用算力的精度


我们都知道现在的深度神经网络有大量的信息是冗余的,利用这个冗余进行提高效率的计数有,稀疏计算、低精度量化等等技术。

  1. 乘法本来就是一种数学上的定义,可以理解成一种最简单的信息处理方法、公式
  2. 硬件实现FP32单元实际上是按照数学定义的浮点计算去等价,
  3. 神经网络不像科学计算,其在算法设计上就不需要这么高的精度表达
  4. 神经网络算法本身就没有办法用到这么高的精度

可以从两个方面来看一下这个问题

  1. 硬件为什么FP32就是浪费?
  2. 为什么科学计算就是需要FP32甚至是FP64,而神经网络是没有办法?还是没有必要?

再进行一下推导为什么是数学乘法

  1. 计算首先需要把信号进行量化,使用“数“来表示信号的量
  2. 深度神经网络使用乘法,是因为主要使用线性变换梯度下降这两个关键的数学支撑的计算方法
  3. 线性变换本质上是在变换信息,梯度下降是在求解、回归
  4. 计算精度对于神经网络模型的作用?
    1. 思维更敏感了
    2. 映射空间的精细度更高了,表达的信息更丰富了
  5. 数学框架把所有计算都归结到了乘法上--线性变换是矩阵乘法,梯度下降的链式法则也是矩阵乘法。乘法不是必需的,而是我们选择的数学框架的产物
  6. 实数,加法,乘法 是数学的最基本的工具
    1. 而且是一个很理想的工具,能适应各种复杂的需求,完美的底层抽象
    2. 但是不一定适合人工智能

如果提高计算精度是一个方向,那么为什么不采用?

  1. 效率问题

    1. 精度的利用率是有上限的,边际效应,越高的精度越难以触碰/利用
    2. 利用多个低精度的计算进行等价是不是更高效?
  2. 更难以训练和收敛

那么问题来了,有没有一种更适合硬件电路,数字电路特点的数学模型?

  1. 使用状态,替代
  2. 使用映射表替代计算
  3. 使用模仿、逻辑推理来替代梯度下降