1.2.3 使用向量化进行加速计算

向量化

向量化通常是消除你代码中显式for循环语句的艺术。那么具体什么是向量化呢?
我们以

`

z=wTx+b

为例,在这个例子中,如果有很多的数据,那么w和x以及b都是n维列向量。

1.2.3 使用向量化进行加速计算_第1张图片

如所示,左侧是用非向量化的数组来实现的,它的计算效率很慢。而右侧是用了numpy,直接是向量化的去实现,计算效率就快很多。实际上numpy比单纯的用for快很大一部分原因就是numpy内置了并行处理模块,会自动进行并行处理运算。

向量化的更多例子

关于编程我们的经验是,当你编写新的网络时,或者你做的只是回归的话,那么一定要尽量避免使用for循环。能不用就不用。如果你能用一个内置函数,或者找出其他的什么办法来计算循环,通会比使用for更快。

我们来看看如何在梯度下降法里面去掉for循环。

1.2.3 使用向量化进行加速计算_第2张图片

如图所示,这是一般的需要用两个显式的for实现的例子。

向量化的logistic回归

我们之前讨论过向量化如何显著地加速代码执行,这里我们将会谈及向量化如何实现logistic回归。这样,我们就可以加速大量的数据。

我们先来介绍正向传播的部分:

1.2.3 使用向量化进行加速计算_第3张图片

如图所示,对于每一个变量,我们可以写成向量的形式,这样,用一个语句就可以进行计算了。

向量化logistic回归的梯度输出

下面我们来介绍一下反向传播的过程:

1.2.3 使用向量化进行加速计算_第4张图片

如图所示,是整个反向传播过程的实现。左侧图片是一步步的流程,右侧图片是整个用向量化表示后的方法和代码。

1.2.3 使用向量化进行加速计算_第5张图片

如图所示,这是整个计算过程示意图,左侧是传统的for计算方法,而右侧我们使用向量化表示之后,便可以避免使用for语句。这样就既实现了正向传播也实现了反向传播。

对于为什么是a-y是因为之前我们在反向传播用链式法则求导数的时候已经算完化简过了,最后的结果就是a-y。

值得注意的是,对于一次的梯度向量,我们可以通过向量化处理,避免使用for语句,但是对于多次梯度下降,不可避免的会用到for进行迭代。

你可能感兴趣的:(深度学习)