来源:深度之眼
学习资源推荐
- 吴恩达的深度学习课程: https://www.deeplearning.ai
- 李宏毅的深度学习课程: https://www.bilibili.com 搜索李宏毅
- 《deep learning》俗称花书: https://github.com/exacity/deeplearningbook-chinese
- 周志华的《机器学习》俗称西瓜书
Overview
一、神经网络与多层感知机
1. 基础知识
人工神经元(Artificial Neural Unit):人工神经元中抽象出来的数学模型。
-
1904年研究出人类神经元;
其中,树突可以看作Input,细胞核可以看作Operator,突触可以看作Output。 -
1943年心理学家W. S. McCulloch和数理逻辑学家W. Pitts研究 出人工神经元,称为M-P模型;
f ( ∑ i = 1 n I i W i ) = y f(\sum_{i=1}^{n} I_{i} W_{i}) = y f(i=1∑nIiWi)=y
激活函数有两个结果,0或1,代表了未激活或激活。
人工神经网络:大量神经元以某种连接方式构成的机器学习模型。
第一个神经网络:1958年,计算机学家Rosenblatt提出Perceptron(感知机)
o
=
σ
(
<
w
,
x
>
+
b
)
o = \sigma (<w,x> + b)
o=σ(<w,x>+b)
σ
(
x
)
=
σ
(
x
)
=
{
1
if
x
>
0
0
otherwise
.
\sigma(x) = \sigma(x)=\{\begin{array}{cc} 1 & \text { if } x>0 \\ 0 & \text { otherwise } \end{array}.
σ(x)=σ(x)={10 if x>0 otherwise .
这也是第一波神经网络的热潮,但感知机的致命缺点在于:Minsky在1969年证明Perceptron无法解决异或问题。
根源在于,二维神经网络是一条直线。
0
=
σ
(
x
0
w
0
+
x
1
w
1
+
b
)
0
=
x
0
w
0
+
x
1
w
1
+
b
x
1
w
1
=
0
−
x
0
w
0
−
b
x
1
=
−
w
0
w
1
x
0
−
b
w
1
y
=
k
x
+
b
\begin{array}{r} 0 &= &\sigma(x_{0}w_{0}+x_{1} w_{1}+b) \\ 0 &= & x_{0}w_{0}+x_{1} w_{1}+b \\ x_{1} w_{1}&= &0 - x_{0}w_{0} -b \\ x_{1} &= & -\frac{w_{0}}{w_{1}} x_{0} - \frac{b}{w_{1}} \\ y &= & kx+b \end{array}
00x1w1x1y=====σ(x0w0+x1w1+b)x0w0+x1w1+b0−x0w0−b−w1w0x0−w1bkx+b
2. 多层感知机(Multi Layer Perceptron, MLP)
单层神经网络基础上引入一个或多个隐藏层,使神经网络有多个网络层,因而得名。
W
4
×
5
W
5
×
3
W_{4 \times 5} W_{5 \times 3 }
W4×5W5×3
W
4
×
5
W
5
×
3
W
3
×
2
W
2
×
2
W_{4 \times 5} W_{5 \times 3 } W_{3 \times 2 } W_{2 \times 2 }
W4×5W5×3W3×2W2×2
多次感知机的前向传播
KaTeX parse error: Unknown column alignment: \sigma at position 16: \begin{array} \̲s̲i̲g̲m̲a̲(X_{1 \times 4}…
无激活函数,网络退化为单层网络:
H
=
X
W
h
+
b
h
O
=
H
W
o
+
b
o
O
=
(
X
W
h
+
b
h
)
W
o
+
b
o
=
X
W
h
W
o
+
b
h
W
o
+
b
c
\begin{aligned} \boldsymbol{H} &=\boldsymbol{X} \boldsymbol{W}_{h}+\boldsymbol{b}_{h} \\ \boldsymbol{O} &=\boldsymbol{H} \boldsymbol{W}_{o}+\boldsymbol{b}_{o} \\ \boldsymbol{O} &=\left(\boldsymbol{X} \boldsymbol{W}_{h}+\boldsymbol{b}_{h}\right) \boldsymbol{W}_{o}+\boldsymbol{b}_{o}=\boldsymbol{X} \boldsymbol{W}_{h} \boldsymbol{W}_{o}+\boldsymbol{b}_{h} \boldsymbol{W}_{o}+\boldsymbol{b}_{c} \end{aligned}
HOO=XWh+bh=HWo+bo=(XWh+bh)Wo+bo=XWhWo+bhWo+bc
隐藏层加入激活函数,可避免网络退化:
h
=
σ
(
W
1
x
+
b
1
)
0
=
w
2
T
h
+
b
2
\begin{array}{l} \mathbf{h}=\sigma\left(\mathbf{W}_{1} \mathbf{x}+\mathbf{b}_{1}\right) \\ \mathbf{0}=\mathbf{w}_{2}^{T} \mathbf{h}+b_{2} \end{array}
h=σ(W1x+b1)0=w2Th+b2
3. 激活函数
作用:
- 让多层感知机成为真正的多层,否则等价于一层;
- 引入非线性,使网络可以逼近任意非线性函数(万能逼近定理,universal approximator)
激活函数需要具备以下几点性质:
- 连续并可导(允许少数点上不可导),便于利用数值优化的方法来学习网络参数
- 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率
- 激活函数的导函数的值域要在合适区间内,不能太大也不能太小,否则会影响训练的效率和稳定性
常见激活函数:Sigmoid(S型) , Tanh(双曲正切), ReLU(修正线性单元)
做二分类的输出的激活函数;做循环神经网络中门控单元的激活函数。
导函数的饱和区(神经元的值差不多,梯度差不多)
同样有左右两个饱和区,不利于梯度传播。
不存在饱和区,常常使用。
4. 反向传播(Back Propagation)
前向传播:输入层数据从前向后,数据逐步传递至输出层
反向传播:损失函数开始从后向前,梯度逐步传递至一层
反向传播作用:用于权重更新,使网络输出更接近标签
损失函数:衡量模型输出与真实标签的差异,KaTeX parse error: Expected group after '^' at position 14: Loss = f(y^{^̲},y)
反向传播原理:微积分中的链式求导法则 y = f ( u ) , u = g ( x ) ∂ y ∂ x = ∂ y ∂ u ∂ u ∂ x y=f(u), u=g(x) \quad \frac{\partial y}{\partial x}=\frac{\partial y}{\partial u} \frac{\partial u}{\partial x} y=f(u),u=g(x)∂x∂y=∂u∂y∂x∂u
网络计算图
前向传播的计算:
z
=
x
⋅
W
(
1
)
h
=
ϕ
(
z
)
O
=
h
⋅
W
(
2
)
\begin{array}{l} z=x \cdot W^{(1)} \\ h=\phi(z) \\ O=h \cdot W^{(2)} \end{array}
z=x⋅W(1)h=ϕ(z)O=h⋅W(2)
反向传播计算:
计算符定义:
p
r
o
d
(
x
,
y
)
prod(x,y)
prod(x,y),表示x与y根据形状做必要的交换,然后相乘
∂ L ∂ w ( 1 ) = prod ( ∂ L ∂ O , ∂ O ∂ W [ 2 ) ) = ∂ L ∂ O ⋅ h ⊤ ∂ L ∂ h = prod ( ∂ L ∂ O , ∂ O ∂ h ) = W ( 2 ) T ⋅ ∂ L ∂ O ∂ L ∂ z = prod ( ∂ L ∂ O , ∂ O ∂ h , ∂ h ∂ Z ) = ∂ L ∂ h ⊙ ϕ ′ ( Z ) ∂ L ∂ W ( 1 ) = prod ( ∂ L ∂ O , ∂ O ∂ h , ∂ h ∂ Z , ∂ Z ∂ W ( 1 ) ) = ∂ L ∂ Z ⋅ χ ⊤ \begin{array}{l} \frac{\partial L}{\partial w^{(1)}}=\operatorname{prod}\left(\frac{\partial L}{\partial O}, \frac{\partial O}{\left.\partial W^{[2}\right)}\right)=\frac{\partial L}{\partial O} \cdot h^{\top}\\ \frac{\partial L}{\partial h}=\operatorname{prod}\left(\frac{\partial L}{\partial O}, \frac{\partial O}{\partial h}\right)=W^{(2) T} \cdot \frac{\partial L}{\partial O}\\ \frac{\partial L}{\partial z}=\operatorname{prod}\left(\frac{\partial L}{\partial O}, \frac{\partial O}{\partial h}, \frac{\partial h}{\partial Z}\right)=\frac{\partial L}{\partial h} \odot \phi^{\prime}(Z)\\ \frac{\partial L}{\left.\partial W^{(1}\right)}=\operatorname{prod}\left(\frac{\partial L}{\partial O}, \frac{\partial O}{\partial h}, \frac{\partial h}{\partial Z}, \frac{\partial Z}{\partial W^{(1)}}\right)=\frac{\partial L}{\partial Z} \cdot \chi^{\top} \end{array} ∂w(1)∂L=prod(∂O∂L,∂W[2)∂O)=∂O∂L⋅h⊤∂h∂L=prod(∂O∂L,∂h∂O)=W(2)T⋅∂O∂L∂z∂L=prod(∂O∂L,∂h∂O,∂Z∂h)=∂h∂L⊙ϕ′(Z)∂W(1)∂L=prod(∂O∂L,∂h∂O,∂Z∂h,∂W(1)∂Z)=∂Z∂L⋅χ⊤
后一项的梯度可以用于前一项的梯度上。从Loss出发有多少条通路,梯度就有多少项,进行相加。上图所示,只有一条通路。
梯度下降法(Gradient Decent):权值沿梯度负方向更新,使函数值减小
导数:函数在指定坐标轴上的变化率
∂
y
∂
x
\frac{\partial y}{\partial x}
∂x∂y
方向导数:指定方向上的变化率(在多维空间)
梯度:一个向量,方向为方向导数取得最大值的方向
学习率(Learning Rate):控制更新步长
沿梯度负方向更新:
w
i
+
1
=
w
i
\quad \boldsymbol{w}_{i+1}=\boldsymbol{w}_{i}
wi+1=wi
g
(
w
i
)
y
=
f
(
x
)
=
4
∗
x
2
y
′
=
f
′
(
x
)
=
8
∗
x
x
0
=
2
,
y
0
=
16
,
f
′
(
x
0
)
=
16
x
1
=
x
0
−
f
′
(
x
0
)
=
2
−
16
=
−
14
x
1
=
−
14
,
y
1
=
784
,
f
′
(
x
1
)
=
−
112
x
2
=
x
1
−
f
′
(
x
1
)
=
−
14
+
112
=
98
,
y
2
=
38416
0
\begin{array}{l} \boldsymbol{g}\left(\boldsymbol{w}_{i}\right)\\ y=f(x)=4 * x^{2}\\ y^{\prime}=f^{\prime}(x)=8 * x\\ x_{0}=2, \quad y_{0}=16, f^{\prime}\left(x_{0}\right)=16\\ x_{1}=x_{0}-f^{\prime}\left(x_{0}\right)=2-16=-14\\ x_{1}=-14, \quad y_{1}=784, f^{\prime}\left(x_{1}\right)=-112\\ x_{2}=x_{1}-f^{\prime}\left(x_{1}\right)=-14+112=98, \quad y_{2}=38416\\ \begin{array}{l} 0 \end{array} \end{array}
g(wi)y=f(x)=4∗x2y′=f′(x)=8∗xx0=2,y0=16,f′(x0)=16x1=x0−f′(x0)=2−16=−14x1=−14,y1=784,f′(x1)=−112x2=x1−f′(x1)=−14+112=98,y2=384160
无学习率:
w
i
+
1
=
w
i
−
g
(
w
i
)
\boldsymbol{w}_{\boldsymbol{i}+\mathbf{1}}=\boldsymbol{w}_{\boldsymbol{i}}-\boldsymbol{g}\left(\boldsymbol{w}_{\boldsymbol{i}}\right)
wi+1=wi−g(wi)
有学习率:
w
i
+
1
=
w
i
−
L
R
∘
g
(
w
i
)
\text { 有学习率: } \boldsymbol{w}_{\boldsymbol{i}+\mathbf{1}}=\boldsymbol{w}_{\boldsymbol{i}}-\mathrm{LR}^{\circ} \boldsymbol{g}\left(\boldsymbol{w}_{\boldsymbol{i}}\right)
有学习率: wi+1=wi−LR∘g(wi)
学习率通常小于1。
5. 损失函数(Loss Function)
损失函数:衡量模型输出与真实的标签之间的差距
损失函数(Loss Function):描述的单样本的差异值
Loss
=
f
(
y
^
,
y
)
\text { Loss }=f\left(\hat{y}, y\right)
Loss =f(y^,y)
代价函数 (Cost Function):描述的是总体样样本\整个数据集的Loss的平均值
Cost
=
1
N
∑
i
N
f
(
y
i
^
,
y
i
)
\operatorname{Cost}=\frac{1}{N} \sum_{i}^{N} f\left(\hat{y_{i}}, y_{i}\right)
Cost=N1i∑Nf(yi^,yi)
目标函数(Objective Function):模型输出与标签之间的差异+正则项控制模型复杂度防止过拟合现象
Obj= Cost + Regularization Term
两种常见损失函数
- MSE (均方误差, Mean Squared Error):输出与标签之差的平方的均值,常在回归任务中使用。计算公式: M S E = ∑ i = 1 n ( y i − y i p ) 2 n M S E=\frac{\sum_{i=1}^{n}\left(y_{i}-y_{i}^{p}\right)^{2}}{n} MSE=n∑i=1n(yi−yip)2
例: label = ( 1 , 2 ) pred = ( 1.5 , 1.5 ) MSE = [ ( 1 − 1.5 ) 2 + ( 2 − 1.5 ) 2 ] 2 = 0.25 \begin{array}{l} \text { 例: label }=(1,2) \text { pred }=(1.5,1.5) \\ \text { MSE }=\frac{\left[(1-1.5)^{2}+(2-1.5)^{2}\right]}{2}=0.25 \end{array} 例: label =(1,2) pred =(1.5,1.5) MSE =2[(1−1.5)2+(2−1.5)2]=0.25
2.CE(Cross Entropy,交叉嫡) :交叉嫡源自信息论,用于衡量两个分布的差异,常在分类任务中使用。计算公式:
H
(
p
,
q
)
=
−
∑
i
=
1
n
p
(
x
i
)
log
q
(
x
i
)
H(p, q)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log q\left(x_{i}\right)
H(p,q)=−i=1∑np(xi)logq(xi)
p是指真是分布,q是模型的分布,试图用q去逼近p。分布之间的距离是没有对应关系的。
信息熵:描述信息的不确定度,信息熵越大信息越不确定,信息熵越小
自信息:
I
(
x
)
=
−
log
P
(
x
)
,
p
(
x
)
\mathrm{I}(\mathrm{x})=-\log \mathrm{P}(\mathrm{x}), \mathrm{p}(\mathrm{x})
I(x)=−logP(x),p(x) 是某事件发生的概率
信息熵 = 所有可能取值的信息量的期望,即
H
(
x
)
=
E
x
−
p
[
I
(
x
)
]
=
−
E
[
log
P
(
x
)
]
=
−
∑
i
=
1
N
p
i
log
(
p
i
)
H(\mathrm{x})=E_{x-p}[I(x)]=-E[\log P(x)]=-\sum_{i=1}^{N} p_{i} \log \left(p_{i}\right)
H(x)=Ex−p[I(x)]=−E[logP(x)]=−∑i=1Npilog(pi)
相对熵:又称K-L散度,衡量两个分布之间的差异。公式如下:
D
K
L
(
P
∥
Q
)
=
E
x
∼
p
[
log
P
(
x
)
Q
(
x
)
]
=
E
x
−
p
[
log
P
(
x
)
−
log
Q
(
x
)
]
=
∑
i
=
1
N
P
(
x
i
)
(
log
P
(
x
i
)
−
log
Q
(
x
i
)
)
\begin{aligned} D_{K L}(P \| Q)=E_{x \sim p}\left[\log \frac{P(x)}{Q(x)}\right] &=E_{x-p}[\log P(x)-\log Q(x)] \\ &=\sum_{i=1}^{N} \mathrm{P}\left(\mathrm{x}_{i}\right)\left(\log P\left(\mathrm{x}_{i}\right)-\log \mathrm{Q}\left(\mathrm{x}_{i}\right)\right) \end{aligned}
DKL(P∥Q)=Ex∼p[logQ(x)P(x)]=Ex−p[logP(x)−logQ(x)]=i=1∑NP(xi)(logP(xi)−logQ(xi))
交叉熵:
H
(
p
,
q
)
=
−
∑
i
=
1
n
p
(
x
i
)
log
q
(
x
i
)
H(p, q)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log q\left(x_{i}\right)
H(p,q)=−i=1∑np(xi)logq(xi)
信息熵:
H
(
x
)
=
E
x
−
p
[
I
(
x
)
]
=
−
E
[
log
P
(
x
)
]
=
−
∑
i
=
1
N
p
i
log
(
p
i
)
H(\mathrm{x})=E_{x-p}[I(x)]=-E[\log P(x)]=-\sum_{i=1}^{N} p_{i} \log \left(p_{i}\right)
H(x)=Ex−p[I(x)]=−E[logP(x)]=−i=1∑Npilog(pi)
H
(
p
,
q
)
=
H
(
P
)
+
D
−
K
L
(
P
∥
Q
)
H(p, q)=H(P)+D_{-} K L(P \| Q)
H(p,q)=H(P)+D−KL(P∥Q)
即 交叉熵 = 信息熵 + 相对熵
结论:优化交叉熵等价于优化相对熵。
举例:
H
(
p
,
q
)
=
−
∑
i
=
1
n
p
(
x
i
)
log
q
(
x
i
)
H(p, q)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log q\left(x_{i}\right)
H(p,q)=−i=1∑np(xi)logq(xi)
los
s
=
−
(
0
⋆
log
(
0.05
)
+
0
⋆
log
(
0.1
)
+
1
⋆
log
(
0.7
)
+
0
⋆
log
(
0.15
)
)
=
0.36
\operatorname{los} s=-\left(0^{\star} \log (0.05)+0^{\star} \log (0.1)+1^{\star} \log (0.7)+0^{\star} \log (0.15)\right)=0.36
loss=−(0⋆log(0.05)+0⋆log(0.1)+1⋆log(0.7)+0⋆log(0.15))=0.36
概率有两个性质:
- 概率值是非负的
- 概率之和等于1
交叉熵的好伙伴——Softmax函数:将数据变换到符合概率分布的形式
Softmax函数:将数据变换到符合概率分布的形式
y
i
=
S
(
z
)
i
=
e
z
i
∑
j
=
1
C
e
z
j
,
i
=
1
,
…
,
C
y_{i}=S(\boldsymbol{z})_{i}=\frac{e^{z_{i}}}{\sum_{j=1}^{C} e^{z_{j}}}, i=1, \ldots, C
yi=S(z)i=∑j=1Cezjezi,i=1,…,C
概率两性质:
\quad
Softmax操作:
- 概率值是非负的 \quad 1. 取指数,实现非负
- 概率之和等于1
\quad
2. 除以指数之和,实现之和为1 1
没有一个适合所有任务的损失函数,损失函数设计会涉及算法类型、求导是否容易、数据中异常值的分布等问题。
更多损失函数可到PyTorch网站:https://pytorch.org/docs/stable/nn.html#loss-functions
函数解读: https://zhuanlan.zhihu.com/p/61379965
6. 权值初始化(Initialization)
权值初始化:训练前对权值参数赋值,良好的权值初始化有利于模型训练
简便但错误的方法:初始化为全0——使网络层退化,多少个神经元都等于一个神经元,没有训练的意义
随机初始化法:高斯分布随机初始化,从高斯分布中随机采样,对权重进行赋值,比如 N~(0,0.01)
3σ准则:数值分布在(μ-3σ,μ+3σ)中的概率为99.73%
自适应标准差:自适应方法随机分布中的标准差
• Xavier初始化:《Understanding the difficulty of training deep feedforward neural networks 》2010
U
(
−
6
a
+
b
,
6
a
+
b
)
U\left(-\sqrt{\frac{6}{a+b}}, \sqrt{\frac{6}{a+b}}\right)
U(−a+b6,a+b6)
a是输入神经元的个数,b是输出神经元的个数
KaTeX parse error: Expected 'EOF', got '\right' at position 57: …{\frac{6}{a+b}}\̲r̲i̲g̲h̲t̲)
A
+
B
2
=
mean
=
0
\frac{A+B}{2}=\text { mean }=0
2A+B= mean =0
std
=
(
B
−
A
)
2
12
\operatorname{std}=\sqrt{\frac{(\mathrm{B}-\mathrm{A})^{2}}{12}}
std=12(B−A)2
• Kaiming初始化/MSRA:《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》2015
7. 正则化方法(Regularization)
Regularization:减小方差的策略,通俗理解为减轻过拟合的策略
误差可分解为:偏差,方差与噪声之和。即误差 = 偏差 + 方差 + 噪声之和
偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力
方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响
噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界
过拟合现象:方差过大;在训练集表现良好,在测试集表现糟糕;“线下操作猛如虎,线上提交二百五”
损失函数(Loss Function):描述的单样本的差异值
Loss
=
f
(
y
^
,
y
)
\text { Loss }=f\left(\hat{y}, y\right)
Loss =f(y^,y)
代价函数 (Cost Function):描述的是总体样样本\整个数据集的Loss的平均值
Cost
=
1
N
∑
i
N
f
(
y
i
^
,
y
i
)
\operatorname{Cost}=\frac{1}{N} \sum_{i}^{N} f\left(\hat{y_{i}}, y_{i}\right)
Cost=N1i∑Nf(yi^,yi)
目标函数(Objective Function):模型输出与标签之间的差异+正则项(约束)控制模型复杂度防止过拟合现象
Obj= Cost + Regularization Term
L1 Regularization Term:
∑
i
N
∣
w
i
∣
\quad \sum_{i}^{N}\left|w_{i}\right|
∑iN∣wi∣
L2 Regularization Term:
∑
i
N
w
i
2
\quad \sum_{i}^{N} w_{i}^{2}
∑iNwi2
理论证明:参考深度学习 第七章
L2 Regularization: weight decay (权值衰减)
目标函数(Objective Function):
O
b
j
=
t
e
x
t
C
o
s
t
+
Regularization Term
O
b
j
=
L
o
s
s
+
λ
2
∗
∑
i
N
w
i
2
\begin{array}{l} \boldsymbol{O b} \boldsymbol{j}=text { Cost } +\text { Regularization Term } \\ \boldsymbol{O} \boldsymbol{b} \boldsymbol{j}=\boldsymbol{L} \boldsymbol{o} \boldsymbol{s} \boldsymbol{s}+\frac{\lambda}{2} * \sum_{i}^{N} \boldsymbol{w}_{i}^{2} \end{array}
Obj=textCost+ Regularization Term Obj=Loss+2λ∗∑iNwi2
无正则项:
w
i
+
1
=
w
i
−
∂
o
b
j
∂
w
i
=
w
i
−
∂
L
o
s
s
∂
w
i
\quad w_{i+1}=w_{i}-\frac{\partial o b j}{\partial w_{i}}=w_{i}-\frac{\partial L o s s}{\partial w_{i}}
wi+1=wi−∂wi∂obj=wi−∂wi∂Loss
有正则项:
w
i
+
1
=
w
i
−
∂
o
b
j
∂
w
i
=
w
i
−
(
∂
L
o
s
s
∂
w
i
+
λ
∗
w
i
)
w_{i+1}=w_{i}-\frac{\partial o b j}{\partial w_{i}}=w_{i}-\left(\frac{\partial L o s s}{\partial w_{i}}+\lambda^{*} w_{i}\right)
wi+1=wi−∂wi∂obj=wi−(∂wi∂Loss+λ∗wi)
=
w
i
(
1
−
λ
)
−
∂
L
o
s
s
∂
w
i
=w_{i}(1-\lambda)-\frac{\partial L o s s}{\partial w_{i}}
=wi(1−λ)−∂wi∂Loss
0
<
λ
<
1
0 < \lambda < 1
0<λ<1实现了权值的衰减
Dropout:随机失活
优点:避免过度依赖某个神经元,实现减轻过拟合
随机:dropout probability (eg:p=0.5)
失活:weight = 0
注意事项:训练和测试两个阶段的数据尺度变化
测试时,神经元输出值需要乘以P(概率:一定概率丢失神经元)
KaTeX parse error: No such environment: arrray at position 8: \begin{̲a̲r̲r̲r̲a̲y̲}̲ \sum_{i = 1}^{…
《Dropout: A simple way to prevent neural networks from overfitting》
其他正则化方法:BN, LN, IN, GN.
• Batch normalization: 《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》
• Layer Normalization: 《Layer Normalization》
• Instance Normalization: 《Instance Normalization: The Missing Ingredient for Fast Stylization》
• Group Normalization:《Group Normalization》
二、卷积神经网络
1.卷积神经网络发展史
卷积神经网络(convolutional neural networks, CNN )
CNN 是针对图像领域任务提出的神经网络,经历数代人的发展,在2012年之后大部分图像任务被CNN统治,例如图像分类,图像分割,目标检测,图像检索等。
CNN结构受视觉系统启发:1962 年,生物学家Torsten WieseI 和 David H. Hubel(1981年的诺贝尔医学奖)对猫的视觉系统进行研究,首次发现猫的视觉系统中存在层级机构,并且发现了两种重要的细胞 simple cells 和 compIex cel।s,不同类型细胞承担不同抽象层次的视觉感知功能。
猫的视觉系统实验
- 在猫脑上打开 3mm, 插入电极
- 让猫看各种形状、位置、亮度和运动的光条
- 观察大脑视觉神经元激活情况
-
神经元存在局部感受区域 ( receptive field),也称感受野
细胞感受区域存在差异:如C细胞和D细胞相反
-
细胞对角度有选择性。如图所示的该细胞对垂直光条响应最强。
-
细胞对运动方向有选择性
对CNN启发: -
视觉系统是分层、分级的进行处理,从低级到高级的抽象过程 → \to → 堆叠使用卷积和池化
-
神经元实际上是存在局部的感受区域的,具体来说,它们是局部敏感 → \to → 神经元局部连接
第一个卷积神经网络雏形——新认知机(Neocognitron)
1980 年,日本学者福岛邦彦厂(Kunihiko Fukushima) 借鉴猫视觉系统实验结论,提出具有层级结构的神经网络一一新认知机,堆叠使用类似于S细胞和C细胞的两个结构。
S细胞和 C 细胞可类比现代CNN的卷积和池化
缺点: 没有反向传播算法更新权值,模型性能有限。
福岛邦彦主页 :http://personalpage.flsi.or.jp/fukushima/index-e.h
第一个大规模商用卷积神经网络——Lenet-5
1989 年,Lecun 等人已开始研究Lenet;1998 年,Lecun等人提出Lenet-5,并成功在美国邮政系统中大规模应用于手写邮政编码识别
缺点:无大量数据和高性能计算资源
第一个技惊四座的卷积神经网络——AlexNet
2012年,AlexNet以超出第二名10.9个百分点的成绩夺得ILSVRC分类任务冠军,从此拉开卷积神经网络通知图像领域序幕。
成功要素:
- 算料:ImageNet
- 算力:GPU
- 算法:AlexNet
2.卷积操作
卷积层(Convolutional Layer)
图像识别特点:
-
特征具有局部性:老虎重要特征“王字”仅出现在头部区域 —— 卷积核每次仅连接KK区域,KK是卷积核尺寸;
-
特征可能出现在任何位置——卷积核参数重复使用(参数共享),在图像上滑动;
-
下采样图像,不会改变图像目标
卷积核:具可学习参数的算子,用于对输入图像进行特征提取,输出通常称为特征图(feature maps)。
2012年AlexNet网络第一个卷积层卷积核可视化
卷积核呈现边缘、频率和色彩上的特征模式
填充 (Padding):在输入图像的周围添加额外的行/列
作用:
- 使卷积后图像分辨率不变,方便计算特征图尺寸的变化
- 弥补边界信息“丢失"
步幅(Stride) :卷积核滑动的⾏数和列数称为步幅,控制输出特征图的大小,会被缩小1/s倍。
卷积会向下取整,到边界不满足信息的话,会向下取整。
输出特征图尺寸计算:
F o = [ F in − k + 2 p s ] + 1 F_{o}=\left[\frac{F_{\text {in }}-k+2 p}{s}\right]+1 Fo=[sFin −k+2p]+1
多通道卷积 : RGB图像是3hw的三维的数据,第一个维度3,表示channel,通道数
一个卷积核是3-D张量,第一个维与输入通道有关
注:卷积核尺寸通常指高、宽
3.池化操作
图像识别特点
• 下采样图像,不会改变图像目标——降低计算量,减少特征冗余
池化:一个像素表示一块区域的像素值,降低图像分辨率
一块区域像素如何被一个像素代替:
方法1: Max Pooling,取最大值
方法2: Average Pooling,取平均值
输出尺寸计算与卷积操作类似:
F
o
=
⌊
F
in
−
k
+
2
p
s
⌋
+
1
F_{o}=\left\lfloor\frac{F_{\text {in }}-k+2 p}{s}\right\rfloor+1
Fo=⌊sFin −k+2p⌋+1
注意:池化层无可学习参数
池化作用 :
- 缓解卷积层对位置的过度敏感:与C细胞功能类似
- 减少冗余
- 降低图像分辨率,从而减少参数量
4.Lanet-5及CNN结构进化史
1998-Lecun-Gradient-Based Learning Applied to Document Recognition
C1层: 卷积核K1=(6, 1, 5, 5), p=1, s=1,output=(6, 28, 28)
S2层: 最大池化层, 池化窗口=(2,2),s=2,output=(6, 14, 14)
C3层: 卷积核K3=(16, 6, 5, 5), p=1, s=1,output=(16, 10, 10)
S4层: 最大池化层, 池化窗口=(2,2),s=2,output=(16, 5, 5)
FC层: 3个FC层输出分类
特征提取器:C1、S2、C3、S4
分类器:3个FC层
CNN进化史
- 1980 Neocognition 福岛邦彦
- 1998 Lenet-5 Lecun
- 2012 AlexNet Alex
- 2014 GoogLenet Google
- 2014 VGG-Net VGG
- 2015 ResNet Kaiming He
- 2017 DenseNet Gao Huang
- 2017 SE-Net Jie Hu
三、循环神经网络
1. 序列数据(Sequence Data)
序列数据是常见的数据类型,前后数据通常具有关联性
例如句子 “Cats average 15 hours of sleep a day”
2. 语言模型(Language Model)
语言模型是自然语言处理 (NLP, Natural Language Processing) 重要技术
NLP中常把文本看为离散时间序列,一段长度为T的文本的词依次为
w
1
,
w
2
,
…
,
w
T
\mathrm{w}_{1}, \mathrm{w}_{2}, \ldots, \mathrm{w}_{\mathrm{T}}
w1,w2,…,wT,其中
w
t
(
1
≤
t
≤
T
)
\mathrm{w}_{\mathrm{t}}(1 \leq \mathrm{t} \leq \mathrm{T})
wt(1≤t≤T) 是时间步 ( Time Step)
t
\mathrm{t}
t 的输出或标签
语言模型将会计算该序列概率 P ( w 1 , w 2 , … , w T ) \mathrm{P}\left(\mathrm{w}_{1}, \mathrm{w}_{2}, \ldots, \mathrm{w}_{\mathrm{T}}\right) P(w1,w2,…,wT)
Cats average 15 hours of sleep a day
这句话中 T = 8.
语言模型计算序列概率:
P
(
w
1
,
w
2
,
…
,
w
T
)
=
∏
t
=
1
T
P
(
w
t
∣
w
1
,
…
,
w
t
−
1
)
P\left(w_{1}, w_{2}, \ldots, w_{T}\right)=\prod_{t=1}^{T} P\left(w_{t} \mid w_{1}, \ldots, w_{t-1}\right)
P(w1,w2,…,wT)=t=1∏TP(wt∣w1,…,wt−1)
P( 我, 在, 听, 课 ) = P(我) * P(在|我)* P( 听|我 ,在)* P(课 | 我 ,在,听)
统计语料库(Corpus)中的词频,得到以上概率,最终得到P(我, 在, 听, 课)
缺点: 时间步t的词需要考虑t -1步的词,其计算量随t呈指数增长。
3. RNN-循环神经网络(Recurrent neural network)
R
N
N
\mathrm{RNN}
RNN 是针对序列数据而生的神经网络结构,核心在于循环使用网络层参数,避免时间步增大带来的参数激增,并引入**隐藏状态(Hidden State)**用于记录历史信息,有效处理数据的前后关联性。
**隐藏状态(Hidden State)**用于记录历史信息,有效处理数据的前后关联性,激活函数采用Tanh,将输出值域限制在(-1,1),防止数值呈指数级变化。
RNN构建语言模型,实现文本生成。假设文本序列:“想”,“要”,“有”,“直”,“升”,“机”。
RNN特性:
- 循环神经网络的隐藏状态可以捕捉截至当前时间步的序列的历史信息;
- 循环神经网络模型参数的数量不随实践部的增加而增长。
RNN的通过(穿越)时间反向传播(backpropagation through time)
有几条通路,就几项相加。
∂
L
∂
W
q
h
=
∑
t
=
1
T
prod
(
∂
L
∂
o
t
,
∂
o
t
∂
W
q
h
)
=
∑
t
=
1
T
∂
L
∂
o
t
h
t
⊤
\frac{\partial L}{\partial \boldsymbol{W}_{q h}}=\sum_{t=1}^{T} \operatorname{prod}\left(\frac{\partial L}{\partial \boldsymbol{o}_{t}}, \frac{\partial \boldsymbol{o}_{t}}{\partial \boldsymbol{W}_{q h}}\right)=\sum_{t=1}^{T} \frac{\partial L}{\partial \boldsymbol{o}_{t}} \boldsymbol{h}_{t}^{\top}
∂Wqh∂L=t=1∑Tprod(∂ot∂L,∂Wqh∂ot)=t=1∑T∂ot∂Lht⊤
∂
L
∂
h
T
=
prod
(
∂
L
∂
o
T
,
∂
o
T
∂
h
T
)
=
W
q
h
⊤
∂
L
∂
o
T
\frac{\partial L}{\partial \boldsymbol{h}_{T}}=\operatorname{prod}\left(\frac{\partial L}{\partial \boldsymbol{o}_{T}}, \frac{\partial \boldsymbol{o}_{T}}{\partial \boldsymbol{h}_{T}}\right)=\boldsymbol{W}_{q h}^{\top} \frac{\partial L}{\partial \boldsymbol{o}_{T}}
∂hT∂L=prod(∂oT∂L,∂hT∂oT)=Wqh⊤∂oT∂L
∂
L
∂
h
t
=
prod
(
∂
L
∂
h
t
+
1
,
∂
h
t
+
1
∂
h
t
)
+
prod
(
∂
L
∂
o
t
,
∂
o
t
∂
h
t
)
=
W
h
h
⊤
∂
L
∂
h
t
+
1
+
W
q
h
⊤
∂
L
∂
o
t
\begin{aligned} \frac{\partial L}{\partial \boldsymbol{h}_{t}} &=\operatorname{prod}\left(\frac{\partial L}{\partial \boldsymbol{h}_{t+1}}, \frac{\partial \boldsymbol{h}_{t+1}}{\partial \boldsymbol{h}_{t}}\right)+\operatorname{prod}\left(\frac{\partial L}{\partial \boldsymbol{o}_{t}}, \frac{\partial \boldsymbol{o}_{t}}{\partial \boldsymbol{h}_{t}}\right) \\ &=\boldsymbol{W}_{h h}^{\top} \frac{\partial L}{\partial \boldsymbol{h}_{t+1}}+\boldsymbol{W}_{q h}^{\top} \frac{\partial L}{\partial \boldsymbol{o}_{t}} \end{aligned}
∂ht∂L=prod(∂ht+1∂L,∂ht∂ht+1)+prod(∂ot∂L,∂ht∂ot)=Whh⊤∂ht+1∂L+Wqh⊤∂ot∂L
举例,比如T是3,则t指2。
∂
L
∂
h
t
1
=
∑
i
=
t
T
(
W
h
h
⊤
)
T
−
i
W
q
h
⊤
∂
L
∂
o
T
+
t
−
i
\frac{\partial L}{\partial \boldsymbol{h}_{t1}}=\sum_{i=t}^{T}\left(\boldsymbol{W}_{h h}^{\top}\right)^{T-i} \boldsymbol{W}_{q h}^{\top} \frac{\partial L}{\partial \boldsymbol{o}_{T+t-i}}
∂ht1∂L=i=t∑T(Whh⊤)T−iWqh⊤∂oT+t−i∂L
其实是三项之和。
∂
L
∂
W
h
x
=
∑
t
=
1
T
prod
(
∂
L
∂
h
t
,
∂
h
t
∂
W
h
x
)
=
∑
t
=
1
T
∂
L
∂
h
t
x
t
⊤
∂
L
∂
W
h
h
=
∑
t
=
1
T
prod
(
∂
L
∂
h
t
,
∂
h
t
∂
W
h
h
)
=
∑
t
=
1
T
∂
L
∂
h
t
h
t
−
1
⊤
\begin{array}{l} \frac{\partial L}{\partial \boldsymbol{W}_{h x}}=\sum_{t=1}^{T} \operatorname{prod}\left(\frac{\partial L}{\partial \boldsymbol{h}_{t}}, \frac{\partial \boldsymbol{h}_{t}}{\partial \boldsymbol{W}_{h x}}\right)=\sum_{t=1}^{T} \frac{\partial L}{\partial \boldsymbol{h}_{t}} \boldsymbol{x}_{t}^{\top} \\ \frac{\partial L}{\partial \boldsymbol{W}_{h h}}=\sum_{t=1}^{T} \operatorname{prod}\left(\frac{\partial L}{\partial \boldsymbol{h}_{t}}, \frac{\partial \boldsymbol{h}_{t}}{\partial \boldsymbol{W}_{h h}}\right)=\sum_{t=1}^{T} \frac{\partial L}{\partial \boldsymbol{h}_{t}} \boldsymbol{h}_{t-1}^{\top} \end{array}
∂Whx∂L=∑t=1Tprod(∂ht∂L,∂Whx∂ht)=∑t=1T∂ht∂Lxt⊤∂Whh∂L=∑t=1Tprod(∂ht∂L,∂Whh∂ht)=∑t=1T∂ht∂Lht−1⊤
梯度随时间t呈指数变化,易引发梯度消失或梯度爆炸。
4. GRU-门控循环单元(Gated Recurrent Unit)
引入门的循环网络
缓解RNN梯度消失带来的问题,引入门概念,来控制信息流动,使模型更好的记住长远时期的信息,并缓解梯度消失
重置门:哪些信息需要遗忘
更新门:哪些信息需要注意
激活函数为:Sigmoid,值域为(0, 1),0表示遗忘,1表示保留。
侯选隐藏状态
输入与上一时间步隐藏状态共同计算得到候选隐藏状态,用于隐藏状态计算。通过重置门,对上一时间步隐藏状态进行选择性遗忘, 对历史信息更好的选择。
GRU:
H
~
t
=
tanh
(
X
t
W
x
h
+
(
R
t
⊙
H
t
−
1
)
W
h
h
+
b
h
)
\tilde{\boldsymbol{H}}_{t}=\tanh \left(\boldsymbol{X}_{t} \boldsymbol{W}_{x h}+\left(\boldsymbol{R}_{t} \odot \boldsymbol{H}_{t-1}\right) \boldsymbol{W}_{h h}+\boldsymbol{b}_{h}\right)
H~t=tanh(XtWxh+(Rt⊙Ht−1)Whh+bh)
RNN:
H
t
=
ϕ
(
X
t
W
x
h
+
H
t
−
1
W
h
h
+
b
h
)
\boldsymbol{H}_{t}=\phi\left(\boldsymbol{X}_{t} \boldsymbol{W}_{x h}+\boldsymbol{H}_{t-1} \boldsymbol{W}_{h h}+\boldsymbol{b}_{h}\right)
Ht=ϕ(XtWxh+Ht−1Whh+bh)
隐藏状态
隐藏状态由候选隐藏状态及上一时间步隐藏状态组合得来
H
t
=
Z
t
⊙
H
t
−
1
+
(
1
−
Z
t
)
⊙
H
~
t
\boldsymbol{H}_{t}=\boldsymbol{Z}_{t} \odot \boldsymbol{H}_{t-1} +\left(1-\boldsymbol{Z}_{t}\right) \odot \tilde{\boldsymbol{H}}_{t}
Ht=Zt⊙Ht−1+(1−Zt)⊙H~t
GRU一一引入门控机制的循环网络
GRU特点:
门机制采用Sigmoid激活函数,使门值为
(
0
,
1
)
(0,1)
(0,1) ,0表示遗忘, 1表示保留。
若更新门自第一个时间步到
t
−
1
\mathrm{t}-1
t−1 时间过程中,一直保持为1 , 信息可有效传递到当前时间步。
H
t
=
Z
t
⊙
H
t
−
1
+
(
1
−
Z
t
)
⊙
H
~
t
\boldsymbol{H}_{t}=\boldsymbol{Z}_{t} \odot \boldsymbol{H}_{t-1}+\left(1-\boldsymbol{Z}_{t}\right) \odot \tilde{\boldsymbol{H}}_{t}
Ht=Zt⊙Ht−1+(1−Zt)⊙H~t
重置门:哪些信息需要遗忘
更新门:哪些信息需要注意
重置门:用于遗忘上一时间步隐藏状态
H
~
t
=
tanh
(
X
t
W
x
h
+
(
R
t
⊙
H
t
−
1
)
W
h
h
+
b
h
)
\tilde{\boldsymbol{H}}_{t}=\tanh \left(\boldsymbol{X}_{t} \boldsymbol{W}_{x h}+\left(\boldsymbol{R}_{t} \odot \boldsymbol{H}_{t-1}\right) \boldsymbol{W}_{h h}+\boldsymbol{b}_{h}\right)
H~t=tanh(XtWxh+(Rt⊙Ht−1)Whh+bh)
更新门: 用于更新当前时间步隐藏状态
H
t
=
Z
t
⊙
H
t
−
1
+
(
1
−
Z
t
)
⊙
H
~
t
\boldsymbol{H}_{t}=\boldsymbol{Z}_{t} \odot \boldsymbol{H}_{t-1}+\left(1-\boldsymbol{Z}_{t}\right) \odot \tilde{\boldsymbol{H}}_{t}
Ht=Zt⊙Ht−1+(1−Zt)⊙H~t
5. LSTM-长短期记忆网络(Long Short-term Memory)
LSTM
引入 3 个门和记忆细胞,控制信息传递
遗忘门:哪些信息需要遗忘
输入门:哪些信息需要流入当前记忆细胞
输出门:哪些记忆信息流入隐藏状态
记忆细胞: 特殊的隐藏状态,记忆历史信息
候选记忆细胞
记忆细胞:可理解为特殊隐藏状态,储存历史时刻信息
C
~
t
=
tanh
(
X
t
W
x
c
+
H
t
−
1
W
h
c
+
b
c
)
\tilde{\boldsymbol{C}}_{t}=\tanh \left(\boldsymbol{X}_{t} \boldsymbol{W}_{x c}+\boldsymbol{H}_{t-1} \boldsymbol{W}_{h c}+\boldsymbol{b}_{c}\right)
C~t=tanh(XtWxc+Ht−1Whc+bc)
记忆细胞与隐藏状态
记忆细胞由候选记忆细胞及上一时间步记忆细胞组合得来
C
t
=
F
t
⊙
C
t
−
1
+
I
t
⊙
C
t
~
\boldsymbol{C}_{t}=\boldsymbol{F}_{t} \odot \boldsymbol{C}_{t-1}+\boldsymbol{I}_{t} \odot \widetilde{\boldsymbol{C}_{t}}
Ct=Ft⊙Ct−1+It⊙Ct
由输出门控制记忆细胞信息流入隐藏状态
H
t
=
O
t
⊙
tanh
(
C
t
)
\boldsymbol{H}_{t}=\boldsymbol{O}_{t} \odot \tanh \left(\boldsymbol{C}_{t}\right)
Ht=Ot⊙tanh(Ct)
C ~ t = tanh ( X t W x c + H t − 1 W h c + b c ) C t = F t ⊙ C t − 1 + I t ⊙ C ~ t H t = O t ⊙ tanh ( C t ) \begin{aligned} \tilde{\boldsymbol{C}}_{t} &=\tanh \left(\boldsymbol{X}_{t} \boldsymbol{W}_{x c}+\boldsymbol{H}_{t-1} \boldsymbol{W}_{h c}+\boldsymbol{b}_{c}\right) \\ \boldsymbol{C}_{t} &=\boldsymbol{F}_{t} \odot \boldsymbol{C}_{t-1}+\boldsymbol{I}_{t} \odot \tilde{\boldsymbol{C}}_{t} \\ \boldsymbol{H}_{t} &=\boldsymbol{O}_{t} \odot \tanh \left(\boldsymbol{C}_{t}\right) \end{aligned} C~tCtHt=tanh(XtWxc+Ht−1Whc+bc)=Ft⊙Ct−1+It⊙C~t=Ot⊙tanh(Ct)