人工神经网络(兵王问题MATLAB程序)

请学有余力的同学可以尝试利用上述人工神经网络的程序

在这一讲中
我们将讲述人工神经网络的mnet编程
c lab有人工神经网络自带的工具包
eural network toolbox
同学们可以尝试编写程序直接调用
但是在本讲中
我们自己用my type程序实现了多层神经网络的训练和测试
并把程序公布出来
供大家学习参考
我们这样做的目的是用一个很小的神经网络my type版本
让大家对照所学的知识
了解程序的细节
加深对前几节知识的理解
接下来我们用my type演示一下这个程序的运行
首先进到nn这个目录底下
点击主程序nn test chess
在这里我们仍然以前面国际象棋宾馆问题为例
来说明如何运行我们的多层神经网络训练以及测试的程序
首先是读入数据
在读入数据的时候
请大家注意第27行和第29行
我们前面讲到
如果是两类的话
多层神经网络基本上是用one hot vector
就是两类的情况下的话
要么是一
要么是零

分别表示两类当中的任何一类
所以说27号和29行实现了完后的表vector的设置
接下来请大家注意第37行到第39行
在这里瑞我们设置了三个变量
acial training
acial validation and racial testing
换句话说
我们把整个数据集分成了训练数据集
验证数据集和测试数据集
他们的比例分别是15%
我们用训练数据集来利用反向传播算法和训练数据集里面的数据
来调整神经网络的参数
而每一轮的调整
每个app口的调整过后呢
我们用bdation set就是验证数据集来验证这个调整是好是坏
从而决定我们的程序是否退出
最后我们训练结束过后
我们再在测试数据集上
总体的测出训练过程的神经网络的效果
第53行
第65行和第76行分别是对训练验证和测试数据集进行归一化
在这里可以看到
我们仍然是用的减掉均值除以方差的规划形式
接下来是整个神经网络的构建训练和测试
第81行
这里有一个重要的参与函数叫做nn create
这个函数的目的是创建神经网络
请大家看第一个参数
它是一个数组
它代表了神经网络中每一层的神经元个数
请大家回顾一下
在兵王问题中
我们的输入是六个维度
所以说第一层等六表达的输入是六个维度
同时按照前面所说的
由于是两类
我们采用one hot vector的形式
所以说输出是两个维度
最后一个一个参数
我们用二表示
输出是两个维度
而中间有十层
每层有十个神经元
所以说我们用十个十来表达这个神经元的结构
所以说这这总共是一个时辰的神经网络
每层有十个神经元
接下来active function表示的是神经网络的激活函数
这里我们选的是reno
在这个函数中
我们同时也实现了sick mode和t n h
大家自行也可以试一下
接下来是一个非常重要的参数
earning rate就是我们前面讲过的学习率
阿尔法我们设置为0.005
后面两个参数dish normalization和optimization method
我们会在下一节讲到最后
我们设置目标函数object function为cross s出品交叉上
这是我们前面讲到过的内容
接下来第86号我们设置bt size等于100
换句话说
在每一个mini batch里面有100个训练样本
接下来我们设置最大的训练轮次为1万轮
而通过每一轮的迭代过后
第95行是进行训练
训练结束过后
第96行测试出平均的损失函数
而第97行是在验证集上测试测试识别率
我们在每每一次测试结束过后
我们把验证集上的识别率以及平均的损失函数都打出来
让大家看一下
决定什么时候能够运行结束
接下来我们运行一下这个程序
可以看到
损失函数cost和在验证集上的识别率
croy accuracy是在不断的增加
而损失函数是在不断的下降的过程当中
你看经过一系列的迭代
当iphy 99%多不在变化的时候
同时cos的变化也比较小的时候
我们可以停止这个程序
按ctrl c退出循环
接下来我们把目前训练的结果存储在store的nn里面
最后一行
第107行是在测试集上测试最后的训练效果
我们可以把这一行拷贝出来
在my type的这个command window的环境下直接测试
最后可以得出在测试集上我们达到了99.32%的测试结果
我们可以深入程序内部看一下
首先我们看一下程序的训练过程
前面讲过多层神经网络的训练
包括前项计算和后向传播两个步骤
前项计算的步骤在nn下划线forward dotm这个程序里面
请看这个程序的第十行以及第34~41行
这是从dk减一层的输出到第k层输出的过程
k减一层输出乘以权重矩阵欧米伽
再加上偏置
最后经过非线性函数获得第k层的输出
接下来我们看后向传播
打开nn下划线
ack propagation dotm文件
请看第六到第13行
这里详细地介绍了求出偏导的过程
我们前面学习了如下三个简便的求导公式
例如对于sigmoid的函数
它的导数f一撇x等于fx乘以一减fx
对于tn h的导数
它的φ一撇x等于一减负x的平方
对于soft max加上cross entrop
那么偏一偏小y等于小y减大y
大家仔细的观察可以发现这三个公式和上述程序是一一对应的
我们接着来看一下多层神经网络参数的更新过程
在nn下划线apply gradient dotm中
第十行到第20行
上述的这个代码与我们训练梯度下降算法
mega 6等于omega o减掉阿尔法偏一偏欧米伽在omega o b o处的值
6 等于b o的
减掉阿尔法偏一偏b在omega o b o出的值也是一一对应的
本讲的主要内容是如何用matlab编程构造多层神经网络分类器
我们展示了如何利用我们编写的matlab程序
人工神经网络来解决兵王问题
布置一个作业给大家
请大家认真地阅读程序代码
基于代码复习讲过的内容
力争看懂整个程序
同时我们布置了与本讲配套的编程作业
请学有余力的同学可以尝试利用上述人工神经网络的程序
完成这些编程的练习本讲就到这里
谢谢大家

发表评论

邮箱地址不会被公开。 必填项已用*标注