目录
1.输出层激活函数的选择
2.Softmax激活函数的特征
3.Softmax激活函数的实现以及优化
对于机器学习问题,通常可分为分类问题与回归问题两类。
分类问题是指最终解决的是数据属于哪一个类别,如是苹果还是橘子;
回归问题则是依据某一个输入预测一个(连续的)数值的问题。
对于不同类型的问题,我们设计神经网络在输出层所使用的激活函数不同。通常对于分类问题使用Softmax激活函数,对于回归问题,使用恒等激活函数,因为回归问题一般都是预测一个数值,并不需要通过激活函数进行特殊处理。
恒等激活函数(回归问题)
函数会将输入按照原样输出,对于输入信息不做任何改动。
如下图所示:
Softmax激活函数(分类问题)
softmax函数的作用
Softmax函数的主要作用是将输出类别转换为每一种类型的“概率”。输出特征所属的类别即为概率值最大所对应的分类。
softmax函数数学公式如下:
exp(x)是表示ex的指数函数(e是纳皮尔常数2.7182 . . .)。假设输出层共有n个神经元,计算第k个神经元的输出yk。如上式所示,softmax函数的分子是输入信号ak的指数函数,分母是所有输入信号的指数函数的和。如下图所示,输出层通过箭头与所有输入层信号相连,受所有输入信号的影响。
softmax函数的特征:
1,输出为0到1之间的实数,
2,输出值的总和为1.因此可以把softmax函数的输出解释为“概率”。
这里需要注意的是,即便使用了softmax函数,各个元素之间的大小关系也不会改变。这是因为指数函数( y = exp(x))是单调递增函数。实际上,上例中 a的各元素的大小关系和 y的各元素的大小关系并没有改变。比如, a的最大值是第2个元素, y的最大值也仍是第2个元素。
Softmax激活函数的代码实现
注意:由于softmax函数的实现中要进行指数函数的运算,如果幂次值很大时,如e^100,指数函数的值很容易变得非常大,会发生溢出,为了解决这个问题,需要对softmax函数进行优化改进,具体推导公式如下:
其中C’可以为任意值,但是为了防止溢出,一般会使用输入信号中的最大值,用每一个值减去输入信号中的最大值(ai-C’)。
改进后的softmax函数代码如下:
上述代码中的(a-c)就是为了防止溢出,其中c是输入层信号中的最大值。
具体示例如下:
可以看出改进前,函数发生了溢出输出值为nan,改进后的函数可以正确计算。
总结
1. 通常输出层激活函数,对于分类问题选择softmax,对于回归问题选择恒等函数;
2. softmax函数在实现时需要注意指数计算的溢出问题,可以通过输入信号减去输入层的最大值后进行计算,防止溢出。
如果想关注更多深度学习相关内容,请进入链接《深度学习专栏》进行了解,谢谢!