- 损失函数
均方误差(mean squared error)
当batch size大于1时,需要计算平均值
是网络输出,是标签,表示数据的维数
交叉熵误差(cross entropy error)
是网络输出,是标签,表示数据的维数
在进行神经网络的学习时,不能将识别精度作为指标,因为如果以识别精度为指标,则参数的导数在绝大多数地方都会变为0.
因为当稍微改变权重参数的值,识别精度可能不会变化,即会变化也是不连续,离散地变化。但是损失函数会有连续变化。阶跃函数的导数在绝大多数地方均为0,所以使用阶跃函数,神经网络的学习将无法进行。sigmoid函数的导数在任何地方不为0,神经网络的学习得以正确进行。
导数表示某个瞬间的变化量。
def numerical_diff(f, x):
h = 1e-4 # 0.0001
return (f(x+h) - f(x-h)) / (2*h) # 中心差分
- 梯度
我们发现梯度指向函数f(x0,x1) 的“最低处”(最小值),就像指南针一样,所有的箭头都指向同一点。其次,我们发现离“最低处”越远,箭头越大。
梯度的方向是函数增长速度最快的方向,那么梯度的反方向就是函数减少最快的方向。
函数的极小值、最小值以及被称为鞍点(saddle point)的地方,
梯度为0。极小值是局部最小值,也就是限定在某个范围内的最
小值。鞍点是从某个方向上看是极大值,从另一个方向上看则是
极小值的点。虽然梯度法是要寻找梯度为0 的地方,但是那个地
方不一定就是最小值(也有可能是极小值或者鞍点)。此外,当函
数很复杂且呈扁平状时,学习可能会进入一个(几乎)平坦的地区,
陷入被称为“学习高原”的无法前进的停滞期。