本文简要介绍了人工神经网络和基于matlab的BP神经网络的简单实现的案例。
- 人工神经网络简介
首先在这里要澄清一点,如果你没了解过神经网络,千万不要觉得它很复杂。对于目前的科学水平来说,人们对人脑的结构都还根本没有搞清楚,更不用说人工的神经网络了。其实除了借用了生物学上的一些名词,并且做了一些形象的比喻外,人工神经网络和人脑扯不上什么关系。虽然人脑的结构那么复杂,但是人工神经网络并不复杂,入门也不难,接下来我将尽可能用非技术性的语言来讲述如何实现一个人工神经网络(当然,这也需要读者有一定的编程基础)。
我们先来看一张人工神经网络的拓扑图:
- 图中的每个圆圈都叫做节点,图中的线称为弧;
- 每一条弧上都有一个值w1、w2……(称为权重或者权值);
- 从下往上看,第一层的节点叫做输入层,第二层的节点叫做隐含层(中间层),最上面一层的节点叫做输出层。
我们可以发现,所有的节点都是分层的,每一层节点都可以通过有向弧指向上一层节点(没错,它就是一张特殊的有向图),但是同一层节点之间没有弧互相连接,而且每一个节点不能“越级”;
一般来说,除了第一层(输入层)和最后一层(输出层)外,其他层数都统称为中间层,这些层对外是不可见的,因此又被称为隐含层;
图中的人工神经网络只有三层,但实际上网络的层数和每一层的节点数都可以是任意的(但一般不会有人设计超过五层的网络,因为网络的层数越多,计算就越复杂)。
然后…就没有了!简单的人工神经网络就这样,实际应用中只是将这个简单的网络结构复杂化而已。而人工神经网络的主要应用就是分类和预测,其应用领域有语音识别、机器翻译、人脸识别、预测股市走向等等等。
简单介绍完人工神经网络后,接下来我们来看一个典型的神经网络——BP神经网络。
BP神经网络
BP神经网络是一种多层前馈神经网络,该网络的主要特点是信号向前传递,误差方向传播。在前向传播中,输入信号从输入层经隐含层逐层处理,直至输出层(每一层的神经元状态只影响下一层神经元状态)。如果输出层得不到期望输出,则转入方向传播,根据预测误差调整网络权值和阈值,从而使BP神经网络预测输出不断逼近期望输出。使用BP神经网络预测前首先要训练网络,通过训练使网络具有联想记忆和预测能力。BP神经网络的训练流程图如下:
- 网络初始化。根据实际情况确定输入层、输出层、隐含层的节点数,初始化输入层、隐含层和输出层神经元之间的连接权值,初始化隐含层阈值,输出层阈值,给定学习速率和神经元激励函数;
- 输入训练样本。根据上面所定义的输入层对应地输入训练样本;
- 求隐单元输出。根据输入变量,输入层和隐含层之间的连接权值以及隐含层的阈值a,计算隐含层的输出;
- 计算输出单元输出。根据隐含层输出,连接权值和阈值b,计算BP神经网络预测输出;
- 求输出层单元偏差。根据网络预测输出和期望输出,计算网络预测误差;
- 修正权值、阈值。根据网络预测误差,更新网络连接权值和阈值。
- 判断算法是否迭代结束(达到最大迭代次数或预测误差小于给定值),若没有结束,重复步骤3~7.
实际案例
- 语音特征信号识别
本案例素材源于《MATLAB神经网络43个案例分析》,有兴趣的读者可以参考原著深入学习。
案例中用倒谱系数法提取了500组24维语音特征信号,部分数据如下表所示(具体的原理可以不管,只需知道我们手上拿到了这些数据是什么样的就可以了):
- 语音特征信号识别
1(label) | 2 | 3 | 4 | … | 25 |
---|---|---|---|---|---|
1 | -14.8271 | -3.0010 | 1.5209 | … | 0.2139 |
1 | -16.2288 | -2.8018 | -0.4108 | … | 0.3207 |
2 | -7.1246 | -3.2912 | -1.9894 | … | -0.1903 |
… | … | … | … | … | … |
4 | -1.2170 | 1.0806 | 1.8418 | … | 0.6532 |
上表所给的数据中,第一列是所给出的类别标签,第二列到第二十五列是语音特征信号。要做到语音信号识别,我们要通过已知的这些数据构造一个参考模式,使得有一组新的语音信号时,我们可以识别出它属于哪一种类型。
使用BP神经网络来构建这个参考模式,首先我们就要构建一个BP神经网络,然后对BP神经网络进行训练,最后将测试数据输入到训练好的BP神经网络,来对这个BP神经网络分类的准确性等其他性能进行评价。
因为提取出来的语音特征信号有24维数据,所以输入层有24个节点,而待分类的类别共有4类,所以输出层有4个节点。因此,本例中BP神经网络的结构为24-25-4.即输入层、隐含层、输出层的节点数分别为24、25、4.
另外,因为我们要对训练好的网络进行测试,所以我们要从2000组语音特征信号中随机选择1500组作为训练数据,剩下的500组作为测试数据测试网络的分类能力。
- matlab实现
%% 该代码为基于BP网络的语言识别
%% 清空环境变量
clc
clear
%% 训练数据预测数据提取及归一化
%导入四类语音信号
%数据分别存储于data1.mat、data2.mat、data3.mat、data4.mat中
load data1 c1
load data2 c2
load data3 c3
load data4 c4
%将四个特征信号矩阵合成一个矩阵
data(1: