KL散度原理和实现
KL散度计算:
KL散度(Kullback-Leibler Divergence)一般用于度量两个概率分布函数之间的相似程度:离散求和、连续求积分。
  
      
       
        
        
          KL 
         
        
           
         
        
          ( 
         
        
          P 
         
        
          ∥ 
         
        
          Q 
         
        
          ) 
         
        
          = 
         
        
          ∑ 
         
        
          P 
         
        
          ( 
         
        
          x 
         
        
          ) 
         
        
          log 
         
        
           
         
         
          
          
            P 
           
          
            ( 
           
          
            x 
           
          
            ) 
           
          
          
          
            Q 
           
          
            ( 
           
          
            x 
           
          
            ) 
           
          
         
        
       
         \operatorname{KL}(P\|Q)=\sum P(x)\log\frac{P(x)}{Q(x)} 
        
       
     KL(P∥Q)=∑P(x)logQ(x)P(x)
KL  ( P ∥ Q ) = ∫ P ( x ) log  P ( x ) Q ( x ) d x \operatorname{KL}(P\|Q)=\int P(x)\log\frac{P(x)}{Q(x)}dx KL(P∥Q)=∫P(x)logQ(x)P(x)dx
参考:
KL散度理解以及使用pytorch计算KL散度 - 知乎 (zhihu.com)
KL散度 (Kullback-Leibler divergence) - 知乎 (zhihu.com)
pytorch实现KL散度:
先用softmax计算概率,再进行KL散度计算
import torch.nn.functional as F
kl = F.kl_div(x.softmax(dim=-1).log(), y.softmax(dim=-1), reduction='sum')