AI数学基础6-向量化计算(Vectorization)
2018-05-01 本文已影响74人
LabVIEW_Python
《AI数学基础5-生物学神经网络,人工神经网络,逻辑回归求导计算图》
向量化是非常常用的加速计算的方式,特别适合深度学习等需要训练大数据的领域。
对于 y = wx + b, 若 w, x都是向量,那么,可以用两种方式来计算,第一是for 循环
y = 0
for i in range(n):
y += w[i]*x[i]
y += b
也可以用向量化的方式实现:
y = np.dot(w,x) + b
二者计算速度相差500倍以上,测试结果如下:
所以,Andrew Ng给大家的建议是:Whenever Possible, avoid explicit for-loops
对于独立的样本,用For循环串行计算的效率远远低于向量化后,用矩阵方式并行计算的效率。
神经网络训练,恰恰是大量独立样本的大规模并行乘加计算!~~~ 换句话说,硬件乘加单元越多,并行计算能力越强
独立(independent)在数学上的意思是,相互之间没有计算的先后顺序或者依赖关系。
相对CPU,GPU这种具备超多并行计算单元的处理器,更加适合独立样本的矩阵计算,计算效率远远超过CPU:参考《Debunking the 100X GPU vs. CPU Myth:An Evaluation of Throughput Computing on CPU and GPU》
Google出的TPU,就更加适合神经网络计算,效率比GPU更高。TPU性能强劲的秘诀,是因为它专注于神经网络推断。这使得量化选择、CISC指令集、矩阵处理器和最小设计得好很好的实现。
由此可以看出:TPU和APU(AI芯片)本质是,大量堆叠向量运算所需要的乘加单元,消除与向量计算无关的电路单元,在功耗和芯片面积尽可能小的情况下,把向量计算能力做的尽可能大。