一,经典损失函数
交叉熵是一个信息论中的概念,它原本是用力啊估算平均编码长度的。在解决分类问题中,交叉熵刻画了两个概率分布之间的距离,是使用比较广的一种损失函数。给定两个概率分布p和q,通过q来表示p的交叉熵为:
注意的是,交叉熵酷话的是两个概率分布之间的距离,然而神经网络的输出却不一定是一个概率分布。概率分布刻画了不同事件发生的概率。把神经网络前向传播得到的结果变成概率分布,Softmax回归是一个常用的方法。经过Softmax回归处理后的输出为:
在TensorFlow中实现交叉熵代码如下:
cross_entropy = -tf.reduce_mean( y_*tf.log( tf.clip_by_value( y, 1e-10, 1 ) ) )
y_代表正确结果,y代表预测结果
其中
tf.clip_by_value( y, 1e-10, 1.0 )
该函数可以将一个张量中的数值限制在1e-10到1中间的范围。张量y中,低于1e-10的取值为1e-10,高于1的取值为1
tf.log(x)
该函数可以将张量中的所有数据依次取对数
tf.reduce_mean(x)
该函数直接对整个矩阵做平均
此外,交叉熵一般会和softmax回归一起使用,所以TensorFlow对这两个功能进行了统一封装,提供了一个专门的函数:
cross_entropy = tf.nn.softmax_cross_entropy_with_logits( y, y_ )
在只有一个正确答案的分类问题中,还可以用另一个函数加速计算
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits( y, y_ )
与分类问题不同,回归问题解决的是对具体数值的预测。解决回归问题的神经网络一般只有一个输出节点,对此常用的损失函数是均方误差:
用TenrsorFlow实现代码为:
mse = tf.reduce_mean( tf.square( y_ - y ) )
<