多层感知机 MLP · 深度学习 02
关键字: 深度学习 多层感知机 MLP 参数学习 PyTorch
多层感知机在 softmax 回归的输入层和输出层(softmax 层)之间引入了隐藏层,隐藏层的输出是输入的线性组合的一个非线性映射。
隐藏层
多层感知机(Multi-layer Perceptron)在单层神经网络的基础上引入了一到多个隐藏层(hidden layer)。隐藏层位于输入层和输出层之间。下图展示了一个多层感知机的神经网络图, 它含有一个隐藏层,该层中有 5 个隐藏单元。多层感知机中的隐藏层和输出层都是全连接层。

矢量计算表达式
在不考虑激活函数的前提下,设输入样本 $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)。下面给出了三个典型的激活函数。
\begin{aligned} &\textrm{ReLU}(x) = \max (x, 0) \\ &\textrm{sigmoid} (x) = \frac{1}{1 + \exp (-x)} \\ &\textrm{tanh} (x) = \frac{1 - \exp (-2x)}{1 + \exp (-2x)} \end{aligned}
多层感知机
多层感知机就是含有至少一个隐藏层的由全连接层组成的神经网络,且每个隐藏层的输出通过激活函数进行变换。多层感知机的层数和各隐藏层中隐藏单元的个数都是超参数。以单隐藏层为例, $$ 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 国际许可协议 进行许可, 转载时请注明原文链接。您必须给出适当的署名,并标明是否对本文作了修改。
您也可以通过下方按钮直接分享本页面:
还没有评论...