多层感知机 MLP · 深度学习 02

Hailiang Zhao | 2021/08/24

Categories: math Tags: deep-learning optimization MLP

多层感知机在 softmax 回归的输入层和输出层(softmax 层)之间引入了隐藏层,隐藏层的输出是输入的线性组合的一个非线性映射。

隐藏层

多层感知机(Multi-layer Perceptron)在单层神经网络的基础上引入了一到多个隐藏层(hidden layer)。隐藏层位于输入层和输出层之间。下图展示了一个多层感知机的神经网络图, 它含有一个隐藏层,该层中有 5 个隐藏单元。多层感知机中的隐藏层和输出层都是全连接层。

图 1 多层感知机

矢量计算表达式

在不考虑激活函数的前提下,设输入样本 $X \in \mathbb{R}^{n \times d}$,标签个数为 $q$。对于仅包含单个隐藏层的神经网络,记隐藏层的输出为 $H \in \mathbb{R}^{n \times h}$。则 $$ H = X W_h + \vec{b}_h $$

$$ O = H W_o + \vec{b}_o, $$ 其中 $W_h \in \mathbb{R}^{d \times h}$$\vec{b}_h \in \mathbb{R}^{1 \times h}$$W_o \in \mathbb{R}^{h \times q}$$\vec{b}_o \in \mathbb{R}^{1 \times q}$ 分别为隐藏层和输出层的权重及偏置。 因此 $$ O = X W_h W_o + (\vec{b}_h W_o + \vec{b}_o), $$ 这相当于是一个权重为 $W_h W_o$,偏置为 $\vec{b}_h W_o + \vec{b}_o$ 的单层神经网络。

激活函数

全连接层只是对数据做仿射变换(affine transformation),而 多个仿射变换的复合仍然是一个仿射变换。 解决问题的一个方法是引入非线性变换,例如对隐藏变量使用按元素运算的非线性函数进行变换,然后再作为下一个全连接层的输入。这个非线性函数被称为激活函数(activation function)。下面给出了三个典型的激活函数。

$$ \textrm{ReLU}(x) = \max (x, 0) $$

$$ \textrm{sigmoid} (x) = \frac{1}{1 + \exp (-x)} $$

$$ \textrm{tanh} (x) = \frac{1 - \exp (-2x)}{1 + \exp (-2x)} $$

多层感知机

多层感知机就是含有至少一个隐藏层的由全连接层组成的神经网络,且每个隐藏层的输出通过激活函数进行变换。多层感知机的 层数 和各隐藏层中 隐藏单元的个数 都是超参数。以单隐藏层为例, $$ H = \phi (X W_h + \vec{b}_h) $$

$$ O = H W_o + \vec{b}_o. $$ 在分类问题中,我们可以对输出 $O$ 做 softmax 运算,并使用 softmax 回归中的交叉熵损失函数;在回归问题中,我们将输出层的输出个数设为 $1$,并将输出 $O$ 直接提供给线性回归中使用的平方损失函数。

最后

本文所使用的图片来自《动手学深度学习》(PyTorch 版)章节 3.8

MLP 的 PyTorch 实现见本链接

转载申请

本作品采用 知识共享署名 4.0 国际许可协议 进行许可,转载时请注明原文链接。您必须给出适当的署名,并标明是否对本文作了修改。