深度学习入门——神经网络的学习(2)

本文详细介绍了神经网络中常用的两种损失函数——均方误差(MSE)和交叉熵误差(Cross Entropy),包括它们的定义、计算公式以及在实际案例中的演示。理解这两种损失函数有助于优化模型训练过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


损失函数

神经网络的学习通过某个指标表示现在的状态,然后,以这个指标为基准,寻找最优权重参数。神经网络的学习中所用的指标称为损失函数(loss function)。这个损失函数可以使用任意函数,但一般用均方误差和交叉熵误差。

一、均方误差

可以用做损失函数的函数有很多,其中最有名的是均方误差(mead squared error)。均方误差如下所示
描述

这里,Yk表示神经网络的输出,Tk表示监督数据,k表示数据的维数。
数组元素的索引从第一个开始依次对数字“0”“1”“2”…这里,神经网络的输出y是softmax函数的输出。由于softmax函数的输出可以理解为概率,因此上例表示“0”的概率是0.1,“1”的概率是0.05,“2”的概率是0.6等。t是监督数据,将正确解标签设为1,其他均设为0.这里,标签“2”为1,表示正确解是“2”。将正确解标签表示为1,其他标签表示为0的表示方法称为one-hot表示

由上式所示,均方误差会计算神经网络的输出和正确解监督数据的各个元素之差的平方,再求总和。现在我们用Python来实现这个均方误差,实现方式如下:

def mean_squared_error(y,t):
	return 0.5*np.sum((y-t)**2)

这里,参数y和t是NumPy数组。现在,我们使用这个函数,来实际地计算一下。

>>>#设“2”为正确解
>>>t=[0,0,1,0,0,0,0,0,0,0]
>>>
>>>#例1:“2”的概率最高的情况(0.6>>>y=[0.1,0.05,0.6,0.0,0.05,0.1,0.0,0.1,0.0,0.0]
>>>mean_squared_error(np.array(y),np.array(t))
0.09750000000000031
>>>#例2:“7”的概率最高的情况(0.6>>>y=[0.1,0.05,0.1,0.0,0.05,0.1,0.0,0.6,0.0,0.0]
>>>mean_squared_error(np.array(y),np.array(t))
0.59750000000000003

这里举了两个例子。第一个例子中,正确解是“2”,神经网络的输出最大值是“2”;第二个例子中,正确的解是“2”,神经网络的最大值是“7”。如实验结果所示,我们发现第一个例子的损失函数的值更小,和监督数据之间的误差较小。也就是说,均方误差显示第一个例子的输出结果与监督数据更加吻合。

二、交叉熵误差

除了均方误差之外,交叉熵误差(cross entropy error)也是经常被用作损失函数。交叉熵误差如下所示

在这里插入图片描述

这里。log表示以e为底的自然对数。Yk是神经网络的输出,Tk是正确解标签。并且,Tk中只有正确解标签的索引为1,其他均为0(one-hot表示)。因此上式实际上只计算对应正确解标签的输出的自然对数。
比如,假设正确解标签的索引是“2”,与之对应的神经网络输出是0.6,则交叉熵误差是-log0.6=0.51;若“2”对应的输出是0.1,则交叉熵误差为-log0.1=2.30。也就是说,交叉熵误差的值是由正确解标签所对应的输出结果决定的。

下面我们用代码实现交叉熵误差

def cross_entropy_error(y,t):
	delta=1e-7
	return -np.sum((t*np.log(y+delta))

这里,参数y,t是NumPy数组。函数内部在计算np.log时,加上了一个微小值delta。这是因为,当出现np.log(0)时,np.log(0)会变为负无穷大的-inf,这样一来就会导致后续计算无法进行。作为保护性对策,添加一个微小值可以防止负无穷大的发生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值