Neural-Networks

如何為一般回歸目標構建交叉熵損失?

  • November 22, 2018

在神經網絡文獻中,將分類交叉熵損失簡單地稱為“交叉熵”是一種常見的簡寫。然而,這個術語是模棱兩可的,因為不同的概率分佈具有不同的交叉熵損失函數。

那麼,一般來說,如何從目標變量的假設概率分佈轉變為為您的網絡定義交叉熵損失?該函數需要什麼作為輸入?(例如,one-hot 目標的分類交叉熵函數需要 one-hot 二元向量和概率向量作為輸入。)

一個好的答案將討論所涉及的一般原則,以及適用於

  • 單熱目標的分類交叉熵損失
  • 高斯分佈的目標分佈以及如何減少到通常的 MSE 損失
  • 一個不太常見的例子,例如伽馬分佈目標或重尾目標
  • 解釋最小化交叉熵和最大化對數似然之間的關係。

假設我們試圖推斷參數分佈 $ p(y|\Theta(X)) $ , 在哪裡 $ \Theta(X) $ 是一個向量輸出反向鏈接函數 $ [\theta_1,\theta_2,…,\theta_M] $ .

我們手頭有一個神經網絡,我們決定了一些拓撲結構。輸出層的輸出數量與我們想要推斷的參數數量相匹配(如果我們不關心所有參數,它可能會更少,正如我們將在下面的示例中看到的那樣)。

在此處輸入圖像描述

在隱藏層中,我們可以使用我們喜歡的任何激活函數。至關重要的是每個參數的輸出激活函數,因為它們必須與參數的支持兼容。

在此處輸入圖像描述

一些示例對應:

  • 線性激活: $ \mu $ , 高斯分佈的均值
  • 物流激活: $ \mu $ , 伯努利分佈的平均值
  • 軟加激活: $ \sigma $ , 高斯分佈的標準差, Gamma 分佈的形狀參數

交叉熵的定義:

$$ H(p,q) = -E_p[\log q(y)] = -\int p(y) \log q(y) dy $$

在哪裡 $ p $ 是理想的真理,並且 $ q $ 是我們的模型。

經驗估計:

$$ H(p,q) \approx -\frac{1}{N}\sum_{i=1}^N \log q(y_i) $$

在哪裡 $ N $ 是來自的獨立數據點的數量 $ p $ .

條件分佈版本:

$$ H(p,q) \approx -\frac{1}{N}\sum_{i=1}^N \log q(y_i|\Theta(X_i)) $$

現在假設網絡輸出是 $ \Theta(W,X_i) $ 對於給定的輸入向量 $ X_i $ 和所有網絡權重 $ W $ ,則預期交叉熵的訓練過程為:

$$ W_{opt} = \arg \min_W -\frac{1}{N}\sum_{i=1}^N \log q(y_i|\Theta(W,X_i)) $$

相當於網絡參數的最大似然估計。

一些例子:

$$ \mu = \theta_1 : \text{linear activation} $$ $$ \sigma = \theta_2: \text{softplus activation*} $$ $$ \text{loss} = -\frac{1}{N}\sum_{i=1}^N \log [\frac{1} {\theta_2(W,X_i)\sqrt{2\pi}}e^{-\frac{(y_i-\theta_1(W,X_i))^2}{2\theta_2(W,X_i)^2}}] $$

在同方差下我們不需要 $ \theta_2 $ 因為它不影響優化並且表達式簡化為(在我們丟棄不相關的常量之後):

$$ \text{loss} = \frac{1}{N}\sum_{i=1}^N (y_i-\theta_1(W,X_i))^2 $$

$$ \mu = \theta_1 : \text{logistic activation} $$ $$ \text{loss} = -\frac{1}{N}\sum_{i=1}^N \log [\theta_1(W,X_i)^{y_i}(1-\theta_1(W,X_i))^{(1-y_i)}] $$ $$ = -\frac{1}{N}\sum_{i=1}^N y_i\log [\theta_1(W,X_i)] + (1-y_i)\log [1-\theta_1(W,X_i)] $$

和 $ y_i \in {0,1} $ .

$$ \alpha \text{(shape)} = \theta_1 : \text{softplus activation*} $$ $$ \beta \text{(rate)} = \theta_2: \text{softplus activation*} $$

$$ \text{loss} = -\frac{1}{N}\sum_{i=1}^N \log [\frac{\theta_2(W,X_i)^{\theta_1(W,X_i)}}{\Gamma(\theta_1(W,X_i))} y_i^{\theta_1(W,X_i)-1}e^{-\theta_2(W,X_i)y_i}] $$

一些約束不能通過普通的神經網絡工具箱直接處理(但現在它們似乎做了非常高級的技巧)。這是其中一種情況:

$$ \mu_1 = \theta_1 : \text{logistic activation} $$ $$ \mu_2 = \theta_2 : \text{logistic activation} $$ … $$ \mu_K = \theta_K : \text{logistic activation} $$

我們有一個約束 $ \sum \theta_i = 1 $ . 所以我們在將它們插入發行版之前修復它:

$$ \theta_i' = \frac{\theta_i}{\sum_{j=1}^K \theta_j} $$

$$ \text{loss} = -\frac{1}{N}\sum_{i=1}^N \log [\Pi_{j=1}^K\theta_i'(W,X_i)^{y_{i,j}}] $$

注意 $ y $ 在這種情況下是一個向量。另一種方法是Softmax

*不幸的是,ReLU 並不是一個特別好的激活函數 $ (0,\infty) $ 由於兩個原因。首先,它在左象限有一個死導數區域,這會導致優化算法陷入困境。其次,在恰好為 0 值時,許多分佈對於參數的值會變得奇異。出於這個原因,通常的做法是添加一個小值 $ \epsilon $ 協助現成的優化器和數值穩定性。

正如@Sycorax Softplus 所建議的那樣,激活是一個更好的替代品,因為它沒有死派生區。

在此處輸入圖像描述

概括:

  1. 將網絡輸出插入分佈參數並獲取 -log,然後最小化網絡權重。
  2. 這相當於參數的最大似然估計。

引用自:https://stats.stackexchange.com/questions/378274

comments powered by Disqus