好玩的人工智能
快乐的深度学习

深度学习之损失函数(Loss Function or Cost Function)

损失函数是用来计算模型预测值和真实值之间的偏差程度。

与分类问题不同,回归问题解决的是对具体数值的预测。比如房价预测,销量预测等都是回归问题。这些问题需要预测的不是一个事先定义好的类别,而是一个任意实数。解决回归问题的神经网络一般只有一个输出节点,这个节点的输出值就是预测值。对于回归问题,最常用的损失函数是均方误差(MSE: mean sequare error)。它的定义如下:

其中y是一个batch中第i个数据的真实值,而y’是神经网络给出的预测值。在TensorFlow中实现MSE:

mse = tf.reduce_mean(tf.square(y_ - y))

其中y代表了神经网络输出的预测值,y_是真实值

交叉熵损失函数

分类问题中,预测结果是(或可以转化成)输入样本属于n个不同分类的对应概率。比如对于一个4分类问题,期望输出应该为 g0=[0,1,0,0] ,实际输出为 g1=[0.2,0.4,0.4,0] ,计算g1与g0之间的差异所使用的方法,就是损失函数,分类问题中常用损失函数是交叉熵。

交叉熵(cross entropy)描述的是两个概率分布之间的距离,距离越小表示这两个概率越相近,越大表示两个概率差异越大。对于两个概率分布 p 和 q ,使用 q 来表示 p 的交叉熵为:

由公式可以看出来,p 与 q 之间的交叉熵 和 q 与 p 之间的交叉熵不是等价的。上式表示的物理意义是使用概率分布 q 来表示概率分布 p 的困难程序,q 是预测值,p 是期望值。

神经网络的输出,也就是前向传播的输出可以通过Softmax回归变成概率分布,之后就可以使用交叉熵函数计算损失了。

交叉熵一般会跟Softmax一起使用,在tf中对这两个函数做了封装,就是 tf.nn.softmax_cross_entropy_with_logits 函数,可以直接计算神经网络的交叉熵损失。

cross_entropy = tf.nn.softmax_cross_entropy_with_logits(y, y_)

其中 y 是网络的输出,y_ 是期望输出。

针对分类任务中,正确答案往往只有一个的情况,tf提供了更加高效的tf.nn.sparse_softmax_cross_entropy_with_logits 函数来求交叉熵损失。

tf.nn.softmax_cross_entropy_with_logits该函数已被废弃,在以后的版本中会删除,请使用tf.nn.softmax_cross_entropy_with_logits_v2代替

未经允许不得转载:零点智能 » 深度学习之损失函数(Loss Function or Cost Function)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

零点智能 人工智能社区,加Q群:469331966

投稿&建议&加Q群