Make Your Own Neural Network (5)-----neurons, computers in nature

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)

Neurons, the computers of nature

We have said before that the working principle of animal brains has always puzzled scientists. Why is a brain as small as a pigeon far more capable than a computer composed of a large number of electronic computing elements, large memory capacity, and high operating frequency? .

The essential difference lies in the architecture. Traditionally, the computer describes the instruction sequence data precisely, and each calculation is not ambiguous or ambiguous. For animal brains, animal brains operate at a low frequency, process data in parallel, and are vague and abstract for each processing.

Let's look at the basic unit of the actual actual biological brain - the neuron.

神经元--尽管它有很多种类型,都是将电信号从树突沿着轴突传输至终端,由此,电信号就传输至另外一个神经元。这就是人类感知光、声、力、热的工作原理。信号从特定的神经感知细胞通过神经系统传输至你的大脑,感知外部环境的种种。

下图是鸽子大脑中神经网络的素描,由西班牙神经学家于1899年完成。你可以看到神经网络中的关键部分--树突和轴突。

需要多少神经元才能处理有趣又复杂的任务呢?

我们人类大脑大概有1000亿个神经元组成。由100000神经元组成的果蝇拥能够飞行、觅食、避险以及更加复杂的能力。模拟100000个神经元是当今计算机所能达到的最大限制。尽管线虫只有302个神经元,比当今能够模拟大量神经元的计算机的神经元数量小得多,但是线虫能够处理一些传统计算机完全没能力处理的任务。

秘密究竟在哪呢?为什么生物脑运算速度慢,计算元件相比现代计算机少的多的情况下,却拥有比计算机更强大的能力呢?大脑的完整运行机制,比如意识,依旧还是一个谜。但是我们已经知道神经网络是使用一套不同于计算机的处理的方法解决问题。

让我们看看,神经元是如何工作的。神经元输入一个电信号,再输出一个电信号。就像之前做的预测器和分类器一样,也是输入一个信号,经过处理之后,输出一个信号。那么,就像之前做的一样,我们能够用线性函数替代神经元吗?想法是好的,可实际上是不可行的。生物神经元细胞并不像简单的线性函数那样,输入一个信号产生出信号。也就是说,神经元的输出信号不满足:输入=常量*输入+可能的另外一个常量。

生物学家已经观察到,只有当输入信号增长到一定数值之后才能触发神经元输出一个信号。就像水杯中的水一样,只有水盛满水杯之后,水才会溢出一样。直观的来说,神经元并不会把所有输入信号输出,只有当一定强度的信号通过时,才会输出信号。下图所示,只有拨转超过阈值的时候,才会使得电灯亮。

像这种输入一个信号,再根据一定阈值判断,输出一个信号的函数,称之为激活函数。数学上有很多函数能够实现这种功能。简单的阶梯函数就能实现这种功能。

从图中我们可以观察到,输入数值较小时,输出为0,。只有当输入超过一定阈值的时候,才猛然输入一个值。像这种类似功能的模拟神经元已经很接近实际的生物神经元了。

我们可以把阶梯函数改进为S形的阶梯函数,我们称这种S型的函数为Sigmoid函数。它比阶梯函数要平滑很多,更加自然而真实。自然界中很少出现像阶梯函数那种跳变。

后续工程中,我们将使用S型的函数实现我们的神经网络。人工智能研究者也将使用其他类型的激活函数。但是Sigmoid函数是比较简单而常用的函数,所以我们暂不考虑其他激活函数。

Sigmoid函数如下所示:


这个函数并不像它看起来这么可怕。字母e是一个数学常量2.71828......。在数学领域和物理领域常常使用到这个有趣的常量。省略号代表的是e是一个无限循环数。当是对我们来说,你可以把e看做是2.71828。

当x=0,等于1,所以整个式子为1/(1+1)=1/2。所以sigmoid函数经过y轴的1/2处。

在所有的S型激活函数中,为什么我们唯独选择Sigmoid函数作为激活函数呢?因为Sigmoid函数比起其他S型激活函数来说,更加方便进行积分运算。后续我们将讲解为什么。

让我们回到神经元主题上,并考虑我们将如何构建一个人工的神经元?

首先我们要意识到实际的神经元并不只有一个输入,它可能拥有多个输入信号。我们在布尔逻辑函数机器中已经接触到输入不仅仅只有一个输入的情况。所以现在多个输入对你来说,应该不算陌生。

我们该如何处理这些输入呢?我们只是把这些输入求和,在把和输入到Sigmoid函数中得到输出结果。这也是真实的神经元处理信号的过程。如下图所示,把所有输入求和之后再进过阈值判断,得到输出结果。

如果输入信号所求的和不够大,那么sigmoid函数将抑制输出信号,使得输出信号为0。如果输入信号的和足够大,那么sigmoid将计划神经元,输出信号。有趣的是,如果所有输入信号中只有一个信号足够大,而另外一些信号很好,这也可能激活神经元。还有可能的是,当所有输入信号大小基本一致,但是又不是非常大的时候,它们的和将足够大而超过阈值,并将激活神经元。

树突接收电信号,并把它们合成一个更强的电信号。如果这个合成后的电信号足够强以至于超过了激活函数的阈值,那么这个神经元将被激活,输出一个信号。并把该信号传输到另外一个神经元。

值得注意的一件事是,每一个神经元都能够从之前的神经元获得输入信号,并把输出信号提供给更多的神经元,如果它能被激活的话。

一种模拟生物神经元传递过程的人工神经元模型是构建许多层神经元,这些神经元与各层之前的神经元和后继的神经元相互连接。如下图所示:

图中可知,总共有三层,每一层有三个人工神经元(节点),同时你可以观察到每一个节点与它前面一层和后面一层的所有节点互相连接。

很好!但是我们如何从这个神经结构进行学习呢?

对于训练样本,我们该如何反应呢?

是否一个参数能够像之前分类直线的斜率那样进行可调呢?

显而易见的是,我们可以更改每一个连接节点之间的连接强度。对于一个节点,我们可以更改输入节点信号的和,也可以改变Sigmoid函数的阈值,但相比于改变连接节点之间的连接强度而言,其他两种方法会有一些复杂。

如果简单的方法能够实现。那么我们就实际构建下。如下图示中,我们还是画出了各层中的连接节点,但是这次我们在各个节点连接线上标注了一些权重值,代表的是节点之间的连接强度。较大的权重将放大输入信号,较小的权重将缩小输入信号。

权重符号旁边的数字很值得解释下。权重符号代表的是一层中的节点2与下一层中与它相连的节点3之间的权重值。所以代表的是节点1与下一层的节点2之间的权重,这个权重将放大或缩小节点1和下一层的节点2之间的信号。为了方便查看,我们用高亮的红色符号表示这个权重。












Guess you like

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