神经网络笔记-----经典损失函数

一、经典损失函数

如何来判断一个神经网络的输出向量于期望的向量有多接近?

交叉熵是常用的评判方法之一交叉熵刻画了两个概率分布之间的距离,它是分类问题中使用比较广的一种损失函数。交叉熵就是用来判定实际的输出与期望的输出的接近程度。

一、公式

1. softmax回归

加入神经网络的原始输出为y1,y2,y3...yn,那么经过softmax回归处理之后的输出为:

softmax(y_{i})=y_{i}^{'}=\frac{e^{y_{i}}}{\sum_{j=1}^{n}e^{y_{i}}}

单个节点的输出变成了一个概率值。

注:softmax回归本身可以作为一个学习算法来优化分类结果,但在TensorFlow中,softmax回归的参数被去掉了,它只是作为一层额外的处理层,将神经网络的输出变成一个概率分布。

交叉熵刻画的是实际输出(概率)于期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。假如概率分布p为期望输出,概率q为实际输出,H(p,q)为交叉熵,则:

除此之外,交叉熵还有另一种表达形式,还是使用上面的假设条件:

在实际的使用的训练过程中,数据往往是组合成一个batch来使用,所以对用的神经网络的输出应该是一个m*n的矩阵,其中m为batch的个数,n为分类数目,而对应的Label也因该十一个二维矩阵,现在假设batch=2,

所以交叉熵的结果应该是一个列向量(根据第一种方法): 

而对于一个batch,最后取平均为0.2。

三、TensorFlow实现

cross_entropy = -tf.reduce_mean(
    y_ * tf.log(tf.clip_by_value(y,le-10,1.0)))

其中y_代表正确的结果,y代表预测结果。这一行代码包含了四个不同的Tensorflow运算。(1)第一个运算,通过tf.clip_by_value函数可以将一个张量中的数值限制在一个范围之内,tf.clip_by_value(y,le-10,1.0)将y中的元素限制在le-10到1.0之间。这样不会出现log0这样的错误。(2)第二个运算,tf.log函数,完成了对张量中所有元素依次求对数的功能。(3)第三个运算是乘法,在实现交叉熵的代码中直接将两个矩阵通过 “ * ” 操作相乘,这个操作是元素之间直接相乘。矩阵乘法使用tf.matmul函数完成。

通过上面三个运算完成了对于每一个样例中的每一类别交叉熵p(x) * log q(x)的计算。这三步计算得到的结果是一个m*n的矩阵,其中m为一个batch中样例的数量,n为分类的类别数。根据交叉熵公式,应该将每行中的m个结果相加得到所有样例的交叉熵,然后再对这n行取平均得到一个batch 的平均交叉熵。(4)tf.reduce_mean函数实现了矩阵平均。

因为交叉熵一般会与softmax回归一起使用嗯,所以tensorflow对这两个功能基尼下嗯了统一的封装。并提供了tf,nn.softmax_cross_entropy_with_logits(                                                                                                                                                                   labels = y_,logits=y)

其中y代表了原始神经网络的输出结果,而y_给出了标准答案,这样通过一个命令就可以得到使用了softmax回归之后的交叉熵。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值