1.简介
神经网络可以看成是含有多个变换层的感知机模型,变换层会把上一层的输出当成输入,经过一番内部护理后把输出传给下一层。
一般而言,神经网络算法包含以下三部分
- 将输入经过多层变换层后得到输出
- 将输出与真值比较得到损失函数梯度
- 利用梯度更新模型各参数
2.前向传导算法
即将激活值从前向后传导,对于层 L i L_i Li,接收输入值为 u i = v i − 1 × w i − 1 + b i − 1 u^i=v^{i-1}\times w^{i-1}+b^{i-1} ui=vi−1×wi−1+bi−1,经过激活函数后输出 v i = ϕ ( u i ) v^i=\phi{(u^i)} vi=ϕ(ui)
3.常见激活函数
3.1逻辑函数sigmoid
ϕ
(
x
)
=
1
1
+
e
−
x
\phi(x)=\frac{1}{1+e^{-x}}
ϕ(x)=1+e−x1
3.2正切函数
ϕ
(
x
)
=
t
a
n
h
(
x
)
=
1
−
e
−
2
x
1
+
e
−
2
x
\phi(x)=tanh(x)=\frac{1-e^{-2x}}{1+e^{-2x}}
ϕ(x)=tanh(x)=1+e−2x1−e−2x
3.3线性整流函数(Rectified Linear Unit,ReLU)
ϕ
(
x
)
=
m
a
x
(
0
,
x
)
\phi(x)=max(0,x)
ϕ(x)=max(0,x)
3.4ELU函数(Exponential Linear Unit)
ϕ
(
x
)
=
{
x
,
x
≥
0
a
(
e
x
−
1
)
,
x
<
0
\phi(x)=\left\{ \begin{aligned} x, \; x\ge 0\\ a(e^x-1),x<0 \end{aligned} \right.
ϕ(x)={x,x≥0a(ex−1),x<0
3.5Softplus函数
ϕ
(
x
)
=
l
n
(
1
+
e
x
)
\phi(x)=ln(1+e^x)
ϕ(x)=ln(1+ex)
3.6恒同映射(Identity)
ϕ
(
x
)
=
x
\phi(x)=x
ϕ(x)=x
3.7softmax映射
ϕ
(
x
)
=
e
x
i
∑
e
x
i
\phi(x)=\frac{e^{x_i}}{\sum e^{x_i}}
ϕ(x)=∑exiexi
4.常用损失函数
4.1距离损失函数
L
(
y
,
G
(
x
)
)
=
[
y
−
G
(
x
)
]
2
L(y,G(x))=[y-G(x)]^2
L(y,G(x))=[y−G(x)]2
即最小平方误差准则MSE
4.2交叉熵损失函数
该损失函数要求G(x)取值在(0,1)之间
L
(
y
,
G
(
x
)
)
=
−
[
y
l
n
G
(
x
)
+
(
1
−
y
)
l
n
(
1
−
G
(
x
)
)
]
L(y,G(x))=-[ylnG(x)+(1-y)ln(1-G(x))]
L(y,G(x))=−[ylnG(x)+(1−y)ln(1−G(x))]
4.3log-likelihood损失函数
要求G(x)是一个概率向量,一般与softmax激活函数共同使用,可以认为是交叉熵的一种特殊形式
y
p
=
{
1
,
p
=
k
0
,
p
!
=
k
y_p=\left\{ \begin{aligned} 1,p=k\\ 0,p!=k \end{aligned} \right.
yp={1,p=k0,p!=k
即
L
(
y
,
G
(
x
)
)
=
−
l
n
v
k
L(y,G(x))=-lnv_k
L(y,G(x))=−lnvk
5.反向传播算法(BP算法,Backpropagation)
反向传播即将梯度一路往后(靠近输入层)传播,通过损失函数确定,梯度下降方法更新权重
梯度:
δ
(
i
)
=
δ
L
(
x
)
δ
u
(
i
)
\delta^{(i)}=\frac{\delta L(x)}{\delta u^{(i)}}
δ(i)=δu(i)δL(x)
若为最后一层:
δ
(
m
)
=
δ
L
(
y
,
v
(
m
)
)
v
(
m
)
∗
ϕ
′
(
u
(
m
)
)
\delta^{(m)}=\frac{\delta L(y,v^{(m)})}{v^{(m)}}*\phi'(u^{(m)})
δ(m)=v(m)δL(y,v(m))∗ϕ′(u(m))
否则反向传导:
δ
(
i
)
=
δ
(
i
+
1
)
×
w
(
i
)
T
∗
ϕ
′
(
u
(
i
)
)
\delta^{(i)}=\delta ^{(i+1)}\times w^{(i)T}*\phi'(u^{(i)})
δ(i)=δ(i+1)×w(i)T∗ϕ′(u(i))
因此更新梯度:
w
p
q
(
i
−
1
)
=
w
(
i
−
1
)
−
η
δ
i
v
(
i
−
1
)
w^{(i-1)}_{pq}=w^{(i-1)}-\eta\delta^{i}v^{(i-1)}
wpq(i−1)=w(i−1)−ηδiv(i−1)
6.损失函数的选择
为避免梯度爆炸/梯度消失的问题,使得梯度下降尽量平稳,对于损失函数与激活函数的组合需要注意
6.1sigmoid系以外+距离损失函数MSE
然而,MSE往往不能很好地解决问题
6.2 sigmoid+cross entropy交叉熵
6.3softmax+cross entopy/log-likelihood
softmax更像是进行标准化的一个函数
v
n
(
m
)
=
e
u
n
m
∑
n
e
u
n
m
v_n^{(m)}=\frac{e^{u_n^m}}{\sum_n{e^{u^m_n}}}
vn(m)=∑neunmeunm
7.常见优化算法
7.1 Vanilla Update
即梯度下降法的普通形式,通常以MBGD(mini batch)小批量梯度下降法形式出现
△
∗
w
t
=
△
w
t
\triangle^*w_t = \triangle w_t
△∗wt=△wt
7.2 Momentum Update
△
∗
w
t
=
△
w
t
−
ρ
η
v
(
t
−
1
)
\triangle^*w_t = \triangle w_t-\frac{\rho}{\eta}v_{(t-1)}
△∗wt=△wt−ηρv(t−1)
ρ视为惯性,逐步增大到0.99,即可以认为逐步减小当前方向的下降速度
7.3 Nesterov Momentum Update
可以认为是momentum方法的改进,其使用当前速度作为更新值
v
t
=
ρ
v
t
−
1
−
η
△
w
t
v_t=\rho v_{t-1}-\eta \triangle w_t
vt=ρvt−1−η△wt
△
w
t
=
w
t
−
1
+
ρ
v
t
−
η
△
w
t
\triangle w_t=w_{t-1}+\rho v_t-\eta \triangle w_t
△wt=wt−1+ρvt−η△wt
7.4 RMSProp
通过调整学习速率进行优化
中间变量
▽
2
=
ρ
▽
2
+
(
1
−
ρ
)
△
2
w
t
\bigtriangledown^2=\rho \bigtriangledown^2+(1-\rho)\triangle^2 w_t
▽2=ρ▽2+(1−ρ)△2wt
衰减系数
ρ
\rho
ρ反映较早的梯度对当前梯度的影响,ρ越小影响越小
更新值
△
w
t
=
△
w
t
▽
+
ϵ
\triangle w_t=\frac{\triangle w_t}{\bigtriangledown+\epsilon}
△wt=▽+ϵ△wt
7.5Adam
同时更新方向以及学习速率:
△
=
β
1
△
+
(
1
−
β
1
)
△
w
t
\triangle = \beta_1 \triangle+(1-\beta_1)\triangle w_t
△=β1△+(1−β1)△wt
▽
2
=
β
2
▽
2
+
(
1
−
β
2
)
△
2
w
t
\bigtriangledown^2=\beta_2\bigtriangledown^2+(1-\beta_2)\triangle^2w_t
▽2=β2▽2+(1−β2)△2wt
△
w
t
=
△
▽
+
ϵ
\triangle w_t=\frac{\triangle}{\bigtriangledown+\epsilon}
△wt=▽+ϵ△
8.分批(Batch)思想
8.1分批思想
- 每个batch放入k个数据
- 分成k个batch