logo资料库

模式识别作业-习题解答+代码.docx

第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
资料共15页,剩余部分请下载后查看
第一部分:计算与证明 :
1.
2.
3.
第二部分:计算机编程
1.
2.
附录
###-----代码为文件夹下Stochastic_BP.py文件-----
###-----代码为文件夹下Batch_BP.py文件-----
第一部分:计算与证明 : 1. 考虑一个三层网络进行分类,隐藏层中有 Hn 个结点,输出层中有c个结点。 模式(也称为样本)在d维空间中。 隐藏层中结点的激活函数(或传递函数)为 sigmoid型函数。 不同地,输出层中的结点将采用以下softmax操作作为其激活函 数: z j  e c  m 1  net j net m e , j  1,2,..., c 其中, jnet 代表输出层中第 j 个结点的加权和。 (a) 如果每个样本的标准函数是平方误差的和,则在反向传播框架下推导学习规 则,即分析每一层权重的更新方法): J (w)= 1 2 c  ( t j j 1  z 2 ) j 其中, jt 是输出层中第 j 个结点处的样本的已知目标值。 解:上标 k 表示第 k 个样本: 对第 k 个样本,隐含层 h 结点的输入加权和为: net k h  d  i  0 k w x ih i , ( k x 0  1) k w x ih i ) d  ( i  0 k w x ih i ) 经过激励,隐含层 h 结点的输出: y k h  ( f net 1 k h ) d   Si g ( i  0 输出层 j 结点的输入加权为: net k j  n H  h  0 w y hj k h  n H  h  0 经过激励,输出层 j 结点的输出: z k j  f net 2 ( k j )  w hj S  ig net k j net k m e e c  m 1  单个样本的误差函数: J k (w) = 1 2 c  ( t k j j 1  2 z k j ) 1 隐含层到输出层的连接权重调整量:
#04 k j net  w  hj J  k z  j ) y  k z  j net  k h k j     k ' f net 2 ( k j  J   w  hj k ) z  j k j  w hj      k ( t  =  k ( t k j  z k j )  net k j e  c  net k m e 1, m m j   c e net 2   k m 1 m  k =   j , )  k j k , y h   k j k w  hj ( ' f net 2  y k h t k j  z k j   k  j k j 2 输入层到隐含层的连接权重调整量: net  k k y  j h ' ( f net 2       [  = = k z  j net  k ) z  j J   w  ih J  k z  j k t  j ' ( f net 1 , k j (     w ih , k j k h ) ( k j t  k j ) k j k h k y net   h net w   ih ' ( w f net  hj 1 k h  k h )  k x i  z ) k j  ' f net 2 ( ) k j  w hj ]  k x i j k k =  [  y k h (1  y k h )  ( t k j  z ) k j   j net k j e  c  net k m e 1, m m j   c e net 2   k m m 1   w hj ]  k x i k  h  ' f net 1 ( k h )  k k k = x w   i h ih  ' k ( f net w   j hj 1 j , k ) h   k h ,   k h  k  j j w hj (b) 结合课堂所学知识,对反向传播算法进行总结。注意:本题只需要推导出单 个样本对权重更新的贡献即可(因为多个样本只是简单地相加) 解:通过观察(a)中的两个式子:  k hj w  ( ' f net 2 k j k =  j , )  k j k h , y k   j k  j  , t k j  z k j k  h  ' f net 1 ( k h )   k h  k w ih k =  h k , x i    k ,  j k h j w hj 更新任意两层之间的连接权重时,权重调整量与更新权重所连接的边的起始 结点的输出和连接的边的指向结点收集到的误差信号的乘积成正比;同时,误差 信号的大小等于:该结点收集到的误差乘以激励函数对“该结点加权和”的导数。 单个训练样本的贡献表示为:  w in  o      y in o (  h w in  o [ ] )  o h  y in 下标in 和 o 分别指“待更新权重”所连接的起始结点和指向结点, iny 代表起 1
始结点的实际输出, o 表示指向结点的误差(由后一层收集得到)。 #04 2. 请描述自组织算法的计算步骤,给出训练算法的框图。 (1) 计算步骤: Step1:网络初始化——通常采用随机初始化方法; Step2:输入向量; Step3:计算映射层的权重向量和输入向量的距离: d j   x w i ij ( 2 ) d i 1  Step4:计算并选择与权重向量的距离最小的神经元,将其确定为胜出神经元 ( *j ),并给出其邻接神经元集合 h (..., * j 。 ) Step5:调整权重。胜出神经元和其邻接神经元的权重,按下式更新: * ( , )( h j w j   ij ( ) ( 1) w t w t   ij ij x w  i ij w   ij ) 其中,邻域函数 ( , h j * j )  exp(  || j  * 2 j  2 || / ) 。 Step6:检查是否达到预先设定的要求。若达到要求则算法结束;否则返回 Step2,进入下一轮学习。 (2) 训练算法框图: 2
图 1 自组织算法的训练框图 #04 3. 拟考虑对 400×400 大小的图像数据集运用卷积神经网络。假定共有 4 个卷 积层。第一隐含层采用 5×5 大小的滤波器,其它卷积层采用 3×3 大小的滤波器。 第 1 至第 4 卷积层分别包含的图像数目为 20,30,20,10。Pooling 操作均采 用在 2×2 大小的局部窗口内取最大值(即 max pooling),同时假定在 max pooling 之后完成激励操作。假定连接到最后一个 pooling 操作之后的前向神经网络为单 层前向神经网络,且输出层的结点个数为 10。 (1) 请按层指出该网络需要计算的权重数量;相对于全连接和非权值共享,请指 出当同时采用权值共享和局部连接时所减少的权重数量; (2) 请指出在遇到 max pooling 操作时,在进行反向传播时错误如何传? (3) 请讨论你所能想到的对网络结构的改变。 解: (1) ① 图像大小:400×400 第一隐含层滤波器大小:5×5 第一隐含层结点图像个数: 20 第一隐含层图像大小:396×396 第一隐含层 pooling 窗口大小:2×2 第一隐含层 pooling 之后图像大小:198×198 输入层到第一隐层所需的权重数量:5×5×20=500, 全连接和非权值共享时:400×400×20×396×396=501811200000, 减少的权重数量:501811199500 2 图像大小:198×198 第二隐含层滤波器大小:3×3 第二隐含层结点图像个数: 30 第二隐含层图像大小:196×196 第二隐含层 pooling 窗口大小:2×2 第二隐含层 pooling 之后图像大小:98×98 第一到第二隐层所需的权重数量:3×3×20×30=5400, 全连接和非权值共享时:(20×198×198)×(30×196×196)=903636518400, 减少的权重数量:903636513000 3 图像大小:98×98 第三隐含层滤波器大小:3×3 第三隐含层结点图像个数: 20 第三隐含层图像大小:96×96 3
#04 第三隐含层 pooling 窗口大小:2×2 第三隐含层 pooling 之后图像大小:48×48 第二到第三隐层所需的权重数量:3×3×30×20=5400, 全连接和非权值共享时:(30×98×98)×(20×96×96)=53106278400, 减少的权重数量:53106273000 4 图像大小:48×48 第四隐含层滤波器大小:3×3 第四隐含层结点图像个数: 10 第四隐含层图像大小:46×46 第四隐含层 pooling 窗口大小:2×2 第四隐含层 pooling 之后图像大小:23×23 第三到第四隐层所需的权重数量:3×3×20×10=1800, 全连接和非权值共享时:(20×48×48)×(10×46×46)=975052800, 减少的权重数量:975051000 5 第四隐含层到输出所需的权重数量:20×10=200 (2) 需要保证传递的 loss(或者梯度)总和不变。 max pooling 的前向传播是把 patch 中最大的值传递给后一层,而其他像素的 值直接被舍弃掉。那么反向传播也就是把梯度直接传给前一层某一个像素,而其 他像素不接受梯度,也就是为 0。因此,max pooling 操作需要记录最大值所在位 置。 (3) 隐含层的层数,隐含层的结点数,滤波器的尺寸和数目。 隐含层的层数视实际情况而定,合适的隐含层数能保证效果好的同时减小网 络的开销。隐含层结点太少时,学习过程不收敛;太多时,网络映射能力太强, 泛化能力低,且学习时间长。 4
第二部分:计算机编程 本题使用的数据如下: #04 1. 请编写两个通用的三层前向神经网络反向传播算法程序,一个采用批量方式 更新权重,另一个采用单样本方式更新权重。其中,隐含层结点的激励函数采用 双曲正切函数,输出层的激励函数采用 sigmoid 函数。目标函数采用平方误差准 则函数。 代码详见附录。 (1) 采用随机更新 BP 算法更新权重: 运行结果如下: 图 2 Stochastic_BP 隐藏层结点数为 3,更新步长为 0.8 的网络权重(左)和训练误差(右) 5
(2)采用批量更新 BP 算法更新权重: 运行结果如下: #04 图 3 Batch_BP 隐藏层结点数为 3,更新步长为 0.8 的网络权重(左)和训练误差(右) 分析: (1)随机更新:每次随机选取一个样本,通过单个样本对权重的贡献直接更新 得到新的权重值。随机更新的优势: a) 学习时间快,适用于大型冗余数据集上的 BP 算法; b) 迭代过程中的噪声有助于权重跳出局部最小值,得到更优的解; c) 有利于追踪和检测样本的变化,避免出现较大的泛化误差。 (2)批量更新:处理一批样本后才能更新一次权重值,经过几轮迭代后误差很 快收敛到较小值。批量更新的适用范围: a) 随机更新中的噪声导致难以完整收敛于最小值,此时批量更新能减小权重 的动荡,局部最小值的动荡的方差与学习率成比例关系。为了减少这些动荡, 可以减小(退火)学习率或者使用一个自适应 batch_size。 b) 批量处理支持学习过程的加速(例如共轭梯度); c) 权重动态性和收敛比率的原理性分析更容易。 2. 请利用上面的数据验证你写的程序,分析如下几点: (a) 隐含层不同结点数目对训练精度的影响: 隐含层的结点数直接影响训练精度:结点数太少,难以表达样本之间复杂的 映射关系;结点数太多,网络容易出现过拟合,降低了泛化能力。 对于随机更新的方式,结点数分别设置为 5 和 7 时,得到的 loss 曲线: 6
#04 图 4 Stochastic_BP 算法固定步长为 0.8, 隐藏层结点为 5(左)和 7(右)的训练误差曲线 随着结点数从 3 增加到 7,可以发现:增加隐藏层的结点数可以更好地表达 输入样本和分类标签之间的复杂关系,但单纯地依赖增加结点数来提升精度是不 现实的。当结点数增加到 7 时,训练误差曲线的收敛极值和 5 个结点的网络极值 相近,改善程度不佳,收敛曲线仍存在轻微的震荡和抖动现象。 (b) 观察不同的梯度更新步长对训练的影响,并给出一些描述或解释: 设置合理的更新步长能实现网络在较短的时间内收敛到最优解。更新步长大, 网络学习速度快,但容易跨过最小值,网络参数在最优参数附近来回盘旋;更新 步长小,网络学习速度慢,容易陷入局部最优解。 对于批量更新的方式,更新步长分别设置为 0.4 和 0.1 时,得到的 loss 曲线: 图 5 Batch_BP 算法隐藏层结点数为 5,更新步长为 0.4(左)和 0.1(右)的训练误差曲线 降低,loss 曲线光滑,收敛减缓,一定程度上降低了分类误差, 但一味地 减小,误差反而有所上升,网络可能陷入了局部极小值,从而导致精度降低。 7
分享到:
收藏