@[TOC]全连接神经网络(MLP)
1 深度学习概述
深度学习是机器学习领域中的一个新的研究方向,模仿生人类神经网络,学习样本数据的内在规律的一种方法,可以处理回归、分类等问题。深度学习主要框架:Pytorch、Tensorflow、Mindspore等。
2 单个神经元
已知一个样本
(
x
,
y
)
(x,y)
(x,y) ,其中样本的维度
x
∈
R
n
x\in \mathbb{R}^{n}
x∈Rn。每个神经元由线性变换
z
=
w
T
x
+
b
z=w^{T}x+b
z=wTx+b和非线性变换
σ
(
z
)
\sigma (z)
σ(z)组成,如图所示。
当一个样本
x
=
(
x
(
1
)
x
(
2
)
⋮
x
(
n
)
)
x=\begin{pmatrix} x^{(1)}\\ x^{(2)}\\ \vdots \\ x^{(n)}\\ \end{pmatrix}
x=
x(1)x(2)⋮x(n)
输入一个神经元时,首先对该样本进行线性变换,即
z
=
w
T
x
+
b
=
w
1
x
(
1
)
+
w
2
x
(
2
)
+
⋯
+
w
n
x
(
n
)
+
b
z=w^{T}x+b=w_{1}x^{(1)}+w_{2}x^{(2)}+\cdots +w_{n}x^{(n)}+b
z=wTx+b=w1x(1)+w2x(2)+⋯+wnx(n)+b,其中
w
=
(
w
(
1
)
w
(
2
)
⋮
w
(
n
)
)
w=\begin{pmatrix} w^{(1)}\\ w^{(2)}\\ \vdots \\ w^{(n)}\\ \end{pmatrix}
w=
w(1)w(2)⋮w(n)
为权重向量,
b
b
b为偏置标量;然后进行非线性变换,即
y
^
=
σ
(
z
)
\hat{y}=\sigma (z)
y^=σ(z),其中
σ
\sigma
σ为激活函数。激活函数主要包括sigmoid、tanh、Relu等,如图所示。
(1)
S
i
g
m
o
i
d
(
z
)
=
1
1
+
e
−
z
Sigmoid(z)=\frac{1}{1+e^{-z}}
Sigmoid(z)=1+e−z1
(2)
T
a
n
h
(
z
)
=
e
z
−
e
−
z
e
z
+
e
−
z
Tanh(z)=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}}
Tanh(z)=ez+e−zez−e−z
(3)
R
e
l
u
(
z
)
=
{
m
a
x
(
0
,
z
)
,
z
≥
0
0
,
z
<
0
Relu(z)=\left\{\begin{matrix} max(0,z),z\geq 0\\ 0,z< 0 \\ \end{matrix}\right.
Relu(z)={max(0,z),z≥00,z<0
3 全连接神经网络
3.1 回归任务
全连接神经网络由输入层、隐藏层和输出层组成。N层神经网络=隐藏层总数+输出层,例如2层神经网络=1个隐藏层+1个输出层。用全连接神经网络实现回归问题,结构如图:
假设一个样本
x
1
×
n
x_{1\times n}
x1×n作为输入层,经过隐藏层和输出层,得到预测结果
y
^
\hat{y}
y^,用矩阵表示:
(1)隐藏层:
z
1
×
5
=
σ
(
x
1
×
n
W
n
×
5
(
1
)
+
b
1
×
5
(
1
)
)
z_{1\times 5}=\sigma (x_{1\times n}W^{(1)}_{n\times 5}+b^{(1)}_{1\times 5})
z1×5=σ(x1×nWn×5(1)+b1×5(1))
(2)输出层:
y
^
1
×
1
=
σ
(
z
1
×
5
W
5
×
1
(
2
)
+
b
1
×
1
(
2
)
)
\hat{y}_{1\times 1}=\sigma (z_{1\times 5}W^{(2)}_{5\times 1}+b^{(2)}_{1\times 1})
y^1×1=σ(z1×5W5×1(2)+b1×1(2))
假设batch_size个样本
x
b
×
n
x_{b\times n}
xb×n作为输入层,经过隐藏层和输出层,得到预测结果
y
^
b
×
1
\hat{y}_{b\times 1}
y^b×1,用矩阵表示:
(1)隐藏层:
z
b
×
5
=
σ
(
x
b
×
n
W
n
×
5
(
1
)
+
b
b
×
5
(
1
)
)
z_{b\times 5}=\sigma (x_{b\times n}W^{(1)}_{n\times 5}+b^{(1)}_{b\times 5})
zb×5=σ(xb×nWn×5(1)+bb×5(1))
(2)输出层:
y
^
b
×
1
=
σ
(
z
b
×
5
W
5
×
1
(
2
)
+
b
b
×
1
(
2
)
)
\hat{y}_{b\times 1}=\sigma (z_{b\times 5}W^{(2)}_{5\times 1}+b^{(2)}_{b\times 1})
y^b×1=σ(zb×5W5×1(2)+bb×1(2))
比较样本预测值
y
^
b
×
1
\hat{y}_{b\times 1}
y^b×1和真实值
y
b
×
1
y_{b\times 1}
yb×1的误差可以用平均绝对误差(Mean Absolute Error,MAE)、均方误差(Mean Square Error,MSE)和均方根误差(Root Mean Square Error,RMSE)等。
(1)
M
A
E
=
1
b
∑
i
=
1
b
∣
y
j
−
y
j
^
∣
MAE=\frac{1}{b}\sum_{i=1}^{b}\left | y_{j}-\hat{y_{j}} \right |
MAE=b1∑i=1b∣yj−yj^∣
(2)
M
S
E
=
1
b
∑
i
=
1
b
(
y
j
−
y
j
^
)
2
MSE=\frac{1}{b}\sum_{i=1}^{b}(y_{j}-\hat{y_{j}})^{2}
MSE=b1∑i=1b(yj−yj^)2
(3)
R
M
S
E
=
1
b
∑
i
=
1
b
(
y
j
−
y
j
^
)
2
RMSE=\sqrt{\frac{1}{b}\sum_{i=1}^{b}(y_{j}-\hat{y_{j}})^{2}}
RMSE=b1∑i=1b(yj−yj^)2
3.2 分类任务
当用全连接神经网络实现多分类问题,需要知道每个样本为每个类别的概率是多少,这时可以在输出层后面接入softmax函数。softmax是先对每个输出
p
j
p_{j}
pj进行
e
x
e^{x}
ex指数函数变换,然后进行归一化处理,最终输出每个类别的概率值,结构如图:
假设数据集分为3类,则输出层包括3个神经元。将一个样本
x
1
×
n
x_{1\times n}
x1×n作为输入层,经过隐藏层和输出层,得到预测分布为
p
1
p_{1}
p1,
p
2
p_{2}
p2和
p
3
p_{3}
p3,最后经过softmax层进行归一化,将该样本的预测分布变为
y
^
1
\hat{y}_{1}
y^1,
y
^
2
\hat{y}_{2}
y^2和
y
^
3
\hat{y}_{3}
y^3 。用矩阵表示:
(1)隐藏层:
z
1
×
5
=
σ
(
x
1
×
n
W
n
×
5
(
1
)
+
b
1
×
5
(
1
)
)
z_{1\times 5}=\sigma (x_{1\times n}W^{(1)}_{n\times 5}+b^{(1)}_{1\times 5})
z1×5=σ(x1×nWn×5(1)+b1×5(1))
(2)输出层:
p
1
×
3
=
σ
(
z
1
×
5
W
5
×
3
(
2
)
+
b
1
×
3
(
2
)
)
p_{1\times 3}=\sigma (z_{1\times 5}W^{(2)}_{5\times 3}+b^{(2)}_{1\times 3})
p1×3=σ(z1×5W5×3(2)+b1×3(2))
(3)softmax层:
y
^
1
×
3
=
s
o
f
t
m
a
x
(
p
1
×
3
)
\hat{y}_{1\times 3}=softmax(p_{1 \times 3})
y^1×3=softmax(p1×3)
假设batch_size个样本
x
b
×
n
x_{b\times n}
xb×n作为输入层,经过隐藏层和输出层,得到预测结果
y
^
b
×
3
\hat{y}_{b\times 3}
y^b×3,用矩阵表示:
(1)隐藏层:
z
b
×
5
=
σ
(
x
b
×
n
W
n
×
5
(
1
)
+
b
b
×
5
(
1
)
)
z_{b\times 5}=\sigma (x_{b\times n}W^{(1)}_{n\times 5}+b^{(1)}_{b\times 5})
zb×5=σ(xb×nWn×5(1)+bb×5(1))
(2)输出层:
p
b
×
3
=
σ
(
z
b
×
5
W
5
×
3
(
2
)
+
b
b
×
3
(
2
)
)
p_{b\times 3}=\sigma (z_{b\times 5}W^{(2)}_{5\times 3}+b^{(2)}_{b\times 3})
pb×3=σ(zb×5W5×3(2)+bb×3(2))
(3)softmax层:
y
^
b
×
3
=
s
o
f
t
m
a
x
(
p
b
×
3
)
\hat{y}_{b\times 3}=softmax(p_{b \times 3})
y^b×3=softmax(pb×3)
比较样本的预测分布
y
^
b
×
3
\hat{y}_{b\times 3}
y^b×3和真实分布
y
b
×
3
y_{b\times 3}
yb×3的误差可以用交叉熵度量。
例如:batch_size为4,待分类标签有3个,其中预测分布
y
^
4
×
3
=
(
0.3341
0.5851
0.0808
0.5428
0.1770
0.2803
0.2821
0.1665
0.5515
0.1966
0.4835
0.3199
)
\hat{y}_{4\times 3}=\begin{pmatrix} 0.3341& 0.5851& 0.0808\\ 0.5428& 0.1770& 0.2803\\ 0.2821& 0.1665& 0.5515\\ 0.1966& 0.4835& 0.3199 \end{pmatrix}
y^4×3=
0.33410.54280.28210.19660.58510.17700.16650.48350.08080.28030.55150.3199
,真实分布
y
4
×
3
=
(
0
1
0
1
0
0
0
0
1
0
1
0
)
y_{4\times 3}=\begin{pmatrix} 0& 1& 0\\ 1& 0& 0\\ 0& 0& 1\\ 0& 1& 0 \end{pmatrix}
y4×3=
010010010010
。因此,batch_size的损失函数Loss是batch_size的平均Loss,即
L
o
s
s
=
−
[
l
o
g
0.5851
+
l
o
g
0.5428
+
l
o
g
0.5515
+
l
o
g
0.4835
]
/
4
Loss=-[log0.5851+log0.5428+log0.5515+log0.4835]/4
Loss=−[log0.5851+log0.5428+log0.5515+log0.4835]/4。