数据挖掘——神经网络
神经网络
考虑以下的二类训练样本集
Instance |
Feature vector |
Output label |
1 |
(0, 0) |
+ |
2 |
(1, 0) |
+ |
3 |
(0, 1) |
- |
4 |
(-1, 0) |
- |
5 |
(1, -1) |
- |
对此训练样本集,我们需要训练一个三层神经网络(输入层、单隐层、输出层),其中单隐层的单元(神经元)数目设为2,**函数(activation function)为Sigmoid函数:
(1)在二维坐标系中画出这5个训练样本点,并讨论此训练样本集是否线性可分;
(2)试分析将Sigmoid**函数换成线性函数的缺陷;
(3)令初始化参数全部为0,试运用前馈(feedforward)算法计算在初始化参数下此三层神经网络的输出;然后运用反向传播(backpropagation)算法,计算代价函数对所有参数的偏导数,并讨论将初始化参数全部设为0所带来的问题;
(4)试给出一个神经网络(画出架构图,并写出**函数及其对应的参数),使此训练样本集的5个训练样本点都可以被正确分类。
答:
(1)
由图可以看出,不存在任意一条直线可以将样本正确分类,所以此训练样本线性不可分。
(2)
使用Sigmoid**函数,给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。而如果将Sigmoid函数换成线性函数,则隐藏层就失去了意义,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
(3)
在前馈算法中,矩阵权重初始化为0导致计算的结果都为‘+’,分类不正确,神经网络没起到任何作用;在BP算法中,权重初始为0,将导致最终结果都为0,反向传播也失去了意义。
(4)
设计RBF神经网络如图,
通常采用两步过程来训练RBF网络,第一步:确定神经元中心Ci,常用的方式包括随机取样,聚类等;第二步,利用BP算法等来确定参数wi和βi。
经过代码测试,取隐藏层数为10,学习率为0.5,结果如图: