1. 多层感知机的概念
由于单层感知机被证明不能解决异或问题,神经网络的发展一度进入寒潮期,直到多层感知机的提出。多层感知机(Multi Layer Perceptron, MLP)在单层感知机的基础上引入了隐藏层。
图1 多层感知机
权重矩阵的行数是输入层的变量个数,列数是输出层的变量个数。
2. 多层感知机的激活函数
激活函数在多层感知机中至关重要,如果没有激活函数,多层感知机将退化为单层网络
那么输出O可以整理为:
说到底,多次线性变换可以用一次线性变换得到。
但是,非线性的激活函数加入可以避免网络退化,输出O没办法整理为一层变换。
3. 常见激活函数
在每一层线性变换后,引入激活函数,可以避免多层感知机退化为一层,多层感知机成为真正意义上的多层。
激活函数将非线性引入神经网络,非线性+线性的组合使神经网络可以逼近任意非线性函数,原理参考万能逼近定理(universal approximator)。
- 激活函数需要具备如下几个特点:
(1)连续可导,但允许少数点上不可导,这样有利于实现数值优化的方法学习网络参数;
(2)激活函数及其导数应尽可能简单,便于计算;
(3)激活函数的导数值域要在合适的区间范围内,不能太大或太小,防止梯度消失或梯度爆炸。
- 以下是三种常见激活函数。
(1)Sigmoid函数,经常用于二分输出的激活函数,将结果变换到[0,1]区间,使其符合概率分布的形式;在RNN中使用也较多,作为门控单元的激活函数,控制保留或遗忘。
(2)Tanh函数与Sigmoid函数相近,但值域有所不同,相比sigmoid函数,tanh函数更适合对值域有对称性要求的情况。
(3)Relu函数与前两种不同,不存在饱和区,因此经常被使用。可以观察到relu的导函数在Z=0处不可导,也就是激活函数的要求连续可导(但允许少数点上不可导)的情况。在实际使用中可以将z=0处的导数设置为0或1。
Sigmoid函数 和 Tanh函数 被称为饱和函数,都存在饱和区,即函数曲率为0,导函数值为0的区域,此区域会使梯度消失。Relu函数是非饱和函数。
图2 激活函数(蓝色线为函数曲线,橙色线为导函数曲线)