1、entropy
entropy中文叫做熵,也叫不确定性,某种程度上也叫惊喜度(measure of surprise)
=
如果p(x)采用0-1分部,那么entropy=1log1=0
而对于entropy越大,即熵越大,越不稳定,惊喜度越高
例
import torch a=torch.full([4],1/4.) a*torch.log2(a) # tensor([-0.5000, -0.5000, -0.5000, -0.5000]) -(a*torch.log2(a)).sum() #输出 tensor(2.)
输出熵为2,不确定性较大惊喜度就比较高
import torch a=torch.tensor([0.001,0.001,0.001,0.999]) -(a*torch.log2(a)).sum() # 输出tensor(0.0313)
此时,输出熵为0.0313,比较小,不确定性小,惊喜度很低。
2、cross entropy
cross entropy有两个分部,H(p,q)=
推导成
其中,后半部分是KL Divergent,真正衡量两个分部距离的关系。如果,p和q相似度较低,则比较大,如果p和q完全相似,则接近于0。
所以有结论,p=q时,H(p,q)=H(p)即cross entropy=entropy
当采用0-1分布时,H(p)=0,刚好优化
举例说明
而当我们得到的模型概率q(x)变化时,得到以下结果。
3、为什么不用MSE?
原因:(1)当使用sigmoid+MSE时,很容易使sigmoid出现饱和的情况,出现梯度弥散。
(2)梯度信息小,收敛慢
(3)但是偶尔cross entropy不行的时候,可以考虑MSE
4、总结
一个神经网络的流程
python中cross entropy()=softmax()+log+null_loss()
代码过程
import torch import torch.nn.functional as F x=torch.randn(1,784) w=torch.randn(10,784) logits=x@w.t() # x和w矩阵相乘加上b得到logits pred=F.softmax(logits,dim=1) # 经过softmax得到一个pred pred_log=torch.log(pred) # 进行log操作,得到log(pred) F.cross_entropy(logits,torch.tensor([3])) # 使用cross entropy 第一项必须是logits,因为cross entropy内有softmax # python中cross entropy()=softmax()+log+null_loss() #输出tensor(2.9087) F.nll_loss(pred_log,torch.tensor([3])) #输出tensor(2.9087)



