神经网络可以用于解决分类问题和回归问题,但需要根据情况改变输出层的激活函数。一般而言,回归问题用恒等函数,分类问题用Softmax函数。
一、恒等函数和Softmax函数
恒等函数将输入原样输出,即对于输入的信息,不做任何改动直接输出。因此,当输出层使用恒等函数时,输入信号被原封不动地输出。
用神经网络表示恒等函数的处理过程,如下图所示。与隐藏层的激活函数一样,恒等函数的转换处理可以用一个箭头表示。
在分类问题中使用的Softmax函数可用下式表示:
其中,i取1~n.
式中表示输出层共有n个神经元,计算第k个神经元的输出 由式可见,Softmax函数的分子是输入信号的指数函数,分母是所有输入信号的指数函数的和。
二、实现Softmax函数的注意事项
在上面的softmax函数的公式中,如果按照公式直接计算,可能存在溢出问题,因为在实现时要进行指数函数的运算,其值容易变得很大。如果溢出,会出现结果不确定的情况。
因此,对softmax函数的实现可以进行如下改进:
首先,分子和分母都乘以任意的常数C。然后把常数C移到exp中,记为lnC,最后用符号C'替换lnC。
上面的公式说明,在进行指数运算时,加上(或减去)某个常数并不会改变计算结果。
为防止溢出,C'一般使用输入信号的最大值。
改进后的代码如下:
def Softmax:
c = np.max(a)
exp_a = np.exp(a - c) # 溢出对策
sum_exp_a = np.sum(exp_a)
y = exp_a/sum_exp_a
return y
三、Softmax函数的性质
Softmax函数的输出为0~1之间的实数。并且,Softmax函数的输出总和为1.
输出总和为1是Softmax函数的一个重要的性质。正因为这个性质,可以把Softmax函数的输出解释为“概率”。
因此,通过使用Softmx函数,可以用概率统计的方法处理问题。
注意:即使使用了Softmax函数,各类之间的大小关系也不会改变。原因是指数函数是单调递增函数。
|