引言
在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)}} \]