为什么在张量流的神经网络量化框架中激活需要比权重(8 位)更多的位(16 位)?
Why do activations need more bits (16bit) than weights (8bit) in tensor flow's neural network quantization framework?
我正在使用 mobilenets 并试图理解为什么激活有 16 位以及为什么权重有 8 位的直觉。根据经验,我看到了,但直觉上,8 位和 16 位之间存在巨大差异的原因是什么(除了大多数部署硬件不提供 8 位和 16 位之间的任何内容,这是一个不同的讨论)?也就是为什么激活不是 8 位?
我认为我的部分误解是我不明白激活在这种情况下意味着什么。权重是通过梯度下降优化的部分,但激活究竟是什么?我知道激活函数是什么,例如sigmoid/relu,但我不明白激活是什么,或者为什么除了权重和偏差之外还需要将它们与模型一起存储(link 没有讨论,偏差的量化是对优化也很重要)
https://www.tensorflow.org/lite/performance/model_optimization
激活是通过网络传播的实际信号。它们与激活函数无关,这只是名称冲突。它们具有更高的准确性,因为 它们不是模型的一部分,因此它们不会影响存储、下载大小或内存使用,就好像您没有在训练您的模型一样 从不存储 个超出当前激活的激活。
例如,对于 MLP,我们在
行中有一些内容
a1 = relu(W1x + b1)
a2 = relu(W2a1 + b2)
...
an = Wnan-1 + bn
其中每个W和b都是8位参数。激活是 a1, ..., an。问题是你只需要 previous 和 current 层,所以计算 at 你只需要 at-1,而不是以前的,因此在计算期间以更高的精度存储它们只是一个很好的权衡.
我正在使用 mobilenets 并试图理解为什么激活有 16 位以及为什么权重有 8 位的直觉。根据经验,我看到了,但直觉上,8 位和 16 位之间存在巨大差异的原因是什么(除了大多数部署硬件不提供 8 位和 16 位之间的任何内容,这是一个不同的讨论)?也就是为什么激活不是 8 位?
我认为我的部分误解是我不明白激活在这种情况下意味着什么。权重是通过梯度下降优化的部分,但激活究竟是什么?我知道激活函数是什么,例如sigmoid/relu,但我不明白激活是什么,或者为什么除了权重和偏差之外还需要将它们与模型一起存储(link 没有讨论,偏差的量化是对优化也很重要)
https://www.tensorflow.org/lite/performance/model_optimization
激活是通过网络传播的实际信号。它们与激活函数无关,这只是名称冲突。它们具有更高的准确性,因为 它们不是模型的一部分,因此它们不会影响存储、下载大小或内存使用,就好像您没有在训练您的模型一样 从不存储 个超出当前激活的激活。
例如,对于 MLP,我们在
行中有一些内容a1 = relu(W1x + b1)
a2 = relu(W2a1 + b2)
...
an = Wnan-1 + bn
其中每个W和b都是8位参数。激活是 a1, ..., an。问题是你只需要 previous 和 current 层,所以计算 at 你只需要 at-1,而不是以前的,因此在计算期间以更高的精度存储它们只是一个很好的权衡.