深度学习入门基于Python的理论与实现(第4章 神经网络的学习)

image.png
  1. 损失函数
    均方误差(mean squared error)
    E=\frac{1}{2}\sum_k(y_k-t_k)^2
    当batch size大于1时,需要计算平均值
    y_k是网络输出,t_k是标签,k表示数据的维数

交叉熵误差(cross entropy error)
E=-\sum_k t_k \log y_k
y_k是网络输出,t_k是标签,k表示数据的维数

  1. 在进行神经网络的学习时,不能将识别精度作为指标,因为如果以识别精度为指标,则参数的导数在绝大多数地方都会变为0.
    因为当稍微改变权重参数的值,识别精度可能不会变化,即会变化也是不连续,离散地变化。但是损失函数会有连续变化。

  2. 阶跃函数的导数在绝大多数地方均为0,所以使用阶跃函数,神经网络的学习将无法进行。sigmoid函数的导数在任何地方不为0,神经网络的学习得以正确进行。

  3. 导数表示某个瞬间的变化量。
    \frac{df(x)}{dx}=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}

def numerical_diff(f, x):
    h = 1e-4 # 0.0001
    return (f(x+h) - f(x-h)) / (2*h) # 中心差分
  1. 梯度
    image.png

    我们发现梯度指向函数f(x0,x1) 的“最低处”(最小值),就像指南针一样,所有的箭头都指向同一点。其次,我们发现离“最低处”越远,箭头越大。
    梯度的方向是函数增长速度最快的方向,那么梯度的反方向就是函数减少最快的方向。

函数的极小值、最小值以及被称为鞍点(saddle point)的地方,
梯度为0。极小值是局部最小值,也就是限定在某个范围内的最
小值。鞍点是从某个方向上看是极大值,从另一个方向上看则是
极小值的点。虽然梯度法是要寻找梯度为0 的地方,但是那个地
方不一定就是最小值(也有可能是极小值或者鞍点)。此外,当函
数很复杂且呈扁平状时,学习可能会进入一个(几乎)平坦的地区,
陷入被称为“学习高原”的无法前进的停滞期。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。