1.3.2 如何计算浅层神经网络的前向传播

朋友们,如需转载请标明出处:http://blog.csdn.net/jiangjunshow

总目录(新手请点击总目录从序言看起,否则你可能看不懂本篇文章)

前面我们已经教会了大家计算单神经元网络,并一步一步的带领大家完成了第一个人工智能程序。那么如何计算多神经元网络呢?本篇文章向大家介绍了如何计算浅层(二层)神经网络的前向传播。
这里写图片描述
如下图,我们可以先分别计算出第一层的每一个神经元的a。公式中的上脚标表示的是第几层,下角标表示的是该层的第几个神经元。

第一层有四个神经元,所以我们需要计算四次。但是如果有一百个甚至是一千个神经元呢?一个一个的算效率太低了。根据我前面的文章可知,我们可以对它进行向量化。

要进行向量化,关键点是要将第一层的4个权重行向量组合成一个矩阵,如下图所示,w1[1]T是一个行向量,表示第一层第一个神经元关于3个输入x的3个权重,w2[1]T是第一层第二个神经元关于3个输入x的3个权重。四个这样的行向量组成了一个43的矩阵。
这里写图片描述
由之前我们学的矩阵相乘知识可得,每一个权重行向量都会与特征列向量x相乘,如下图所示。
这里写图片描述
所以最终上面的4组式子就被向量化成了下面的这组式子——它一次性把第一层所有神经元的a都给计算出来了(无论有多少个神经元)。下面的w[1]表示的是由4个权重行向量组合成的4
3的矩阵;b[1]是一个列向量,它包含了4个神经元相关的4个偏置b。
这里写图片描述
同理,下面这组式子把第二层的a[2]给计算出来了。和上面的式子其实是一样的,只不过x变成了a[1]
这里写图片描述
上面的式子是适用于计算单训练样本的,但是训练神经网络往往需要非常多的训练样本,下面的代码用于计算多训练样本。下面的m表示训练样本的数量,for循环遍历了每一个训练样本。
这里写图片描述
上面代码是对的,但是效率太低。我们应该也把它给向量化了,把for循环去除掉。想要向量化他们,关键点也是在于把每一个样本的特征列向量x组合成一个矩阵。如下图所示。
这里写图片描述
这样一来,上面的for循环代码就可以向量化成如下形式。
这里写图片描述
由前面文章所介绍的向量化知识可得,计算后的结果Z和A也是矩阵。(如果看不懂,请复习我前面的文章)
这里写图片描述
这里写图片描述
矩阵中的每一个列向量对应于一个样本。例如z[1] (1)是第一个样本第一层的z。a[1] (2)是第二个样本第一层的a。

得到最后一层的A后(也就是A[2]),我们就可以通过下面的式子算出成本。和之前的单神经元网络是一样的。

J = -np.sum(Y*np.log(A[2]) + (1-Y)*np.log(1-A[2])) / m

多神经元网络的前向传播搞定了,下一篇文章将给大家介绍如何计算浅层神经网络的反向传播。

加我助手的微信,进行更深入的学习!学好后带你们一起做项目带你们一起飞!加时请注明“人工智能”。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/jiangjunshow/article/details/82353394
今日推荐