神经网络与深度学习——笔记1
一、线性回归及线性分类
1.多元线性回归
n元线性回归问题,即对输入
x
=
(
x
1
,
x
2
⋯
x
n
)
T
\bold{x} = {({x_1},{x_2} \cdots {x_n})^T}
x=(x1,x2⋯xn)T进行仿射变换,通过模型的输出估计真实的输出,即
y
^
=
θ
T
x
=
(
θ
1
,
θ
2
⋯
θ
n
)
(
x
1
,
x
2
⋯
x
n
)
T
+
θ
0
=
(
θ
0
,
θ
1
⋯
θ
n
)
(
1
,
x
1
⋯
x
n
)
T
\begin{aligned} \hat{y}={\theta ^{\rm{T}}}\bold{x} &= ({\theta _1},{\theta _2} \cdots {\theta _n}){({x_1},{x_2} \cdots {x_n})^T} + {\theta _0}\\ &= ({\theta _0},{\theta _1} \cdots {\theta _n}){(1,{x_1} \cdots {x_n})^T} \end{aligned}
y^=θTx=(θ1,θ2⋯θn)(x1,x2⋯xn)T+θ0=(θ0,θ1⋯θn)(1,x1⋯xn)T
在给定N组训练数据集
{
x
(
i
)
,
y
(
i
)
}
\{ {\bold{x}^{(i)}},{y^{(i)}}\}
{x(i),y(i)} 情况下,根据最小均方误差(MMSE)学习一组参数
θ
T
=
(
θ
0
,
θ
1
⋯
θ
n
)
T
{\theta ^{\rm{T}}} = {({\theta _0},{\theta _1} \cdots {\theta _n})^T}
θT=(θ0,θ1⋯θn)T使得
min
J
(
θ
)
=
min
1
2
∑
i
=
1
N
(
y
(
i
)
−
y
^
(
i
)
)
2
\min J(\theta ) =\min {1 \over 2}{\sum\limits_{i = 1}^N {({y^{(i)}} - {{\hat{y}}^{(i)}})} ^2}
minJ(θ)=min21i=1∑N(y(i)−y^(i))2
2.线性多分类(softmax回归)
对于K类的线性分类问题,输入仍为特征
x
=
(
x
1
,
x
2
⋯
x
n
)
T
\bold{x} = {({x_1},{x_2} \cdots {x_n})^T}
x=(x1,x2⋯xn)T,但与线性回归问题不同,线性分类问题的输出不是回归的具体值而是属于某个类的概率,相当于有K个线性回归网络(每个网络的输出仍为
θ
T
x
{\theta ^{\rm{T}}}\bold{x}
θTx),同时为了满足使输出符合概率的特性,需要对输出进行处理,通常采用
y
^
(
i
)
=
∑
i
=
1
K
1
∑
m
=
1
K
e
θ
m
T
x
(
i
)
[
e
θ
1
T
x
(
i
)
e
θ
2
T
x
(
i
)
⋮
e
θ
K
T
x
(
i
)
]
{\hat{\bold{y}}^{(i)} }= \sum\limits_{i = 1}^K {\frac{1}{{\sum\limits_{m = 1}^K {{e^{{\bm{\theta} _m^T}{\bold{x}^{(i)}}}}} }}} \left[ \begin{array}{l} {e^{{\bm{\theta} _1^T}{\bold{x}^{(i)}}}}\\ {e^{{\bm{\theta} _2^T}{\bold{x}^{(i)}}}}\\ \vdots \\ {e^{{\bm{\theta} _K^T}{\bold{x}^{(i)}}}} \end{array} \right]
y^(i)=i=1∑Km=1∑KeθmTx(i)1
eθ1Tx(i)eθ2Tx(i)⋮eθKTx(i)
根据最大似然估计最大化似然估计
L
(
θ
)
L(\bm{\theta} )
L(θ) 相当于最小化负对数似然
−
l
(
θ
)
=
−
log
L
(
θ
)
=
−
∑
i
=
1
N
log
(
p
(
y
(
i
)
∣
x
(
i
)
,
θ
)
)
- l(\bm{\theta}) = - \log L(\bm{\theta} ) = - \sum\limits_{i = 1}^N {\log(p({\bold{y}^{(i)}}|{\bold{x}^{(i)}},\bm{\theta} ))}
−l(θ)=−logL(θ)=−i=1∑Nlog(p(y(i)∣x(i),θ))在给定N组训练数据集
{
x
(
i
)
,
y
(
i
)
}
\{ {\bold{x}^{(i)}},{\bold{y}^{(i)}}\}
{x(i),y(i)} (其中
y
(
i
)
\bold{y}^{(i)}
y(i)为独热码,如
y
(
i
)
=
(
0
,
1
,
0
⋯
0
)
T
\bold{y}^{(i)}=(0,1,0 \cdots 0)^T
y(i)=(0,1,0⋯0)T)情况下找到
θ
=
[
θ
1
T
,
θ
2
T
⋯
θ
K
T
]
T
\bm{\theta} = {[{\bm{\theta} _1^T},{\bm{\theta}_2 ^T} \cdots {\bm{\theta}_K ^T}]^T}
θ=[θ1T,θ2T⋯θKT]T,使得
min
J
(
θ
)
=
min
−
l
(
θ
)
=
m
i
n
−
∑
i
=
1
N
log
(
p
(
y
(
i
)
∣
x
(
i
)
,
θ
)
)
=
min
∑
i
=
1
N
l
(
y
(
i
)
,
y
^
(
i
)
)
=
min
−
∑
i
=
1
N
∑
j
=
1
K
y
j
(
i
)
log
y
^
j
(
i
)
\begin{aligned} \min J(\bm{\theta })= \min - l(\bm{\theta} ) &=min - \sum\limits_{i = 1}^N {\log(p({\bold{y}^{(i)}}|{\bold{x}^{(i)}},\bm{\theta} ))}\\ &= \min \sum\limits_{i = 1}^N {l({\bold{y}^{(i)}},{\hat{\bold{y}}^{(i)}})} \\ &= \min - \sum\limits_{i = 1}^N {\sum\limits_{j = 1}^K {y_j^{(i)}} } \log{\hat{y}_j^{(i)}} \end{aligned}
minJ(θ)=min−l(θ)=min−i=1∑Nlog(p(y(i)∣x(i),θ))=mini=1∑Nl(y(i),y^(i))=min−i=1∑Nj=1∑Kyj(i)logy^j(i)其中
l
(
y
(
i
)
,
y
^
(
i
)
)
=
∑
j
=
1
K
y
j
(
i
)
log
y
^
j
(
i
)
{l({\bold{y}^{(i)}},{\hat{\bold{y}}^{(i)}})}= {\sum\limits_{j = 1}^K {y_j^{(i)}} } \log{\hat{y}_j^{(i)}}
l(y(i),y^(i))=j=1∑Kyj(i)logy^j(i)为交叉熵损失。假定第一个样本属于第2类,即
y
(
i
)
=
(
0
,
1
,
0
⋯
0
)
T
\bold{y}^{(i)}=(0,1,0 \cdots 0)^T
y(i)=(0,1,0⋯0)T,则
l
(
y
(
i
)
,
y
^
(
i
)
)
=
log
y
^
2
1
{l({\bold{y}^{(i)}},{\hat{\bold{y}}^{(i)}})=\log{\hat{y}_2^{1}}}
l(y(i),y^(i))=logy^21,其中
y
^
2
1
{\hat{y}_2^{1}}
y^21为对应输出第二类的概率。
3.SGD算法更新参数
对于
J
(
θ
)
J(\bm{\theta})
J(θ)为非线性的情况,无法通过常规的求偏导方式求得最优解;而沿着梯度方向损失函数值上升最快,所以沿着梯度相反方向损失函数减少的最快,有了方向还需要控制下降的步幅大小,即设置合适的学习率
α
\alpha
α,即
θ
k
+
1
=
θ
k
+
Δ
θ
k
=
θ
k
−
α
∇
θ
J
{\bm{\theta }_{k + 1}} = {\bm{\theta} _k} + \Delta {\bm{\theta} _k} = {\bm{\theta} _k} - \alpha {\nabla\bm{ _{\theta }}}J
θk+1=θk+Δθk=θk−α∇θJ有
J
(
θ
k
+
1
)
=
J
(
θ
k
)
−
[
∂
J
(
θ
)
∂
θ
]
T
Δ
θ
k
=
J
(
θ
k
)
−
α
[
∂
J
(
θ
)
∂
θ
]
T
∂
J
(
θ
)
∂
θ
≤
J
(
θ
k
)
J(\bm{\theta}_{k+1})=J(\bm{\theta}_{k})-{[{{\partial J(\bm{\theta} )} \over {\partial \bm{\theta} }}]^T}\Delta {\bm{\theta} _k} = J({\bm{\theta} _k}) - \alpha {[{{\partial J(\bm{\theta} )} \over {\partial \bm{\theta} }}]^T}{{\partial J(\bm{\theta} )} \over {\partial \bm{\theta}}} \le{J(\bm{\theta}_{k})}
J(θk+1)=J(θk)−[∂θ∂J(θ)]TΔθk=J(θk)−α[∂θ∂J(θ)]T∂θ∂J(θ)≤J(θk)
二、感知机
1.单神经元模型与单层感知机
单神经元模型如下图,有n个输入,输出为 y = f ( z ) = f [ ∑ i = 1 n w i x i − θ ] = f ( w T x ) y = f(z) = f\left[ {\sum\limits_{i = 1}^n {{w_i}{x_i} - \theta } } \right] = f({\bold{w}^T}\bold{x} ) y=f(z)=f[i=1∑nwixi−θ]=f(wTx)为阈值,只有当大于阈值时神经元才有相应输出,其中权值的调整量(Hebb规则) Δ w = α x y \Delta \bm{w}=\alpha\bold{x}{y} Δw=αxy
f
(
⋅
)
f( \cdot )
f(⋅)为激活函数,常用的激活函数有阶跃函数、对称性和非对称型Sigmoid函数等。非对称Sigmoid函数
f
(
x
)
=
1
1
+
e
−
β
x
f(x) = {1 \over {1 + {e^{ - \beta x}}}}
f(x)=1+e−βx1,对称Sigmoid函数
f
(
x
)
=
1
−
e
−
β
x
1
+
e
−
β
x
f(x) = {{1 - {e^{ - \beta x}}} \over {1 + {e^{ - \beta x}}}}
f(x)=1+e−βx1−e−βx,下图为
β
=
2
\beta=2
β=2时的各函数图像。
单层感知机用来解决线性分类问题,对于一个输入为二维特征的两类的线性分类问题,需要寻找一条最优的分类直线
w
T
x
=
0
{\bold{w}^T}\bold{x}=0
wTx=0(输入维数>2时为分类超平面),能够将数据准确分开。在给定样本
{
x
(
i
)
,
y
(
i
)
}
\{ {\bold{x}^{(i)}},{y^{(i)}}\}
{x(i),y(i)} 情况下寻找最优参数
w
∗
{\bold{w}^*}
w∗,使得
L
(
w
∗
)
=
min
∑
i
y
(
i
)
(
w
T
x
(
i
)
)
L({w^ * }) = \min \sum\limits_{i } {{y^{(i)}}} ({\bold{w}^T}{\bold{x}^{(i)}})
L(w∗)=mini∑y(i)(wTx(i))感知机输出为
y
(
i
)
=
s
i
g
n
(
w
T
x
(
i
)
)
{y^{(i)}} = sign({\bold{w}^T}\bold{x}^{(i)})
y(i)=sign(wTx(i)),即○所对的
y
(
i
)
=
1
y^{(i)}=1
y(i)=1,×所对的
y
(
i
)
=
−
1
y^{(i)}=-1
y(i)=−1;当分类正确时有
y
(
i
)
(
w
T
x
(
i
)
)
>
0
{{y^{(i)}}} ({\bold{w}^T}{\bold{x}^{(i)}})>0
y(i)(wTx(i))>0,分类错误时有
y
(
i
)
(
w
T
x
(
i
)
)
<
0
{{y^{(i)}}} ({\bold{w}^T}{\bold{x}^{(i)}})<0
y(i)(wTx(i))<0.
初始时刻权值随机初始化,通过将训练数据
x
(
i
)
\bold{x}^{(i)}
x(i)输入感知机利用判断错误的样本进行权值更新
w
k
+
1
=
w
k
+
α
x
(
i
)
y
(
i
)
\bold{w}_{k+1}=\bold{w}_{k}+\alpha\bold{x}^{(i)}{y}^{(i)}
wk+1=wk+αx(i)y(i),直到没有分类错误的样本点。可以看到单层感知机权值的更新规则与单神经元模型的Hebb规则一致。
2.多层感知机(MLP)
单层感知机仅能解决线性可分问题,对于线性不可分问题(如XOR问题),可在输入和输出层之间加入一层或者多层隐藏层构成多层感知机,实现对非线性函数的近似,下图所示为含一个隐藏层的的多层感知机结构。
XOR问题
x 1 x_1 x1 | x 2 x_2 x2 | y y y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
根据多层感知机结构可得第一层输出 y 1 1 = f ( w 11 1 u 1 + w 12 1 u 2 − θ 1 1 ) {y_1^1} = f({w_{11}^1}{u_1} + {w_{12}^1}{u_2} - {\theta _1^1}) y11=f(w111u1+w121u2−θ11), y 2 1 = f ( w 21 1 u 1 + w 22 1 u 2 − θ 2 1 ) {y_2^1} = f({w_{21}^1}{u_1} + {w_{22}^1}{u_2} - {\theta _2^1}) y21=f(w211u1+w221u2−θ21),第二层输出 y = f ( w 1 2 y 1 1 + w 2 2 y 2 1 − θ ) {y} = f({w_{1}^2}{y_1^1} + {w_{2}^2}{y_2^1} - {\theta }) y=f(w12y11+w22y21−θ),激活函数 f ( ⋅ ) f( \cdot ) f(⋅)为阶跃函数。
三、多层前馈网络与反向传播(BP)算法
1.多层前馈网络
如下图所示,u、y是网络的输入、输出向量,神经元用节点表示,网络由输入层、隐层和输出层节点组成,隐层可一层,也可多层(前层至后层节点通过权联接)。
2.BP算法
BP算法由正向传播和反向传播构成,正向传播是按顺序(从输⼊层到输出层)计算和存储神经⽹络中每层的结果;反向传播是将误差(样本输出与网络输出之差)按原联接通路反向计算,由梯度下降法调整各层节点的权值和阈值,使误差减小,具体实现见: SGD算法更新参数。BP算法流程图如下:
四、优化算法
1.动量法
如果把原始的 SGD 想象成一个纸团在重力作用向下滚动,由于质量小受到山壁弹力的干扰大,导致来回震荡;或者在鞍点处因为质量小速度很快减为 0,导致无法离开这块平地;动量方法相当于把纸团换成了铁球;不容易受到外力的干扰,轨迹更加稳定;同时因为在鞍点处因为惯性的作用,更有可能离开平地。
2.自适应梯度算法(AdaGrad)
具有较大偏导的参数相应有一个较大的学习率,而具有小偏导的参数则对应一个较小的学习率。每个参数的学习率会缩放各参数反比于其历史梯度平方值总和的平方根。
3.RMSProp
RMSProp使用指数衰减平均以丢弃遥远的历史,使其能够快速收敛;此外, RMSProp 还加入了超参数 𝜌 控制衰减速率。
4.Adam
Adam 在 RMSProp 方法的基础上更进一步: 除了加入历史梯度平方的指数衰减平均𝑟外,还保留了历史梯度的指数衰减平均𝑠,相当于动量。