:阿特,今天我们来了解一下深度学习中的激活函数 (Activation functions)。
:又是函数……为什么要了解这个哦……
:在机器学习中,我们经常需要对输出结果打上「是」或「否」标签。比如对一张输入的图片,模型要判断图片里面有没有包含汪星人。
上一回我们提到的逻辑回归,可以用来减少预测值和真实值之间的误差。
:那要怎么做呢?
:我们来用符号描述一下问题:
x:训练数据中的 input
y:训练数据中已经做好标记的 output
w:逻辑回归的 weights
b:逻辑回归的 bias
模型的输出:
:老朋友 wx + b
:好眼力。它就是一个线性模型。别忘了,我们想让输出只包含两个值:是,否。一般我们会用 1 表示「是」,用 0 表示「否」。
:就是我给模型图片 A,它说「0」;给图片 B,它说「1」;……这样?
:没错~ 所以我们把结果的输出全部转换成或 0 或 1 的值。激活函数就是用来帮助我们实现这种转化的。
上面我们用到的激活函数叫做 Sigmoid 函数。它帮我们做到了:
如果输入值 z 是一个大的正数,函数的输出值为 1;
如果输入值 z 是一个大的负数,函数的输出值为 0;
如果输入值 z = 0,那么输出值是 0.5
:也就是说,不论我给什么样的整数,最后都会返回 0 或 1 的结果?
:没错!这样我们得到分类的结果,或 0 或 1。在深度学习中,这种把输出转化为我们想要的形式的函数,我们叫它「激活函数」:
激活函数的主要作用是提供网络的非线性建模能力。如果没有激活函数,即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。加入激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。
上图就是其中的一种激活函数:sigmoid 函数。
:这么说,激活函数不止一种?
:对呀。下面我列了一些常用的激活函数,作为今天的补充资料吧。现在可能还看不到,先混个脸熟就好。
:好的先刷脸。
Sigmoid
Sigmoid 函数取值范围为(0,1),将一个实数映射到(0,1)的区间,可以用来做二分类。
Sigmoid 在特征相差比较复杂或是相差不是特别大时效果比较好。Sigmoid 的导数最大值为0.25。这意味着用来进行反向传播时,返回网络的 error 将会在每一层收缩至少75%(梯度消失问题)。对于接近输入层的层,如果有很多层, weights 更新会很小。
Tanh
也称为双切正切函数,取值范围为[-1,1]。tanh 在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。
ReLU
ReLU (rectified linear units) 是现在较常用的激活函数。如果输入 < 0,ReLU 输出 0;如果输入 >0,输出等于输入值。
ReLU 计算量小(不涉及除法),一部分神经元的输出为 0 造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。
ReLU 的缺点是,梯度较大时,ReLU 单元可能大都是 0,产生大量无效的计算(特征屏蔽太多,导致模型无法学习到有效特征)。
Softmax
Softmax 函数将 K 维的实数向量压缩(映射)成另一个 K 维的实数向量,其中向量中的每个元素取值都介于(0,1)之间。常用于多分类问题。Softmax 把分数转换为概率分布,让正确的分类的概率接近 1,其他结果接近 0。相比 Sigmoid,它做了归一化处理。
Ref
Deep Learning Nanodegree Udacity - https://www.udacity.com/course/deep-learning-nanodegree-foundation--nd101
Neural Networks and Deep Learning Coursera - https://www.coursera.org/learn/neural-networks-deep-learning
Neural networks and deep learning - http://neuralnetworksanddeeplearning.com/
Andrej Karpathy’s CS231n course - http://cs231n.github.io/neural-networks-1/#nn
深度学习笔记(三):激活函数和损失函数 - CSDN博客 - http://blog.csdn.net/u014595019/article/details/52562159
领取专属 10元无门槛券
私享最新 技术干货