快速神经网络的训练算法 --UC Berkeley博士尤洋
快速神经网络的训练算法 --UC Berkeley博士尤洋
本片文章介绍的两种算法不仅可以优化并行计算,在普通硬件环境中运行也是有效的。算法是由UC Berkeley博士尤洋开发。在固定精度的情况下,新算法可以更快的达到要求,在固定训练时间的情况下,可以有更好的精度。
目前深度学习面临的一个问题是,没有一个通用的优化器。Adaptive optimizers (Adam/AdaGrad)在ImageNet上面表现就不是很好,这导致现在很多ImageNet都在用Momentum进行优化。反过来Momentum在BERT的训练上面也表现平平。
为什么深度学习很慢?
现在大部分的算法都是SGD的变形。SGD随机梯度下降算法:
(Mini-Batch) SGD:
1.Take B data points each iteration (B: batch size)
2.Compute gradients of woeights based on B data points
3.Update the weights: W = W - learning_rate * ▽W
由上图我们可以看到ResNet50的计算量非常大,而BERT的计算量是ResNet的50倍左右。
如果我们利用并行计算,怎样才能完美的利用大量的processor?
有三种思路,第一种并行计算神经网络的层。每台机器负责运算神经网络中的几层。这种思路显然是不对的,因为神经网络需要前向与反向传递,这种传递是顺序的数据依赖,所以在计算的时候只有一台机器在运作其他机器在等待。
第二种思路是并行计算每一层中不同的节点。这种思路可行,但是这就需要一个很宽