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

朋友们,如需转载请标明出处公众号:jack床长

新手请点击公众号里的“历史文章”从序言看起,否则你可能看不懂本篇文章

在讲人工智能之前,第一段我先讲讲其它的,讲一些我想讲的,讲一些大家需要知道的,讲一些对大家的人生有帮助的。之前的文章里说了下乌克兰,不少朋友很感兴趣给我留言。所以我再说说乌克兰。我去乌克兰也是因为在网上看到了一些文章说乌克兰美女很多,中国人去那里很容易找到妹子。事实上,网上只说对了一半,美女是很多,但是中国人去了不好找到妹子。首先她们很亲美,她们酒吧里挂的都是美国国旗;同时她们又不会说英语(俄语是他们的第二大言语)。我觉得乌克兰是一个没有种族自豪感的国家,她们很多漂亮妹子包括大学生都去卖淫,政府也是睁一只眼闭一只眼。感觉乌克兰已经成为了美国的红灯区,不少退休的美国老头都去嫖乌克兰大学生。好了,今天乌克兰就说到这里,如果大家依然感兴趣,给我留言,后面的文章我再详细说说乌克兰。

前面我们已经教会了大家计算单神经元网络,并一步一步的带领大家完成了第一个人工智能程序。那么如何计算多神经元网络呢?本篇文章向大家介绍了如何计算浅层(二层)神经网络的前向传播。

如下图,我们可以先分别计算出第一层的每一个神经元的a。公式中的上脚标表示的是第几层,下角标表示的是该层的第几个神经元。

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

要进行向量化,关键点是要将第一层的4个权重行向量组合成一个矩阵,如下图所示,w1[1]T是一个行向量,表示第一层第一个神经元关于3个输入x的3个权重,w2[1]T是第一层第二个神经元关于3个输入x的3个权重。四个这样的行向量组成了一个4*3的矩阵。

由之前我们学的矩阵相乘知识可得,每一个权重行向量都会与特征列向量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

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

请大家加我的微信,之后会用微信向大家公布测试题答案和一些通知,以及统一回答大家遇到的常见问题,有项目也可以招集大家一起做。加我时请注明“人工智能”。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180711G1252F00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券