【深度学习】向量化
1. 什么是向量化
向量化通常是消除代码中显示for循环语句的技巧,在深度学习实际应用中,可能会遇到大量的训练数据,因为深度学习算法往往在这种情况下表现更好,所以代码的运行速度非常重要,否则如果它运行在一个大的数据集上面,代码可能花费很长时间去运行。
什么是向量化?在logistic回归中,需要计算,w、x均为列向量。如果为非向量化实现:
z=0
for i in range(n_x):
z+=w[i]*x[i]
z+=b
如果为向量化实现,会直接计算,后面直接加上b:
z=np.dot(w,x)+b
经过时间计算对比发现,非向量化的版本花费了300倍向量版本的时间:
可扩展深度学习实现实在GPU上做的,GPU也叫做图像处理单元。而GPU和CPU都有并行化的指令,有时候叫做SIMD指令,意思是单指令流多数据流,意思是如果使用了这样的内置函数np.function或者其他能去掉for循环的函数,这样python的numpy能充分利用并行化更快地计算。GPU相比较于CPU更擅长SIMD计算。
2. 向量化的更多例子
例1:
当编写神经网络时,尽可能的避免for循环。若我们想要计算,即:
# 非向量化
for i in range (5)
for j in range (5)
u[i]+=A[i][j]*v[j]
# 向量化
u=np.dot(A,v)
例2:
假设已经有一个向量,,求,非向量化计算方法:
u=np.zeros((n,1))
for i in range (n):
u[i]=math.exp(v[i])
向量化计算方法:
import numpy as np
u=np.exp(v)
np.log(v)
np.abs(v)
np.maximux(v,0)
例3:
m个样本的梯度下降算法
3. 向量化 logistic 回归(Vectorizing Logistic Regression)
假设有m个样本,为了实现前向传播,需要计算出m个训练样本的预测结果。在下面的例子中,当加上一个常数b的时候,会将其自动拓展成一个1xm的向量,在python中也称为 “Broadcasting”。
Z=np.dot(w.T,X)+b
4. 向量化 logistic 回归的梯度输出
Z=np.dot(w.T,x)+b
A=σ(Z)
dZ=A-Y
dw=np.dot(X,dZ.T)/m
db=np.sum(dZ)/m
w:=w-a*dw
b:=w-a*dw