5.1.试述将线性函数 f(x)=x用作神经元激活函数的缺陷
作为神经网络中必须要有非线性的激活函数,无论是在隐层,还是输出层,或者全部都是。可以理解为其实做这样的变换没有对数据和我们想要的结果有很大的改变。如果线性函数 f(x)=x作为激活函数,无论多少层的神经网络会退化成一个线性回归。 无法实现多层非线性神经网络的“深度”学习功能 。
看一个简单的例子:
总而言之,不能在隐藏层用线性激活函数,可以用非线性激活函数,唯一可以用线性激活函数的通常就是输出层
5.2.试述使用图 5.2(b) 激活函数的神经元与对率回归的联系.
比较两者可知,权重w完全一样,神经元中的阈值θ和对率回中的截距b之间相差一个负号,神经元的输出y相当于对率回归中正例预测概率。使用Sigmoid激活函数,每个神经元几乎和对率回归相同,只不过对率回归在Sigmoid (x>0) 时输出为1,而神经元直接输出Sigmoid (x)
5.3.对于图5.7中,试推导出BP算法中的更新公式
下图表示各个变量之间的依赖关系:
5.4. 试述学习率的取值对神经网络训练的影响。
简单说就是 ;学习率太大,会导致参数在最佳值附近出现较大的震荡,收敛较慢或者无法收敛,甚至于参数发散,距离最佳值越来越远;学习率太小,会导致参数收敛太慢,耗时。
5.5. 试编程实现标准BP算法和累计BP算法,在西瓜数据集3.0上分别用这两个算法训练一个单隐层网络,并进行比较。
参数设置:隐藏层数目q=5,学习率η=0.1 \eta=0.1η=0.1,迭代次数iteration=50000。
记录了神经网络训练过程中每一步参数更新后的累积均方误差,比较“标准BP算法”和“累积BP算法”的运行效果。
5.6. 试设计一个 BP 改进算法,能通过动态调整学习率显著提升收敛速度。编程实现该算法,并选择两个 UCI 数据集与标准 BP 算法进行实验比较。
动态调整学习率有很多现成的算法,RMSProp、Adam、NAdam等等,也可以手动实现一个简单指数式衰减, 其中 是一个超参。这里代码实现了Adam 。
代码片段参考:5.6.py · Wu/神经网络 - Gitee
5.7 根据式 (5.18)和 (5.19) ,试构造一个能解决异或问题的单层 RBF 神经网络。
对比单层RBF神经网络和前面的单层M-P神经网络,可以发现两者的网络结构一样,只是对于其中参数和激活函数的定义不一样:
下面构造一个解决异或问题的RBF神经网络,输入层神经元数为2,隐藏层神经元数为4,输出层神经元数为1。可以验证。1。可以验证,
各个参数设置为: C1 =(0,0), c2=(0,1), C3=(1,0), c4=(1,1), β1=βz=β3=β4=-In2, W1 =W4= -4/9, w2=W3=5/9时,该RBF神经网络的输入输出满足y= x1田x2(x1,x2 =0,1).
5.8 从网上下载或自己编程实现 网络,并观察其在西瓜数据集 3.0α上产生的结果。
SOM 的实现步骤
1.初始化权重w
2.寻找最近的神经元
i(x) = argminj||x(n) - wj(n)||
3.更新邻近神经元的权重
4.减少邻近神经元以及学习速率 η
wj(n+1)= wj(n) + η(n) hj,i(x)(x - wj(n))
5.回到第2步
分析:
1、以上两图中左侧的“原数据”中“×”数据点为样本数据,大圆点“●”为SOM网络的权重W所对应的数据点,相当于聚类中心。
2、图中相同颜色的样本数据点和聚类中心表明这些样本数据及其所对应的共同获胜神经元。
3、第一个图中构造的输出层结构为1×5,第二个图中输出层为3×3,对比原数据和SOM输出层可见,SOM网络保持了原数据的拓扑结构。SOM网络能够保持拓扑结构的关键在于允许获胜神经元邻近的神经元进行参数更新。
4、竞争规则采用了欧拉距离法,输出层单元之间距离计算也采用欧拉距离。
5.9 试推导用于Elman网络的BP算法。
可以参考零基础入门深度学习(5) - 循环神经网络 - 作业部落 Cmd Markdown 编辑阅读器
5.10 从网上下载或自己编程实现一个卷积神经网络,并在手写字符识别数据MNIST上进行实验测试。
其中包括网络结构定义、参数训练、参数保存、计算测试精度、画图观察错误预测效果等内容。
构建的卷积网络结构如下图所示:
这里采用Tensorflow来实现卷积神经网络,需要额外下载Tensorflow安装包,其中一些链接:
代码地址:码云
下图表示各个变量之间的依赖关系: