美文网首页
Logit, Softmax 和 CrossEntropy

Logit, Softmax 和 CrossEntropy

作者: 数科每日 | 来源:发表于2021-12-13 10:08 被阅读0次

关键词: Logit, Softmax, CrossEntropy, 交叉熵


神经网络输出会牵扯到 Logit, CorssEntroy 和 Softmax 三个概念,不仔细理解的话就容易把他们弄混, 文本就尝试把三者的关系说清楚。

Logit

再说 Logit之前, 先说一下 odds, odds也叫 ratio, 就是比率。 比如A= 7, B=4 那么
odds(A,B) = ratio(A,B) = 7:4

Logit
\operatorname{logit}(p)=\sigma^{-1}(p)=\ln \left(\frac{p}{1-p}\right) \quad \text { for } \quad p \in(0,1)
Logit 的函数值域 (0,1)

因为 logit 又是 odds ratio \frac{p}{1-p}ln 函数, 所以 logit 又称为 log-odds

Softmax

Softmax 的数学定义为:

Softmax

在机器学习中, softmax 经常用来对 output 进行归一化。softmax 函数认为输入是未归一化的 logist, 而它的 output 就是归一化以后的概率。 比如

# 假设 y_hat 是一个NN 的output,它包含了对2个结果, 每个结果有三种可能性。
y_hat = tf.convert_to_tensor(np.array([[0.5, 1.5, 0.1],[2.2, 1.3, 1.7]]))

y_hat 
# array([[ 0.5,  1.5,  0.1],
#          [ 2.2,  1.3,  1.7]])

注意, 此时每个结果的和并不是 1, 比如第一个结果 [ 0.5, 1.5, 0.1] 的总和是2, 每个结果代表的不是概率。为了不同的结果之间可以比较,方便衡量结果好坏, 这是需要将结果归一化为概率分布。 这是就需要使用softmax 。

y_hat_softmax = tf.nn.softmax(y_hat)
y_hat_softmax
# array([[ 0.227863  ,  0.61939586,  0.15274114],
#        [ 0.49674623,  0.20196195,  0.30129182]])

可以看到, 此时每个结果包含的就是每个 class 的概率了, 而每个结果的sum 就是1了。

                      Pr(Class 1)  Pr(Class 2)  Pr(Class 3)
                    ,--------------------------------------
Training instance 1 | 0.227863   | 0.61939586 | 0.15274114
Training instance 2 | 0.49674623 | 0.20196195 | 0.30129182

CrossEntropy Loss

CrossEntropy 经常被用来定义损失函数, CrossEntropy Loss被定义为

H(p, q)=-\sum_{x} p(x) \log q(x)

对于第一个结果 [ 0.227863 , 0.61939586, 0.15274114], y_true = [0, 1, 0] 上式变成

H= 0 * - log(0.227863) + 1 * - log(0.61939586) + 0 * - log(0.15274114) = 0.479

总结

Softmax 把认为神经网络的结果是没有归一化的 Logit, 它会把结果归一化为概率分布。 而CrossEntropy 则会计算出该概率分布对真是结果的距离(Loss)。

相关文章

网友评论

      本文标题:Logit, Softmax 和 CrossEntropy

      本文链接:https://www.haomeiwen.com/subject/duhjfrtx.html