1. 均方误差计算
均方差(Mean Squared Error,简称 MSE)误差函数把输出向量和真实向量映射到笛卡尔 坐标系的两个点上,通过计算这两个点之间的欧式距离(准确地说是欧式距离的平方)来衡 量两个向量之间的差距。
MSE(y, o) = \tfrac{1}{d_{out}}\sum _{I = 1}^{d_{out}}(y_{I} - o_{i})^2
均方差误差函数广泛应用在回归问题中,实际上,分类问题中也可以应用均方差误差 函数。在 TensorFlow 中,可以通过函数方式或层方式实现 MSE 误差计算。例如,使用函 数方式实现 MSE 计算,代码如下:
特别要注意的是,MSE 函数返回的是每个样本的均方差,需要在样本维度上再次平均来获 得平均样本的均方差,实现如下:
o = tf.random.normal([2,10]) # 构造网络输出
y_onehot = tf.constant([1,3]) # 构造真实值
y_onehot = tf.one_hot(y_onehot, depth=10)
loss = keras.losses.MSE(y_onehot, o) # 计算均方差
loss
<tf.Tensor: id=282, shape=(2,), dtype=float32, numpy=array([1.6341051, 1.5467541], dtype=float32)>
loss = tf.reduce_mean(loss)
<tf.Tensor: id=284, shape=(), dtype=float32, numpy=1.5904295>
2. 交叉熵误差函数
熵在信 息学科中也叫信息熵,或者香农熵。熵越大,代表不确定性越大,信息量也就越大。某个 分布𝑃(𝑖)的熵定义为
H(i) = -\sum _{i}P(i)log_{2}P(i)
如果它预测的概率分布是[0.1,0.1,0.1,0.7],它的熵可以计算为:
−0.1 ∙ log2 0.1 − 0.1 ∙ log2 0.1 − 0.1 ∙ log2 0.1 − 0.7 ∙ log2 0.7 ≈ 1.356
这种情况比前面确定性类别的例子的确定性要稍微大点。
在介绍完熵的概念后,我们基于熵引出交叉熵(Cross Entropy)的定义:
H(p||q) = -\sum _{I}p(i)log_{2}q(i)
通过变换,交叉熵可以分解为𝑝的熵𝐻(𝑝)和𝑝与𝑞的 KL 散度(Kullback-Leibler Divergence)的 和:
H(p||q) = H(p) + D_{KL}(p||q)
D_{KL}(p||q) = \sum_{I}p(i)log(\frac{p(i)}{q(i)})
𝑝 = 𝑞时,𝐷𝐾𝐿(𝑝||𝑞)取得最小值0,𝑝与𝑞之间的差距越大,𝐷𝐾𝐿(𝑝||𝑞)也越 大。需要注意的是,交叉熵和 KL 散度都不是对称的,即:
𝐻(𝑝||𝑞) ≠ 𝐻(𝑞||𝑝)
𝐷𝐾𝐿(𝑝||𝑞) ≠ 𝐷𝐾𝐿(𝑞||𝑝)
https://www.jianshu.com/p/23623fe17f64
建议去看看这个链接,我的感觉阐述的方向有些看不懂。