一、概述
前面所介绍的线性回归和Softmax回归都是单层神经网络。而深度学习主要关注多层网络模型。所以以多层感知机(multilayer perceptron, 简称MLP)为例,介绍多层神经网络的概念。
二、隐藏层
多层感知机在单层神经网络的基础上引入了若干层的隐藏层(hidden layer),其位于输入和输出之间。
多层感知机的输出
O
∈
R
n
×
q
\boldsymbol O \in R^{n×q}
O∈Rn×q为:
H
=
X
W
h
+
b
h
O
=
H
W
o
+
b
o
\boldsymbol {H=XW_h+b_h} \\ \boldsymbol {O=HW_o+b_o}
H=XWh+bhO=HWo+bo
其中
n
n
n为批量大小,
q
q
q为输出个数。
如果将上述两个式子联立起来,可以得到
O
=
(
X
W
h
+
b
h
)
W
o
+
b
o
=
X
W
h
W
o
+
b
h
W
O
+
b
o
\boldsymbol {O=(XW_h+b_h)W_o+b_o=XW_hW_o+b_hW_O+b_o}
O=(XWh+bh)Wo+bo=XWhWo+bhWO+bo
可以看出,虽然引入了隐藏层,但是依然等价于一个单层神经网络:输出层权重参数为 W h W o \boldsymbol {W_hW_o} WhWo,偏差参数为 b h W o + b o \boldsymbol {b_hW_o+b_o} bhWo+bo。所以即使增加再多的隐藏层,本质上还是一个单层神经网络。于是有了下面的激活函数。
三、激活函数
上述问题的根源在于:全连接层只是对数据做线性变换。解决这个问题的一个方法是引入非线性变换。这个非线性函数被称为激活函数。下面介绍几种常用的激活函数:
1. ReLU函数
ReLU函数的形式非常简单。给定元素
x
x
x,
R
e
L
U
(
x
)
=
m
a
x
(
x
,
0
)
ReLU(x)=max(x,0)
ReLU(x)=max(x,0)
其函数图像和导数图像如下:
2. Sigmoid函数
Sigmoid函数可以将元素的值变换到(0, 1)之间:
s
i
g
m
o
i
d
(
x
)
=
1
1
+
e
(
−
x
)
sigmoid(x)=\frac {1}{1+e^{(-x)}}
sigmoid(x)=1+e(−x)1
其函数图像和导数图像如下:
3. Tanh函数
Tanh函数可以将元素的值变换到(-1, 1)之间:
t
a
n
h
(
x
)
=
1
−
e
(
−
2
x
)
1
+
e
(
−
2
x
)
tanh(x)=\frac {1-e^{(-2x)}}{1+e^{(-2x)}}
tanh(x)=1+e(−2x)1−e(−2x)
其函数图像和导数图像如下:
四、多层感知机
多层感知机是含有至少一个隐藏层的有全连接层组成的神经网络,且每个隐藏层的输出通过激活函数进行变换。多层感知机的层数
和各隐藏层中隐藏单元个数
都是超参数。其输出设计如下:
H
=
ϕ
(
X
W
h
+
b
h
)
O
=
H
W
o
+
b
o
\boldsymbol {H=}\phi(\boldsymbol{XW_h+b_h}) \\ \boldsymbol {O=HW_o + b_o}
H=ϕ(XWh+bh)O=HWo+bo
其中 ϕ \phi ϕ表示激活函数。
- 在回归问题中,可以将输出层输出个数设为1,并将输出 O \boldsymbol O O直接提供给平方损失函数
- 在分类问题中,可以对输出 O \boldsymbol O O做softmax运算,并使用交叉熵损失函数