为该网站做自适应,利用微博做网站排名,骏域网站建设专家东莞,python做视频网站多层感知机的基本知识
深度学习主要关注多层模型。在这里#xff0c;我们将以多层感知机#xff08;multilayer perceptron#xff0c;MLP#xff09;为例#xff0c;介绍多层神经网络的概念。
隐藏层
下图展示了一个多层感知机的神经网络图#xff0c;它含有一个隐藏…多层感知机的基本知识
深度学习主要关注多层模型。在这里我们将以多层感知机multilayer perceptronMLP为例介绍多层神经网络的概念。
隐藏层
下图展示了一个多层感知机的神经网络图它含有一个隐藏层该层中有5个隐藏单元。 表达公式
具体来说给定一个小批量样本 X ∈ R n × d \boldsymbol{X} \in \mathbb{R}^{n \times d} X∈Rn×d其批量大小为 n n n输入个数为 d d d。假设多层感知机只有一个隐藏层其中隐藏单元个数为 h h h。记隐藏层的输出也称为隐藏层变量或隐藏变量为 H \boldsymbol{H} H有 H ∈ R n × h \boldsymbol{H} \in \mathbb{R}^{n \times h} H∈Rn×h。因为隐藏层和输出层均是全连接层可以设隐藏层的权重参数和偏差参数分别为 W h ∈ R d × h \boldsymbol{W}_h \in \mathbb{R}^{d \times h} Wh∈Rd×h和 b h ∈ R 1 × h \boldsymbol{b}_h \in \mathbb{R}^{1 \times h} bh∈R1×h输出层的权重和偏差参数分别为 W o ∈ R h × q \boldsymbol{W}_o \in \mathbb{R}^{h \times q} Wo∈Rh×q和 b o ∈ R 1 × q \boldsymbol{b}_o \in \mathbb{R}^{1 \times q} bo∈R1×q。
我们先来看一种含单隐藏层的多层感知机的设计。其输出 O ∈ R n × q \boldsymbol{O} \in \mathbb{R}^{n \times q} O∈Rn×q的计算为 H X W h b h , O H W o b o , \begin{aligned} \boldsymbol{H} \boldsymbol{X} \boldsymbol{W}_h \boldsymbol{b}_h,\\ \boldsymbol{O} \boldsymbol{H} \boldsymbol{W}_o \boldsymbol{b}_o, \end{aligned} HOXWhbh,HWobo,
也就是将隐藏层的输出直接作为输出层的输入。如果将以上两个式子联立起来可以得到 O ( X W h b h ) W o b o X W h W o b h W o b o . \boldsymbol{O} (\boldsymbol{X} \boldsymbol{W}_h \boldsymbol{b}_h)\boldsymbol{W}_o \boldsymbol{b}_o \boldsymbol{X} \boldsymbol{W}_h\boldsymbol{W}_o \boldsymbol{b}_h \boldsymbol{W}_o \boldsymbol{b}_o. O(XWhbh)WoboXWhWobhWobo.
从联立后的式子可以看出虽然神经网络引入了隐藏层却依然等价于一个单层神经网络其中输出层权重参数为 W h W o \boldsymbol{W}_h\boldsymbol{W}_o WhWo偏差参数为 b h W o b o \boldsymbol{b}_h \boldsymbol{W}_o \boldsymbol{b}_o bhWobo。不难发现即便再添加更多的隐藏层以上设计依然只能与仅含输出层的单层神经网络等价。
激活函数
上述问题的根源在于全连接层只是对数据做仿射变换affine transformation而多个仿射变换的叠加仍然是一个仿射变换。解决问题的一个方法是引入非线性变换例如对隐藏变量使用按元素运算的非线性函数进行变换然后再作为下一个全连接层的输入。这个非线性函数被称为激活函数activation function。
下面我们介绍几个常用的激活函数
ReLU函数
ReLUrectified linear unit函数提供了一个很简单的非线性变换。给定元素 x x x该函数定义为 ReLU ( x ) max ( x , 0 ) . \text{ReLU}(x) \max(x, 0). ReLU(x)max(x,0).
可以看出ReLU函数只保留正数元素并将负数元素清零。
Sigmoid函数
sigmoid函数可以将元素的值变换到0和1之间 sigmoid ( x ) 1 1 exp ( − x ) . \text{sigmoid}(x) \frac{1}{1 \exp(-x)}. sigmoid(x)1exp(−x)1. 依据链式法则sigmoid函数的导数 sigmoid ′ ( x ) sigmoid ( x ) ( 1 − sigmoid ( x ) ) . \text{sigmoid}(x) \text{sigmoid}(x)\left(1-\text{sigmoid}(x)\right). sigmoid′(x)sigmoid(x)(1−sigmoid(x)).
当输入为0时sigmoid函数的导数达到最大值0.25当输入越偏离0时sigmoid函数的导数越接近0
tanh函数
tanh双曲正切函数可以将元素的值变换到-1和1之间 tanh ( x ) 1 − exp ( − 2 x ) 1 exp ( − 2 x ) . \text{tanh}(x) \frac{1 - \exp(-2x)}{1 \exp(-2x)}. tanh(x)1exp(−2x)1−exp(−2x).
当输入接近0时tanh函数接近线性变换。虽然该函数的形状和sigmoid函数的形状很像但tanh函数在坐标系的原点上对称。
关于激活函数的选择
ReLu函数是一个通用的激活函数目前在大多数情况下使用。但是ReLU函数只能在隐藏层中使用。
用于分类器时sigmoid函数及其组合通常效果更好。由于梯度消失问题有时要避免使用sigmoid和tanh函数。
在神经网络层数较多的时候最好使用ReLu函数ReLu函数比较简单计算量少而sigmoid和tanh函数计算量大很多。
在选择激活函数的时候可以先选用ReLu函数如果效果不理想可以尝试其他激活函数。
多层感知机
多层感知机就是含有至少一个隐藏层的由全连接层组成的神经网络且每个隐藏层的输出通过激活函数进行变换。多层感知机的层数和各隐藏层中隐藏单元个数都是超参数。以单隐藏层为例并沿用本节之前定义的符号多层感知机按以下方式计算输出 H ϕ ( X W h b h ) , O H W o b o , \begin{aligned} \boldsymbol{H} \phi(\boldsymbol{X} \boldsymbol{W}_h \boldsymbol{b}_h),\\ \boldsymbol{O} \boldsymbol{H} \boldsymbol{W}_o \boldsymbol{b}_o, \end{aligned} HOϕ(XWhbh),HWobo,
其中 ϕ \phi ϕ表示激活函数。