本文用于整理入门深度学习过程中遇到的四种激活函数。 下面将从公式、代码和图像三个方面来介绍这些激活函数。 首先明确一下是哪四个:
下图A是一个线性可分的问题,也就是说,对于两类点(蓝点和绿点),可以通过a实现完全分类 直线。
当然,图像A是最理想最简单的二分类问题,但现实中往往存在一些非常复杂的线性不可分问题,比如图像B,你找不到任何一条直线可以将图像B分为 蓝点与绿点完全分开,必须圈出一条闭合曲线。
激活函数是帮助“绘制”这条闭合曲线的非线性函数。 在激活函数的帮助下,很多算法的处理能力都会增强,也可以处理线性不可分的问题。
在介绍逻辑回归的时候提到过Sigmoid函数。 其数学表达式为:
其中e为纳皮尔常数,其值为2.7182……其图像如下:
可以观察到图像的一些特征:
- 曲线的取值范围为(0,1)
- 当x = 0时, Sigmoid函数为0.5
- 随着x的不断增大,Sigmoid函数的值无限趋近于1
- 随着x的减小,Sigmoid函数的值无限趋近于0
对于梯度下降法来说,信息的更新很大程度上依赖于梯度,而Sigmoid函数一个明显的缺点就是当函数值特别接近0或1的两端时,因为 它的曲线已经几乎是平坦的,所以此时的梯度几乎为0,不利于权重的更新,会导致模型不收敛。
Sigmoid函数的代码如下:
importnumpyasnp
defsigmoid(x):
返回1
/(
1个
np.exp(-x))
Tanh函数
Tanh函数是一个双曲正切函数,其数学表达式为:
Tanh 函数和Sigmoid函数很相似,在图像上可以很好的体现:
这两个函数是一样的,当输入x值大或者小的时候,对应函数输出的y 值几乎相等,同样的缺点是梯度很小,不利于权重的更新; 不同的是Tanh函数的取值范围是(-1,1),当x=0时,输出函数值为0。
Tanh函数的代码如下:
importnumpyasnp
deftanh(x):
返回
(exp(x)-exp(-x))/(exp(x) exp(-x))
ReLu函数
ReLu是一个线性整流函数 ,又称修正线性单元,其函数的数学表达式为
Tanh是一个分段函数,其图像如下:
图像通俗易懂, 如果输入的x值小于0,则输出也为0; 如果输入的x值大于0,则直接输出x值。 需要注意的是,ReLu 函数在 x = 0 时是不连续的(不可导),但它也可以用作激活函数。
与Sigmoid函数和Tanh函数相比,ReLu函数的一个明显优势是在应用梯度下降法时收敛速度更快。 当输入值为整数时,不会出现梯度饱和问题,因为大于0的部分是线性关系,这使得ReLu成为使用最广泛的激活函数。
ReLu函数的代码如下:
importnumpyasnp
defrelu(x):
返回
np.最大值(
0
,x)
SoftMax函数
分类问题可以分为二分类问题和多分类问题。 Sigmoid函数更适合二分类问题,而SoftMax函数更适合多分类问题分类问题。
SoftMax函数的数学表达式为:
其中表示分类器的输出,i表示类别索引,类别总数为C,表示 当前元素的索引与所有元素的指数和之比。 简而言之,SoftMax函数将多个分类的输出值按比例转换为相对概率,使输出更容易理解和比较。
为了防止SoftMax函数在计算时出现上溢或下溢问题,通常会预先对V进行一些数值处理,即每个V都减去V中的最大值。假设 SoftMax函数的数学表达公式改为:
因为SoftMax函数计算的是概率,所以不能用图像显示。 SoftMax函数的代码如下:
importnumpyasnp
defsoftmax(x):
D=np.max(x)
exp_x=np.exp(x-D)
返回
exp_x/np.sum(exp_x)
阅读更多