Make Your Own Neural Network (7) ----- The matrix is very useful

Make Your Own Neural Network

Build your own neural network

https://blog.csdn.net/lz0499

Author: lz0499


 

statement:

1) Make Your Own Neural Network translated from the Neural Network Introductory book written by Tariq Rashid . The author's goal is to use as little jargon and advanced mathematics as possible to explain how neural networks work in a graphic and textual way. Anyone with a high school math level can understand how neural networks work. This book is highly recommended for beginners as an introductory book on neural networks.

2) This article is for academic exchange only, not for commercial use. The original intention of translation is to deepen the understanding of neural networks while translating.

3) Due to the new knowledge of neural networks, some mistakes are inevitable in the translation process. If you find any mistakes, please correct me. Thanks!

4) Due to work reasons, I will selectively update the translation according to the original chapters from time to time.

5) This belongs to the first version. If there are errors, it is necessary to continue to correct and add or delete.


content:

Part 1: How Neural Networks Work

A simple prediction machine

Classification is Prediction

train a simple classifier

A single classifier does not seem to be enough

Neurons, the computers of nature

Signals through the neural network

Matrices are useful

Using a matrix to calculate the output of a three-layer neural network

Update weights from multiple nodes

Backpropagating errors from multiple nodes

Multilayer Neural Network Layer Backpropagation Error

Calculating Backward Propagation Error Using Matrix Multiplication

How to actually update the weights (1)

How to actually update the weights (2)

Matrices are useful


Earlier we calculated the final output of the two-layer neural network with two nodes in each layer. Great, but imagine we use the same method to compute a five-layer neural network with 100 nodes per layer! ? Just imagining the combination of the input signal and various weights and going through the activation function, the amount of manual calculation, can drive people crazy.

所以矩阵究竟能帮上什么呢?矩阵可以从两方面帮助我们。首先,矩阵能够用一种简单的公式压缩神经网络中各种计算。这对人类来说很有帮助,毕竟人类并不喜欢太多枯燥的计算,并且计算过程中,还会引入一些人为的错误。第二个好处是,许多计算机编程语言能够很好的理解矩阵,由于实际计算涉及到很多重复的计算,而计算机拥有很好的计算能力,能够很迅速的计算出结果。

简而言之,矩阵能够让我们方便的表达出神经网络的计算过程;而计算机能够快速而有效的帮助我们计算出最终的结果。

现在我们知道为什么我们要回过头来复习矩阵了吧!尽管你在学校学习矩阵的时候可能有段痛苦的经历。但是,我想还是让我们重新开始揭开矩阵的神秘面纱吧!

矩阵仅仅是一种用矩形网格把数字括起来的表格。这就是矩阵,它并没有其他更为复杂的含义。

如果你用过spreadsheet,你应该对网格括起来的数字感到并不陌生。有些人称之为表格,我们称之为矩阵。以下表示的是用spreadsheet括起来的一些数字。


这就是矩阵—一种表格或是用网格的数字。就像下面的图示表示的是2*3大小的矩阵。

先用行再用列表示矩阵很方便或者说是一种习惯,所以上述的矩阵并不是3*2的矩阵而是2*3的矩阵。

上图矩阵中,有些人用方括号括起来数字,而我们使用圆括号括起数字。这只是表达方式的不一样而已。

实际上,括起来的不一定是数字,也可以是给出一些名字的数目,这些数目并不一定赋给数值。所以下图的矩阵中,括起来的是一种拥有一定含义并拥有一定数值的变量,只不过我们还没有说明它们是什么而已。

当我们计算矩阵乘法的时候,我们会看到矩阵变得非常有用。你可能在学校记得如何计算矩阵的乘法,如果没有,我们可以再复习一下。

下图表示的是两个矩阵相乘之后的结果。

你可以看到,我们并不是把矩阵对应的数字进行相乘。实际上,矩阵乘法拥有它自己的规则。

你可以通过上面的例子看出来矩阵相乘究竟是如何计算的。如果没有可以再看看下图中高亮部分的计算过程。


你可以看到,左边矩阵的第一行与右边矩阵的第一列中的数值分别对应相乘,并把最后的结果作为最后矩阵的第一行第一个元素。矩阵其他元素的结果我们可以从图中看出也是左边矩阵对应行的各个元素与右边对应列中各元素相乘再相加之后的结果。

不同大小的矩阵相乘,其两个相乘矩阵的大小是由一定限制的。你并不能把任意大小的矩阵相乘。实际上,如果你需要进行矩阵的乘法运算,必须保证相乘的第一个矩阵的行大小和相乘的第二个矩阵的列大小相等。

在一些教程中,你会发现这种矩阵相乘的运算也被称之为点乘或者说内积。实际上,对于矩阵还有其他乘法运算,比如说叉积,但是,当前我们仅仅限于矩阵的点乘运算。

让我们用更有意义的单词取代我们神经网络数值。相乘矩阵中的第二个矩阵为列矩阵,其两矩阵的乘法运算依旧还是之前的方法。如下图所示:

很神奇不是!

第一个矩阵包含的是两层神经网络中节点对应的权重,第二个矩阵包含的是神经网络的第一层的输入信号。矩阵相乘的结果就是输入到第二层神经网络节点的输入信号的加权和。仔细查看,我们能够发现这点。输出结果中的第一个节点的数值是第一个输入信号与权重W1,1相乘加上第二个输入信号与权重W1,2相乘的和。这个加权和也是sigmoid激活函数中X的数值的大小。

下面图示中能够更好地表达出其计算过程。


这可真有用。

为什么呢?因为我们可以把神经网络中所涉及到的所有计算过程用一个公式就可以完美的表达出:

其中,W表示的是权重矩阵,I表示的是输入信号矩阵。X表示的是输入到第二层神经网络的结果。矩阵变量通常用实体表示,因为,矩阵中的变量不仅仅表示单个数字,也可能表示多个数字或变量。

现在,我们并不需要关注每一层神经网络中包含有多少个节点。如果我们包含更多的节点,上述公式中只需要把相应的矩阵增大就是,我们并不需要再写那种又长又麻烦的计算公式,不管神经网络中拥有多少层神经网络结构,我们只需要写一个公式W*I即可。

如果计算机编程语言能够很好的理解矩阵的表示方法,那么我们能够通过计算机来替代我们计算神经网络中复杂而又冗长的计算。

真是太神奇了!只要花点时间理解矩阵乘法,我们就能够获得一种强大的工具,用以计算神经网络中所涉及到的复杂运算。

那么激活函数怎么办?这个比较简单,且并不涉及到矩阵的乘法运算。我们只需把矩阵X中的各个元素输入到激活函数即可。

这听起来太简单了吧!不过,实际上也确实是这么计算的。我们不再单个单个计算输入信号与对应权重的乘积,因为我们已经使用矩阵计算出了输入信号的加权和。所以,对于两层的神经网络而言,最后的输出结果为:

这个用实体表示的O是一个矩阵,表示的是神经网络最后一层的输出结果。

表达式X=W*I计算的是神经网络中当前层到下一层的加权和。比如说,我们有三层神经网络,当我们计算出神经网络中第一层到第二层的结果时,再计算出最后的结果时,我们仅仅需要把第二层的结果作为第三层的输入信号,再求各个权重与对应信号的加权和,然后把最后的结果输入到sigmoid函数中做一个阈值判断,输出神经网络最后的输出结果。

理论已经有了。让我们以每层三个节点,共三层神经网络为例,开始实际计算一下最后的输出结果。













Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325441505&siteId=291194637