Sigmoid函数
Sigmoid 是常用的非线性的激活函数,它的数学形式如下:
Sigmoid的几何图像如下
特点:
它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1
## Sigmoid函数的意义
(1)输入值X的作用
是【-无穷, +无穷数】 值空间的任意值,它代表了输入数据的一个特征值。
(2)神经元WX+B的作用
对输入数据进行线性变换:即放大或缩小(由w决定),或平移(有b决定)
线性变化后,输出数据Ui=WXi + Bi依然落在【-无穷, +无穷】数值空间中
线性变化得到的输出序列Ui,并没有改变输入数据序列Xi的顺序关系,即单调性关系。
(3)Sigmoid函数作用
数据(-无穷, +无穷) 的数值空间压缩成了【0,1】的数值空间,因此是一种压缩变换。
压缩后得到的输出序列Yi,并没有改变输入序列Ui的顺序关系,即单调性关系。
(4)总体变化的作用
输入序列Xi经过神经元线性变化和sigmoid的压缩变换,由【-无穷, +无穷】到了【0,1】空间。
变化前后,输出序列与输入序列具有一致的顺序(排序)关系。
Sigmoid函数代码
def sigmoid(x):
return 1 / (1 + np.exp(-x))
Softmax函数
一般回归问题的激活函数用的是恒等函数,二元分类问题用的是sigmoid函数,而多元分类问题可以使用softmax函数作为激活函数。
softmax函数式为:
Softmax函数的意义
1)将预测结果转化为非负数
下图为y=exp(x)的图像,我们可以知道指数函数的值域取值范围是零到正无穷。softmax第一步就是将模型的预测结果转化到指数函数上,这样保证了概率的非负性。
2)各种预测结果概率之和等于1
为了确保各个预测结果的概率之和等于1。我们只需要将转换后的结果进行归一化处理。方法就是将转化后的结果除以所有转化后结果之和,可以理解为转化后结果占总数的百分比。这样就得到近似的概率。
Softmax函数溢出问题
softmax 函数的实现中要进行指数函数的运算,但是此时指数函数的值很容易变得非常大。比如,e10 的值会超过 20000,e100 会变成一个后面有 40 多个 0 的超大值,e1000 的结果会返回一个表示无穷大的 inf 。如果在这些超大值之间进行除法运算,结果会出现“不确定”的情况。
计算机处理“数”时,数值必须在 4 字节或 8 字节的有限数据宽度内。这意味着数存在有效位数,也就是说,可以表示的数值范围是有限的。因此,会出现超大值无法表示的问题。这个问题称为溢出,在进行计算机的运算时必须(常常)注意。所以可以从输入的数据中找出最大值,然后每条数据减去最大值,从而减小整体数据的大小。
Softmax函数代码
def softmax(x):
x = x - np.max(x) # 溢出对策
return np.exp(x) / np.sum(np.exp(x))