為什麼我們在 t-SNE 目標函數中使用 Kullback-Leibler 散度而不是交叉熵?
在我看來,從樣本分佈到真實分佈的 KL 散度只是交叉熵和熵之間的差異。
為什麼我們在很多機器學習模型中使用交叉熵作為代價函數,而在 t-sne 中使用 Kullback-Leibler 散度?學習速度有區別嗎?
KL散度是衡量兩個概率分佈之間差異的自然方法。熵分佈的給出對從. 實現這一界限需要使用為,它將較短的代碼字分配給概率較高的事件。可以解釋為對來自真實分佈的事件進行編碼所需的每條消息的預期額外比特數, 如果使用最優代碼進行分發而不是. 它有一些用於比較分佈的好特性。例如,如果和相等,則 KL 散度為 0。
交叉熵可以解釋為每條消息所需的比特數(平均)來編碼從真實分佈中提取的事件, 如果使用最優代碼進行分發. 注意區別:測量每條消息的平均額外比特數,而測量每條消息的平均總比特數。確實,對於固定,會成長為變得越來越不同於. 但是,如果不固定,很難解釋作為差異的絕對度量,因為它隨著熵的增長而增長.
KL 散度和交叉熵的關係如下:
從這個表達式我們可以看出,當和相等,交叉熵不為零;相反,它等於熵.
交叉熵通常出現在機器學習的損失函數中。在許多這樣的情況下,被視為“真實”分佈,並且作為我們正在嘗試優化的模型。例如,在分類問題中,常用的交叉熵損失(又稱對數損失)測量標籤的經驗分佈(給定輸入)與分類器預測的分佈之間的交叉熵。每個數據點的經驗分佈只是將概率 1 分配給該數據點的類別,並將 0 分配給所有其他類別。旁注:在這種情況下,交叉熵與負對數似然成正比,因此最小化它等同於最大化似然性。
注意(本例中的經驗分佈)是固定的。因此,這相當於說我們正在最小化經驗分佈和預測分佈之間的 KL 散度。正如我們在上面的表達式中看到的,兩者通過加法項相關聯(經驗分佈的熵)。因為是固定的,不隨模型的參數變化,在損失函數中可以忽略。出於理論/哲學原因,我們可能仍想討論 KL 散度,但在這種情況下,從解決優化問題的角度來看,它們是等價的。這可能不適用於交叉熵和 KL 散度的其他用途,其中可能會有所不同。
t-SNE 擬合分佈在輸入空間。每個數據點都映射到嵌入空間,其中對應的分佈是合適的。該算法嘗試調整嵌入以最小化. 如上,保持固定。因此,從優化問題的角度來看,最小化 KL 散度和最小化交叉熵是等價的。事實上,van der Maaten 和 Hinton(2008 年)在第 2 節中說:“衡量忠誠度的自然標準楷模是 Kullback-Leibler 散度(在這種情況下等於交叉熵直到一個加性常數)。”
van der Maaten 和 Hinton (2008)。使用 t-SNE 可視化數據。