1 激活函数综述
激活函数:对输入信号进行线性/非线性变换
2 为什么激活函数要是非线性函数
如果不用激活函数,在这种情况下你每一层节点的输入都是上层输出的线性函数,很容易验证,无论你神经网络 有多少层,输出都是输入的线性组合,与没有隐藏层效果相当。那么网络的逼近能力就相当有限。
正因为上面的原因,我们决定引入非线性函数作为激活函 数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任 意函数)
3 激活函数举例
3.1 softmax
一般最后一个输出层可能用它来归一化
经过softmax后每一个单元取值都是介于0和1之间的概率值 ,且和为1——>这是变换后可被解释成概率的基本前提。
选择概率值最大的类别作为最终的分类结果(对于多分类问题来说)
3.2 tanh
和sigmoid类似 ,也是将(-∞,∞)压缩到一个有限的空间中。
和sigmoid不一样的地方是,sigmoid 压缩至[0,1],tanh压缩至(-1,1)
3.3 sigmoid
将所有结果压缩到[0~1]上——可以用来进行二元分类,σ(x)表示了一个类的概率
3.4 ReLU(线性整流单元)
- 便于计算
- 可以解决梯度衰减问题
小于0的输出值,经过激活函数之后,输出为0,那么这些值我们可以去除:变成一个细长的线性网络
但这并不是说明通过relu之后,我们得到了一个线性模型,因为随着input的不同,模型是一直在变的(经过后,那些神经元有值是变化的。也就是说,relu连接的边会发生变化)
3.4.1 relu的变体
3.5 Maxout
relu是特殊的maxout,相当于一个虚拟神经元的输出肯定为0,然后进行比较,看保留哪个
maxout对应的分段函数有几段,取决于一次性比较几个输出
3.5.1 maxout的训练
每一次给定不同的input,连接的边都是不一样的,训练的方式也自然不同。(每一次只更新目前连着的这些参数)
但因为不同的input对应不同的连接方式,所以每个weight实际上都会被train到(CNN中的max pooling的训练方式同理)