机器学习(周志华) 参考答案 第五章 神经网络

版权声明:本文为博主原创文章,技术有限,如果发现错误或问题请告知博主,转载请注明出处,谢谢。 https://blog.csdn.net/icefire_tyh/article/details/52106899

机器学习(周志华) 参考答案 第五章 神经网络

机器学习(周志华西瓜书) 参考答案 总目录


    这章就是真正的两句话讲完一个知识点,然后后面还出个题让你编程

神经网络作为一个相当大的,多学科交叉的学科领域,并不是仅仅应用于机器学习。书上3张纸介绍了6种神经网络,都是泛泛几句话介绍。选了几本关于神经网络的书放进某东的购物车,等着下次300-200买起来慢慢研究。

1.试述将线性函数 f ( x ) = w t x 用作神经元激活函数的缺陷。

必须要强调的是,神经网络中必须要有非线性的激活函数,无论是在隐层,还是输出层,或者全部都是。如果单用 w t x 作为激活函数,无论多少层的神经网络会退化成一个线性回归,只不过是把他复杂化了。


2.试述使用图5.2(b)激活函数的神经元与对率回归的联系。

两者都是希望将连续值映射到{0,1}上,但由于阶跃函数不光滑,不连续的性质,所以才选择了sigmoid作为映射函数。不同之处在于激活函数不一定要使用sigmoid,只要是非线性的可导函数都可以使用。


3.对于图5.7中 v i h ,试推导出BP算法中的更新公式。

E k v i h = E k b h b h a h a h v i h
a h v i h = x i
e h = E k b h b h a h 在书中5.15已经证明
所以得到更新公式 υ e h x i


4.试述学习率的取值对神经网络训练的影响。

如果学习率太低,每次下降的很慢,使得迭代次数非常多。
如果学习率太高,在后面迭代时会出现震荡现在,在最小值附近来回波动。


5.试编程实现标准BP算法与累积BP算法,在西瓜数据集3.0上分别用这个算法训练一个单隐层网络,并进行比较。


6.试设计一个BP改进算法,能通过动态学习率显著提升收敛速度。

这真是一个蛋疼的题,本来以为方法很多,结果没有一个能用的。

固定的学习率要么很慢要么在后期震荡,设计一种自适应的动态学习率算法是有必要的。

  • 对四种参数的最速方向做一位搜索
    这是很直观的一种方法,已知f(x)在 x 0 的导数为d,那么下降方向就是-d。一位搜索就是求试 f ( x + t d ) 最小的t,也就是当前的学习率。
    然而这方法的t用解析法并不好求, f t ( x + t d ) = 0 也是无解的。
    使用近似方法尝试了下收敛速度并没有显著提升

  • 对四种参数做牛顿迭代
    虽然不符合题目改学习率的要求,但是牛顿法肯定能大大提高收敛速度,只是没有了学习率这个概念。
    然而Hessian矩阵求的我想吐血,最后也没去继续了。

书中给出了两篇文献供参考

  • Neural Networks: Tricks of the Trade
  • Neural Smithing:Supervised learning in Feedforward Artificial Neural Networks

    暂时不解这个题,等以后遇到好的方法再来更新。


7.根据式5.18和5.19,试构造一个能解决异或问题的RBF神经网络。


8.从网上下载或自己编程实现一个SOM网络,并观察在西瓜数据集 3.0 a 上产生的结果。

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网络为
SOM网络

64个神经元最终的位置,并可以查看样本映射到了哪个神经元上。


9.试推导用于Elman网络的BP算法。

Elman比正常网络多了个反馈,把前一次的 b h 作为隐层的输入来调节隐层。
假设用 u i h 来表示反馈输入与隐层连接的参数,由于前一次计算的 b h 作为常数输入, u i j v i j 的计算方法一样, Δ u i h = η e h b h ,其中e_h书上5.15给出。就是相当于多了几个输入会变的输入层神经元。


10.实现一个卷积神经网络。

CNN作为深度学习一个重要工具,Stanford专门有个CS231n来讲CNN。等我把西瓜书弄完再回头解决这个问题,我感觉一时半会搞不定,还是先把机器学习基础的做完再说。

猜你喜欢

转载自blog.csdn.net/icefire_tyh/article/details/52106899
今日推荐