初识神经网络二

2019-04-25  本文已影响0人  流星游

输出层的设计

通过不同的激活函数,神经网络既可以用在分类问题(一般使用恒等函数),也可以用在回归问题(一般使用softmax函数)。

恒等函数不做任何处理,将输入信号原样输出。

softmax函数

分类中的soft可以用如下公式表示:
y_k=\dfrac{exp(a_k)}{\Sigma_{i=1}^n exp(a_i)}
公式表示,假设输出层共有n个神经元,计算第k个神经元的输出y_k。其分子是输入信号a_k的指数函数,分母是所有输入信号的指数函数的和。

用图表示如下:


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函数的特性,x[i]y[i]是一一对应的,即x[i]y[i]分别保存了第i个输入信号及其结果,所以如果数据集很大的话,可以很方便的将数据分批处理,批处理可以带来高速运算。

上一篇 下一篇

猜你喜欢

热点阅读