如何評價Google 在TensorFlow 中引入的bfloat16 數據類型?


bfloat16是TF特有的,叫做截斷浮點數(truncated 16-bit floating point),它是由一個float32截斷前16位而成。

它和IEEE定義的float16不同,主要用於取代float32來加速訓練網路,同時降低梯度消失(vanishing gradient)的風險,也可以防止出現 NaN這樣的異常值。

深層神經網路每次梯度相乘的係數如果小於1,那就是浮點數,如果層數越來越多,那這個係數會越來越大,傳播到最底層可以學習到的參數就很小了,所以需要截斷來防止(或降低)梯度消失。

參考:

What is tf.bfloat16 "truncated 16-bit floating point"?

吳教授的CNN課堂:進階 | 從LeNet到殘差網路(ResNet)和Inception Net


一個很大原因是既可以用於訓練又可以用於推斷。Amazon也證明Deep Speech模型使用BFloat的訓練和推斷的效果都足夠好。Uint8在大部分情況下不能用於訓練,只能用於推斷,大多數的Uint8模型都從FP32 轉換而來。所以,Bfloat可能是未來包括移動端的主流格式,尤其是需要語言相關的模型時候。


推薦閱讀:

七政四餘洞微大限演算法簡總
初級演算法—字元串
五、權重計算
學點演算法之字元串的亂序檢查
九章演算法 | Google、Airbnb、Facebook面試題 : 外星人的字典(Alien Dictionary)

TAG:演算法 | 谷歌Google | TensorFlow | TPUTensorProcessingUnit |