关键词: Logit, Softmax, CrossEntropy, 交叉熵
神经网络输出会牵扯到 Logit, CorssEntroy 和 Softmax 三个概念,不仔细理解的话就容易把他们弄混, 文本就尝试把三者的关系说清楚。
Logit
再说 Logit之前, 先说一下 odds, odds也叫 ratio, 就是比率。 比如A= 7, B=4 那么
Logit
Logit 的函数值域
因为 logit 又是 odds ratio 的 函数, 所以 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被定义为
对于第一个结果 [ 0.227863 , 0.61939586, 0.15274114], y_true = [0, 1, 0] 上式变成
总结
Softmax 把认为神经网络的结果是没有归一化的 Logit, 它会把结果归一化为概率分布。 而CrossEntropy 则会计算出该概率分布对真是结果的距离(Loss)。
网友评论