损失函数:交叉熵

给定两个概率分布p和q,通过q来表示p的交叉熵为:

H ( p , q ) = − ∑ x p ( x ) l o g q ( x ) \LARGE H(p,q)=-\sum_{x}p(x)logq(x) H(p,q)=xp(x)logq(x)

交叉熵刻画的是两个概率分布之间的距离,或可以说它刻画的是通过概率分布q来表达概率分布p的困难程度,p代表正确答案,q代表的是预测值,交叉熵越小,两个概率的分布约接近。

在神经网络中通常使用 Softmax 回归把前向传播得到的结果变成概率分布,所以交叉熵经常和 softmax 一起使用。

且在逻辑回归中,平方损失函数为非凸函数,交叉熵损失函数为凸函数。(只有当损失函数为凸函数时,梯度下降算法才能保证达到全局最优解

import numpy as np


def cross_entropy(p, q):
    return -np.sum(p * np.log(q))


if __name__ == '__main__':
    print(cross_entropy([1, 0, 0], [0.5, 0.4, 0.1]))
    print(cross_entropy([1, 0, 0], [0.8, 0.1, 0.1]))
    print(cross_entropy([1, 0, 0], [0.9, 0.05, 0.05]))
    print(cross_entropy([1, 0, 0], [0.99, 0.005, 0.005]))
    print(cross_entropy([1, 0, 0], [0.99999, 0.000005, 0.000005]))
    # 0.3010299956639812
    # 0.09691001300805639
    # 0.045757490560675115
    # 0.004364805402450088
    # 4.342966533881614e-06

注:正确概率 p 一般是 one-hot 向量,而预测概率 q 经过 softmax 之后没有零值,因为 log0 无意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值