softmax(x) 函數:輸入一個實數向量並返回一個概率分布
log_softmax(x) 函數:對經過softmax的函數經過一次對數運算
NLLLoss 損失:負對數似然損失,negative log likelihood loss,若𝑥𝑖=[𝑞1,𝑞2,...,𝑞𝑁]xi=[q1,q2,...,qN] 為神經網絡對第i個樣本的輸出值,𝑦𝑖yi為真實標簽。 則:𝑓(𝑥𝑖,𝑦𝑖)=−𝑞𝑦𝑖
在分類問題中,CrossEntropy等價於log_softmax 結合 nll_loss
𝑁N分類問題,對於一個特定的樣本,已知其真實標簽,CrossEntropy的計算公式為:𝑐𝑟𝑜𝑠𝑠_𝑒𝑛𝑡𝑟𝑜𝑝𝑦=−∑𝑘=1𝑁(𝑝𝑘∗log𝑞𝑘)cross_entropy=−∑k=1N(pk∗logqk)
其中p表示真實值,在這個公式中是one-hot形式;q是經過softmax計算后的結果, 𝑞𝑘qk為神經網絡認為該樣本為第𝑘k類的概率。
仔細觀察可以知道,因為p的元素不是0就是1,而且又是乘法,所以很自然地我們如果知道1所對應的index,那么就不用做其他無意義的運算了。所以在pytorch代碼中target不是以one-hot形式表示的,而是直接用scalar表示。若該樣本的真實標簽為𝑦y,則交叉熵的公式可變形為:
𝑐𝑟𝑜𝑠𝑠_𝑒𝑛𝑡𝑟𝑜𝑝𝑦=−∑𝑘=1𝑁(𝑝𝑘∗log𝑞𝑘)=−𝑙𝑜𝑔𝑞𝑦
softmax 和 帶有溫度t的softmax性質分析, 帶有溫度的softmax使得輸出的概率分布更加平滑
感謝up主,https://www.bilibili.com/video/av87124082?from=search&seid=15136075071288444663