10.06 神經網絡中的各種損失函數介紹

神經網絡中的各種損失函數介紹

不同的損失函數可用於不同的目標。在這篇文章中,我將帶你通過一些示例介紹一些非常常用的損失函數。這篇文章提到的一些參數細節都屬於tensorflow或者keras的實現細節。

損失函數的簡要介紹

損失函數有助於優化神經網絡的參數。我們的目標是通過優化神經網絡的參數(權重)來最大程度地減少神經網絡的損失。通過神經網絡將目標(實際)值與預測值進行匹配,再經過損失函數就可以計算出損失。然後,我們使用梯度下降法來優化網絡權重,以使損失最小化。這就是我們訓練神經網絡的方式。

均方誤差

當你執行迴歸任務時,可以選擇該損失函數。顧名思義,這種損失是通過計算實際(目標)值和預測值之間的平方差的平均值來計算的。

例如,你有一個神經網絡,通過該網絡可以獲取一些與房屋有關的數據並預測其價格。在這種情況下,你可以使用MSE(均方誤差)損失。基本上,在輸出為實數的情況下,應使用此損失函數。

神經網絡中的各種損失函數介紹

二元交叉熵

當你執行二元分類任務時,可以選擇該損失函數。如果你使用BCE(二元交叉熵)損失函數,則只需一個輸出節點即可將數據分為兩類。輸出值應通過sigmoid激活函數,以便輸出在(0-1)範圍內。

例如,你有一個神經網絡,該網絡獲取與大氣有關的數據並預測是否會下雨。如果輸出大於0.5,則網絡將其分類為會下雨;如果輸出小於0.5,則網絡將其分類為不會下雨。即概率得分值越大,下雨的機會越大。

神經網絡中的各種損失函數介紹

訓練網絡時,如果標籤是下雨,則輸入網絡的目標值應為1,否則為0。

重要的一點是,如果你使用BCE損失函數,則節點的輸出應介於(0-1)之間。這意味著你必須在最終輸出中使用sigmoid激活函數。因為sigmoid函數可以把任何實數值轉換(0–1)的範圍。(也就是輸出概率值)

如果你不想在最後一層上顯示使用sigmoid激活函數,你可以在損失函數的參數上設置from logits為true,它會在內部調用Sigmoid函數應用到輸出值。

多分類交叉熵

當你執行多類分類任務時,可以選擇該損失函數。如果使用CCE(多分類交叉熵)損失函數,則輸出節點的數量必須與這些類相同。最後一層的輸出應該通過softmax激活函數,以便每個節點輸出介於(0-1)之間的概率值。

例如,你有一個神經網絡,它讀取圖像並將其分類為貓或狗。如果貓節點具有高概率得分,則將圖像分類為貓,否則分類為狗。基本上,如果某個類別節點具有最高的概率得分,圖像都將被分類為該類別。

神經網絡中的各種損失函數介紹

為了在訓練時提供目標值,你必須對它們進行一次one-hot編碼。如果圖像是貓,則目標向量將為(1,0),如果圖像是狗,則目標向量將為(0,1)。基本上,目標向量的大小將與類的數目相同,並且對應於實際類的索引位置將為1,所有其他的位置都為零。

如果你不想在最後一層上顯示使用softmax激活函數,你可以在損失函數的參數上設置from logits為true,它會在內部調用softmax函數應用到輸出值。與上述情況相同。

稀疏多分類交叉熵

該損失函數幾乎與多分類交叉熵相同,只是有一點小更改。

使用SCCE(稀疏多分類交叉熵)損失函數時,不需要one-hot形式的目標向量。例如如果目標圖像是貓,則只需傳遞0,否則傳遞1。基本上,無論哪個類,你都只需傳遞該類的索引。

神經網絡中的各種損失函數介紹

這些是最重要的損失函數。訓練神經網絡時,可能會使用這些損失函數之一。

下面的鏈接是Keras中所有可用損失函數的源代碼。

(https://github.com/keras-team/keras/blob/c658993cf596fbd39cf800873bc457e69cfb0cdb/keras/backend/numpy_backend.py)


分享到:


相關文章: