《深度学习入门:基于Python的理论与实现》

1 感知机和神经网络

  感知机使用了阶跃函数作为激活函数,如果将激活函数从阶跃函数换成其他函数,就可以进入神经网络的世界了。
  感知机和神经网络的主要区别就在于这个激活函数。其他方面,比如神经元的多层连接的构造、信号的传递方法等,基本上和感知机一样。
  输出层所用的激活函数,要根据求解问题的性质决定。一般地,回归问题可以使用恒等函数,二元分类问题可以使用sigmoid函数, 多元分类问题可以使用softmax函数。

softmax函数:
s o f t m a x ( x j ) = e x j ∑ i = 1 K e x i softmax(x_j) = \frac{e^{x_j}}{\sum_{i=1}^K e^{x_i}} softmax(xj)=i=1Kexiexj

x稍微大点,softmax函数的值就会很大,容易溢出。所以改进一下:

s o f t m a x ( x j ) = e ( x j + C ′ ) ∑ i = 1 K e ( x i + C ′ ) softmax(x_j) = \frac{e^(x_j+C')}{\sum_{i=1}^K e^(x_i+C')} softmax(xj)=i=1Ke(xi+C)e(xj+C)

这里的 C ′ C' C常取 x x x中的最大值。

  softmax函数的输出是0.0到1.0之间的实数。并且,softmax 函数的输出值的总和是1。输出总和为1是softmax函数的一个重要性质。正因为有了这个性质,我们才可以把softmax函数的输出解释为“概率”。

一般而言,神经网络只把输出值最大的神经元所对应的类别作为识别结果。 并且,即便使用softmax函数,输出值最大的神经元的位置也不会变。因此, 神经网络在进行分类时,输出层的softmax函数可以省略。在实际的问题中, 由于指数函数的运算需要一定的计算机运算量,因此输出层的softmax函数 一般会被省略。

损失函数可以使用任意函数, 但一般用均方误差和交叉熵误差等。

  1. 均方误差
    E = 1 2 ∑ k ( y k − t k ) 2 E = \frac{1}{2}\sum_{k}{(y_k-t_k)^2} E=21k(yktk)2
  2. 交叉熵差
    E = − ∑ k t k log ⁡ y k E = -\sum_k t_k\log y_k E=ktklogyk
      其中 y k y_k yk是神经网络的输出, t k t_k tk是正确解标签。($t_k是一个数组,与样本相对应,若神经网络的输出y_k与实际类别一致,tk = 1,否则 t k = 0 t_k = 0 tk=0。)
      因此,上式实际上只计算对应正确解标签的输出的自然对数。比如,假设 正确解标签的索引是“2”,与之对应的神经网络的输出是0.6,则交叉熵误差 是 − log ⁡ 0.6 = 0.51 −\log0.6 = 0.51 log0.6=0.51;若“ 2”对应的输出是0.1,则交叉熵误差为 − log ⁡ 0.1 = 2.30 −\log0.1 = 2.30 log0.1=2.30。 也就是说,交叉熵误差的值是由正确解标签所对应的输出结果决定的。
      正确解标签对应的输出越大,式(4.2)的值越接近0;当输出为1时,交叉熵 误差为0。此外,如果正确解标签对应的输出较小,则式(4.2)的值较大。
      为了防止 y k = 0 y_k=0 yk=0时,E无穷大,在实际应用时往往给 y k y_k yk加上一个微小值。
    E = − ∑ k t k log ⁡ ( y k + δ ) E = -\sum_k t_k\log (y_k+\delta) E=ktklog(yk+δ)

在进行神经网络的学习时,不能将识别精度作为指标。因为如果以 识别精度为指标,则参数的导数在绝大多数地方都会变为0。

识别精度对微小的参数变化基本上没有什么反应,即便有反应,它的值 也是不连续地、突然地变化。

sigmoid函数的导数在任何地方都不为0。这对 神经网络的学习非常重要。得益于这个斜率不会为0的性质,神经网络的学 习得以正确进行。

《深度学习入门:基于Python的理论与实现》_第1张图片
像学习率这样的参数称为超参数。这是一种和神经网络的参数(权重 和偏置)性质不同的参数。相对于神经网络的权重参数是通过训练 数据和学习算法自动获得的,学习率这样的超参数则是人工设定的。 一般来说,超参数需要尝试多个值,以便找到一种可以使学习顺利 进行的设定。

你可能感兴趣的:(深度学习)