优快云这几天坏了ヽ(`Д´)ノ︵ ┻━┻ ┻━┻
##一. 神经元模型
神经网络中最基本的成分:神经元模型
神经元模型: 线性模型+激活函数
线性模型+符号函数 = 感知机
线性模型+sigmoid函数 = 逻辑回归
##二 . 多层前馈神经网络
定义: 每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。
假设第
l
−
1
l−1
l−1层共有
m
m
m个神经元,第
l
l
l层共有
n
n
n个神经元,
则第
l
l
l层的线性系数
W
W
W组成了一个
n
×
m
n×m
n×m的矩阵
W
l
W^l
Wl,
第
l
l
l层的偏置
b
b
b组成了一个
n
×
1
n×1
n×1的向量
b
l
b^l
bl ,
第
l
−
1
l−1
l−1层的的输出
a
a
a组成了一个
m
×
1
m×1
m×1的向量
a
l
−
1
a^{l−1}
al−1,
第
l
l
l层的的未激活前线性输出
Z
Z
Z组成了一个
n
×
1
n×1
n×1的向量
Z
l
Z^l
Zl,
激活函数
σ
\sigma
σ 可以有多种选择。
sigmoid tanh ReLu
第
l
l
l层的的输出
a
a
a组成了一个
n
×
1
n×1
n×1的向量
a
l
a^l
al。则用矩阵法表示,
第
l
l
l层的输出为:
a
l
=
σ
(
Z
l
)
=
σ
(
W
l
a
l
−
1
+
b
l
)
a^l=\sigma (Z^l) = \sigma(W^la^{l-1}+b^l)
al=σ(Zl)=σ(Wlal−1+bl)
前向传播算法:
从输入层开始,一层层的向后计算,一直到运算到输出层,得到输出结果
a
L
a^L
aL。
##三. 反向传播算法(BackPropagation)
训练数据集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
(
x
m
,
y
m
)
}
D=\{(x_1,y_1),(x_2,y_2),..(x_m,y_m)\}
D={(x1,y1),(x2,y2),..(xm,ym)}
损失函数最小化, 神经网络可选的损失函数有很多: 平方损失函数,交叉熵 , 对数似然。
待求参数是每一个层与层之间的权值矩阵
w
l
w^l
wl和偏置矩阵
b
l
b^l
bl。
这里以平方损失函数为例。
a
L
a^L
aL 是输出层的结果。
E
(
W
,
b
,
x
,
y
)
=
1
2
∥
a
L
−
y
∥
2
2
E(W,b,x,y) = \frac{1}{2}\|a^L-y\|^2_{2}
E(W,b,x,y)=21∥aL−y∥22
=
1
2
∥
σ
(
W
L
a
L
−
1
+
b
L
)
−
y
∥
2
2
=\frac{1}{2}\|\sigma(W^La^{L-1}+b^L)-y\|^2_{2}
=21∥σ(WLaL−1+bL)−y∥22
求导
∂
E
∂
W
L
=
∂
E
∂
a
L
∂
a
L
∂
Z
L
∂
Z
L
∂
W
L
=
(
a
L
−
y
)
⊙
σ
′
(
Z
L
)
(
a
L
−
1
)
T
\frac{\partial E}{\partial W^L}= \frac{\partial E}{\partial a^L} \frac{\partial a^L}{\partial Z^L}\frac{\partial Z^L}{\partial W^L}=(a^L-y) \odot \sigma^{'}(Z^L)(a^{L-1})^T
∂WL∂E=∂aL∂E∂ZL∂aL∂WL∂ZL=(aL−y)⊙σ′(ZL)(aL−1)T
∂
E
∂
b
L
=
∂
E
∂
a
L
∂
a
L
∂
Z
L
∂
Z
L
∂
b
L
=
(
a
L
−
y
)
⊙
σ
′
(
Z
L
)
\frac{\partial E}{\partial b^L}= \frac{\partial E}{\partial a^L} \frac{\partial a^L}{\partial Z^L}\frac{\partial Z^L}{\partial b^L}=(a^L-y) \odot \sigma^{'}(Z^L)
∂bL∂E=∂aL∂E∂ZL∂aL∂bL∂ZL=(aL−y)⊙σ′(ZL)
其中$\odot
表
示
H
a
d
a
m
a
r
d
积
,
矩
阵
的
对
应
元
素
相
乘
。
<
f
o
n
t
c
o
l
o
r
=
r
e
d
>
权
值
矩
阵
先
影
响
到
输
出
层
神
经
元
的
输
入
表示Hadamard积,矩阵的对应元素相乘。 <font color =red>权值矩阵先影响到输出层神经元的输入
表示Hadamard积,矩阵的对应元素相乘。<fontcolor=red>权值矩阵先影响到输出层神经元的输入ZL$,再影响到输出层神经元的输出$aL
,
然
后
影
响
到
损
失
函
数
,然后影响到损失函数
,然后影响到损失函数E$。
由此我们算出了输出层的梯度,那如何计算下一层,下下一层的梯度呢?
反向传播:从输出层开始,一层一层往下计算
∂
E
∂
W
L
−
1
=
∂
E
∂
Z
L
∂
Z
L
∂
Z
L
−
1
∂
Z
L
−
1
∂
W
L
−
1
\frac{\partial E}{\partial W^{L-1}}= \frac{\partial E}{\partial Z^L} \frac{\partial Z^{L}}{\partial Z^{L-1}}\frac{\partial Z^{L-1}}{\partial W^{L-1}}
∂WL−1∂E=∂ZL∂E∂ZL−1∂ZL∂WL−1∂ZL−1
第一项就是上面
L
L
L层梯度链式法则中前两项的乘积
第二项 很容易算
Z
L
=
W
L
a
L
−
1
+
b
L
=
W
L
σ
(
Z
L
−
1
)
+
b
L
Z^L=W^La^{L-1}+b^L=W^L\sigma(Z^{L-1})+b^L
ZL=WLaL−1+bL=WLσ(ZL−1)+bL
第三项 很容易算
Z
L
−
1
=
W
L
−
1
a
L
−
2
+
b
L
−
1
Z^{L-1}=W^{L-1}a^{L-2}+b^{L-1}
ZL−1=WL−1aL−2+bL−1
由此算出了
L
−
1
L-1
L−1层的梯度,如此递推
L
−
2
L-2
L−2层
∂
E
∂
W
L
−
2
=
∂
E
∂
Z
L
−
1
∂
Z
L
−
1
∂
Z
L
−
2
∂
Z
L
−
2
∂
W
L
−
2
\frac{\partial E}{\partial W^{L-2}}= \frac{\partial E}{\partial Z^{L-1}} \frac{\partial Z^{L-1}}{\partial Z^{L-2}}\frac{\partial Z^{L-2}}{\partial W^{L-2}}
∂WL−2∂E=∂ZL−1∂E∂ZL−2∂ZL−1∂WL−2∂ZL−2
第一项 是上面的
L
−
1
L-1
L−1层梯度链式法则前两项的乘积
第二项 第三项 同上 很好算
根据梯度下降算法(SGD, MBGD)就能学出神经网络了。(╯°O°)╯( ┻━┻再掀一次