激活函数
神经网络的每一层基本都是在一个线性运算后面来一个非线性激活函数(Activation function),再把值传给下一层的
为啥要有非线性的激活函数(non-linear activation function)
n个线性函数嵌套起来,还是线性函数:
y=a1(a2x+b2)+b1
=a1a2x+a1b2+b1
=cx+d
这样,n层的神经网络,就相当于一个简单的Logistic regression了。
因此,我们必须采用一个非线性的激活函数,让每一层都有意义,让每一层都有其特定的功能!
1.sigmoid函数(σ)
a(z)' = a(z)×[1-a(z)]
sigmoid的特点如下:
很好的拟合了0,1输出,常作为二分类问题(binary classification)的激活函数。
它的导数为两边小中间大。
2. tanh函数
a(z)' = 1-[a(z)]2
相比于sigmoid,它是关于原点对称的,这样的性质使得模型在训练时的性能往往比sigmoid更好,因此在中间层一般都不用sigmoid作为激活函数,而用tanh来代替。但是在output层,对于二分类问题,我们都要使用sigmoid,因为要拟合0,1的输出。
sigmoid和tanh共同的问题:
当z比较大或者比较小的时候(也就是在曲线的两头),函数的导数会非常小,会导致参数的梯度也非常小,这样我们在用 梯度下降法进行训练的时候就会 非常慢,尤其是当数据量很大的时候。
3. ReLU函数
a=max(z,0)
导数要么是0,要么是1,计算简单,大小合适,因此梯度下降算起来很快,于是迅速被广泛地使用了起来,完美地替代了sigmoid、tanh这些激活函数。(只是多数情况,有一些特殊的网络还是会使用tanh和sigmoid,比如RNNs)
4. Leaky ReLU
最最常使用的效果最稳定的还是ReLU。
因此,之后在设计神经网络的时候,选择激活函数我们就可以 放心大胆地选择ReLU,它不仅速度快,而且效果好。
深度学习中,模型不是最重要的,尤其是在业界,大家广泛使用的也许并不是最先进最复杂的模型,而是一个经典的简单的模型。比模型更重要的是数据。有足够多的训练样本,迭代足够多的次数,简单的模型也可以达到极好的效果。ReLU的优势就在于其简单迅速,因此在短时间内可以进行大量的迭代,因此在业界得到广泛的使用。
5. Softmax
Softmax可以看做是对sigmoid的一种推广。我们在做二分类问题的时候,一般都使用sigmoid作为输出层激活函数,因为它的范围在0~1之间。但是如果我们需要进行多分类呢?于是我们有了Softmax函数。
P的计算公式为:
其中各个分量之和为1,这从公式也可以很容易看出来。这样,每一个分量就代表该类别的概率
对于多分类问题,我们采用的损失函数也稍有不同