如何為一般回歸目標構建交叉熵損失?
在神經網絡文獻中,將分類交叉熵損失簡單地稱為“交叉熵”是一種常見的簡寫。然而,這個術語是模棱兩可的,因為不同的概率分佈具有不同的交叉熵損失函數。
那麼,一般來說,如何從目標變量的假設概率分佈轉變為為您的網絡定義交叉熵損失?該函數需要什麼作為輸入?(例如,one-hot 目標的分類交叉熵函數需要 one-hot 二元向量和概率向量作為輸入。)
一個好的答案將討論所涉及的一般原則,以及適用於
- 單熱目標的分類交叉熵損失
- 高斯分佈的目標分佈以及如何減少到通常的 MSE 損失
- 一個不太常見的例子,例如伽馬分佈目標或重尾目標
- 解釋最小化交叉熵和最大化對數似然之間的關係。
假設我們試圖推斷參數分佈 p(y|Θ(X)) , 在哪裡 Θ(X) 是一個向量輸出反向鏈接函數 [θ1,θ2,…,θM] .
我們手頭有一個神經網絡,我們決定了一些拓撲結構。輸出層的輸出數量與我們想要推斷的參數數量相匹配(如果我們不關心所有參數,它可能會更少,正如我們將在下面的示例中看到的那樣)。
在隱藏層中,我們可以使用我們喜歡的任何激活函數。至關重要的是每個參數的輸出激活函數,因為它們必須與參數的支持兼容。
一些示例對應:
- 線性激活: μ , 高斯分佈的均值
- 物流激活: μ , 伯努利分佈的平均值
- 軟加激活: σ , 高斯分佈的標準差, Gamma 分佈的形狀參數
交叉熵的定義:
H(p,q)=−Ep[logq(y)]=−∫p(y)logq(y)dy
在哪裡 p 是理想的真理,並且 q 是我們的模型。
經驗估計:
H(p,q)≈−1NN∑i=1logq(yi)
在哪裡 N 是來自的獨立數據點的數量 p .
條件分佈版本:
H(p,q)≈−1NN∑i=1logq(yi|Θ(Xi))
現在假設網絡輸出是 Θ(W,Xi) 對於給定的輸入向量 Xi 和所有網絡權重 W ,則預期交叉熵的訓練過程為:
Wopt=argminW−1NN∑i=1logq(yi|Θ(W,Xi))
這相當於網絡參數的最大似然估計。
一些例子:
- 回歸:具有異方差性的高斯分佈
μ=θ1:linear activation
σ=θ2:softplus activation*loss=−1NN∑i=1log[1θ2(W,Xi)√2πe−(yi−θ1(W,Xi))22θ2(W,Xi)2]在同方差下我們不需要 θ2 因為它不影響優化並且表達式簡化為(在我們丟棄不相關的常量之後):
loss=1NN∑i=1(yi−θ1(W,Xi))2
- 二進制分類:伯努利分佈
μ=θ1:logistic activation
loss=−1NN∑i=1log[θ1(W,Xi)yi(1−θ1(W,Xi))(1−yi)]=−1NN∑i=1yilog[θ1(W,Xi)]+(1−yi)log[1−θ1(W,Xi)]和 yi∈0,1 .
- 回歸:伽馬響應
α(shape)=θ1:softplus activation*
β(rate)=θ2:softplus activation*loss=−1NN∑i=1log[θ2(W,Xi)θ1(W,Xi)Γ(θ1(W,Xi))yθ1(W,Xi)−1ie−θ2(W,Xi)yi]
- 多類分類:分類分佈
一些約束不能通過普通的神經網絡工具箱直接處理(但現在它們似乎做了非常高級的技巧)。這是其中一種情況:
μ1=θ1:logistic activation
μ2=θ2:logistic activation… μK=θK:logistic activation我們有一個約束 ∑θi=1 . 所以我們在將它們插入發行版之前修復它:
θ′i=θi∑Kj=1θj
loss=−1NN∑i=1log[ΠKj=1θ′i(W,Xi)yi,j]
注意 y 在這種情況下是一個向量。另一種方法是Softmax。
*不幸的是,ReLU 並不是一個特別好的激活函數 (0,∞) 由於兩個原因。首先,它在左象限有一個死導數區域,這會導致優化算法陷入困境。其次,在恰好為 0 值時,許多分佈對於參數的值會變得奇異。出於這個原因,通常的做法是添加一個小值 ϵ 協助現成的優化器和數值穩定性。
正如@Sycorax Softplus 所建議的那樣,激活是一個更好的替代品,因為它沒有死派生區。
概括:
- 將網絡輸出插入分佈參數並獲取 -log,然後最小化網絡權重。
- 這相當於參數的最大似然估計。