一文掌握深度学习(八)——彻底搞懂Logistic回归中的向量化

在上一篇文章中,我们学习了多样本的梯度下降,但是它有一个弊端,就是在编码过程中会使用到循环语句,这个显然不是我们希望见到的,因为做深度学习要处理的数据数量级都很大,采用循环会浪费很多时间,使我们的开发受到了阻碍,而使用向量化就可以解决这个问题,可能从字面上感觉不到向量化要比循环耗时短,下面我们使用numpy来计算下:

import numpy as np
import time

a=np.random.rand(100000)
b=np.random.rand(100000)

start=time.time()
c=np.dot(a,b)
end=time.time()
print('向量化使用的时间为:'+str(1000*(end-start))+'ms')

start=time.time()
for i in range(100000):
    c=a*b
end=time.time()
print('循环使用的时间为:'+str(1000*(end-start))+'ms')

结果如下:

可以看出,采用向量化后运行的时间要远远小于使用循环的时间,所以学习向量化是非常有必要的。

所以我们将用向量来处理多个样本,Let‘s Go!

之前没有向量化的时候,对于多个样本的前向传播,我们会这样写:

而使用了向量化之后,两个式子解决:

Z=w^{T}\times X+b

A=\sigma \left ( Z \right )

下面来进行说明:

Z是一个向量,用来存储每一个样本计算出的z,即Z=[z^{(1)},z^{(2)},...,z^{(i)}]

X是一个矩阵,用来存储每一个样本的输入x,即X=[x^{(1)},x^{(2)},...,x^{(i)}]

A是一个向量,用来存储每一个样本的z经过激活函数后的得到的a,即A=[a^{(1)},a^{(2)},...,a^{(i)}]

假设有m个样本,每一个样本有两个特征,即x^{(i)}=\begin{bmatrix} x_{1}^{(i)}\\ x_{2}^{(i)} \end{bmatrix},所以X就会使一个矩阵,即X=[x^{(1)},x^{(2)},...,x^{(i)}]=\begin{bmatrix} x_{1}^{(1)} & x_{1}^{(2)} & ... &x_{1}^{(i)} \\ x_{2}^{(1)} & x_{2}^{(2)} &... & x_{2}^{(i)} \end{bmatrix},其中上标代表第i个样本,下表代表第i个特征。

我们来计算一下维度,其中X的维度为2*m,Z的维度为1*m,根据矩阵乘法则w^{T}的维度为2*1,b的维度为1*m,A的维度和Z的维度是一样的。

我们来验算一下:

经过验算维度完全正确,说明我们前向传播向量化成功了。

接下来我们看一下反向传播:

之前没有向量化的时候,对于多个样本的反向传播,我们会这样写:

而有了向量化之后,我们就可以这样写:

dZ=A-Y

dW=1\setminus m\times X\times dZ^{T}

db=1\setminus m*dZ

这里的dZ、dW、db的维度和Z、W、b的维度是一样的,我们来看一下:

dZ=A-Y,这里A是1*m,而Y也是1*m,所以dZ的维度也是1*m,和Z的维度一样。

dW=1\setminus m\times X\times dZ^{T},这里X是2*m,dZ^{T}是m*1,所以dW的维度为2*1和W的维度一样。

db=1\setminus m*dZ,这里dZ是1*m,则db也是1*m,和b的维度一样。

然后在进行参数更新就行啦:

W=W-\alpha \times dW

b=b-\alpha \times db

最后给大家贴下吴恩达老师的视频中的一张图:

如果您觉得文章对你有帮助,点个关注不迷路~

以上就是本文的全部内容,获取深度学习资料以及课程,扫描下方公众号,回复“资料”两字即可获取,祝您学习愉快。

猜你喜欢

转载自blog.csdn.net/qq_38230338/article/details/107655753