神经网络以某个指标为线索寻找最优权重参数。神经网络学习中所用的指标称为损失函数(loss function)。这个损失函数可以使用任意函数,但一般用均方误差和交叉熵误差等。
1、均方误差
可有作为损失函数的函数有很多,但其中最有名的是均方误差(mean squared)。
这里yk表示神经网络的输出,tk表示监督数据(训练数据),k表示数据的维数。
实现代码
def mean_squared_error(y,t):
return 0.5 * np.sum((y - t)**2)
2、交叉熵误差
log表示以e为底数的自然对数。yk是神经网络的输出,tk是正确解标签。并且,tk中只有正确解标签的索引为1,其他均为0。当对应解标签的输出较小,则交叉熵误差越大。
def cross_entropy_error(y,t):
delta = 1e-7
return -np.sum(t * np.log(y+delta))
这里加上一个微小值delta防治出现当np.log(0)的情况出现无穷大的值的情况。
3、mini-batch学习
前面两个都是针对单个数据的损失函数。如果要求所有训练数据的损失函数的总和,以交叉熵误差为例,可以写成下面的式子。
假设数据有N个,tnk表示第n个数据的第k个元素的值。
神经网络的学习是从训练数据中选出一批数据(称为mini-batch),然后对每个mini_batch进行学习。这种学习方式称为mini-batch学习。
mini-batch用随机选择的小批量数据作为全体训练数据的近似值。