输出层的设计
通过不同的激活函数,神经网络既可以用在分类问题(一般使用恒等函数),也可以用在回归问题(一般使用softmax函数)。
恒等函数不做任何处理,将输入信号原样输出。
softmax函数
分类中的soft可以用如下公式表示:
公式表示,假设输出层共有个神经元,计算第个神经元的输出。其分子是输入信号的指数函数,分母是所有输入信号的指数函数的和。
用图表示如下:
softmax函数.png
这里softmax函数的输出层的各神经元都受到所有输入信号的影响。
借助Numpy,softmax的实现很容易:
def softmax(a):
exp_a = np.exp(a)
sum_exp_a = np.sum(exp_a)
return exp_a / sum_exp_a
softmax函数的注意事项
指数函数很容易变得很大,导致数值溢出问题。要解决这个问题,先对softmax做等价变换:
softmax函数变换.jpg
变换后的等式说明,softmax函数的输入信号加上一个常量不会影响结果。所以常常需要利用输入信号的最大值做下处理:
def softmax(a):
c = np.max(a)
exp_a = np.exp(a - c)
sum_exp_a = np.sum(exp_a)
return exp_a / sum_exp_a
softmax函数特征
函数图形如下:
softmax函数图像.png
softmax函数输出在0到1 之间,且函数的输出值得总和是1.输出总和为1是softmax的重要性质。根据这个性质,可以将函数输出解释为某个结果的概率是多少。
还有就是由于指数函数式单调递增性质的,输入信号的大小跟输出信号的大小是有关系的。如果第i个输入信号最大,那么第i个输出信号也最大。
在分类问题中,一般只会关心概率最大的输出信号。对于softmax函数来说,输出层最大概率的输出位置,不会因为函数本身改变。所以神经网络中输出层的softmax函数经常省略。
一般在分类问题中,神经网络输出层的神经元的数量定义为类别的数量。
批处理
由于softmax函数的特性,和是一一对应的,即和分别保存了第i个输入信号及其结果,所以如果数据集很大的话,可以很方便的将数据分批处理,批处理可以带来高速运算。
网友评论