文章内容参考《PATTERN RECOGNITION & MACHINE LEARNING》作者:CHRISTOPHER M.BISHOP 文章作者联系邮箱:humminwang@163.com
Preview (Chapter 5):
- 前馈神经网络
- 网络训练
- 误差反向传播
- 神经网络正则化
- 混合密度神经网络
- 贝叶斯神经网络
神经网络为了减少基函数数量问题,从而以非凸计算为代价。为了计算神经网络的参数,一些非线性最优化技术需要求参数的导数,从而可以利用反向误差传播算法。
1 前馈神经网络
回归的线性模型和分类模型,基于固定非线性基函数
ϕ
j
(
x
)
\phi_j(x)
ϕj(x)的线性组合,形式为:
y
(
x
)
=
f
(
∑
w
j
ϕ
j
(
x
)
)
y(x)=f(\sum w_j\phi_j(x))
y(x)=f(∑wjϕj(x))
f
f
f在分类问题中是非线性激活函数,回归问题中为恒等函数。神经网络推广了这个模型,使得基函数也依赖参数并且可以调节,神经网络每个基函数是输入的线性组合的非线性函数。输入的形式为:
a
j
=
∑
i
=
1
D
w
j
i
(
1
)
x
i
+
w
j
0
(
1
)
a_j=\sum_{i=1}^Dw_{ji}^{(1)}x_i+w_{j0}^{(1)}
aj=i=1∑Dwji(1)xi+wj0(1)
j=1…M,上标(1)代表神经网络的第一层,
w
j
i
w_{ji}
wji为权,
w
j
0
w_{j0}
wj0为偏置。
a
j
a_j
aj为激活,每个激活都用一个可微的激活函数进行变换。
z
j
=
h
(
a
j
)
z_j=h(a_j)
zj=h(aj)
z对应基函数的输出,这些基函数在神经网络中被称为隐含单元。之后在进行线性组合可得输出单元激活。
a
k
=
∑
j
=
1
M
w
k
j
(
2
)
z
j
+
w
k
0
(
2
)
a_k=\sum_{j=1}^Mw_{kj}^{(2)}z_j+w_{k0}^{(2)}
ak=j=1∑Mwkj(2)zj+wk0(2)
k=1…K是输出的总数量,对应与神经网络的第二层。之后使用激活函数得到
y
k
y_k
yk。激活函数的选择由数据本身以及目标变量的假定分布确定。
上公式是整体网络的函数,因此神经网络模型可以简单的看成从输入变量到输出变量的非线性函数,并且可以调节参数。计算上述公式即为前向传播。
- 神经网络和多层感知器(MLP)的区别在于,神经网络在隐含单元中使用连续的sigmoid非线性函数,而感知器使用阶梯函数,所以神经网络参数是可微的,于是可以利用反向传播算法。
- 如果隐含单元的激活函数都是线性函数,那么总可以找到一个等价的无隐含单元的网络,因为连续的线性变换的组合本身也是一个线性变换。然而如果隐含单元的数量小于输入单元的数量,或者小于输出单元的数量,那网络产生的变换造成了信息丢失。
- 一个带有线性输出的两层网络可以在任意精度下近似任何输入变量较少的连续函数,只要隐含单元数量足够多——通用近似(universal approximator)。
- 隐含单元的作用:
- 对于M个隐含单元,存在M个这样的“符号改变”对称性,因此任何给定的权向量都是 2 M 2^M 2M个等价的全向量中的一个。同样假设我们将某个特定的隐含节点相关联的所有输入和输出都变为与不同隐含节点相关联对应的权值,映射不变,有M!个这样的集合。所以一个网络有一个整体的权空间对称因子 M ! 2 M M!2^M M!2M。对于两层网络,对称的总数等于这些因子的乘积。
2 网络训练
最小化误差函数。使用概率进行预测,使用概率可以理解选择输出单元非线性函数以及选择误差函数的动机。
对于一元目标变量:
假定预测目标服从高斯分布,均值与
x
x
x有关,则为:
β
\beta
β是高斯噪声的精度,也是方差的倒数。对应的似然函数为:
取负对数:
在神经网络的文献中通常考虑最小化误差函数而不是最大化似然函数,首先考虑
w
w
w的确定,实际应用中由于存在
y
(
x
n
,
w
)
y(x_n,w)
y(xn,w)的非线性性质导致误差函数不是
E
(
w
)
E(w)
E(w)不是凸函数,因此在实际应用中寻找的是似然函数的最大值,对应于误差函数的局部最小值。
w
M
L
w_{ML}
wML是求出的最优值,之后可以计算
β
M
L
\beta_{ML}
βML。
对于多目标变量,在给定
x
,
w
x,w
x,w最优的情况下,目标变量之间独立,噪声精度为
β
\beta
β,则目标变量的条件分布为:
对应噪声的精度为:
K是目标变量数量。在回归问题中,神经网络可以被看成一个具有恒等输出的激活函数模型,
y
k
=
a
k
y_k=a_k
yk=ak,对应的平方和误差函数有如下性质:
∂
E
∂
a
k
=
y
k
−
t
k
\frac{\partial E}{\partial a_k}=y_k-t_k
∂ak∂E=yk−tk
我们可以理解成忽略了激活函数的作用。在二分类中,如果给定输出,目标变量条件概率分布是一个伯努利分布,形式为:
考虑独立训练集,负对数似然函数给出的误差函数就是一个交叉熵(cross-entropy)误差函数:
如果我们有K个相互独立的二元分类问题,那么我们可以使用具有K个输出的神经网 络,每个输出都有一个logistic sigmoid激活函数。假定类别标签是独立的,给定输入向量目标向量的条件概率为:
取对数:
与回归问题一样,我们忽略激活函数求导问题。对比神经网络和之前的线性模型,网络第一层的权向量由各个输出所共享,而在线性模型中每个分类问题是独立地解决的。神经网络的第一层可以被看做进行了一个非线性的特征抽取,而不同的输出之间共享特征可以节省计算量,同时也提升了泛化能力。
标准的多分类问题,其中每个输出被分配K个互斥的类别中。目标变量是二元的,
t
k
∈
{
0
,
1
}
t_k \in \{0,1\}
tk∈{0,1}从而网络输出可以表达为:
y
k
(
x
,
w
)
=
p
(
t
k
=
1
∣
x
)
y_k (x, w) = p(t_k = 1 | x)
yk(x,w)=p(tk=1∣x),误差函数为:
输出单元激活函数是softmax函数:
、
满足
y
k
≤
1
,
∑
y
k
=
1
y_k≤1,\sum y_k=1
yk≤1,∑yk=1.注意,如果我们给所有的
a
k
(
x
,
w
)
a_k(x,w)
ak(x,w)都加上一个常数,那 k么
y
k
(
x
,
w
)
y_k (x, w)
yk(x,w)是不变的,这就使得误差函数在权空间的某些方向上是常数,之后会引入正则化来消除这种现象。
对于回归问题,我们使用线性输出和平方和误差函数,对于(多类独立的)二元 分类问题,我们使用logistic sigmoid输出以及交叉熵误差函数,对于多类分类问题,我们使 用softmax输出以及对应的多分类交叉熵错误函数。对于涉及到两类的分类问题,我们可以使用单一的logistic sigmoid输出,也可以使用神经网络,这个神经网络有两个输出,且输出激活函数为softmax函数。
2.2 参数优化
误差函数通常与权值和偏置参 数的关系是高度非线性的,因此权值空间中会有很多梯度为零(或者梯度非常小)的点。对于问题
▽
E
(
w
)
=
0
\bigtriangledown E(w)=0
▽E(w)=0,大多数方法涉及到为权向量选择某个初始值w0,然后在权空间中进行一系列移动,形式为:
2.3 局部二次近似
为了理解梯度信息的重要性,有必要考虑误差函数基于泰勒展开的局部近似。通过讨论误差函数的局部二次近似,我们可以更深刻地认识最优化问题,以及各种解决最优化问题的方法。
考虑
E
(
w
)
E(w)
E(w)在权空间某点
w
^
\hat w
w^处的泰勒展开:
立方项和更高阶的项已经被省略,b定义为在E的梯度在
w
^
\hat w
w^的值。
b
=
▽
E
(
w
)
∣
w
=
w
^
b=\bigtriangledown E(w)|_{w=\hat w}
b=▽E(w)∣w=w^
Hessian矩阵
H
=
▽
▽
E
(
w
)
H=\bigtriangledown\bigtriangledown E(w)
H=▽▽E(w):
所以:梯度的局部近似为:
一个特殊情况,在误差函数最小值点附近的局部二次近似,这种情况没有线性项,所以误差函数变为:
对Hessian变换,提取特征值,通过
我们可得误差函数:
对于一维权空间,驻点
w
∗
w^*
w∗满足:
∂
2
E
∂
w
2
∣
w
∗
>
0
\frac{\partial^2E}{\partial w^2}|_{w^*}>0
∂w2∂2E∣w∗>0取得最小值,D维空间,对应Hessian是正定矩阵。
正定矩阵对应的特征值大于0,同时对所有的
v
v
v≠
0
,
v
T
H
v
>
0
0,v^THv>0
0,vTHv>0。
2.4 使用梯度信息
使用梯度可以加速找到极小点的速度,使用反向传播算法每次计算误差的导数可以带来W条信息,(和参数个数相同)。找到极小值需要 O ( w ) O(w) O(w)次梯度,每个计算需要 O ( w ) O(w) O(w)步,所以总共 O ( w 2 ) O(w^2) O(w2)即可找到最小值,而不使用需要 O ( w 3 ) O(w^3) O(w3)次。
2.5 梯度下降最优化
其中参数η > 0被称为学习率(learning rate)。在每次更新之后,梯度会使用新的权值向量重新计算,然后这个过程重复下去。注意,误差函数是关于训练集定义的,因此为了计算∇E ,每一步都需要处理整个数据集。在每一步,权值向量都会沿着误差函数下降速度最快的方向移动, 因此这种方法被称为梯度下降法(gradient descent)或者最陡峭下降法(steepest descent)。对于批量最优化方法,存在更高效的方法,例如共轭梯度法(conjugate gradient)或者拟牛顿法(quasi-Newton)。与简单的梯度下降方法相比,这些方法更鲁棒,更快。为了找到一个足够好的极小值,可能有必要多次运行基于梯度的算法,每次都使用一个不同的随机选择额起始点,然后在一个独立的验证集上对比最终的表现。
在线梯度下降,也被称为顺序梯度下降(sequential gradient descent)或者随机梯度下降(stochastic gradient descent),使得权向量的更新每次只依赖于一个数据点,这个更新在数据集上循环重复进行,并且既可以顺序地处理数据,也可以随机地有重复地选择数据点。
3 误差反向传播
是一种计算前馈神经网络的误差函数E(w)的梯度的一种高效算法。利用局部信息传递,信息在神经网络中交替的向前向后传播,称为误差反向传播。可分为两个阶段。第一阶段,误差函数关于权值的导数需要被计算,第二个阶段,导数用于计算权值调整量。
反向传播算法总结如下:
- 对于网络的一个输入向量 x n x_n xn,使用公式 a j = ∑ i w j i z i a_j=\sum_iw_{ji}z_i aj=∑iwjizi和公式 z j = h ( a j ) z_j=h(a_j) zj=h(aj)进行正向传播,找到所有 隐含单元和输出单元的激活。
- 使用公式 ϵ = y k − y t \epsilon=y_k-y_t ϵ=yk−yt计算所有输出单元的 ϵ k \epsilon_k ϵk。
- 使用公式 ϵ j = h ′ ( a j ) ∑ k w k j ϵ k \epsilon_j=h'(a_j)\sum_kw_{kj}\epsilon_k ϵj=h′(aj)∑kwkjϵk反向传播 ϵ \epsilon ϵ,获得网络中所有隐含单元的 ϵ j \epsilon_j ϵj。
- 使用公式 ∂ E n ∂ w j i = ϵ j z i \frac{\partial E_n}{\partial w_{ji}}=\epsilon_jz_i ∂wji∂En=ϵjzi计算导数。
- 对于批处理方法,总误差函数E的导数可以通过下面的方式得到:对于训练集里的每个模 式,重复上面的步骤,然后对所有的模式求和,即
∂ E ∂ w j i = ∑ n ∂ E ∂ w j i \frac{\partial E}{\partial w_{ji}}=\sum_n\frac{\partial E}{\partial w_{ji}} ∂wji∂E=n∑∂wji∂E
反向传播算法效率问题:
计算数值导数的方法的主要问题是,计算复杂度为O(W )这一性质不再成立。每次正向传播 需要O(W )步,而网络中有W 个权值,每个权值必须被单独地施加扰动,因此整体的时间复杂 度为O(W2)。
反向传播算法可以用来计算Jacobian矩阵和Hessian矩阵。
Hessian 矩阵在神经网络计算有重要作用:
- 一些用来训练神经网络的非线性最优化算法是基于误差曲面的二阶性质的,这些性质 由Hessian矩阵控制。
- 对于训练数据的微小改变,Hessian矩阵构成了快速重新训练前馈网络的算法的基础。
- Hessian矩阵的逆矩阵用来鉴别神经网络中最不重要的权值,这是网络“剪枝”算法的一部分。
- Hessian矩阵是贝叶斯神经网络的拉普拉斯近似的核心。它的逆矩阵用来确定 训练过的神经网络的预测分布,它的特征值确定了超参数的值,它的行列式用来计算模型证据。
4 神经网络正则化
用来防止过拟合,控制模型的复杂度。
方法:
- 权值衰减
- 早停止
不变性:
在许多模式识别的应用中,在对于输入变量进行了一个或者多个变换之后,预测不应该发生 变化,或者说应该具有不变性(invariant)。
- 通过复制训练模式,同时根据要求的不变性进行变换,对训练集进行扩展。例如,在手写 数字识别的例子中,我们可以将每个样本复制多次,每个复制后的样本中,图像被平移到了不同的位置。
- 为误差函数加上一个正则化项,用来惩罚当输入进行变换时,输出发生的改变。
- 通过抽取在要求的变换下不发生改变的特征,不变性被整合到预处理过程中。任何后续的 使用这些特征作为输入的回归或者分类系统就会具有这些不变性。
- 最后一种方法是把不变性的性质整合到神经网络的构建过程中,或者对于相关向量机的方法,整合到核函数中。一种方法是通过使用局部接收场和共享权值。
卷积神经网络:
一种通过权值共享来保持不变性的网络结构。将不变性的性质融入到神经网络结 构的构建中。
- 在卷积层,各个单元被组织在一系列平面中,每个平面被称为一个特征地图(feature map)。一个特征地图中的每个单元只从图像的一个小的子区域接收输入,且一个特征地图中的所有单元被限制为共享相同的权值。
- 特征地图中的所有单元都检测了输入图像中的相同的模式,但是位置不同。由于权值共享,这些单元的激活的计算等价于使用一个由权向量组成和“核”对图像像素的灰度值进行卷积。
- 如果输入图像发生平移,那么特征地图的激活也会发生等量的平移,否则就不发生改变。这提供了神经网络输出对于输入图像的平移和变形的(近似)不变性的基础。由于我们通常需要检测多个特征来构造一个有效的模型,因此通常在卷积层会有多个特征地图,每个都有自己的权值和偏置参数。
下采样层的单元的响应对于对应的 输入空间区域中的图片的微小平移相对不敏感。
5 混合密度网络
产生原因:逆问题可能造成问题的多解性。
p
(
t
∣
x
)
p(t | x)
p(t∣x)使用一个混合模型,模型的混合系数和每个分量的概率分布都是输入向量x的一个比较灵活的函数,这就构成了混合密度网络(mixture density network)。
混合密度网络的误差函数:
6 贝叶斯神经网络
如何将非线性网络函数应用于贝叶斯模型,从而避免过拟合现象的发生。使用拉普拉斯近似,从而可以将后验概率近似为高斯模型。
其中,输入相关的方差为:
关于更多贝叶斯神经网络的推导本文不详细列举,可参考《PATTERN RECOGNITION & MACHINE LEARNING》P277-284