Quora Question Pairs整理 - 理解交叉熵损失函数

引言

在Quora Question Pairs比赛中,我们的目标是判断给定的两个问题的语义信息是否相同(即是否为重复问题),使用的评估标准是log loss,交叉熵损失函数

\[\frac{1}{N}\sum_{i=0}^{N}{-y_i \log{\widehat{y}_i} - (1-y_i)\log{(1-\widehat{y}_i)}} \]

在这个比赛中,训练集和测试集的类型存在不平衡的问题,训练集中存在36%的重复问题,而测试集中仅有大约17%的重复问题。因此我们需要处理不平衡的情况。

一、交叉熵损失函数

交叉熵(cross entropy)是用来评估当前训练得到的概率分布与真实分布的差异情况,减少交叉熵损失就是在提高模型的预测准确率。其离散函数形式

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

这里,\(p(\mathbf{x})\) 是真实分布,\(q(\mathbf{x})\) 是通过数据计算的估计概率。

在二分类问题中,真实的目标要么是 \(1\),要么是 \(0\)\(y_i \in \{0,1\}\)

\(y_i = 1\) 时,

\[P(y_i=1\, |\, \mathbf{x}_i) = 1,P(y_i=0 \,| \,\mathbf{x}_i) = 0 \]

\(y_i = 1\) 时,

\[P(y_i=1\, |\,\mathbf{x}_i) = 0,P(y_i=0\, |\mathbf{x}_i) = 1 \]

而估计的概率

\[P(y_i=1\, |\, \mathbf{x}_i) = \widehat{y}_i,P(y_i=0\, |\,\mathbf{x}_i) = 1 - \widehat{y}_i \]

因此

\[H(p, q) = \frac{1}{N}\sum_{i=0}^{N}{-y_i \log{\widehat{y}_i} - (1-y_i)\log{(1-\widehat{y}_i)}} \]

二、从信息论的角度理解交叉熵损失函数

信息熵是在结果出来之前对可能产生的信息量的期望。

相对熵表示两个概率分布的差异,即KL散度。当两个分布相同时,相对熵的值为 \(0\),其余情况下都大于 \(0\)

\[D(p||q) = \int_{\mathbf{x}} {p(\mathbf{x}) log{\frac{p(\mathbf{x})}{q(\mathbf{x})}}} = -\int_{\mathbf{x}} p(\mathbf{x}) \log{q(\mathbf{x})}d\mathbf{x} - (-\int_{\mathbf{x}} p(\mathbf{x}) \log{p(\mathbf{x})}d\mathbf{x}) \]

前者是交叉熵,而后者是真实分布的信息熵。由于真实分布是固定的,所以信息熵的值是固定的。当交叉熵越小,相对熵则越小,估计的概率分布 \(q(\mathbf{x})\) 越接近真实的分布 \(p(\mathbf{x})\)

三、发现问题

交叉熵损失函数对 \(\widehat{y}_i\) 求导,得到

\[\frac{1-y_i}{1-\widehat{y}_i} = \frac{y_i}{\widehat{y}_i} \]

\(y_i = \widehat{y}_i\) 时可以得到损失函数的最小值。

当训练和测试的数据集中的正例比例不同的时候会影响交叉熵的值。

交叉熵最小化等价于似然函数最大化。假设我们对每个标签为正例的样本都预测一个固定的概率,根据似然函数最大化,得到

\[\widehat{y}_i = \frac{the \, number\, of\, positive \, samples}{the \, number \, of \, samples} \]

如果测试集的正例的比例也接近这个值,那么在该假设情况下我们得到的损失函数最小。

但是,如果训练集和测试集的正例比例不同,那么模型越复杂,越接近临界值的样本(越难判断结果的样本)就越容易受到训练集中正例比例的影响而偏离真实分布。

注:有些损失函数基本不受训练集和测试集的正例比例不同的影响,比如AUC。

四、处理方法

我们假设训练集来自分布 \((X, Y)\),测试集来自分布 \((X', Y')\)

此时,我们假设两个分布的唯一不同点就是他们碰巧有不同的正例比例,即

\[(X\,|\,Y=0) \sim (X'\,|\,Y'=0),\, \, \, \,(X\,|\,Y=1) \sim (X'\,|\,Y'=1) \]

即在类别确定的条件下,\(X\)\(X'\) 属于同一分布。

在训练集中:

\[P(y=1\,|\,\mathbf{x}) = \frac{P(\mathbf{x}\,|\,y=1)P(y=1)}{P(\mathbf{x})} = \frac{P(\mathbf{x}\,|\,y=1)P(y=1)}{P(\mathbf{x}\,|\,y=1)P(y=1)+P(\mathbf{x}\,|\,y=0)P(y=0)} = \frac{u}{u+v} \]

假设当 \(Y'=1\) 时,\(X'\)\(X\) 上以 \(\alpha\) 比例过抽样,当 \(Y'=0\) 时,\(X'\)\(X\) 上以 \(\beta\) 比例过抽样。则在测试集中:

\[P(y'=1\,|\,\mathbf{x}) = \frac{P(\mathbf{x}\,|\,y'=1)P(y'=1)}{P(\mathbf{x}\,|\,y'=1)P(y'=1)+P(\mathbf{x}\,|\,y'=0)P(y'=0)} = \frac{\alpha u}{\alpha u+\beta v} \]

联立,得

\[P(y'=1\,|\,\mathbf{x}) = \frac{\alpha P(y=1\,|\,\mathbf{x})}{\alpha P(y=1\,|\,\mathbf{x})+\beta (1 - P(y=1\,|\,\mathbf{x}))} \]

可以解出 \(\alpha\)\(\beta\) 的值。最终损失函数变为

\[\frac{1}{N}\sum_{i=0}^{N}{-\alpha y_i \log{\widehat{y}_i} - \beta (1-y_i)\log{(1-\widehat{y}_i)}} \]

posted @ 2017-06-14 23:42  viredery  阅读(12219)  评论(0编辑  收藏  举报