损失函数:交叉熵

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

H(p,q)=xp(x)logq(x)\LARGE H(p,q)=-\sum_{x}p(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 无意义。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章