第一部分:计算与证明 :
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