神经元
M-P神经元模型中,神经元接收到来自
n
n
n个其他蛇精原传递过来的输入信号
x
1
,
.
.
.
,
x
n
x_1,...,x_n
x1,...,xn,这些输入信号通过带权重的连接
w
⋅
x
w\cdot x
w⋅x进行传递,神经元接收到的总输入值将与神经元的阈值进行比较
w
⋅
x
−
θ
w\cdot x-\theta
w⋅x−θ,然后通过激活函数
f
(
⋅
)
f(\cdot)
f(⋅)处理以产生神经元的输出。
把许多个这样的神经元按一定的层次结构连接起来,就得到了神经网络。
常见的激活函数
- Sigmoid函数:
f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+e−x1
Sigmoid函数是一条平滑的曲线,可以返回0到1的任意数:输入较小时,输出接近0,随着输入的增大,输出向1靠近。
- Sign函数(阶跃函数):
f ( x ) = { 0 , x ≤ 0 1 , x > 0 f(x)=\begin{cases}0,\quad x\leq0\\ 1,\quad x>0\end{cases} f(x)={0,x≤01,x>0
Sign函数在0处有突变,只能返回0和1.
- ReLU函数
f ( x ) = { 0 , x ≤ 0 x , x > 0 f(x)=\begin{cases}0,\quad x\leq0\\ x,\quad x>0\end{cases} f(x)={0,x≤0x,x>0
输出层激活函数
- 回归问题:恒等函数
- 分类问题:Softmax函数
y k = e x k ∑ i = 1 n e x i y_k=\frac{e^{x_k}}{\sum_{i=1}^ne^{x_i}} yk=∑i=1nexiexk
感知机
感知机是一种二类分类的线性分类模型,对应于输入空间中将训练数据进行线性划分的分离超平面。感知机属于判别模型。
假设输入空间(特征空间)是
X
⊆
R
n
\mathcal{X}\subseteq \mathbb{R}^n
X⊆Rn,输出空间是
Y
=
{
+
1
,
−
1
}
\mathcal{Y}=\{+1,-1\}
Y={+1,−1}。输入
x
∈
X
x\in\mathcal{X}
x∈X表示实例的特征向量,输出
y
∈
Y
y\in\mathcal{Y}
y∈Y表示实例的类别。由输入空间到输出空间的如下函数:
f
(
x
)
=
s
i
g
n
(
w
⋅
x
+
b
)
f(x)=sign(w\cdot x+b)
f(x)=sign(w⋅x+b)
称为感知机。其中
w
w
w和
b
b
b为感知机模型参数,
w
∈
R
n
w\in\mathbb{R}^n
w∈Rn叫作权值或权值向量,
b
∈
R
b\in\mathbb{R}
b∈R叫作偏置,
w
⋅
x
w\cdot x
w⋅x表示
w
w
w和
x
x
x的内积。
感知机模型的假设空间是定义在特征空间中的所有线性分类模型,即函数集合 { f ∣ f ( x ) = w ⋅ x + b } \{f|f(x)=w\cdot x+b\} {f∣f(x)=w⋅x+b}。
感知机的几何解释:线性方程 w ⋅ x + b = 0 w\cdot x+b=0 w⋅x+b=0对应于特征空间 R n \mathbb{R}^n Rn中的一个超平面 S S S,其中 w w w是超平面的法向量, b b b是超平面的截距。超平面 S S S将特征空间划分为两个部分,位于两部分的点分别被分为正、负两类,所以,超平面 S S S称为分离超平面。
感知机学习
给定线性可分的训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
n
,
y
n
)
}
T=\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\}
T={(x1,y1),(x2,y2),...,(xn,yn)}
其中,
x
i
∈
X
=
R
n
x_i\in\mathcal{X}=\mathbb{R}^n
xi∈X=Rn,
y
i
∈
Y
=
{
+
1
,
−
1
}
y_i\in\mathcal{Y}=\{+1,-1\}
yi∈Y={+1,−1},
i
=
1
,
2
,
.
.
.
,
n
i=1,2,...,n
i=1,2,...,n,现要求参数
w
w
w和
b
b
b以学得感知机模型
f
(
x
)
=
s
i
g
n
(
w
⋅
x
+
b
)
f(x)=sign(w\cdot x+b)
f(x)=sign(w⋅x+b)
感知机模型的学习策略是,定义一个误分类损失函数,然后极小化这个损失函数。
损失函数
- 误分类点的总数:不是参数 w w w、 b b b的连续可导函数,不易优化。
- 误分类点到超平面 S S S的总距离:
输入空间 X = R n \mathcal{X}=\mathbb{R}^n X=Rn中任一点 x 0 x_0 x0到超平面 S S S的距离: 1 ∣ ∣ w ∣ ∣ ∣ w ⋅ x 0 + b ∣ \frac{1}{||w||}|w\cdot x_0+b| ∣∣w∣∣1∣w⋅x0+b∣, ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣是 w w w的 L 2 L_2 L2范数;
对于误分类的数据 ( x i , y i ) (x_i,y_i) (xi,yi), y i y_i yi与 w ⋅ x i + b w\cdot x_i+b w⋅xi+b异号,即有 − y i ( w ⋅ x i + b ) > 0 -y_i(w\cdot x_i+b)>0 −yi(w⋅xi+b)>0;
所以,误分类点
x
i
x_i
xi到超平面
S
S
S的距离:
−
1
∣
∣
w
∣
∣
y
i
(
w
⋅
x
i
+
b
)
-\frac{1}{||w||}y_i(w\cdot x_i+b)
−∣∣w∣∣1yi(w⋅xi+b)。假设超平面
S
S
S的误分类点集合为
M
M
M,则所有误分类点到超平面
S
S
S的总距离:
−
1
∣
∣
w
∣
∣
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
-\frac{1}{||w||}\sum_{x_i\in M}y_i(w\cdot x_i+b)
−∣∣w∣∣1∑xi∈Myi(w⋅xi+b)。定义感知机学习的损失函数为:
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
L(w,b)=-\sum_{x_i\in M}y_i(w\cdot x_i+b)
L(w,b)=−xi∈M∑yi(w⋅xi+b)
损失函数
L
(
w
,
b
)
L(w,b)
L(w,b)是非负的,如果没有误分类点,损失函数值是0,误分类点越少,误分类点离超平面越近,损失函数值就越小。
一个特定样本的损失函数:在误分类时时参数
w
w
w、
b
b
b的线性函数,在正确分类时是0.因此,给定训练集
T
T
T,损失函数
L
(
w
,
b
)
L(w,b)
L(w,b)是
w
w
w、
b
b
b的连续可导函数。
感知机学习算法
感知机学习问题转化为优化问题:
min
w
,
b
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
\min_{w,b} L(w,b)=-\sum_{x_i\in M}y_i(w\cdot x_i+b)
w,bminL(w,b)=−xi∈M∑yi(w⋅xi+b)
其中,
M
M
M为误分类点的集合。
采用随机梯度下降法求解上述优化问题:随机选取一个误分类点使梯度下降。
假设分类点集合
M
M
M固定,损失函数
L
(
w
,
b
)
L(w,b)
L(w,b)的梯度:
∇
w
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
x
i
,
∇
b
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
\nabla_w L(w,b)=-\sum_{x_i\in M}y_ix_i,\quad \nabla_b L(w,b)=-\sum_{x_i\in M}y_i
∇wL(w,b)=−xi∈M∑yixi,∇bL(w,b)=−xi∈M∑yi
随机选取一个误分类点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi),对
w
w
w、
b
b
b进行更新:
{
w
←
w
+
η
y
i
x
i
b
←
b
+
η
y
i
\begin{cases} w\leftarrow w+\eta y_ix_i\\ b\leftarrow b+\eta y_i \end{cases}
{w←w+ηyixib←b+ηyi
式中
η
(
0
<
η
≤
1
)
\eta(0<\eta\leq1)
η(0<η≤1)是步长,又称学习率。
感知机学习算法原始形式
输入:训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
n
,
y
n
)
}
T=\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\}
T={(x1,y1),(x2,y2),...,(xn,yn)},其中,
x
i
∈
X
=
R
n
x_i\in\mathcal{X}=\mathbb{R}^n
xi∈X=Rn,
y
i
∈
Y
=
{
+
1
,
−
1
}
y_i\in\mathcal{Y}=\{+1,-1\}
yi∈Y={+1,−1},
i
=
1
,
2
,
.
.
.
,
n
i=1,2,...,n
i=1,2,...,n;学习率
η
(
0
<
η
≤
1
)
\eta(0<\eta\leq1)
η(0<η≤1);
输出:
w
,
b
w,b
w,b,感知机模型
f
(
x
)
=
s
i
g
n
(
w
⋅
x
+
b
)
f(x)=sign(w\cdot x+b)
f(x)=sign(w⋅x+b)
- 选取初值 w 0 , b 0 w_0,b_0 w0,b0
- 在训练数据集中选取数据 ( x i , y i ) (x_i,y_i) (xi,yi)
- 如果
y
i
(
w
⋅
x
+
b
)
≤
0
y_i(w\cdot x+b)\leq0
yi(w⋅x+b)≤0
{ w ← w + η y i x i b ← b + η y i \begin{cases} w\leftarrow w+\eta y_ix_i\\ b\leftarrow b+\eta y_i \end{cases} {w←w+ηyixib←b+ηyi - 转至2,直至训练集中没有误分类点
对于线性可分数据集感知机学习算法原始形式是收敛的,即经过有限次迭代可以得到一个将训练数据集完全正确划分的分离超平面及感知机模型。
感知机学习算法对偶形式中,可假设初始值
w
0
,
b
0
w_0,b_0
w0,b0均为0,对误分类点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)通过
{
w
←
w
+
η
y
i
x
i
b
←
b
+
η
y
i
\begin{cases} w\leftarrow w+\eta y_ix_i\\ b\leftarrow b+\eta y_i \end{cases}
{w←w+ηyixib←b+ηyi
逐步修改
w
,
b
w,b
w,b,设修改
n
i
n_i
ni次,则
w
,
b
w,b
w,b关于
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)的增量分别是
n
i
η
y
i
x
i
=
α
i
y
i
x
i
n_i\eta y_ix_i=\alpha_iy_ix_i
niηyixi=αiyixi和
n
i
η
y
i
=
α
i
y
i
n_i\eta y_i=\alpha_iy_i
niηyi=αiyi,这样最后学到的
w
,
b
w,b
w,b分别表示为
{
w
=
∑
j
=
1
n
α
i
y
i
x
i
b
=
∑
j
=
1
n
α
i
y
i
\begin{cases} w=\sum_{j=1}^n \alpha_i y_ix_i \\ b=\sum_{j=1}^n \alpha_i y_i \end{cases}
{w=∑j=1nαiyixib=∑j=1nαiyi
当
η
=
1
\eta=1
η=1时,
α
i
=
n
i
\alpha_i=n_i
αi=ni表示第
i
i
i个实例点由于误分类而进行更新的次数。实例点更新次数越多,意味着它据超平面越近,越难正确分类。
感知机学习算法对偶形式
输入:训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
n
,
y
n
)
}
T=\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\}
T={(x1,y1),(x2,y2),...,(xn,yn)},其中,
x
i
∈
X
=
R
n
x_i\in\mathcal{X}=\mathbb{R}^n
xi∈X=Rn,
y
i
∈
Y
=
{
+
1
,
−
1
}
y_i\in\mathcal{Y}=\{+1,-1\}
yi∈Y={+1,−1},
i
=
1
,
2
,
.
.
.
,
n
i=1,2,...,n
i=1,2,...,n;学习率
η
(
0
<
η
≤
1
)
\eta(0<\eta\leq1)
η(0<η≤1);
输出:
α
,
b
\alpha,b
α,b,感知机模型
f
(
x
)
=
s
i
g
n
(
∑
j
=
1
n
α
j
y
j
⋅
x
+
b
)
f(x)=sign(\sum_{j=1}^n\alpha_jy_j\cdot x+b)
f(x)=sign(∑j=1nαjyj⋅x+b),其中
α
=
(
α
1
,
α
2
,
.
.
.
,
α
n
)
T
\alpha=(\alpha_1,\alpha_2,...,\alpha_n)^T
α=(α1,α2,...,αn)T
- α ← 0 , b ← 0 \alpha\leftarrow 0, b\leftarrow 0 α←0,b←0
- 在训练数据集中选取数据 ( x i , y i ) (x_i,y_i) (xi,yi)
- 如果
y
i
(
∑
j
=
1
n
α
j
y
j
⋅
x
+
b
)
≤
0
y_i(\sum_{j=1}^n\alpha_jy_j\cdot x+b)\leq0
yi(∑j=1nαjyj⋅x+b)≤0
{ α i ← α i + η b ← b + η y i \begin{cases} \alpha_i\leftarrow \alpha_i+\eta\\ b\leftarrow b+\eta y_i \end{cases} {αi←αi+ηb←b+ηyi - 转至2,直至训练集中没有误分类点
对偶形式中训练实例仅以内积形式出现,为了方便,可以预先将训练集中实例见的内积计算出来并以矩阵的形式存储,该矩阵即为Gram矩阵
G
=
[
x
i
⋅
x
j
]
n
×
n
G=[x_i\cdot x_j]_{n\times n}
G=[xi⋅xj]n×n
感知机拓扑结构
感知机由两层神经元组成,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,激活函数采用阶跃函数。
感知机可以求解线性可分的“与”问题、“或”问题和“非”问题,但是不能求解非线性可分问题,甚至是“异或”这样简单的非线性可分问题。要解决非线性可分问题,需考虑使用多层功能神经元。
- “与”问题: w 1 = w 2 = 0 , θ = 2 w_1=w_2=0,\theta=2 w1=w2=0,θ=2,则 y = f ( 1 ⋅ x 1 + 1 ⋅ x 1 − 2 ) y=f(1\cdot x_1+1\cdot x_1-2) y=f(1⋅x1+1⋅x1−2)仅在 x 1 = x 2 = 1 x_1=x_2=1 x1=x2=1时, y = 1 y=1 y=1;
- “或”问题: w 1 = w 2 = 0 , θ = 0.5 w_1=w_2=0,\theta=0.5 w1=w2=0,θ=0.5,则 y = f ( 1 ⋅ x 1 + 1 ⋅ x 1 − 0.5 ) y=f(1\cdot x_1+1\cdot x_1-0.5) y=f(1⋅x1+1⋅x1−0.5)在 x 1 = 1 x_1=1 x1=1或 x 2 = 1 x_2=1 x2=1时, y = 1 y=1 y=1;
- “非”问题:
w
1
=
−
0.6
,
w
2
=
0
,
θ
=
−
0.5
w_1=-0.6,w_2=0,\theta=-0.5
w1=−0.6,w2=0,θ=−0.5,则
y
=
f
(
−
0.6
⋅
x
1
+
0
⋅
x
1
+
0.5
)
y=f(-0.6\cdot x_1+0\cdot x_1+0.5)
y=f(−0.6⋅x1+0⋅x1+0.5)在
x
1
=
1
x_1=1
x1=1时,
y
=
0
y=0
y=0,在
x
1
=
0
x_1=0
x1=0时,
y
=
1
y=1
y=1。
多层前馈神经网络
多层前馈神经网络(multi-layer feedforward neural networks)由多层神经元构成,每层神经元与下一层神经元互连,神经元之间不存在同层连接,也不存在跨层连接。输入层与输出层之间的神经元层称之为隐含层(hidden layer),输入层神经元接收外界输入,隐含层与输出层神经元对输入进行加工,最终结果由输出层神经元输出,也就是说,输入层神经元仅是接收输入,不进行函数处理,隐含层与输出层包含功能神经元。
“前馈”并不意味着信号不能向后传,而是指网络拓扑结构上不存在环或回路。
神经网络的学习:误差逆传播算法(BP算法)
神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”及每个功能神经元的阈值。
误差逆传播(error BackPropagation)算法是优秀的神经网络学习算法,它不仅可用于多层前馈神经网络的学习,还可用于学习其他类型的神经网络(如递归神经网络),通常说的“BP神经网络”一般是指用BP算法训练的多层前馈神经网络。
给定训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\} T={(x1,y1),(x2,y2),...,(xn,yn)}其中, x i ∈ R d x_i\in\mathbb{R}^d xi∈Rd, y i ∈ R l y_i\in\mathcal{R}^l yi∈Rl。下图给出一个具有 d d d个输入神经元、 l l l个输出神经元、 q q q个隐层神经元的多层前馈网络结构。
- θ j \theta_j θj:输出层第 j j j个神经元的阈值;
- γ h \gamma_h γh:隐层第 h h h个神经元的阈值;
- v i h v_{ih} vih:输入层第 i i i个神经元与隐层第 h h h个神经元之间的连接权;
- w h j w_{hj} whj:隐层第 h h h个神经元与输出层第 j j j个神经元之间的连接权;
- α h = ∑ i = 1 d v i h x i \alpha_h=\sum_{i=1}^dv_{ih}x_i αh=∑i=1dvihxi:隐层第 h h h个神经元接收到的输入;
- b h = f ( α h − γ h ) b_h=f(\alpha_h-\gamma_h) bh=f(αh−γh):隐层第 h h h个神经元的输出;
- β j = ∑ h = 1 q w h j b h \beta_j=\sum_{h=1}^qw_{hj}b_h βj=∑h=1qwhjbh:输出层第 j j j个神经元接收到的输入。
假设隐层和输出层神经元都使用Sigmoid函数。
该网络中有
(
d
+
l
+
1
)
q
+
l
(d+l+1)q+l
(d+l+1)q+l个参数需学习:输入层到隐层的
d
×
q
d\times q
d×q个权值
v
i
h
v_{ih}
vih、隐层到输出层的
q
×
l
q\times l
q×l个权值
w
h
j
w_{hj}
whj,
q
q
q个隐层神经元的阈值
γ
h
\gamma_h
γh、
l
l
l个输出层神经元的阈值
θ
j
\theta_j
θj。
BP是一个迭代学习算法,在迭代的每一轮中,任意参数
v
v
v的更新估计式为:
v
←
v
+
Δ
v
v\leftarrow v+\Delta v
v←v+Δv
标准BP算法
对训练数据
(
x
k
,
y
k
)
(x_k,y_k)
(xk,yk),假定神经网络的输出为
y
^
k
=
(
y
^
1
k
,
y
^
2
k
,
.
.
.
,
y
^
l
k
)
\hat{y}_k=(\hat{y}_1^k,\hat{y}_2^k,...,\hat{y}_l^k)
y^k=(y^1k,y^2k,...,y^lk),即
y
^
j
k
=
f
(
β
j
−
θ
j
)
\hat{y}_j^k=f(\beta_j-\theta_j)
y^jk=f(βj−θj)
则网络在
(
x
k
,
y
k
)
(x_k,y_k)
(xk,yk)上的均方误差为
E
k
=
1
2
∑
j
=
1
l
(
y
^
j
k
−
y
j
k
)
2
E_k=\frac{1}{2}\sum_{j=1}^l(\hat{y}_j^k-y_j^k)^2
Ek=21j=1∑l(y^jk−yjk)2
BP算法的目标是最小化训练集
T
T
T上的累积误差
E
=
1
m
E
k
E=\frac{1}{m}E_k
E=m1Ek
标准BP算法每次针对一个训练样本更新连接权和阈值,基于梯度下降策略,沿
E
k
E_k
Ek的负梯度方向对参数进行调整。对误差
E
k
E_k
Ek,给定学习率
η
\eta
η,有
{
w
h
j
←
w
h
j
+
Δ
w
h
j
=
w
h
j
−
η
∂
E
k
∂
w
h
j
θ
j
←
θ
j
+
Δ
θ
j
=
θ
j
−
η
∂
E
k
∂
θ
j
v
i
h
←
v
i
h
+
Δ
v
i
h
=
v
i
h
−
η
∂
E
k
∂
v
i
h
γ
h
←
γ
h
+
Δ
γ
h
=
γ
h
−
η
∂
E
k
∂
γ
h
\begin{cases} w_{hj}\leftarrow w_{hj}+\Delta w_{hj}=w_{hj}- \eta \frac{\partial E_k}{\partial w_{hj}}\\ \theta_j\leftarrow \theta_j+\Delta \theta_j=\theta_j - \eta \frac{\partial E_k}{\partial \theta_j}\\ v_{ih}\leftarrow v_{ih}+\Delta v_{ih}= v_{ih} - \eta \frac{\partial E_k}{\partial v_{ih}}\\ \gamma_h\leftarrow \gamma_h+\Delta \gamma_h= \gamma_h- \eta \frac{\partial E_k}{\partial \gamma_h} \end{cases}
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧whj←whj+Δwhj=whj−η∂whj∂Ekθj←θj+Δθj=θj−η∂θj∂Ekvih←vih+Δvih=vih−η∂vih∂Ekγh←γh+Δγh=γh−η∂γh∂Ek
关于
w
h
j
w_{hj}
whj的梯度,
∂
E
k
∂
w
h
j
=
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
⋅
∂
β
j
∂
w
h
j
=
(
y
^
j
k
−
y
j
k
)
⋅
f
(
β
j
−
θ
j
)
(
1
−
f
(
β
j
−
θ
j
)
)
⋅
b
h
=
(
y
^
j
k
−
y
j
k
)
y
^
j
k
(
1
−
y
^
j
k
)
b
h
\begin{aligned} \frac{\partial E_k}{\partial w_{hj}}&=\frac{\partial E_k}{\partial \hat{y}_j^k}\cdot \frac{\partial \hat{y}_j^k}{\partial \beta_j}\cdot \frac{\partial \beta_j}{\partial w_{hj}}\\ &=(\hat{y}_j^k-y_j^k)\cdot f(\beta_j-\theta_j)(1-f(\beta_j-\theta_j))\cdot b_h\\ &=(\hat{y}_j^k-y_j^k)\hat{y}_j^k(1-\hat{y}_j^k)b_h \end{aligned}
∂whj∂Ek=∂y^jk∂Ek⋅∂βj∂y^jk⋅∂whj∂βj=(y^jk−yjk)⋅f(βj−θj)(1−f(βj−θj))⋅bh=(y^jk−yjk)y^jk(1−y^jk)bh
令
g
j
=
−
∂
E
k
∂
β
j
=
−
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
=
y
^
j
k
(
1
−
y
^
j
k
)
(
y
j
k
−
y
^
j
k
)
g_j=-\frac{\partial E_k}{\partial \beta_j}=-\frac{\partial E_k}{\partial \hat{y}_j^k}\cdot \frac{\partial \hat{y}_j^k}{\partial \beta_j}=\hat{y}_j^k(1-\hat{y}_j^k)(y_j^k-\hat{y}_j^k)
gj=−∂βj∂Ek=−∂y^jk∂Ek⋅∂βj∂y^jk=y^jk(1−y^jk)(yjk−y^jk)
则
Δ
w
h
j
=
η
g
j
b
h
\Delta w_{hj}=\eta g_j b_h
Δwhj=ηgjbh
关于
θ
j
\theta_j
θj的梯度,
∂
E
k
∂
θ
j
=
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
θ
j
=
y
^
j
k
(
1
−
y
^
j
k
)
(
y
j
k
−
y
^
j
k
)
\frac{\partial E_k}{\partial \theta_j}=\frac{\partial E_k}{\partial \hat{y}_j^k}\cdot \frac{\partial \hat{y}_j^k}{\partial \theta_j}=\hat{y}_j^k(1-\hat{y}_j^k)(y_j^k-\hat{y}_j^k)
∂θj∂Ek=∂y^jk∂Ek⋅∂θj∂y^jk=y^jk(1−y^jk)(yjk−y^jk)
Δ θ j = − η g j \Delta \theta_j=-\eta g_j Δθj=−ηgj
关于
v
i
h
v_{ih}
vih的梯度,
∂
E
k
∂
v
i
h
=
∑
j
=
1
l
∂
E
k
∂
β
j
⋅
∂
β
j
∂
b
h
⋅
∂
b
h
∂
α
h
⋅
∂
α
h
∂
v
i
h
=
∑
j
=
1
l
(
−
g
j
)
⋅
w
h
j
⋅
b
h
(
1
−
b
h
)
⋅
x
i
\begin{aligned} \frac{\partial E_k}{\partial v_{ih}}&=\sum_{j=1}^l\frac{\partial E_k}{\partial \beta_j}\cdot \frac{\partial \beta_j}{\partial b_h}\cdot \frac{\partial b_h}{\partial \alpha_h} \cdot \frac{\partial \alpha_h}{\partial v_{ih}}\\ &=\sum_{j=1}^l(-g_j)\cdot w_{hj}\cdot b_h(1-b_h)\cdot x_i \end{aligned}
∂vih∂Ek=j=1∑l∂βj∂Ek⋅∂bh∂βj⋅∂αh∂bh⋅∂vih∂αh=j=1∑l(−gj)⋅whj⋅bh(1−bh)⋅xi
令
e
h
=
−
∂
E
k
∂
b
h
⋅
∂
b
h
∂
α
h
=
b
h
(
1
−
b
h
)
∑
j
=
1
l
w
h
j
g
j
e_h=-\frac{\partial E_k}{\partial b_h}\cdot \frac{\partial b_h}{\partial \alpha_h}=b_h(1-b_h)\sum_{j=1}^lw_{hj}g_j
eh=−∂bh∂Ek⋅∂αh∂bh=bh(1−bh)j=1∑lwhjgj
则
Δ
v
i
h
=
η
e
h
x
i
\Delta v_{ih}=\eta e_h x_i
Δvih=ηehxi
对
γ
h
\gamma_h
γh求梯度,
∂
E
k
∂
v
i
h
=
∑
j
=
1
l
∂
E
k
∂
β
j
⋅
∂
β
j
∂
b
h
⋅
∂
b
h
∂
γ
h
=
∑
j
=
1
l
(
−
g
j
)
⋅
w
h
j
⋅
(
−
b
h
(
1
−
b
h
)
)
\begin{aligned} \frac{\partial E_k}{\partial v_{ih}}&=\sum_{j=1}^l\frac{\partial E_k}{\partial \beta_j}\cdot \frac{\partial \beta_j}{\partial b_h}\cdot \frac{\partial b_h}{\partial \gamma_h} \\ &=\sum_{j=1}^l(-g_j)\cdot w_{hj}\cdot (-b_h(1-b_h)) \end{aligned}
∂vih∂Ek=j=1∑l∂βj∂Ek⋅∂bh∂βj⋅∂γh∂bh=j=1∑l(−gj)⋅whj⋅(−bh(1−bh))
Δ γ h = − η e h \Delta \gamma_h=-\eta e_h Δγh=−ηeh
BP算法流程
输入:训练数据集
T
=
{
(
x
k
,
y
k
)
}
k
=
1
m
T=\{(x_k,y_k)\}_{k=1}^m
T={(xk,yk)}k=1m,学习率
η
\eta
η
输出:连接权和阈值确定的多层前馈神经网络
- 在 ( 0 , 1 ) (0,1) (0,1)范围内随机初始化网络中所有连接权和阈值;
- 重复以下步骤直至达到停止条件;
对任意 ( x k , y k ) ∈ T (x_k,y_k)\in T (xk,yk)∈T,
2.1 前向传播:将 ( x k , y k ) (x_k,y_k) (xk,yk)提供给输入层神经元,根据当前参数逐层将信号前传,直至产生输出 y ^ k \hat{y}_k y^k;
2.2 反向传播:
计算输出层神经元的梯度项,
g j = y ^ j k ( 1 − y ^ j k ) ( y j k − y ^ j k ) g_j=\hat{y}_j^k(1-\hat{y}_j^k)(y_j^k-\hat{y}_j^k) gj=y^jk(1−y^jk)(yjk−y^jk)
计算隐层神经元的梯度项,
e h = b h ( 1 − b h ) ∑ j = 1 l w h j g j e_h=b_h(1-b_h)\sum_{j=1}^lw_{hj}g_j eh=bh(1−bh)j=1∑lwhjgj
更新连接权 w h j w_{hj} whj、 v i h v_{ih} vih和阈值 θ j \theta_j θj、 γ h \gamma_h γh,
{ w h j ← w h j + Δ w h j = w h j + η g j b h θ j ← θ j + Δ θ j = θ j − η g j v i h ← v i h + Δ v i h = v i h + η e h x i γ h ← γ h + Δ γ h = γ h − η e h \begin{cases} w_{hj}\leftarrow w_{hj}+\Delta w_{hj}=w_{hj}+\eta g_j b_h\\ \theta_j\leftarrow \theta_j+\Delta \theta_j=\theta_j -\eta g_j\\ v_{ih}\leftarrow v_{ih}+\Delta v_{ih}= v_{ih} +\eta e_h x_i\\ \gamma_h\leftarrow \gamma_h+\Delta \gamma_h= \gamma_h-\eta e_h \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧whj←whj+Δwhj=whj+ηgjbhθj←θj+Δθj=θj−ηgjvih←vih+Δvih=vih+ηehxiγh←γh+Δγh=γh−ηeh
累积BP算法
类似于标准BP算法,沿累积误差 E E E的负梯度方向更新参数,就得到了累积误差逆传播算法。
一般来说,标准BP算法每次更新只针对单个样例,参数更新的非常频繁,而且不同样例的更新效果可能出现“抵消”现象,因此,为了达到累积BP算法同样的累积误差极小点,标准BP算法往往需要进行更多次数的迭代。累积BP算法直接针对累积误差极小化,它在读取整个训练集一遍后才对参数更新,其参数更新额频率低得多,但在很多任务重,累积误差下降到一定程度后,进一步下降会非常缓慢,这是标准BP往往会更快获得较好的解,油气是在训练集非常大时更明显。
BP网络的过拟合
Hornik证明了,只需一个包含足够多神经元的隐层,多层前馈网络就能以任意精度逼近任意复杂度的连续函数。但是,如何设置隐层神经元的个数仍是个未解决的问题,实际应用中常采用试错法调整。
正是其强大的表示能力,BP神经网络常会出现过拟合现象:训练误差持续降低,但测试误差却可能上升。有两种策略来缓解BP网络的过拟合:
- 早停:将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值;
- 正则化:其基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和,则误差目标函数变为:
E = λ 1 m ∑ k = 1 m E k + ( 1 − λ ) ∑ i w i 2 E=\lambda\frac{1}{m}\sum_{k=1}^mE_k+(1-\lambda)\sum_iw_i^2 E=λm1k=1∑mEk+(1−λ)i∑wi2
其中 λ ∈ ( 0 , 1 ) \lambda\in(0,1) λ∈(0,1)用于对经验误差和网络复杂度这两项进行折中,常通过交叉验证法来估计。
BP网络的全局极小
BP算法基于梯度下降策略进行参数寻优,容易陷入局部极小。常采用以下策略来试图跳出局部极小,从而进一步接近全局最小。
- 以多组不同参数值初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数。
- 使用“模拟退火”技术:模拟退火在每一步都以一定的概率接受比当前解更差的结果,从而有助于跳出局部极小;另外,在每步迭代过程中,接受次优解的概率要随着时间的推移而逐渐减低,从而保证算法稳定。
- 使用随机梯度下降:随机梯度下降法计算梯度时加入了随机因素,因此,即便陷入局部极小点,它计算出的梯度仍可能不为0,这样就有机会跳出局部极小继续搜索。
注:上述方法都是启发式的,理论上尚缺乏保障。
参考:
统计学习方法——李航
西瓜书——周志华