深度神经网络(一):什么是神经网络
一:神经网络的仿生学原理
神经网络其实是根据我们人类大脑里的神经网络设计的“仿生产品”。我们知道,我们人脑的最小组成单元是神经元,如下图所示,神经元由树突、细胞体和轴突组成。计算机中的神经网络与之人脑的神经网络类似,也是由一个个神经元(也叫做感知机)组成的。

根据高中生物的知识,神经元的功能可分为三种,一是接收信息:树突通过突触与上一级神经元相连,接受上一级神经元传递的刺激信号;二是处理信息:细胞体根据这些刺激信号决定是否刺激下一级神经元,三是输出信息:通过轴突传递信号至突触,刺激或者抑制下一级神经元的活动。
二:神经元的数学表达
那么从数学角度来讲,神经元活动可用一个函数来表示:

其中,m代表与该神经元相连的神经元数量,i代表序号,
代表第i个神经元对当前神经元的刺激信号,
表示神经元对刺激信号的敏感程度,b则可以看作没有外界信号时,神经元对下级神经元的作用,y表示神经元的输出结果。为了方便理解和展示,神经元通常用下图来表示:

简单总结一下,在计算机的神经网络中,神经元在本质上就是一个多元一次函数,函数的输入是上一级神经元的输出,函数的计算机结果当作下一级神经元的输入。
三:通过单层感知机了解神经网络基本组成
在了解了神经网络中最基本的神经元之后,我们就可以简单了解一下计算机中的神经网络的结构是什么了。
其中最简单的神经网络就是单层感知机,单层感知机如下图所示,

没错,就是这么简单,将一个神经元的输出送入激活函数,得到的整体就是一个神经网络。麻雀虽小,五脏俱全,一个神经网络必然有以下几个部分组成:输入数据,神经网络,激活函数和输出结果。
我们首先举一个简单的例子说明什么是输入数据和激活函数。
现有一堆橘子和橙子混在了一起,我们希望通过单层感知机帮助我们分辨这是个橙子还是橘子。
那么首先我们要确定橙子和橘子的特征信息,比如重量和尺寸。这些就是神经网络需要的输入数据,即物体的某一种特征。
假设我们的神经网络是训练好的(我将会在下一章或者下下章讲述神经网络的训练过程),橙子和橘子的特征信息如下:

不难看出,橙子和橘子的特征是可以线性二分的,然而没有激活函数的输出不适用于分类表达,因此需要用到激活函数,这便是激活函数的第一个作用:将神经网络的计算结果转变成具有实际意义的现实表达。
我们可以将激活函数设计为这样:

由此我们便可以知道,如果最终的输出是1,那么这是个橙子,否则就是个橘子。
四:多层感知机
单层感知机的缺点显而易见,那就是只能解决线性可分问题,对于非线性问题,它无能为力。为了使神经网络可以解决非线性问题,人们提出了多层感知机,如下图所示:

多层感知机包含输入层、输出层以及隐藏层(可以是1层也可以是很多层),每层神经网络都由若干个神经元,只有前一层神经元的输出和后一层神经元的输入之间存在神经元连接,位于同一层内的神经元没有连接,后一层中的神经元的输出不能与连接到前一层神经元的输入之中,这个原因我将在神经网络训练过程章节中解释。
多层感知机能够实现非线性问题的原理也很简单,就好比一条曲线可以通过很多条线段拟合一样,多层感知机使用多层神经元来拟合求解问题的非线性函数。因此激活函数在此体现出它的第二个作用:给神经网络赋予非线性特性。
如果去除掉层与层之间的激活函数(或者叫非线性层),那么后一层网络的输出是前一层网络输出的线性之和,不管叠加多少层,最终的输出结果仍然是输入数据的线性之和,不具备非线性特征。而激活函数的存在可以缩放或者屏蔽上一级神经元的输出信号,从而实现非线性特性。
五:总结
本文简单介绍了神经网络的仿生学原理,介绍了计算机神经网络中的基本组成单元——神经元(或者叫做感知机)的数学原理,即多元一次函数,接着通过对单层感知机的介绍,说明了神经网络的基本组成部分:
输入数据:样本的特征信息
神经网络:是神经元的连接拓扑结构,单层感知机只需要一个神经元但是只能解决线性问题,对于非
线性问题,使用多层感知机,利用激活函数赋予神经网络非线性特性。
激活函数:位于神经网络的输出部分以及神经网络层与层之间的连接处,其作用有二,前者是将神经
网络的输出转变成具有现实意义的数学表征,二是对神经元的输出进行缩放或者屏蔽。
我将在后续章节中继续讲解神经网络的训练方法——梯度反向传播,常见的激活函数总结,以及神经网络与深度神经网络的区别与联系,随后开始讲解深度神经网络。
