参考马春鹏 《模式识别与机器学习》翻译
神经网络
在第3章和第4章中,我们考虑了由固定基函数的线性组合构成的回归模型和分类模型。它们的实际应⽤被维数灾难问题限制了。
⼀种⽅法是事先固定基函数的数量,但是允许基函数可调节。换句话说,就是使⽤参数形式的基函数,这些参数可以在训练阶段调节。在模式识别中,这种类型的最成功的模型时前馈神经⽹络,也被称为多层感知器(multilayer perceptron),将在本章讨论。
前馈神经⽹络
回归的线性模型和分类的线性模型它们基于固定⾮线性基函数φj(x)的线性组合,形式为
(1)
y
(
x
,
w
)
=
f
(
∑
j
=
1
M
w
j
ϕ
j
(
x
)
)
y ( \boldsymbol { x } , \boldsymbol { w } ) = f \left( \sum _ { j = 1 } ^ { M } w _ { j } \phi _ { j } ( \boldsymbol { x } ) \right) \tag{1}
y ( x , w ) = f ( j = 1 ∑ M w j ϕ j ( x ) ) ( 1 )
神经⽹络使⽤与公式(5.1)形式相同的基函数,即每个基函数本⾝是输⼊的线性组合的⾮线性函数,其中线性组合的系数是可调节参数。
神经⽹络可以被描述为⼀系列的函数变换。⾸先,我们构造D维输⼊变量x1, . . . , xD的M个线性组合,形式为
(2)
a
j
=
∑
i
=
1
D
w
j
i
(
1
)
x
i
+
w
j
0
(
1
)
a _ { j } = \sum _ { i = 1 } ^ { D } w _ { j i } ^ { ( 1 ) } x _ { i } + w _ { j 0 } ^ { ( 1 ) } \tag{2}
a j = i = 1 ∑ D w j i ( 1 ) x i + w j 0 ( 1 ) ( 2 )
aj被称为激活(activation)。每个激活都使⽤⼀个可微的⾮线性激活函数 (activation function) h(·)进⾏变换,可得
(3)
z
j
=
h
(
a
j
)
z _ { j } = h \left( a _ { j } \right) \tag{3}
z j = h ( a j ) ( 3 )
这些量对应于公式(5.1)中的基函数的输出,这些基函数在神经⽹络中被称为隐含单元(hidden unit) , 这些值再次线性组合,得到输出单元激活(output unit activation)
(4)
a
k
=
∑
j
=
1
M
w
k
j
(
2
)
z
j
+
w
k
0
(
2
)
a _ { k } = \sum _ { j = 1 } ^ { M } w _ { k j } ^ { ( 2 ) } z _ { j } + w _ { k 0 } ^ { ( 2 ) } \tag{4}
a k = j = 1 ∑ M w k j ( 2 ) z j + w k 0 ( 2 ) ( 4 )
激活函数的选择由数据本⾝以及⽬标变量的假定的分布确定, 因此对于回归问题,激活函数是恒等函数,从⽽yk = ak。对于多个⼆元分类问题,每个输出单元激活使⽤logistic sigmoid函数进⾏变换,即
(5)
y
k
=
σ
(
a
k
)
σ
(
a
)
=
1
1
+
exp
(
−
a
)
\begin{array} { c } { y _ { k } = \sigma \left( a _ { k } \right) } \\ { \sigma ( a ) = \frac { 1 } { 1 + \exp ( - a ) } } \end{array} \tag{5}
y k = σ ( a k ) σ ( a ) = 1 + exp ( − a ) 1 ( 5 )
扫描二维码关注公众号,回复:
5369240 查看本文章
对于多类问题,我们使⽤softmax激活函数。我们可以将各个阶段结合,得到整体的⽹络函数。对于sigmoid输出单元激活函数,整体的⽹络函数为
(6)
y
k
(
x
,
w
)
=
σ
(
∑
j
=
1
M
w
k
j
(
2
)
h
(
∑
i
=
1
D
w
j
i
(
1
)
x
i
+
w
j
0
(
1
)
)
+
w
k
0
(
2
)
)
y _ { k } ( \boldsymbol { x } , \boldsymbol { w } ) = \sigma \left( \sum _ { j = 1 } ^ { M } w _ { k j } ^ { ( 2 ) } h \left( \sum _ { i = 1 } ^ { D } w _ { j i } ^ { ( 1 ) } x _ { i } + w _ { j 0 } ^ { ( 1 ) } \right) + w _ { k 0 } ^ { ( 2 ) } \right) \tag{6}
y k ( x , w ) = σ ( j = 1 ∑ M w k j ( 2 ) h ( i = 1 ∑ D w j i ( 1 ) x i + w j 0 ( 1 ) ) + w k 0 ( 2 ) ) ( 6 )
这个函数可以被表⽰下图所示,计算公式(5.7)的过程可以看做信息通过⽹络的前向传播 (forward propagation)
整合偏置之后(x0 = 1)的公式表示如下
(7)
a
j
=
∑
i
=
0
D
w
j
i
(
1
)
x
i
a _ { j } = \sum _ { i = 0 } ^ { D } w _ { j i } ^ { ( 1 ) } x _ { i } \tag{7}
a j = i = 0 ∑ D w j i ( 1 ) x i ( 7 )
(8)
y
k
(
x
,
w
)
=
σ
(
∑
j
=
0
M
w
k
j
(
2
)
h
(
∑
i
=
0
D
w
j
i
(
1
)
x
i
)
)
y _ { k } ( \boldsymbol { x } , \boldsymbol { w } ) = \sigma \left( \sum _ { j = 0 } ^ { M } w _ { k j } ^ { ( 2 ) } h \left( \sum _ { i = 0 } ^ { D } w _ { j i } ^ { ( 1 ) } x _ { i } \right) \right)\tag{8}
y k ( x , w ) = σ ( j = 0 ∑ M w k j ( 2 ) h ( i = 0 ∑ D w j i ( 1 ) x i ) ) ( 8 )
⽹络必须被限制为前馈(feed-forward)结构,换句话说,⽹络中不能存在有向圈 ,从⽽确保了输出是输⼊的确定函数。⼀个带有线性输出的两层⽹络可以在任意精度下近似任何输⼊变量较少的连续函数,只要隐含单元的数量⾜够多。这个结果对于⼀⼤类隐含单元激活函数都成⽴,但是不包括多项式函数 。
虽然这些定理是⽏庸置疑的,但是关键的问题是,给定⼀组训练数据,如何寻找合适的参数值。之后会介绍基于 最⼤似然⽅法 和贝叶斯⽅法 。
权空间对称性
如果我们把作⽤于某个特定的隐含单元的所有的权值以及偏置全部变号,那么对于给定的输⼊模式,隐含单元的激活的符号也会改变。这是因为双曲正切函数是⼀个奇函数,即tanh(−a) = − tanh(a)。对于M个隐含单元,会有M个这样的“符号改变”对称性,因此任何给定的权向量都是2M个等价的权向量中的⼀个。
⽹络训练
确定⽹络参数的⼀个简单的⽅法是对误差函数进行梯度下降,我们要最⼩化误差函数
(9)
E
(
w
)
=
1
2
∑
n
=
1
N
∥
y
(
x
n
,
w
)
−
t
n
∥
2
E ( \boldsymbol { w } ) = \frac { 1 } { 2 } \sum _ { n = 1 } ^ { N } \left\| \boldsymbol { y } \left( \boldsymbol { x } _ { n } , \boldsymbol { w } \right) - \boldsymbol { t } _ { n } \right\| ^ { 2 } \tag{9}
E ( w ) = 2 1 n = 1 ∑ N ∥ y ( x n , w ) − t n ∥ 2 ( 9 )
⾸先,我们讨论回归问题。现在我们只考虑⼀元⽬标变量t的情形,其中t可以取任何实数值。我们假定t服从⾼斯分布,均值与x相关
(10)
p
(
t
∣
x
,
w
)
=
N
(
t
∣
y
(
x
,
w
)
,
β
−
1
)
p ( t | \boldsymbol { x } , \boldsymbol { w } ) = \mathcal { N } ( t | y ( \boldsymbol { x } , \boldsymbol { w } ) , \beta ^ { - 1 } ) \tag{10}
p ( t ∣ x , w ) = N ( t ∣ y ( x , w ) , β − 1 ) ( 1 0 )
给定⼀个由N个独⽴同分布的观测组成的数据集X = {x1, . . . , xN},以及对应的⽬标 值i = {t1, . . . , tN},我们可以构造对应的似然函数,
(11)
p
(
t
∣
X
,
w
,
β
)
=
∏
n
=
1
N
p
(
t
n
∣
x
n
,
w
,
β
)
p ( \mathbf { t } | \boldsymbol { X } , \boldsymbol { w } , \beta ) = \prod _ { n = 1 } ^ { N } p \left( t _ { n } | \boldsymbol { x } _ { n } , \boldsymbol { w } , \beta \right) \tag{11}
p ( t ∣ X , w , β ) = n = 1 ∏ N p ( t n ∣ x n , w , β ) ( 1 1 )
取负对数,我们就得到了误差函数
(12)
β
2
∑
n
=
1
N
{
y
(
x
,
w
)
−
t
n
}
2
−
N
2
ln
β
+
N
2
ln
(
2
π
)
\frac { \beta } { 2 } \sum _ { n = 1 } ^ { N } \left\{ y ( \boldsymbol { x } , \boldsymbol { w } ) - t _ { n } \right\} ^ { 2 } - \frac { N } { 2 } \ln \beta + \frac { N } { 2 } \ln ( 2 \pi ) \tag{12}
2 β n = 1 ∑ N { y ( x , w ) − t n } 2 − 2 N ln β + 2 N ln ( 2 π ) ( 1 2 )
⾸先考虑w的确定。最⼤化似然函数等价于最⼩化平⽅和误差函数
(13)
E
(
w
)
=
1
2
∑
n
=
1
N
{
y
(
x
n
,
w
)
−
t
n
}
2
E ( \boldsymbol { w } ) = \frac { 1 } { 2 } \sum _ { n = 1 } ^ { N } \left\{ y \left( \boldsymbol { x } _ { n } , \boldsymbol { w } \right) - t _ { n } \right\} ^ { 2 } \tag{13}
E ( w ) = 2 1 n = 1 ∑ N { y ( x n , w ) − t n } 2 ( 1 3 )
通过最⼩化E(w)的⽅式得到的w的值被记作wML,β的值可以通过最⼩化似然函数的负对数的⽅式求得,结果为
(14)
1
β
M
L
=
1
N
∑
n
=
1
N
{
y
(
x
n
,
w
M
L
)
−
t
n
}
2
\frac { 1 } { \beta _ { M L } } = \frac { 1 } { N } \sum _ { n = 1 } ^ { N } \left\{ y \left( \boldsymbol { x } _ { n } , \boldsymbol { w } _ { M L } \right) - t _ { n } \right\} ^ { 2 } \tag{14}
β M L 1 = N 1 n = 1 ∑ N { y ( x n , w M L ) − t n } 2 ( 1 4 )
对于多个⽬标变量的情况,⽬标变量之间相互独⽴ ,且噪声精度均为β
(15)
p
(
t
∣
x
,
w
)
=
N
(
t
∣
y
(
x
,
w
)
,
β
−
1
I
)
p ( \boldsymbol { t } | \boldsymbol { x } , \boldsymbol { w } ) = \mathcal { N } ( \boldsymbol { t } | \boldsymbol { y } ( \boldsymbol { x } , \boldsymbol { w } ) , \beta ^ { - 1 } \boldsymbol { I } ) \tag{15}
p ( t ∣ x , w ) = N ( t ∣ y ( x , w ) , β − 1 I ) ( 1 5 )
(16)
1
β
M
L
=
1
N
K
∑
n
=
1
N
∥
y
(
x
n
,
w
M
L
)
−
t
n
∥
2
\frac { 1 } { \beta _ { M L } } = \frac { 1 } { N K } \sum _ { n = 1 } ^ { N } \left\| \boldsymbol { y } \left( \boldsymbol { x } _ { n } , \boldsymbol { w } _ { M L } \right) - \boldsymbol { t } _ { n } \right\| ^ { 2 } \tag{16}
β M L 1 = N K 1 n = 1 ∑ N ∥ y ( x n , w M L ) − t n ∥ 2 ( 1 6 )
现在考虑⼆分类的情形,我们考虑⼀个具有单⼀输出的⽹络,它的激活函数是logistic sigmoid函数
(17)
y
=
σ
(
a
)
≡
1
1
+
exp
(
−
a
)
y = \sigma ( a ) \equiv \frac { 1 } { 1 + \exp ( - a ) } \tag{17}
y = σ ( a ) ≡ 1 + exp ( − a ) 1 ( 1 7 )
如果给定了输⼊,那么⽬标变量的条件概率分布是⼀个伯努利分布,形式为
(18)
p
(
t
∣
x
,
w
)
=
y
(
x
,
w
)
t
{
1
−
y
(
x
,
w
)
}
1
−
t
p ( t | \boldsymbol { x } , \boldsymbol { w } ) = y ( \boldsymbol { x } , \boldsymbol { w } ) ^ { t } \{ 1 - y ( \boldsymbol { x } , \boldsymbol { w } ) \} ^ { 1 - t } \tag{18}
p ( t ∣ x , w ) = y ( x , w ) t { 1 − y ( x , w ) } 1 − t ( 1 8 )
由负对数似然函数给出的误差函数就是⼀个交叉熵(cross-entropy)误差函数,形式为,Simard et al.(2003)发现,对于分类问题,使⽤交叉熵误差函数 ⽽不是平⽅和误差函数,会使得训练速度更快 ,同时提升了泛化能⼒ 。
(19)
E
(
w
)
=
−
∑
n
=
1
N
{
t
n
ln
y
n
+
(
1
−
t
n
)
ln
(
1
−
y
n
)
}
E ( \boldsymbol { w } ) = - \sum _ { n = 1 } ^ { N } \left\{ t _ { n } \ln y _ { n } + \left( 1 - t _ { n } \right) \ln \left( 1 - y _ { n } \right) \right\} \tag{19}
E ( w ) = − n = 1 ∑ N { t n ln y n + ( 1 − t n ) ln ( 1 − y n ) } ( 1 9 )
如果我们有K个相互独⽴的⼆元分类问题,那么给定输⼊向量,⽬标向量的条件概率分布为
(20)
p
(
t
∣
x
,
w
)
=
∏
k
=
1
K
y
k
(
x
,
w
)
t
k
[
1
−
y
k
(
x
,
w
)
]
1
−
t
k
p ( t | \boldsymbol { x } , \boldsymbol { w } ) = \prod _ { k = 1 } ^ { K } y _ { k } ( \boldsymbol { x } , \boldsymbol { w } ) ^ { t _ { k } } \left[ 1 - y _ { k } ( \boldsymbol { x } , \boldsymbol { w } ) \right] ^ { 1 - t _ { k } } \tag{20}
p ( t ∣ x , w ) = k = 1 ∏ K y k ( x , w ) t k [ 1 − y k ( x , w ) ] 1 − t k ( 2 0 )
(21)
E
(
w
)
=
−
∑
n
=
1
N
∑
k
=
1
K
{
t
n
k
ln
y
n
k
+
(
1
−
t
n
k
)
ln
(
1
−
y
n
k
)
}
E ( \boldsymbol { w } ) = - \sum _ { n = 1 } ^ { N } \sum _ { k = 1 } ^ { K } \left\{ t _ { n k } \ln y _ { n k } + \left( 1 - t _ { n k } \right) \ln \left( 1 - y _ { n k } \right) \right\} \tag{21}
E ( w ) = − n = 1 ∑ N k = 1 ∑ K { t n k ln y n k + ( 1 − t n k ) ln ( 1 − y n k ) } ( 2 1 )
对于多 分 类 问 题从 ⽽ ⽹ 络 的 输 出 可 以 表 ⽰为yk(x, w) = p(tk = 1 | x),因此误差函数为
(22)
E
(
w
)
=
−
∑
n
=
1
N
∑
k
=
1
K
t
n
k
ln
y
k
(
x
n
,
w
)
E ( \boldsymbol { w } ) = - \sum _ { n = 1 } ^ { N } \sum _ { k = 1 } ^ { K } t _ { n k } \ln y _ { k } \left( \boldsymbol { x } _ { n } , \boldsymbol { w } \right) \tag{22}
E ( w ) = − n = 1 ∑ N k = 1 ∑ K t n k ln y k ( x n , w ) ( 2 2 )
(23)
y
k
(
x
,
w
)
=
exp
(
a
k
(
x
,
w
)
)
∑
j
exp
(
a
j
(
x
,
w
)
)
y _ { k } ( \boldsymbol { x } , \boldsymbol { w } ) = \frac { \exp \left( a _ { k } ( \boldsymbol { x } , \boldsymbol { w } ) \right) } { \sum _ { j } \exp \left( a _ { j } ( \boldsymbol { x } , \boldsymbol { w } ) \right) } \tag{23}
y k ( x , w ) = ∑ j exp ( a j ( x , w ) ) exp ( a k ( x , w ) ) ( 2 3 )
参数最优化
寻找⼀个向量w使得E(w)取得最⼩值。然⽽,误差函数通常与权值和偏置参数的关系是⾼度⾮线性的 ,因此权值空间中会有很多梯度为零
然⽆法找到⽅程∇E(w) = 0的解析解,因此我们使⽤迭代 的数值⽅法。然⽆法找到⽅程∇E(w) = 0的解析解,因此我们使⽤迭代的数值⽅法。
(24)
w
(
τ
+
1
)
=
w
(
τ
)
+
Δ
w
(
τ
)
\boldsymbol { w } ^ { ( \tau + 1 ) } = \boldsymbol { w } ^ { ( \tau ) } + \Delta w ^ { ( \tau ) } \tag{24}
w ( τ + 1 ) = w ( τ ) + Δ w ( τ ) ( 2 4 )
局部⼆次近似
考虑E(w)在权空间某点w! 处的泰勒展开
(25)
E
(
w
)
≃
E
(
w
^
)
+
(
w
−
w
^
)
T
b
+
1
2
(
w
−
w
^
)
T
H
(
w
−
w
^
)
E ( \boldsymbol { w } ) \simeq E ( \widehat { \boldsymbol { w } } ) + ( \boldsymbol { w } - \widehat { \boldsymbol { w } } ) ^ { T } \boldsymbol { b } + \frac { 1 } { 2 } ( \boldsymbol { w } - \widehat { \boldsymbol { w } } ) ^ { T } \boldsymbol { H } ( \boldsymbol { w } - \widehat { \boldsymbol { w } } ) \tag{25}
E ( w ) ≃ E ( w
) + ( w − w
) T b + 2 1 ( w − w
) T H ( w − w
) ( 2 5 )
(26)
b
≡
∇
E
∣
w
=
w
^
\boldsymbol { b } \equiv \nabla \left. E \right| _ { \boldsymbol { w } = \widehat { \boldsymbol { w } } } \tag{26}
b ≡ ∇ E ∣ w = w
( 2 6 )
(27)
(
H
)
i
j
≡
∂
E
∂
w
i
∂
w
j
∣
w
=
w
^
( \boldsymbol { H } ) _ { i j } \equiv \left. \frac { \partial E } { \partial w _ { i } \partial w _ { j } } \right| _ { \boldsymbol { w } = \widehat { \boldsymbol { w } } } \tag{27}
( H ) i j ≡ ∂ w i ∂ w j ∂ E ∣ ∣ ∣ ∣ w = w
( 2 7 )
梯度的局部近似为
(28)
∇
E
≃
b
+
H
(
w
−
w
^
)
\nabla E \simeq \boldsymbol { b } + \boldsymbol { H } ( \boldsymbol { w } - \widehat { \boldsymbol { w } } ) \tag{28}
∇ E ≃ b + H ( w − w
) ( 2 8 )
梯度下降最优化
最简单的使⽤梯度信息的⽅法是,将公式(5.27)中的权值更新⽅式选择为下⾯的形式:每次权值更新都是在负梯度⽅向上的⼀次⼩的移动,即
(29)
w
(
τ
+
1
)
=
w
(
τ
)
−
η
∇
E
(
w
(
τ
)
)
\boldsymbol { w } ^ { ( \tau + 1 ) } = \boldsymbol { w } ^ { ( \tau ) } - \eta \nabla E \left( \boldsymbol { w } ^ { ( \tau ) } \right) \tag{29}
w ( τ + 1 ) = w ( τ ) − η ∇ E ( w ( τ ) ) ( 2 9 )
虽然这种⽅法在直觉上看⽐较合理,但是实际上可以证明它是⼀个很差 的算法,原因可以参考Bishop and Nabney(2008)。
对于批量最优化⽅法,存在更⾼效的⽅法,例如共轭梯度法 (conjugate gradient)或者拟⽜顿法 (quasi-Newton)。随机梯度下降 (stochastic gradient descent),使得权向量的更新每次只依赖于⼀个数据点 ,即
(30)
w
(
τ
+
1
)
=
w
(
τ
)
−
η
∇
E
n
(
w
(
τ
)
)
\boldsymbol { w } ^ { ( \tau + 1 ) } = \boldsymbol { w } ^ { ( \tau ) } - \eta \nabla E _ { n } \left( \boldsymbol { w } ^ { ( \tau ) } \right) \tag{30}
w ( τ + 1 ) = w ( τ ) − η ∇ E n ( w ( τ ) ) ( 3 0 )
误差反向传播
本节中,我们的⽬标是寻找⼀种计算前馈神经⽹络的误差函数E(w)的梯度的⼀种⾼效的⽅法。
误差函数导数的计算
⾸先考虑⼀个简单的线性模型,其中输出yk是输⼊变量xi的线性组合,即
y
k
=
∑
i
w
k
i
x
i
y _ { k } = \sum _ { i } w _ { k i } x _ { i }
y k = i ∑ w k i x i
E
n
=
1
2
∑
k
(
y
n
k
−
t
n
k
)
2
E _ { n } = \frac { 1 } { 2 } \sum _ { k } \left( y _ { n k } - t _ { n k } \right) ^ { 2 }
E n = 2 1 k ∑ ( y n k − t n k ) 2
这个误差函数关于⼀个权值wji的梯度为
∂
E
n
∂
w
j
i
=
(
y
n
j
−
t
n
j
)
x
n
i
\frac { \partial E _ { n } } { \partial w _ { j i } } = \left( y _ { n j } - t _ { n j } \right) x _ { n i }
∂ w j i ∂ E n = ( y n j − t n j ) x n i
它可以表⽰为与链接wji的输出端相关联的“误差信号”ynj − tnj和与链接的输⼊端相关联的变量xni的乘积。
在⼀个⼀般的前馈⽹络中,每个单元都会计算输⼊的⼀个加权和,形式为
a
j
=
∑
i
w
j
i
z
i
a _ { j } = \sum _ { i } w _ { j i } z _ { i }
a j = i ∑ w j i z i
z
j
=
h
(
a
j
)
z _ { j } = h \left( a _ { j } \right)
z j = h ( a j )
y
k
=
∑
j
w
k
j
z
j
y _ { k } = \sum_{j}w_{kj}z_j
y k = j ∑ w k j z j
输出层的
δ
k
\delta_k
δ k
δ
k
=
y
k
−
t
k
\delta _ { k } = y _ { k } - t _ { k }
δ k = y k − t k
隐藏层的
δ
j
\delta_j
δ j
δ
j
≡
∂
E
n
∂
a
j
=
∑
k
∂
E
n
∂
y
k
∂
y
k
∂
a
j
\delta _ { j } \equiv \frac { \partial E _ { n } } { \partial a _ { j } } = \sum _ { k } \frac { \partial E _ { n } } { \partial y _ { k } } \frac { \partial y _ { k } } { \partial a _ { j } }
δ j ≡ ∂ a j ∂ E n = k ∑ ∂ y k ∂ E n ∂ a j ∂ y k
其中
∂
E
n
∂
y
k
=
δ
k
\frac { \partial E _ { n } } { \partial y _ { k } } = \delta_k
∂ y k ∂ E n = δ k ,
∂
y
k
∂
a
j
\frac { \partial y _ { k } } { \partial a _ { j } }
∂ a j ∂ y k =
w
k
j
h
′
(
a
j
)
w _ { k j }h ^ { \prime } \left( a _ { j } \right)
w k j h ′ ( a j ) ,所以
δ
j
=
h
′
(
a
j
)
∑
k
w
k
j
δ
k
\delta _ { j } = h ^ { \prime } \left( a _ { j } \right) \sum _ { k } w _ { k j } \delta _ { k }
δ j = h ′ ( a j ) k ∑ w k j δ k
Jacobian矩阵
我们考虑Jacobian矩阵的计算,它的元素的值是⽹络的输出关于输⼊的导数
J
k
i
≡
∂
y
k
∂
x
i
J _ { k i } \equiv \frac { \partial y _ { k } } { \partial x _ { i } }
J k i ≡ ∂ x i ∂ y k
由于Jacobian矩阵度量了输出对于每个输⼊变量的改变的敏感性,因此它也允许与输⼊关联的任意已知的误差∆xi在训练过的⽹络中传播,从⽽估计他们对于输出误差∆yk的贡献。⼆者的关系为
Δ
y
k
≃
∑
i
∂
y
k
∂
x
i
Δ
x
i
\Delta y _ { k } \simeq \sum _ { i } \frac { \partial y _ { k } } { \partial x _ { i } } \Delta x _ { i }
Δ y k ≃ i ∑ ∂ x i ∂ y k Δ x i
Hessian矩阵
我们已经说明了反向传播的⽅法如何⽤来得到误差函数关于⽹络的权值的⼀阶导数。反向传播也可以⽤来计算误差函数的⼆阶导数,形式为
∂
2
E
∂
w
j
i
∂
w
l
k
\frac { \partial ^ { 2 } E } { \partial w _ { j i } \partial w _ { l k } }
∂ w j i ∂ w l k ∂ 2 E
Hessian矩阵在神经⽹络中的作⽤:
⼀些⽤来训练神经⽹络的⾮线性最优化算法是基于误差曲⾯的⼆阶性质的,这些性质由Hessian矩阵控制(Bishop and Nabney, 2008)。
对于训练数据的微⼩改变, Hessian矩阵构成了快速重新训练前馈⽹络的算法的基础(Bishop, 1991)。
Hessian矩阵的逆矩阵⽤来鉴别神经⽹络中最不重要的权值,这是⽹络“剪枝”算法的⼀部分(LeCun et al., 1990)。
Hessian矩阵是贝叶斯神经⽹络(见5.7节)的拉普拉斯近似的核⼼。它的逆矩阵⽤来确定 训练过的神经⽹络的预测分布,它的特征值确定了超参数的值,它的⾏列式⽤来计算模型证据。
神经⽹络的正则化
通过给误差函数增加⼀个正则化项,来控制模型的复杂度。最简单的正则化项是⼆次的,给出了正则化的误差函数,形式为
E
~
(
w
)
=
E
(
w
)
+
λ
2
w
T
w
\tilde { E } ( \boldsymbol { w } ) = E ( \boldsymbol { w } ) + \frac { \lambda } { 2 } \boldsymbol { w } ^ { T } \boldsymbol { w }
E ~ ( w ) = E ( w ) + 2 λ w T w
相容的⾼斯先验
对于一个单隐层的网络
z
j
=
h
(
∑
i
w
j
i
x
i
+
w
j
0
)
y
k
=
∑
j
w
k
j
z
j
+
w
k
0
\begin{array} { c } { z _ { j } = h \left( \sum _ { i } w _ { j i } x _ { i } + w _ { j 0 } \right) } \\ { y _ { k } = \sum _ { j } w _ { k j } z _ { j } + w _ { k 0 } } \end{array}
z j = h ( ∑ i w j i x i + w j 0 ) y k = ∑ j w k j z j + w k 0
可以通过对原始数据进行线性变换得到一个等价的网络
x
i
→
x
~
i
=
a
x
i
+
b
x _ { i } \rightarrow \tilde { x } _ { i } = a x _ { i } + b
x i → x ~ i = a x i + b
w
j
i
→
w
~
j
i
=
1
a
w
j
i
w
j
0
→
w
~
j
0
=
w
j
0
−
b
a
∑
i
w
j
i
\begin{array} { c } { w _ { j i } \rightarrow \tilde { w } _ { j i } = \frac { 1 } { a } w _ { j i } } \\ { w _ { j 0 } \rightarrow \tilde { w } _ { j 0 } = w _ { j 0 } - \frac { b } { a } \sum _ { i } w _ { j i } } \end{array}
w j i → w ~ j i = a 1 w j i w j 0 → w ~ j 0 = w j 0 − a b ∑ i w j i
y
k
→
y
~
k
=
c
y
k
+
d
y _ { k } \rightarrow \tilde { y } _ { k } = c y _ { k } + d
y k → y ~ k = c y k + d
w
k
j
→
w
~
k
j
=
c
w
k
j
w
k
0
→
w
~
k
0
=
c
w
k
0
+
d
\begin{array} { c } { w _ { k j } \rightarrow \tilde { w } _ { k j } = c w _ { k j } } \\ { w _ { k 0 } \rightarrow \tilde { w } _ { k 0 } = c w _ { k 0 } + d } \end{array}
w k j → w ~ k j = c w k j w k 0 → w ~ k 0 = c w k 0 + d
显然,简单的权值衰减(5.112)由于把所有的权值和偏置同等对待,因此不满⾜ 相容性的性质。于是我们要寻找⼀个正则化项,它在线性变换)下具有不变性。这需要正则化项应该对于权值的重新缩放不变,对于偏置的平移不变。这样的正则化项为(去掉偏置 )
λ
1
2
∑
w
∈
W
1
w
2
+
λ
2
2
∑
w
∈
W
2
w
2
\frac { \lambda _ { 1 } } { 2 } \sum _ { w \in \mathcal { W } _ { 1 } } w ^ { 2 } + \frac { \lambda _ { 2 } } { 2 } \sum _ { w \in \mathcal { W } _ { 2 } } w ^ { 2 }
2 λ 1 w ∈ W 1 ∑ w 2 + 2 λ 2 w ∈ W 2 ∑ w 2
其 中W1表 ⽰第⼀层的权值 集合, W2表 ⽰第⼆层的权值集合,偏置未出现在求和 式中。这 个正则化项在权值的变换下 不会发⽣变化
早停⽌
另⼀种控制⽹络的复杂度的正则化⽅法是早停⽌(early stopping)。在训练误差达到最⼩值之前停⽌训练就表⽰了⼀种限制模型复杂度的⽅式。
不变性
在对于输⼊变量进⾏了⼀个或者多个变换之后,预测不应该发⽣变化。⼆维图像(例如⼿写数字)的分类问题中,⼀个特定的图像的类别应该与图像的位置⽆关 ,也应该与图像的⼤⼩⽆关 。
如果训练样本数受限,如果训练样本数受限,让可调节的模型能够表述所需的不变性。这些⽅法⼤致可以分为四类。
通过复制训练模式,同时根据要求的不变性进⾏变换,对训练集进⾏扩展。
为误差函数加上⼀个正则化项,⽤来惩罚当输⼊进⾏变换时,输出发⽣的改变。这引出了5.5.4节讨论的切线传播(tangent propagation)⽅法。
通过抽取在要求的变换下不发⽣改变的特征,不变性被整合到预处理过程中。任何后续的使⽤这些特征作为输⼊的回归或者分类系统就会具有这些不变性。
最后⼀种⽅法是把不变性的性质整合到神经⽹络的构建过程中,或者对于相关向量机的⽅法,整合到核函数中。⼀种⽅法是通过使⽤局部接收场和共享权值,正如5.5.6节在卷积神经⽹络中讨论的那样。
切线传播
通过切线传播(tangent propagation)的⽅法,我们可以使⽤正则化来让模型对于输⼊的变换具有不变性(Simard et al., 1992)。假设变换由单⼀参数ξ控制,令这个变换作⽤于xn上产⽣的向量为s(xn, ξ),且s(x, 0) = x。这样曲线M的切线就由⽅向导数
τ
=
∂
x
∂
ξ
\tau = \frac { \partial x } { \partial \xi }
τ = ∂ ξ ∂ x 给出,且点xn处的切 线向量为
τ
n
=
∂
s
(
x
n
,
ξ
)
∂
ξ
∣
ξ
=
0
\boldsymbol { \tau } _ { n } = \left. \frac { \partial \boldsymbol { s } \left( \boldsymbol { x } _ { n } , \xi \right) } { \partial \xi } \right| _ { \xi = 0 }
τ n = ∂ ξ ∂ s ( x n , ξ ) ∣ ∣ ∣ ∣ ξ = 0
对于输⼊向量进⾏变换之后,⽹络的输出通常会发⽣变化。输出k关于ξ的导数为
∂
y
k
∂
ξ
∣
ξ
=
0
=
∑
i
=
1
D
∂
y
k
∂
x
i
∂
x
i
∂
ξ
∣
ξ
=
0
=
∑
i
=
1
D
J
k
i
τ
i
\left. \frac { \partial y _ { k } } { \partial \xi } \right| _ { \xi = 0 } = \sum _ { i = 1 } ^ { D } \frac { \partial y _ { k } } { \partial x _ { i } } \left. \frac { \partial x _ { i } } { \partial \xi } \right| _ { \xi = 0 } = \sum _ { i = 1 } ^ { D } J _ { k i } \tau _ { i }
∂ ξ ∂ y k ∣ ∣ ∣ ∣ ξ = 0 = i = 1 ∑ D ∂ x i ∂ y k ∂ ξ ∂ x i ∣ ∣ ∣ ∣ ξ = 0 = i = 1 ∑ D J k i τ i
上式给出的结果可以⽤于修改标准的误差函数,使得在数据点的邻域之内具有不变性。修改的⽅法为:给原始的误差函数E增加⼀个正则化函数Ω,得到下⾯形式的误差函数
E
~
=
E
+
λ
Ω
\tilde { E } = E + \lambda \Omega
E ~ = E + λ Ω
Ω
=
1
2
∑
n
∑
k
(
∂
y
n
k
∂
ξ
∣
ξ
=
0
)
2
=
1
2
∑
n
∑
k
(
∑
i
=
1
D
J
n
k
i
τ
n
i
)
2
\Omega = \frac { 1 } { 2 } \sum _ { n } \sum _ { k } \left( \left. \frac { \partial y _ { n k } } { \partial \xi } \right| _ { \xi = 0 } \right) ^ { 2 } = \frac { 1 } { 2 } \sum _ { n } \sum _ { k } \left( \sum _ { i = 1 } ^ { D } J _ { n k i } \tau _ { n i } \right) ^ { 2 }
Ω = 2 1 n ∑ k ∑ ( ∂ ξ ∂ y n k ∣ ∣ ∣ ∣ ξ = 0 ) 2 = 2 1 n ∑ k ∑ ( i = 1 ∑ D J n k i τ n i ) 2
当⽹络映射函数在每个模式向量的邻域内具有变换不变性时,正则化函数等于零。 λ的值确定了训练数据和学习不变性之间的平衡。
卷积神经⽹络
另⼀种构造对输⼊变量的变换具有不变性的模型的⽅法是将不变性的性质融⼊到神经⽹络结构的构建中。这是卷积神经⽹络(convolutional neural network)
对于处理不变形,⼀种简单的⽅法是把图像作为⼀个完全链接 的神经⽹络的输⼊,这种⽅法忽略了距离较近的像素的相关性要远⼤于距离较远的像素的相关性。
通过下⾯三种⽅式:(1)局部接收场,(2)权值共享,(3)下采样。整合到卷积神经⽹络中解决不变形问题。
局部接收场:就是对原始图片进行卷积,加入原始图片是1010的,选择一个5 5的卷积核每次移动一位,依次扫过整个图片(乘以图片中5*5的数值)
权值共享,得到6*6的图片,此时的参数有25+1个,相对于全连接的时候参数100个已经很少了
下采样,其目的是进一步提炼信息,降低维度。例如,对于卷机层的输出,考虑2 * 2单元的区域使用平均下采样或最大下采样。
软权值共享
普通的CNN将权值分组,然后令分组内的权值相等。它只适⽤于限制的形式可以事先确定的问题中。我们可以将权值分为若⼲组,⽽不是将所有权值分为⼀个组。分组的⽅法是使⽤⾼斯混合概率分布 。混合分布中,每个⾼斯分量的均值、⽅差,以及混合系数,都会作为可调节的参数在学习过程中被确定。
混合密度⽹络
混合密度网络(mixture density networks)的主要目的解决多对一问题的逆问题,即一对多的多峰分布问题。一般地,我们引入混合高斯分布的多峰性质,于是,我们寻找⼀个对条件概率密度建模的⼀般的框架。可以这样做:为p(t | x)使⽤⼀个混合模型
于是,我们寻找⼀个对条件概率密度建模的⼀般的框架。可以这样做:为p(t | x)使⽤⼀个混合模型
p
(
t
∣
x
)
=
∑
k
=
1
K
π
k
(
x
)
N
(
t
∣
μ
k
(
x
)
,
σ
k
2
(
x
)
I
)
p ( \boldsymbol { t } | \boldsymbol { x } ) = \sum _ { k = 1 } ^ { K } \pi _ { k } ( \boldsymbol { x } ) \mathcal { N } ( \boldsymbol { t } | \boldsymbol { \mu } _ { k } ( \boldsymbol { x } ) , \sigma _ { k } ^ { 2 } ( \boldsymbol { x } ) \boldsymbol { I } )
p ( t ∣ x ) = k = 1 ∑ K π k ( x ) N ( t ∣ μ k ( x ) , σ k 2 ( x ) I )
贝叶斯神经⽹络
我们对于神经⽹络的讨论集中于使⽤最⼤似然⽅法来确定⽹络的参数(权值和偏 置)。正则化的最⼤似然⽅法可以看成MAP(maximum posterior)⽅法,其中正则化项可以被看成先验参数分布的对数。然⽽,在贝叶斯⽅法中,为了进⾏预测,我们需要对参数的概率分布进⾏积分或求和。
在多层神经⽹络的情况下,⽹络函数对于参数值的⾼度⾮线性 的性质意味着精确的贝叶斯⽅法不再可⾏ 。事实上,后验概率分布的对数是⾮凸的 ,对应于误差函数中的多个局部极⼩值 。
我们会使⽤⼀个以真实后验概率的众数为中⼼的⾼斯分布来近似后验概率分布。(拉普拉斯近似 )
后验参数分布
考虑从输⼊向量x预测单⼀连续⽬标变量t的问题,假设条件概率分布p(t | x)是⼀个⾼斯分布
p
(
t
∣
x
,
w
,
β
)
=
N
(
t
∣
y
(
x
,
w
)
,
β
−
1
)
p ( t | \boldsymbol { x } , \boldsymbol { w } , \beta ) = \mathcal { N } ( t | y ( \boldsymbol { x } , \boldsymbol { w } ) , \beta ^ { - 1 } )
p ( t ∣ x , w , β ) = N ( t ∣ y ( x , w ) , β − 1 )
权值w的先验概率分布选为⾼斯分布
p
(
w
∣
α
)
=
N
(
w
∣
0
,
α
−
1
I
)
p ( \boldsymbol { w } | \alpha ) = \mathcal { N } ( \boldsymbol { w } | \mathbf { 0 } , \alpha ^ { - 1 } \boldsymbol { I } )
p ( w ∣ α ) = N ( w ∣ 0 , α − 1 I )
N个观测数据x1, . . . , xN,似然函数为
p
(
D
∣
w
,
β
)
=
∏
n
=
1
N
N
(
t
n
∣
y
(
x
n
,
w
)
,
β
−
1
)
p ( \mathcal { D } | \boldsymbol { w } , \beta ) = \prod _ { n = 1 } ^ { N } \mathcal { N } \left( t _ { n } | y \left( \boldsymbol { x } _ { n } , \boldsymbol { w } \right) , \beta ^ { - 1 } \right)
p ( D ∣ w , β ) = n = 1 ∏ N N ( t n ∣ y ( x n , w ) , β − 1 )
最终的后验概率为
p
(
w
∣
D
,
α
,
β
)
∝
p
(
w
∣
α
)
p
(
D
∣
w
,
β
)
p ( \boldsymbol { w } | \mathcal { D } , \alpha , \beta ) \propto p ( \boldsymbol { w } | \alpha ) p ( \mathcal { D } | \boldsymbol { w } , \beta )
p ( w ∣ D , α , β ) ∝ p ( w ∣ α ) p ( D ∣ w , β )
由于y(x, w)与w的关系是⾮线性的,因此后验概率不是⾼斯分布 。接下来使⽤拉普拉斯近似 。 step
找众数:⾸先找到后验概率分布的⼀个(局部)最⼤值,这必须使⽤迭代的数值最优化算法才能找到。
ln
p
(
w
∣
D
)
=
−
α
2
w
T
w
−
β
2
∑
n
=
1
N
{
y
(
x
n
,
w
)
−
t
n
}
2
+
c
o
n
s
t
\ln p ( \mathbf { w } | \mathcal { D } ) = - \frac { \alpha } { 2 } \mathbf { w } ^ { \mathrm { T } } \mathbf { w } - \frac { \beta } { 2 } \sum _ { n = 1 } ^ { N } \left\{ y \left( \mathbf { x } _ { n } , \mathbf { w } \right) - t _ { n } \right\} ^ { 2 } + \mathrm { const }
ln p ( w ∣ D ) = − 2 α w T w − 2 β n = 1 ∑ N { y ( x n , w ) − t n } 2 + c o n s t 使⽤误差反向传播计算所需的导数,找到后验概率的最⼤值。我们将最⼤值的位置记作wMAP 。
找到了wMAP 的众数,可以通过计算后验概率分布的负对数的⼆阶导数,建⽴⼀个局部的⾼斯近似。负对数后验概率的⼆阶导数为
A
=
−
∇
∇
ln
p
(
w
∣
D
,
α
,
β
)
=
α
I
+
β
H
A = - \nabla \nabla \ln p ( \boldsymbol { w } | \mathcal { D } , \alpha , \beta ) = \alpha \boldsymbol { I } + \beta \boldsymbol { H }
A = − ∇ ∇ ln p ( w ∣ D , α , β ) = α I + β H
这样,后验概率对应的⾼斯近似形式为
q
(
w
∣
D
)
=
N
(
w
∣
w
M
A
P
,
A
−
1
)
q ( \boldsymbol { w } | \mathcal { D } ) = \mathcal { N } ( \boldsymbol { w } | \boldsymbol { w } _ { M A P } , \boldsymbol { A } ^ { - 1 } )
q ( w ∣ D ) = N ( w ∣ w M A P , A − 1 )
预测分布可以通过将后验概率分布求积分的⽅式获得。
p
(
t
∣
x
,
D
)
=
∫
p
(
t
∣
x
,
w
)
q
(
w
∣
D
)
d
w
p ( t | \boldsymbol { x } , \mathcal { D } ) = \int p ( t | \boldsymbol { x } , \boldsymbol { w } ) q ( \boldsymbol { w } | \mathcal { D } ) \mathrm { d } \boldsymbol { w }
p ( t ∣ x , D ) = ∫ p ( t ∣ x , w ) q ( w ∣ D ) d w
即 使 对 于 后 验 分 布 的 ⾼ 斯 近 似 , 这 个 积 分 仍 然** ⽆ 法 得 到 解 析 解**, 因 为 ⽹ 络 函数y(x, w)与w的关系是⾮线性的 。假设,与y(x, w)发⽣变 化造成的w的变化幅度相⽐,后验概率分布的⽅差较⼩ 。我们可以在wMAP 附近对⽹络函数进⾏泰勒展开。
y
(
x
,
w
)
≃
y
(
x
,
w
M
A
P
)
+
g
T
(
w
−
w
M
A
P
)
y ( \boldsymbol { x } , \boldsymbol { w } ) \simeq y \left( \boldsymbol { x } , \boldsymbol { w } _ { M A P } \right) + \boldsymbol { g } ^ { T } \left( \boldsymbol { w } - \boldsymbol { w } _ { M A P } \right)
y ( x , w ) ≃ y ( x , w M A P ) + g T ( w − w M A P )
g
=
∇
w
y
(
x
,
w
)
∥
w
=
w
M
A
P
\boldsymbol { g } = \nabla _ { \boldsymbol { w } } y ( \boldsymbol { x } , \boldsymbol { w } ) \left\| _ { \boldsymbol { w } = \boldsymbol { w } _ { M A P } }\right.
g = ∇ w y ( x , w ) ∥ w = w M A P
使⽤这个近似,我们现在得到了⼀个线性⾼斯模型
p
(
t
∣
x
,
w
,
β
)
≃
N
(
t
∣
y
(
x
,
w
M
A
P
)
+
g
T
(
w
−
w
M
A
P
)
,
β
−
1
)
p ( t | \boldsymbol { x } , \boldsymbol { w } , \beta ) \simeq \mathcal { N } ( t | y \left( \boldsymbol { x } , \boldsymbol { w } _ { M A P } \right) + \boldsymbol { g } ^ { T } \left( \boldsymbol { w } - \boldsymbol { w } _ { M A P } \right) , \beta ^ { - 1 } )
p ( t ∣ x , w , β ) ≃ N ( t ∣ y ( x , w M A P ) + g T ( w − w M A P ) , β − 1 )