机器学习(周志华) 参考答案 第五章 神经网络
机器学习(周志华西瓜书) 参考答案 总目录
这章就是真正的两句话讲完一个知识点,然后后面还出个题让你编程
神经网络作为一个相当大的,多学科交叉的学科领域,并不是仅仅应用于机器学习。书上3张纸介绍了6种神经网络,都是泛泛几句话介绍。选了几本关于神经网络的书放进某东的购物车,等着下次300-200买起来慢慢研究。
1.试述将线性函数 用作神经元激活函数的缺陷。
必须要强调的是,神经网络中必须要有非线性的激活函数,无论是在隐层,还是输出层,或者全部都是。如果单用 作为激活函数,无论多少层的神经网络会退化成一个线性回归,只不过是把他复杂化了。
2.试述使用图5.2(b)激活函数的神经元与对率回归的联系。
两者都是希望将连续值映射到{0,1}上,但由于阶跃函数不光滑,不连续的性质,所以才选择了sigmoid作为映射函数。不同之处在于激活函数不一定要使用sigmoid,只要是非线性的可导函数都可以使用。
3.对于图5.7中 ,试推导出BP算法中的更新公式。
在书中5.15已经证明
所以得到更新公式
4.试述学习率的取值对神经网络训练的影响。
如果学习率太低,每次下降的很慢,使得迭代次数非常多。
如果学习率太高,在后面迭代时会出现震荡现在,在最小值附近来回波动。
5.试编程实现标准BP算法与累积BP算法,在西瓜数据集3.0上分别用这个算法训练一个单隐层网络,并进行比较。
6.试设计一个BP改进算法,能通过动态学习率显著提升收敛速度。
这真是一个蛋疼的题,本来以为方法很多,结果没有一个能用的。
固定的学习率要么很慢要么在后期震荡,设计一种自适应的动态学习率算法是有必要的。
对四种参数的最速方向做一位搜索
这是很直观的一种方法,已知f(x)在 的导数为d,那么下降方向就是-d。一位搜索就是求试 最小的t,也就是当前的学习率。
然而这方法的t用解析法并不好求, 也是无解的。
使用近似方法尝试了下收敛速度并没有显著提升对四种参数做牛顿迭代
虽然不符合题目改学习率的要求,但是牛顿法肯定能大大提高收敛速度,只是没有了学习率这个概念。
然而Hessian矩阵求的我想吐血,最后也没去继续了。
书中给出了两篇文献供参考
- Neural Networks: Tricks of the Trade
Neural Smithing:Supervised learning in Feedforward Artificial Neural Networks
暂时不解这个题,等以后遇到好的方法再来更新。
7.根据式5.18和5.19,试构造一个能解决异或问题的RBF神经网络。
8.从网上下载或自己编程实现一个SOM网络,并观察在西瓜数据集 上产生的结果。
SOM网络书上真的就是草草介绍了下,顺便配了个看不懂的图。我去翻了下《MATLAB神经网络43个案例分析》这本书,里面对SOM讲的还是很明白的,包括原理与训练方法。
简单的说,SOM网络在平面放M*N个神经元(M,N自定义),神经元按8邻接来连接。网络将输入层映射到平面上M*N个神经元上(M,N自定义),每个输入与每个神经元都有一个初始权值,然后计算各个神经元的权值向量与输入向量的距离,选择距离最小的神经元更新他以及他8邻接神经元的权值向量,循环这个过程直到收敛。
如果神经元比样本数多,足够多次迭代后所有样本会映射到了不同的神经元上。
网络生成后就通过输入算出离他最近的神经元,将它标记为该神经元的分类。
matlab中有现成的SOM网络,我就没自己编程了。
clear
simpleclassInputs = xlsread('C:\Users\icefire\Desktop\ml\西瓜3.xlsx', 'sheet1', 'A7:Q8');
net = newsom(simpleclassInputs,[8 8]); %64个神经元
%迭代次数1000次
net.trainParam.epochs=1000;
net = train(net,simpleclassInputs);
plotsompos(net,simpleclassInputs);
%获取每个样本映射到哪个神经元
sim(net,simpleclassInputs);
最终得到SOM网络为
64个神经元最终的位置,并可以查看样本映射到了哪个神经元上。
9.试推导用于Elman网络的BP算法。
Elman比正常网络多了个反馈,把前一次的
作为隐层的输入来调节隐层。
假设用
来表示反馈输入与隐层连接的参数,由于前一次计算的
作为常数输入,
与
的计算方法一样,
,其中e_h书上5.15给出。就是相当于多了几个输入会变的输入层神经元。
10.实现一个卷积神经网络。
CNN作为深度学习一个重要工具,Stanford专门有个CS231n来讲CNN。等我把西瓜书弄完再回头解决这个问题,我感觉一时半会搞不定,还是先把机器学习基础的做完再说。