激活函數在神經網絡中作用有很多,主要作用是給神經網絡提供非線性建模能力。如果沒有激活函數,那么再多層的神經網絡也只能處理線性可分問題。
在搭建神經網絡時,如何選擇激活函數?如果搭建的神經網絡層數不多,選擇sigmoid、tanh、relu、softmax都可以;而如果搭建的網絡層次較多,那就需要小心,選擇不當就可導致梯度消失問題。此時一般不宜選擇sigmoid、tanh激活函數,因它們的導數都小于1,尤其是sigmoid的導數在[0,1/4]之間,多層疊加后,根據微積分鏈式法則,隨著層數增多,導數或偏導將指數級變小。所以層數較多的激活函數需要考慮其導數不宜小于1當然也不能大于1,大于1將導致梯度爆炸,導數為1最好,而激活函數relu正好滿足這個條件。所以,搭建比較深的神經網絡時,一般使用relu激活函數,當然一般神經網絡也可使用。
————————————————————
損失函數(Loss Function)在機器學習中非常重要,因為訓練模型的過程實際就是優化損失函數的過程。損失函數對每個參數的偏導數就是梯度下降中提到的梯度,防止過擬合時添加的正則化項也是加在損失函數后面。損失函數用來衡量模型的好壞,損失函數越小說明模型和參數越符合訓練樣本。任何能夠衡量模型預測值與真實值之間的差異的函數都可以叫作損失函數。在機器學習中常用的損失函數有兩種,即交叉熵(Cross Entropy)和均方誤差(Mean squared error,MSE),分別對應機器學習中的分類問題和回歸問題。
分類問題的損失函數一般采用交叉熵,交叉熵反應的兩個概率分布的距離(不是歐氏距離)?。分類問題進一步又可分為多目標分類,如一次要判斷100張圖是否包含10種動物,或單目標分類。回歸問題預測的不是類別,而是一個任意實數。在神經網絡中一般只有一個輸出節點,該輸出值就是預測值。反應的預測值與實際值之間的距離可以用歐氏距離來表示,所以對這類問題通常使用均方差作為損失函數
PyTorch中已集成多種損失函數,這里介紹兩個經典的損失函數,其他損失函數基本上是在它們的基礎上的變種或延伸。
1.torch.nn.MSELoss
2.torch.nn.CrossEntropyLoss交叉熵損失(Cross-Entropy Loss)又稱對數似然損失(Log-likelihood Loss)、對數損失;二分類時還可稱之為邏輯回歸損失(Logistic Loss)。在PyTroch里,它不是嚴格意義上的交叉熵損失函數,而是先將Input經過softmax激活函數,將向量“歸一化”成概率形式,然后再與target計算嚴格意義上的交叉熵損失。在多分類任務中,經常采用softmax激活函數+交叉熵損失函數,因為交叉熵描述了兩個概率分布的差異,然而神經網絡輸出的是向量,并不是概率分布的形式。所以需要softmax激活函數將一個向量進行“歸一化”成概率分布的形式,再采用交叉熵損失函數計算loss。