人脑是人们到目前为止发现的,最令人叹为观止的信息处理系统了。人脑在加减乘除的计算速度方面可能赶不上很多单片机,但是在很多特殊场景的运算中却是高级计算机无法比拟的,如模式识别(声音识别,图像识别)。
当人们意识到人脑的工作方式与数字计算机有着极大不同时,人们就逐渐开始研究“人工神经网络(Artificial Neural Network,ANN)”,希望能够从仿生学的角度给这种研究带来新的动力。
人工神经网络
通过大量的解剖研究,人们逐渐对神经网络的组成原理有了更多的认识,发现了神经网络有以下几个非常优秀的特点:
- 大规模并行分布式结构。
- 神经网络的学习能力以及由此而来的泛化能力。
泛化这点最为重要,它是指在遇到一些没有在训练中遇到的数据时仍然可以得到合理的输出。
具备这两种强大的信息处理能力让神经网络可以为一些当前难以处理的复杂问题找到一些好的近似解。
人的神经细胞如下图所示。
- 图1:人的神经细胞
神经细胞用化学信号传递信息,这里用二进制的电子计算机模拟,为了模拟方便,我们认为大脑的神经细胞只有两种状态,兴奋和抑制,1为兴奋,0为抑制。
一个神经元兴奋和抑制的信号是由这个神经元的树突来影响的,一个神经元可以有多个树突,这些树突可以同时接受多个神经元送过来的刺激信号,这些信号经过一系列复杂的计算,最终产生一个确定的兴奋或抑制的结果。
结构模拟
既然已经了解到神经元的工作方式,下面设计一个和它工作方式近似的电子信号处理系统,如下图所示。
- 图2:由神经元模拟的电子信号处理系统
它有n个输入的树突,有一个轴突,而中间的部分负责计算。当n个树突输入的内容合适时,让轴突输出1——兴奋,反之让轴突输出0——抑制。来自每个树突的刺激都是0或1,刺激的值计作 ;为了让树突上的刺激有所区别,给每个树突输入的值乘以一个权值,这个权值是[-1,1]之间的小数,这个权值计作 。
设置激励函数为 。
这个激励函数的值域在[-n,n]之间,而整个函数产生的结果最终还要继续去刺激其他的函数——毕竟要连成网络,所以还要让轴突产生的输出函数为1或0。所以在最终输出之前还需要再设置一个函数。
对f(x)进行一下加工,如果大于等于0就认为是兴奋状态,如果小于0就认为是抑制状态。
训练与工作
和一般的分类算法一样,使用人工神经网络进行分类时同样需要先进行训练,即便是只有一个神经元也是要训练的。训练过程大致如下:
- (一)初始化权重。随机设置 的大小,即设置初始的每个树突上的权重。先给定一个任意值,如都是1。
- (二)训练。给定输入各 的大小和对应的output输出值,这是一组样本。需要给定很多组样本,这就是学习的过程。
知道自变量,知道函数值,用计算的方法算出待定的系数,这个跟回归如出一辙。只是这一类回归不是线性关系,这种二项分布型的回归叫做逻辑回归(Logistic Regression)。逻辑回归有一些输入的自变量,分类结果只有两类,即针对要分类的目标,要么是一类,要么不是这一类。
这种单细胞人工神经网络一般用来处理手写识别,垃圾邮件分类,金融欺诈行为,网络注册用户是否真实等问题。
神经网络和支持向量机SVM的分类方式有些类似。在解决问题上的不同之处在于,当线性不可分时,支持向量机SVM会映射到更高维度去划分超平面;而神经网络是增加输入的自变量,网络的层次,输出层。
常见的神经网络
神经网络模型发展到现在已经进化出了很多不同的神经网络模型。常见的人工网络模型有以下几种。
- 感知器网络(Perceptron),前面提到的“单细胞”神经网络就是感知器网络最简单的形式。
- 按误差逆传播算法训练的多层前馈网络(Back Propagation,BP神经网络)。
- 自组织特征映射神经网络(Self-Organizing Feature Map,SOM)。
- Hopfield网络。
- 玻尔兹曼机(Boltzmann Machine)。
- 卷积神经网络(Convolutional Neural Networ,CNN)。
不同的人工网络模型的形式各异,偏重也不同,适应场景也不相同。