向量化(Vectorization)
在深度学习的算法中,我们通常拥有大量的数据,在程序的编写过程中,应该尽最大可能的少使用 loop 循环语句,利用 python 可以实现矩阵运算,进而来提高程序的运行速度,避免 for 循环的使用。
逻辑回归向量化
输入矩阵XX:(nx,m)(nx,m)
权重矩阵ww:(nx,1)(nx,1)
偏置bb:为一个常数
输出矩阵YY:(1,m)(1,m)
所有 m 个样本的线性输出 Z 可以用矩阵表示:
Z=wTX+bZ=wTX+b
Z = np.dot(w.T,X) + b
A = sigmoid(Z)
重点总结:
所有 m 个样本的线性输出 ZZ 可以用矩阵表示:
Z=wTX+bZ=wTX+b
Z = np.dot(w.T,X) + b
A = sigmoid(Z)
1
2
逻辑回归梯度下降输出向量化
dZdZ对于mm个样本,维度为(1,m)(1,m),表示为:
dZ=A−YdZ=A−Y
db可以表示为:
db=1m∑mi=1dz(i)db=1m∑i=1mdz(i)
db = 1/mnp.sum(dZ)
1
dw可表示为:
dw=1mX⋅dZTdw=1mX⋅dZT
dw = 1/mnp.dot(X,dZ.T)
单次迭代梯度下降算法流程:
Z = np.dot(w.T,X) + b
A = sigmoid(Z)
dZ = A-Y
dw = 1/mnp.dot(X,dZ.T)
db = 1/mnp.sum(dZ)
w = w - alphadw
b = b - alphadb
在对应图中的神经网络结构,我们只用 Python 代码去实现右边的四个公式即可实现神经网络的输出计算。
重点总结:
神经网络的梯度下降法
以本节中的浅层神经网络为例,我们给出神经网络的梯度下降法的公式。
参数:W[1],b[1],W[2],b[2]W[1],b[1],W[2],b[2];
输入层特征向量个数:nx=n[0]nx=n[0];
隐藏层神经元个数:n[1]n[1];
输出层神经元个数:n[2]=1n[2]=1;
W[1]W[1] 的维度为(n[1],n[0])(n[1],n[0]),b[1]b[1]的维度为 (n[1],1)(n[1],1);
W[2]W[2]的维度为(n[2],n[1])(n[2],n[1]),b[2]b[2]的维度为 (n[2],1)(n[2],1);
下面为该例子的神经网络反向梯度下降公式(左)和其代码向量化(右):