1 感知机
y
=
f
(
∑
i
=
1
n
w
i
x
i
−
b
)
y=f(\sum\limits_{i=1}^{n}w_ix_i-b)
y=f(i=1∑nwixi−b)
其中,
f
f
f 常常取阶跃函数或 Sigmoid 函数。
学习规则:
Δ
w
i
=
η
(
y
−
y
^
)
x
i
w
i
←
w
i
+
Δ
w
i
\Delta w_i=\eta(y-\hat{y})x_i\\ w_i \leftarrow w_i+\Delta w_i
Δwi=η(y−y^)xiwi←wi+Δwi
其中,
y
^
\hat{y}
y^ 为感知机的输出,
η
\eta
η 为学习率。
单层感知机只能解决线性可分问题,要解决非线性可分问题(如异或),可考虑引入多层功能神经元。
2 反向传播(BackPropagation)
训练集
D
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
⋯
(
x
m
,
y
m
)
,
x
∈
R
d
,
y
∈
R
l
D={(x_1,y_1),(x_2,y_2)\cdots(x_m,y_m)},x\in\mathbb{R}^d,y\in\mathbb{R^l}
D=(x1,y1),(x2,y2)⋯(xm,ym),x∈Rd,y∈Rl ,隐层的阈值为
γ
h
\gamma_h
γh,输出层的阈值为
θ
j
\theta_j
θj,两个层的激活函数均为 Sigmoid 函数(
S
′
(
x
)
=
S
(
x
)
[
1
−
S
(
x
)
]
S'(x)=S(x)[1-S(x)]
S′(x)=S(x)[1−S(x)] )。对训练例
(
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},\cdots,{\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)。则整个网络对该训练例的均方误差为:
E
k
=
1
2
∑
j
=
1
l
(
y
^
j
k
−
y
j
k
)
2
E_k=\frac{1}{2}\sum\limits_{j=1}^{l}({\hat y_j^k}-y^k_j)^2
Ek=21j=1∑l(y^jk−yjk)2
我们需要确定的参数为:输入层到隐层的权值,共
d
⋅
q
d\cdot q
d⋅q 个;隐层的阈值,共
q
q
q 个;隐层到输出层的权值
q
⋅
l
q\cdot l
q⋅l 个;输出层的阈值,共
l
l
l 个。在每一轮迭代中,任意参数
v
v
v 的更新均可以表示为:
v
←
v
+
Δ
v
,
其中
Δ
v
=
−
η
∂
E
k
∂
v
v\leftarrow v+\Delta v,\ 其中\Delta v = -\eta\frac{\partial E_k}{\partial v}
v←v+Δv, 其中Δv=−η∂v∂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
)
⋅
y
^
j
k
⋅
(
1
−
y
^
j
k
)
⋅
b
h
\begin{align} \frac{\partial E_k}{\partial w_{hj}}&=\frac{\partial E_k}{\partial {\hat y^k_j}}\cdot\frac{\partial {\hat y^k_j}}{\partial \beta_j}\cdot\frac{\partial \beta_j}{\partial w_{hj}}(链式法则)\\ &=({\hat y^k_j}-y^k_j)\cdot{\hat y^k_j}\cdot(1-{\hat y^k_j})\cdot b_h \end{align}
∂whj∂Ek=∂y^jk∂Ek⋅∂βj∂y^jk⋅∂whj∂βj(链式法则)=(y^jk−yjk)⋅y^jk⋅(1−y^jk)⋅bh
记
g
j
=
(
y
j
k
−
y
^
j
k
)
⋅
y
^
j
k
⋅
(
1
−
y
^
j
k
)
g_j=({y^k_j}-{\hat y^k_j})\cdot{\hat y^k_j}\cdot(1-{\hat y^k_j})
gj=(yjk−y^jk)⋅y^jk⋅(1−y^jk),于是有:
Δ
w
h
j
=
η
g
j
b
h
\Delta w_{hj}=\eta g_jb_h
Δwhj=ηgjbh
同理得
Δ
θ
j
=
−
η
g
j
、
Δ
v
i
h
=
η
e
h
x
i
、
Δ
γ
h
=
−
η
e
h
\Delta\theta_j=-\eta g_j、\Delta v_{ih}=\eta e_hx_i、\Delta\gamma_h=-\eta e_h
Δθj=−ηgj、Δvih=ηehxi、Δγh=−ηeh,其中:
e
h
=
−
∂
E
k
∂
b
h
⋅
∂
b
h
∂
α
h
=
−
b
h
⋅
(
1
−
b
h
)
⋅
∑
j
=
1
l
∂
E
k
∂
β
j
⋅
∂
β
j
∂
b
h
=
b
h
⋅
(
1
−
b
h
)
⋅
∑
j
=
1
l
g
j
w
h
j
\begin{align} e_h&=-\frac{\partial E_k}{\partial b_{h}}\cdot\frac{\partial b_h}{\partial \alpha_h}\\ &=-b_h\cdot(1-b_h)\cdot\sum\limits_{j=1}^{l}\frac{\partial E_k}{\partial \beta_{j}}\cdot\frac{\partial \beta_j}{\partial b_{h}}\\ &=b_h\cdot(1-b_h)\cdot\sum\limits_{j=1}^{l}g_jw_{hj} \end{align}
eh=−∂bh∂Ek⋅∂αh∂bh=−bh⋅(1−bh)⋅j=1∑l∂βj∂Ek⋅∂bh∂βj=bh⋅(1−bh)⋅j=1∑lgjwhj
BP 算法的流程为:
BP 算法的目标是最小化累积误差
E
=
1
m
∑
i
=
1
k
E
k
E = \frac{1}{m}\sum\limits_{i=1}^{k}E_k
E=m1i=1∑kEk ;只要隐层有足够多的神经元,BP 神经网络能以任意精度逼近任意连续函数。
3 卷积神经网络
特点:
- 继承 BP 神经网络的优点
- 权值共享:卷积层、池化层的可训练参数仅与卷积窗的种类有关,每种卷积窗内部的神经元参数一致。(卷积层 or 池化层 → 卷积窗 → 神经元)
- 卷积层:
- 池化层:
以 LeNet-5 手写数字为例:
C1 层:
- 输入图片大小:32*32
- 卷积窗大小:5*5
- 卷积窗种类:6
- 输出特征图大小:28*28
- 可训练参数:(5*5+1)*6(每种卷积窗有 25 个权值和 1 个偏置常数)
- 神经元数量:28*28*6(每个输出特征图由 28*28 个神经元构成)
- 连接数:(5*5+1)*28*28*6(每个神经元需要与视野域内的 5*5 个输入连接,还要与本卷积窗的偏置常数连接)
S2 层:
- 输入图片大小:28*28
- 卷积窗大小:2*2
- 卷积窗种类:6(和输入的 6 个图片一一对应)
- 输出下采样图的大小:14*14(与卷积层不同的是,池化层的步长为 2)
- 可训练参数:(1+1)*6(池化层的神经元会先取其视野域内的4个输入的最大值(也可以是最小值、均值等),然后在乘以一个可训练权重 w ,再加上一个可训练偏置,故每种卷积窗的可训练参数为:1+1)
- 神经元数量:14*14*6
- 连接数:(2*2+1)*14*14*6
C3 层:
- 输入图片大小:14*14
- 卷积窗大小:5*5
- 卷积窗种类:16
- 输出特征图大小:10*10
- 可训练参数:(3*6+4*9+6*1)*25+16(6 种卷积窗的每个神经元与 3 个输入图片有关;9 种卷积窗的每个神经元与 4 个输入图片有关;1 种卷积窗的每个神经元与 6 个输入图片有关;每个输入图片有 25 个输入;16 种卷积窗各有 1 个偏置常数)
- 神经元数量:10*10*6
- 连接数:((3*6+4*9+6*1)*25+16)*10*10*6
层 | 输入图片大小 | 卷积窗大小 | 卷积窗种类 | 输出特征图大小 | 可训练参数 | 神经元数量 | 连接数 |
---|---|---|---|---|---|---|---|
S4 | 10*10 | 2*2 | 16 | 5*5 | (1+1)*16 | 5*5*16 | (16*5*5+1)*120 |
C5(全连接) | 5*5 | 5*5 | 120 | 1*1 | (16*5*5+1)*120 | 120 | (16*5*5+1)*120 |
F6(全连接) | 1*1 | 1*1 | 84 | 1*1 | (120+1)*84 | 84 | (120+1)*84 |
OUTPUT层:
- 输入向量:1*84
- 输出向量:1*10