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,则交叉熵的公式可变形为:
softmax 和 带有温度t的softmax性质分析, 带有温度的softmax使得输出的概率分布更加平滑
感谢up主,https://www.bilibili.com/video/av87124082?from=search&seid=15136075071288444663