神经元结构
MP神经元
神经元激活函数
非线性转换函数
激活函数引入的原因
- 多层线性变换可以合并
- 三层神经网络(sgn激活函数)即可模拟所有的决策面
#
若
φ
为
线
性
函
数
则
可
以
合
并
为
一
个
线
性
函
数
y
=
w
1
φ
(
w
11
x
1
+
w
12
x
2
)
+
w
2
φ
(
w
21
x
1
+
w
22
x
2
)
+
b
#
若
取
φ
=
w
′
x
+
b
′
=
w
1
(
w
′
(
w
11
x
1
+
w
12
x
2
)
+
b
′
)
+
w
2
(
w
′
(
w
21
x
1
+
w
22
x
2
)
+
b
′
)
+
b
=
(
w
1
w
′
w
11
+
w
2
w
′
w
21
)
x
1
+
(
w
1
w
′
w
12
+
w
2
w
′
w
22
)
x
2
+
(
w
1
b
′
+
w
2
b
′
+
b
)
=
W
1
∗
x
1
+
W
2
∗
x
2
+
b
∗
=
W
X
#
划
归
为
一
个
线
性
变
化
\begin{aligned} &\# 若\varphi为线性函数则可以合并为一个线性函数 \\ y&=w_1\varphi(w_{11}x_1+w_{12}x_2)+ w_2\varphi(w_{21}x_1+w_{22}x_2)+ b\\ &\# 若取\varphi=w'x+b'\\ &=w_1(w'(w_{11}x_1+w_{12}x_2)+b') + w_2(w'(w_{21}x_1+w_{22}x_2)+b') +b\\ &= (w_1w'w_{11}+w_2w'w_{21})x_1+ (w_1w'w_{12}+w_2w'w_{22})x_2 +(w_1b'+w_2b'+b)\\ &=W_1^*x_1+W_2^*x_2+b^* \\ &=WX \\ &\#划归为一个线性变化 \end{aligned}
y#若φ为线性函数则可以合并为一个线性函数=w1φ(w11x1+w12x2)+w2φ(w21x1+w22x2)+b#若取φ=w′x+b′=w1(w′(w11x1+w12x2)+b′)+w2(w′(w21x1+w22x2)+b′)+b=(w1w′w11+w2w′w21)x1+(w1w′w12+w2w′w22)x2+(w1b′+w2b′+b)=W1∗x1+W2∗x2+b∗=WX#划归为一个线性变化
处理的问题
网络课程
- 三角形区域->四边形区域->圆形(n边形)非联通的多个区域
- sgn激活函数 -> sigmoid型 及其他激活函数 ( φ \varphi φ)
- 平面区域-> 更高维度 ( x 1 , x 2 x_1,x_2 x1,x2向量)
激活函数需要具备以下几点性质:
- 连续并可导(允许少数点上不可导)的非线性函数.可导的激活函数可以 直接利用数值优化的方法来学习网络参数.
- 激活函数及其导函数要 尽可能的简单 ,有利于提高网络计算效率.
剃刀原理 - 激活函数的 导函数的值域要在一个合适的区间内 ,不能太大也不能太小,否则会影响训练的效率和稳定性.
sgn函数
s g n ( x ) = { 1 w T x + b > 0 − 1 w T x + b < 0 sgn(x)=\left\{ \begin{aligned} 1 && w^Tx+b>0\\ -1 && w^Tx+b<0 \end{aligned} \right. sgn(x)={1−1wTx+b>0wTx+b<0
Sigmoid型函数
Logistic函数
Sigmoid型函数,简记为 σ ( x ) \sigma(x) σ(x)
S i g m o i d ( x ) = σ ( x ) = 1 1 + e − x Sigmoid(x)=\sigma(x)= \frac {1} {1+e^{-x}} Sigmoid(x)=σ(x)=1+e−x1
性质: σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) \sigma'(x)=\sigma(x)(1-\sigma(x)) σ′(x)=σ(x)(1−σ(x)) 导数计算简单 → \rarr → 反向传播算法(Back Propagation) 计算
其中 x = w T x + b x=w^Tx+b x=wTx+b 对数几率回归的联系函数
Tanh函数
Tanh函数也是一种Sigmoid型函数
t a n h ( x ) = e x − e − x e − x + e x = 2 e x − ( e x + e − x ) e − x + e x = 2 1 + e − 2 x − 1 = 2 L o g i s t i c ( 2 x ) − 1 \begin{aligned} tanh(x) &= \frac {e^x-e^{-x}} {e^{-x}+e^x}\\ &= \frac {2e^{x}-(e^x+e^{-x})} {e^{-x}+e^x}\\ &= \frac {2} {1+e^{-2x}} -1\\ &= 2Logistic(2x)-1 \end{aligned} tanh(x)=e−x+exex−e−x=e−x+ex2ex−(ex+e−x)=1+e−2x2−1=2Logistic(2x)−1
Tanh函数可以看作放大并平移的Logistic函数,其值域是(−1, 1).
t a n h ′ ( x ) = 1 − t a n h ( x ) 2 tanh'(x)=1\quad- \quad {tanh(x)}^2 tanh′(x)=1−tanh(x)2
Tanh 函数的输出是零中心化的(Zero-Centered),而 Logistic 函数的输出恒大于 0.非零中心化的输出会使得其后一层的神经元的输入发生偏置偏移(Bias Shift),并进一步使得梯度下降的收敛速度变慢.
Hard-Logistic函数与Hard-Tanh函数
利用泰勒展式写分段函数减小计算开销
本身就是一个模拟,尽可能简单
Logistic函数和Tanh函数都是Sigmoid型函数,具有饱和性,但是计算开销较大. 因为这两个函数都是在中间(0附近)近似线性,两端饱和
.因此,这两个函数可以 通过分段函数来近似.
非饱和函数: f ( x ) f(x) f(x)
lim x → + ∞ f ( x ) = + ∞ o r lim x → − ∞ f ( x ) = + ∞ \lim_{x \rarr +\infty}{f(x)}=+\infty \quad or \quad \lim_{x \rarr -\infty}{f(x)}=+\infty x→+∞limf(x)=+∞orx→−∞limf(x)=+∞
饱和函数:当f不是非饱和激活函数; 趋于无穷时极限存在
右饱和:
当x趋向于正无穷时,函数的导数趋近于0,此时称为右饱和。
左饱和:
当x趋向于负无穷时,函数的导数趋近于0,此时称为左饱和。
饱和函数和非饱和函数:
当一个函数既满足右饱和,又满足左饱和,则称为饱和函数,否则称为非饱和函数。
常用的饱和激活函数和非饱和激活函数:
饱和激活函数有如Sigmoid和tanh,非饱和激活函数有ReLU;相较于饱和激活函数,非饱和激活函数可以解决“梯度消失”的问题,加快收敛。
摘自饱和和非饱和激活函数
更直观的表现: 当 x 1 , x 2 x_1,x_2 x1,x2都很大时而且 x 1 ≫ x 2 x_1 \gg x_2 x1≫x2,sigmoid型函数(饱和函数)会认为两者不存在差异;而对于ReLU函数可以很好地将两者区分
以 Logistic 函数 𝜎(𝑥) 为例,其导数为
σ
′
(
x
)
=
σ
(
x
)
(
1
−
σ
(
x
)
)
\sigma'(x)=\sigma(x)(1-\sigma(x))
σ′(x)=σ(x)(1−σ(x)).
Logistic 函数在0附近的一阶泰勒展开(Taylor expansion)为
g
l
(
x
)
≈
σ
(
0
)
+
σ
′
(
0
)
x
=
0.25
x
+
0.5
\begin{aligned} g_l{(x)} &\approx\sigma(0)+\sigma'(0)x\\ &=0.25x+0.5 \end{aligned}
gl(x)≈σ(0)+σ′(0)x=0.25x+0.5
这样Logistic函数可以用分段函数hard-logistic(𝑥)来近似
h
a
r
d
−
l
o
g
i
s
t
i
c
(
x
)
=
{
1
g
l
(
x
)
≥
1
g
l
0
<
g
l
(
x
)
<
1
0
g
l
(
x
)
≤
0
=
m
a
x
(
m
i
n
(
g
l
(
x
)
,
1
)
,
0
)
=
m
a
x
(
m
i
n
(
0.25
x
+
0.5
,
1
)
,
0
)
\begin{aligned} hard-logistic(x)&=\left\{ \begin{aligned} 1 && g_l(x)\ge 1 \\ g_l && 0<g_l(x)<1\\ 0 && g_l(x)\le 0 \end{aligned} \right.\\ &=max(min(g_l(x),1),0)\\ &=max(min(0.25x+0.5,1),0) \end{aligned}
hard−logistic(x)=⎩⎪⎨⎪⎧1gl0gl(x)≥10<gl(x)<1gl(x)≤0=max(min(gl(x),1),0)=max(min(0.25x+0.5,1),0)
同样tanh函数也可以同样近似
t
a
n
h
(
x
)
=
2
σ
(
2
x
)
−
1
tanh(x)=2\sigma(2x)-1
tanh(x)=2σ(2x)−1
t
a
n
h
′
(
x
)
∣
x
=
0
=
1
t
a
n
h
(
x
)
∣
x
=
0
=
0
tanh'(x)|_{x=0}=1\\tanh(x)|_{x=0}=0
tanh′(x)∣x=0=1tanh(x)∣x=0=0
h a r d − t a n h ( x ) = m a x ( m i n ( g t ( x ) , 1 ) , − 1 ) = m a x ( m i n ( x , 1 ) , − 1 ) \begin{aligned} hard-tanh(x)&=max(min(g_t(x),1),-1)\\ &=max(min(x,1),-1) \end{aligned} hard−tanh(x)=max(min(gt(x),1),−1)=max(min(x,1),−1)
ReLU函数
ReLU(Rectified Linear Unit,修正线性单元),也叫Rectifier函数, 目前深度神经网络中经常使用的激活函数.
奥卡姆剃刀 简单的最好的?这也太简单了吧
R e L U ( x ) = { x x ≥ 0 0 x < 0 = m a x ( 0 , x ) \begin{aligned} ReLU(x)&=\left\{ \begin{aligned} x && x \ge 0\\ 0 && x<0 \end{aligned} \right.\\ &=max(0,x) \end{aligned} ReLU(x)={x0x≥0x<0=max(0,x)
优点: 采用 ReLU 的神经元只需要进行加、乘和比较的操作,计算上更加高效
缺点: ReLU 函数的输出是非零中心化的,给后一层的神经网络引入偏置偏移,会影响梯度下降的效率.此外,ReLU 神经元在训练时比较容易 “死亡” x<0 y=0 … 00000
带泄露的ReLU
L e a k y R e L U ( x ) = { x i f x > 0 γ x i f x ≤ 0 = m a x ( 0 , x ) + γ m i n ( 0 , x ) \begin{aligned} LeakyReLU(x)&=\left\{ \begin{aligned} x && if && x>0\\ \gamma x && if && x \le 0 \end{aligned} \right.\\ &=max(0,x)+\gamma min(0,x) \end{aligned} LeakyReLU(x)={xγxififx>0x≤0=max(0,x)+γmin(0,x)
其中
γ
\gamma
γ 是一个很小的常数,比如0.01。当
γ
<
1
\gamma <1
γ<1时,带泄露的ReLU也可以写成
L
e
a
k
y
R
e
L
U
(
x
)
=
m
a
x
(
x
,
γ
x
)
LeakyReLU(x)=max(x,\gamma x)
LeakyReLU(x)=max(x,γx)
带参数的ReLU
可学习的参数: γ \gamma γ 不同神经元可以有不同的参数
第i个神经元
P R e L U i ( x ) = { x i f x > 0 γ i x i f x ≤ 0 = m a x ( 0 , x ) + γ i m i n ( 0 , x ) \begin{aligned} PReLU_i(x)&=\left\{ \begin{aligned} x && if && x>0\\ \gamma _i x && if && x \le 0 \end{aligned} \right.\\ &=max(0,x)+\gamma _i min(0,x) \end{aligned} PReLUi(x)={xγixififx>0x≤0=max(0,x)+γimin(0,x)
其中 γ i \gamma_i γi 为 x ≤ 0 x \le 0 x≤0 时函数的斜率.因此,PReLU 是非饱和函数.
如果 𝛾𝑖 = 0,那么PReLU就退化为ReLU.
如果𝛾𝑖 为一个很小的常数,则PReLU可以看作带泄露的ReLU.
PReLU 可以允许不同神经元具有不同的参数,也可以一组神经元共享一个参数.
ELU函数
指数线性单元函数
E L U ( x ) = { x i f x > 0 γ ( e x − 1 ) i f x ≤ 0 = m a x ( 0 , x ) + m i n ( 0 , γ ( e x − 1 ) ) \begin{aligned} ELU(x)&=\left\{ \begin{aligned} x && if && x>0\\ \gamma (e^x-1) && if && x \le 0 \end{aligned} \right.\\ &=max(0,x)+min(0,\gamma (e^x-1)) \end{aligned} ELU(x)={xγ(ex−1)ififx>0x≤0=max(0,x)+min(0,γ(ex−1))
其中 γ ≥ 0 \gamma \ge 0 γ≥0 是一个超参数,决定 x ≤ 0 x \le 0 x≤0时的饱和曲线,并调整输出均值在0附近.
Softplus函数
S o f t p l u s ( x ) = ln ( 1 + e x ) Softplus(x)=\ln {(1+e^x)} Softplus(x)=ln(1+ex)
Softplus函数其导数刚好是Logistic函数.Softplus函数虽然也具有单侧抑制、宽兴奋边界的特性,却没有稀疏激活性
Swish函数
一种自门控(Self-Gated)激活函数,定义为
s
w
i
s
h
(
x
)
=
x
σ
(
β
x
)
swish(x)=x\sigma (\beta x)
swish(x)=xσ(βx)
其中 σ ( . ) \sigma(.) σ(.) 为Logistic函数, β \beta β 为可学习的参数或一个固定超参数.
σ ( . ) ∈ ( 0 , 1 ) \sigma(.) \in (0,1) σ(.)∈(0,1) 可以看作一种 软性的门控机制.
- 当 σ ( β x ) \sigma(\beta x) σ(βx) 接近于1时,门处于“开”状态,激活函数的输出近似于𝑥 本身;
- 当 σ ( β x ) \sigma(\beta x) σ(βx) 接近于0时,门的状态为“关”,激活函数的输出近似于0.
- 当 β = 0 \beta =0 β=0 时,Swish函数变成线性函数 x 2 \frac x 2 2x.
- 当
β
=
1
\beta =1
β=1 时,Swish函数在
x
>
0
x>0
x>0 时近似线性,在
x
<
0
x<0
x<0 时近似
饱和
,同时具有一定的非单调性. - 当 β → + ∞ \beta \rarr +\infty β→+∞ 时, σ ( β x ) \sigma(\beta x) σ(βx) 趋向于离散的0-1函数,Swish函数近似为ReLU函数.因此,Swish函数可以看作线性函数和ReLU函数之间的非线性插值函数,其程度由参数 β \beta β 控制.
GELU函数
GELU(Gaussian Error Linear Unit,高斯误差线性单元)
也是一种通过门控机制来调整其输出值的激活函数,和 Swish 函数比较类似.
G
E
L
U
(
x
)
=
x
P
(
X
≤
x
)
GELU(x)=xP(X \le x)
GELU(x)=xP(X≤x)
其中
P
(
X
≤
x
)
P(X \le x)
P(X≤x) 是高斯分布
N
(
u
,
σ
2
)
N(u,\sigma^2)
N(u,σ2) 的概率分布函数。(一般取标准正态分布
u
=
0
,
σ
=
1
u=0,\sigma=1
u=0,σ=1 )
由于高斯分布的累积分布函数为S型函数,因此GELU函数可以用Tanh函数或Logistic函数来近似,
G E L U ( x ) ≈ 0.5 x ( 1 + t a n h ( 2 π ( x + 0.044715 x 3 ) ) ) o r G E L U ( x ) = x σ ( 1.702 x ) GELU(x) \approx 0.5x(1+tanh(\sqrt{\frac 2 \pi}(x+0.044715x^3)))\\ or\\ GELU(x)=x\sigma(1.702x) GELU(x)≈0.5x(1+tanh(π2(x+0.044715x3)))orGELU(x)=xσ(1.702x)
当使用Logistic函数来近似时,GELU相当于一种特殊的Swish函数.
Maxout单元
Maxout 单元 也是一种 分段线性函数. 采用 Maxout 单元的神经网络也就做Maxout网络.
Sigmoid 型函数、ReLU 等激活函数的输入是神经元的净输入 𝑧,是一个标量.
而 Maxout 单元的输入是 上一层神经元的全部原始输出 ,是一个向量 x = [ x 1 , x 2 , . . . , x D ] x=[x_1,x_2, ... ,x_D] x=[x1,x2,...,xD] .
每个Maxout单元有K个权重向量
w
k
∈
R
D
w_k \in R^D
wk∈RD 和偏置
b
k
(
1
≤
k
≤
K
)
b_k (1\le k \le K)
bk(1≤k≤K) .对于输
入x,可以得到K个净输入
z
k
(
1
≤
k
≤
K
)
z_k (1\le k \le K)
zk(1≤k≤K)
z k = w k T x + b k z_k=w_k^Tx+b_k zk=wkTx+bk
其中 w k = [ w k , 1 , w k , 2 , . . . , w k , D ] w_k=[w_{k,1},w_{k,2},...,w_{k,D}] wk=[wk,1,wk,2,...,wk,D] 为第K个权重向量。
获得K维向量 Z
Maxout单元的非线性函数
m a x o u t ( x ) = m a x k ∈ [ 1 , K ] ( z k ) maxout(x)=max_{k\in [1,K]}{(z_k)} maxout(x)=maxk∈[1,K](zk)
Maxout单元不单是净输入到输出之间的非线性映射,而是整体学习输入到输出之间的非线性映射关系.
Maxout激活函数可以看作任意凸函数的分段线性近似,并且在有限的点上是不可微的.
小结:常用激活函数与其导数
激活函数 | 函数 | 导数 |
---|---|---|
Logistic函数( δ ( x ) \delta(x) δ(x)) | δ ( x ) = 1 1 + e − x \delta(x)=\frac {1} {1+e^{-x}} δ(x)=1+e−x1 | δ ′ ( x ) = δ ( x ) ( 1 − δ ( x ) ) \delta'(x)=\delta(x)\bigg(1-\delta(x)\bigg) δ′(x)=δ(x)(1−δ(x)) |
Tanh 函数 | f ( x ) = e x − e − x e x + e − x f(x)=\frac {e^x-e^{-x}}{e^x+e^{-x}} f(x)=ex+e−xex−e−x | f ′ ( x ) = 1 − f ( x ) 2 f'(x)=1-f(x)^2 f′(x)=1−f(x)2 |
ReLU 函数 | f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x) | f ′ ( x ) = I ( x > 0 ) f'(x)=I(x>0) f′(x)=I(x>0) |
ELU 函数 | E L U ( x ) = { x i f x > 0 γ ( e x − 1 ) i f x ≤ 0 = m a x ( 0 , x ) + m i n ( 0 , γ ( e x − 1 ) ) \begin{aligned}ELU(x)&=\left\{ \begin{aligned} x && if && x>0\\ \gamma (e^x-1) && if && x \le 0 \end{aligned} \right.\\ &=max(0,x)+min(0,\gamma (e^x-1))\end{aligned} ELU(x)={xγ(ex−1)ififx>0x≤0=max(0,x)+min(0,γ(ex−1)) | f ′ ( x ) = I ( x > 0 ) + I ( x ≤ 0 ) ⋅ γ e x f'(x)=I(x>0)+I(x\le0) \cdot \gamma e^x f′(x)=I(x>0)+I(x≤0)⋅γex |
SoftPlus 函数 | f ( x ) = ln ( 1 + e x ) f(x)=\ln(1+e^x) f(x)=ln(1+ex) | f ′ ( x ) = 1 1 + e − x f'(x)=\frac 1 {1+e^{-x}} f′(x)=1+e−x1 |
网络结构
神经元的连接结构 (神经元之间协同工作)
前馈网络
前馈网络中各个神经元 按接收信息的先后分为不同的组. 每一组可以看作一个神经层.
每一层中的神经元接收前一层神经元的输出,并输出到下一层神经元.
整个网络中的信息是朝一个方向传播,没有反向的信息传播,可以用一个有向无环路图表示
记忆网络
记忆网络,也称为 反馈网络 , 网络中的神经元不但可以接收其他神经元的信息,也可以接收自己的历史信息.
和前馈网络相比,记忆网络中的神经元具有 记忆功能 在不同的时刻具有不同的状态.记忆神经网络中的信息传播可以是 单向或双向传递 ,因此可用一个有向循环图或无向图来表示
图网络
图网络是定义在图结构数据上的神经网络.图中每个节点都由一个或一组神经元构成. 节点之间的连接可以是有向的,也可以是无向的.每个节点可以收到来自相邻节点或自身的信息.
前馈神经网络
通用近似原理
描述问题基本同
三层神经网络可以模拟所有的决策面
通用近似定理(Universal Approximation Theorem)
令
φ
(
.
)
\varphi(.)
φ(.) 是一个非常数、有界、单调递减的连续函数,
J
D
J_D
JD 是一个 𝐷 维的单位超立方体
[
0
,
1
]
D
[0,1]^D
[0,1]D ,
C
(
J
D
)
C(J_D)
C(JD) 是定义在
J
D
J_D
JD 上的连续函数集合, 对于任何一个函数
f
∈
C
(
J
D
)
f \in C(J_D)
f∈C(JD) ,存在一个整数M, 和一组实数
v
m
,
b
m
∈
R
v_m,b_m \in R
vm,bm∈R 以及实向量
w
m
∈
R
D
,
m
=
1
,
2...
M
w_m \in R^D, m=1,2... M
wm∈RD,m=1,2...M , 以至于我们可以定义函数
F
(
x
)
=
∑
m
=
1
M
v
m
φ
(
w
m
T
x
+
b
m
)
F(x)=\sum_{m=1}^M{v_m\varphi(w_m^Tx+b_m)}
F(x)=m=1∑Mvmφ(wmTx+bm)
作为函数𝑓 的近似实现,即
∣
F
(
x
)
−
f
(
x
)
∣
<
ϵ
,
∀
x
∈
J
D
\vert F(x)-f(x)\vert < \epsilon, \forall x \in J_D
∣F(x)−f(x)∣<ϵ,∀x∈JD
根据通用近似定理,对于具有线性输出层和至少一个使用“挤压”性质的激活函数的隐藏层组成的前馈神经网络, 只要其隐藏层神经元的数量足够,它可以以任意的精度来近似任何一个定义在实数空间 R D R^D RD 中的有界闭集函数 .
所谓“挤压”性质的函数是指像 Sigmoid 函数的有界函数,但神经网络的通用近似性质也被证明对于其他类型的激活函数,比如ReLU,也都是适用的.
通用近似定理只是说明了神经网络的计算能力可以去近似一个给定的连续函数,但并没有给出如何找到这样一个网络,以及是否是最优的
参数学习
采用交叉熵损失函数,用梯度下降算法进行优化
损失函数为
L
(
y
,
y
^
)
=
−
y
T
ln
y
^
L(y,\hat y)=-y^T \ln{\hat y}
L(y,y^)=−yTlny^
风险函数为
R
(
W
,
b
)
=
1
N
∑
n
=
1
N
L
(
y
(
n
)
,
y
^
(
n
)
)
+
1
2
λ
∥
W
∥
F
2
R(W,b)=\frac 1 N \sum_{n=1}^{N}{L(y^{(n)},\hat y^{(n)})} + \frac 1 2 \lambda \Vert W \Vert_F^2
R(W,b)=N1n=1∑NL(y(n),y^(n))+21λ∥W∥F2
其中
∥
W
∥
F
2
\Vert W \Vert_F^2
∥W∥F2 为正则化项 Frobenius范数(距离),用来防止过拟合;
λ
>
0
\lambda > 0
λ>0 为超参数
∥ W ∥ F 2 = ∑ l = 1 L ∑ i = 1 M l ∑ j = 1 M l − 1 ( w i j ( l ) ) 2 \Vert W \Vert_F^2=\sum_{l=1}^L{\sum_{i=1}^{M_l}{\sum_{j=1}^{M{l-1}}{(w_{ij}^{(l)})^2}}} ∥W∥F2=l=1∑Li=1∑Mlj=1∑Ml−1(wij(l))2
有了学习准则
和训练样本
,参数可以通过梯度下降法
来进行学习.
在梯度下降方法的每次迭代中,第
l
l
l 层的参数
W
(
l
)
W^{(l)}
W(l) 和
b
(
l
)
b^{(l)}
b(l) 参数更新方式为
W ( l ) ← W ( l ) − α ∂ R ( W , b ) ∂ W ( l ) = W ( l ) − α ( 1 N ∑ n = 1 N ( ∂ L ( y ( n ) , y ^ n ) ∂ W ( l ) ) + λ W ( l ) ) b ( l ) ← b ( l ) − α ∂ R ( W , b ) ∂ b ( l ) = b ( l ) − α ( 1 N ∑ n = 1 N ( ∂ L ( y ( n ) , y ^ n ) ∂ b ( l ) ) ) \begin{aligned} W^{(l)} &\larr W^{(l)}- \alpha \frac {\partial{R(W,b)}} {\partial {W^{(l)}}}\\ &= W^{(l)}-\alpha \bigg( \frac 1 N \sum_{n=1}^{N}{(\frac {\partial L(y^{(n)},\hat y^{n})}{\partial W^{(l)}})} + \lambda W^{(l)} \bigg) \\ \\ \\ b^{(l)} &\larr b^{(l)}- \alpha \frac {\partial{R(W,b)}} {\partial b^{(l)}}\\ &=b^{(l)}- \alpha \bigg( \frac 1 N \sum_{n=1}^{N}{(\frac {\partial L(y^{(n)},\hat y^{n})}{\partial b^{(l)}})}\bigg) \end{aligned} W(l)b(l)←W(l)−α∂W(l)∂R(W,b)=W(l)−α(N1n=1∑N(∂W(l)∂L(y(n),y^n))+λW(l))←b(l)−α∂b(l)∂R(W,b)=b(l)−α(N1n=1∑N(∂b(l)∂L(y(n),y^n)))
其中 α \alpha α 为学习率
难点计算
∂
L
(
y
(
n
)
,
y
^
n
)
∂
W
(
l
)
∂
L
(
y
(
n
)
,
y
^
n
)
∂
b
(
l
)
\frac {\partial L(y^{(n)},\hat y^{n})}{\partial W^{(l)}} \\ \frac {\partial L(y^{(n)},\hat y^{n})}{\partial b^{(l)}}
∂W(l)∂L(y(n),y^n)∂b(l)∂L(y(n),y^n)
反向传播算法(Back Propagation)
解决上面的导数计算
目
标
函
数
:
E
=
1
2
(
y
−
y
^
)
2
计
算
:
∂
E
∂
w
i
∂
E
∂
b
i
首
先
:
y
^
=
w
1
φ
(
a
1
)
+
w
2
φ
(
a
2
)
+
b
∂
E
∂
b
=
(
y
−
y
^
)
∂
E
∂
w
1
=
(
y
−
y
^
)
φ
(
a
1
)
∂
E
∂
a
1
=
(
y
−
y
^
)
φ
′
(
a
1
)
w
1
a
1
=
w
11
x
1
+
w
12
x
2
+
b
1
∂
E
∂
b
1
=
∂
E
∂
a
1
∂
a
1
∂
b
1
=
(
y
−
y
^
)
φ
′
w
1
∂
E
∂
w
11
=
∂
E
∂
a
1
∂
a
1
∂
w
11
=
(
y
−
y
^
)
φ
′
w
1
x
1
同
理
可
求
对
w
2
,
w
22
,
b
2
的
偏
导
\begin{aligned} 目标函数:&E=\frac 1 2 {(y-\hat y)^2}\\ 计算:&\frac {\partial E} {\partial w_i} \quad \frac {\partial E} {\partial b_i}\\ 首先:&\hat y=w_1\varphi(a_1)+w_2\varphi(a_2)+b\\ &\frac {\partial E} {\partial b} = (y-\hat y) \\ &\frac {\partial E} {\partial w_1}= (y-\hat y) \varphi(a_1)\\ &\frac {\partial E}{\partial a_1}=(y-\hat y)\varphi'(a_1) w_1\\ &a_1=w_{11}x_1+w_{12}x_2+b_1\\ &\frac {\partial E} {\partial b_1}=\frac {\partial E}{\partial a_1} \frac{\partial a_1}{\partial b_1}=(y-\hat y)\varphi' w_1\\ &\frac {\partial E} {\partial w_{11}}=\frac {\partial E}{\partial a_1} \frac {\partial a_1}{\partial w_{11}}=(y-\hat y)\varphi' w_1x_1\\ &同理可求对w_2,w_{22},b_2的偏导 \end{aligned}
目标函数:计算:首先:E=21(y−y^)2∂wi∂E∂bi∂Ey^=w1φ(a1)+w2φ(a2)+b∂b∂E=(y−y^)∂w1∂E=(y−y^)φ(a1)∂a1∂E=(y−y^)φ′(a1)w1a1=w11x1+w12x2+b1∂b1∂E=∂a1∂E∂b1∂a1=(y−y^)φ′w1∂w11∂E=∂a1∂E∂w11∂a1=(y−y^)φ′w1x1同理可求对w2,w22,b2的偏导
示例第 l l l 层数据:
数据 | 输入 | 净输入 | 输出 |
---|---|---|---|
示例 | x x x | z = W T x + b z=W^Tx+b z=WTx+b | φ ( z ) \varphi(z) φ(z) |
解释 | 上一轮输出 | 当前w,b下的线性变换 | 激活函数 |
标准 | a ( l − 1 ) a^{(l-1)} a(l−1) | z ( l ) = W ( l ) a ( l − 1 ) + b ( l ) z^{(l)}=W^{(l)}a^{(l-1)}+b^{(l)} z(l)=W(l)a(l−1)+b(l) | a ( l ) = f l ( z ( l ) ) a^{(l)}=f_l(z^{(l)}) a(l)=fl(z(l)) |
第二项都是目标函数关于第
l
l
l 层的神经元
z
(
l
)
z^{(l)}
z(l) 的偏导数,称为误差项
,可以一次计算得到.
这样我们只需要计算三个偏导数
∂
L
(
y
,
y
^
)
∂
z
(
l
)
,
∂
z
(
l
)
∂
w
i
j
(
l
)
,
∂
z
(
l
)
∂
b
(
l
)
\frac {\partial L(y,\hat y)} {\partial z^{(l)}}\quad, \quad \frac {\partial z^{(l)}} {\partial w_{ij}^{(l)}}\quad,\quad \frac {\partial z^{(l)}} {\partial b^{(l)}}
∂z(l)∂L(y,y^),∂wij(l)∂z(l),∂b(l)∂z(l)
净输入z对w,b的偏导
计算偏导数
∂
L
(
y
,
y
^
)
∂
z
(
l
)
\frac {\partial L(y,\hat y)} {\partial z^{(l)}}
∂z(l)∂L(y,y^)
表示第𝑙层神经元对最终损失的影响, 也反映了最终损失对第𝑙 层神经元的敏感程度,因此一般称为第𝑙 层神经元的误差项
,用
δ
(
l
)
\delta^{(l)}
δ(l) 来表示.
δ
(
l
)
=
∂
L
(
y
,
y
^
)
∂
z
(
l
)
∈
R
M
l
\delta^{(l)}=\frac {\partial L(y,\hat y)} {\partial z^{(l)}} \in R^{M_l}
δ(l)=∂z(l)∂L(y,y^)∈RMl
神经网络可用于解决 贡献度分配问题(CAP)
从公式(4.63)可以看出,第
l
l
l 层的误差项可以通过第
l
+
1
l+1
l+1 层的误差项计算得到,这就是误差的反向传播(BackPropagation,BP)
.
反向传播算法
的含义是:
第
l
l
l 层的一个神经元的误差项(或敏感性)是所有与该神经元相连的第
l
+
1
l+1
l+1 层的神经元的误差项的权重和.然后,再乘上该神经元激活函数的梯度.
使用误差反向传播算法的前馈神经网络训练过程可以分为以下三步:
- 前馈计算每一层的净输入 z ( l ) z^{(l)} z(l) 和激活值 a ( l ) a^{(l)} a(l) ,直到最后一层;
- 反向传播计算每一层的误差项 δ ( l ) \delta^{(l)} δ(l)
- 计算每一层参数的偏导数,并更新参数.
自动梯度计算
方法 | 简要介绍 | 优劣 |
---|---|---|
数值微分 | 用数值方法来计算函数 f ( x ) f(x) f(x) 的导数. | 计算复杂度; 实用性差:找到一个合适的扰动
Δ
x
\Delta x
Δx 却十分困难.如果
Δ
x
\Delta x
Δx 过小,会引起数值计算 问题,比如舍入误差 ;如果
Δ
x
\Delta x
Δx 过大,会增加截断误差 ,使得导数计算不准确。 |
符号微分 | 指用计算机来处理带有变量的数学表达式. | 符号微分可以 在编译时就计算梯度的数学表示,并进一步利用符号计算方法进行优化.此外,符号计算的一个优点是符号计算 和平台无关,可以在CPU或GPU 上运行 符号微分也有一些不足之处:1. 编译时间较长 ,特别是对于循环,需要很长时间进行编译;2. 为了进行符号微分,一般 需要设计一种专门的语言来表示数学表达式 ,并且要对变量(符号)进行预先声明;3. 很难对程序进行调试. |
自动微分 | 符号微分的处理对象是 数学表达式 ,而自动微分的处理对象是 一个函数或一段程序 | 两种模式:前向&反向 |
优化问题
神经网络的参数学习比线性模型要更加困难,主要原因有两点:1. 非凸优化问题和2. 梯度消失问题.
梯度消失问题
在神经网络中误差反向传播的迭代公式为
δ
(
l
)
=
f
l
′
(
z
(
l
)
)
⋅
(
W
(
l
+
1
)
)
T
δ
(
l
+
1
)
\delta^{(l)} = f_l'(z^{(l)}) \cdot (W^{(l+1) })^T\delta^{(l+1)}
δ(l)=fl′(z(l))⋅(W(l+1))Tδ(l+1)
误差从输出层反向传播时,在每一层都要乘以该层的激活函数的导数.
反向传播->梯度下降法 当导数->0是,优化问题无法继续
在深度神经网络中,减轻梯度消失问题的方法有很多种.一种简单有效的方式是使用导数比较大的激活函数,比如ReLU等.