文章目录

  • Cora数据集信息
    • 类别信息
    • 样本信息
    • 图的性质
    • 类别分布
  • 论文的实验设置
    • 超参数
    • 数据集划分
  • 模型架构
  • 不同损失函数的训练结果
    • nll_loss
    • CE loss
    • focal loss:γ\gammaγ=1.5,α\alphaα_multiple=2
    • 三种损失函数的比较
  • 结论
    • 三种损失函数的信息
    • 从训练结果可以看出什么
  • 为什么Focal Loss失效了
    • 高置信度样本和低置信度样本的矛盾
    • 小训练集的过拟合

Cora数据集信息

Cora数据集有2708个样本点,每个样本点表示一篇论文。所有样本点分为7个类别。

类别信息

7个类别依次为:

  • Case_Based
  • Theory
  • Genetic_Algorithms
  • Probabilistic_Methods
  • Neural_Networks
  • Reinforcement_Learning
  • Rule_Learning

样本信息

每篇论文都由一个1433维的词向量表示,即每个样本点具有1433个特征。词向量的每个元素都对应一个词,且该元素只有0或1两个取值。取0表示该元素对应的词不在论文中,取1表示在论文中。所有的词来源于一个具有1433个词的字典。


图的性质

每篇论文都至少引用了一篇其他论文,或者被其他论文引用。即,样本点构成的图是一个连通图,不存在孤立点。

关于连通图的知识,引用大佬的一点见解:

严格上说,GCN是基于拉普拉斯矩阵的谱模型。拉普拉斯矩阵是针对连通图来定义的,虽然运行起来好像也没什么问题。空间模型就没有这些限制,例如GAY GraphSAGE。

补充一点,拉普拉斯矩阵特征值中0的个数就是图的连通分支个数,之前看过一些图聚类算法就是通过控制拉普拉斯矩阵特征值中0的个数来聚类的。

一个连通图的拉普拉斯矩阵特征值都是大于0的。


类别分布

每个类别的样本数如下:

Case_Based :  298
Genetic_Algorithms :  418
Neural_Networks :  818
Probabilistic_Methods :  426
Reinforcement_Learning :  217
Rule_Learning :  180
Theory :  351

具体的类别分布,使用t-SNE算法降维可视化:


论文的实验设置

超参数

默认超参数如下:

the settings are as following:
no_cuda : False
fastmode : False
seed : 42
epochs : 200
lr : 0.01
weight_decay : 0.0005
hidden : 16
dropout : 0.5
no_visual : False

数据集划分

整个Cora数据集被划分为三个子集:训练集,验证集,测试集。三者的比例为140:300:1000。

三者的类别分布情况如下:

  • 训练集:

    Case_Based :  14
    Genetic_Algorithms :  11
    Neural_Networks :  41
    Probabilistic_Methods :  28
    Reinforcement_Learning :  21
    Rule_Learning :  8
    Theory :  17Case_Based :  0.0470
    Genetic_Algorithms :  0.0263
    Neural_Networks :  0.0501
    Probabilistic_Methods :  0.0657
    Reinforcement_Learning :  0.0968
    Rule_Learning :  0.0444
    Theory :  0.0484
    
  • 验证集:

    Case_Based :  31
    Genetic_Algorithms :  25
    Neural_Networks :  105
    Probabilistic_Methods :  47
    Reinforcement_Learning :  38
    Rule_Learning :  20
    Theory :  34Case_Based :  0.1040
    Genetic_Algorithms :  0.0598
    Neural_Networks :  0.1284
    Probabilistic_Methods :  0.1103
    Reinforcement_Learning :  0.1751
    Rule_Learning :  0.1111
    Theory :  0.0969
    
  • 测试集:

    Case_Based :  118
    Genetic_Algorithms :  159
    Neural_Networks :  309
    Probabilistic_Methods :  138
    Reinforcement_Learning :  72
    Rule_Learning :  57
    Theory :  147Case_Based :  0.3960
    Genetic_Algorithms :  0.3804
    Neural_Networks :  0.3778
    Probabilistic_Methods :  0.3239
    Reinforcement_Learning :  0.3318
    Rule_Learning :  0.3167
    Theory :  0.4188
    

模型架构

使用了 torchsummarX

network architecture:
==================================================Kernel Shape Output Shape  Params  Mult-Adds
Layer
0_gc1   [16, 1433]   [2708, 16]   22944      22928
1_gc2      [7, 16]    [2708, 7]     119        112
--------------------------------------------------Totals
Total params           23063
Trainable params       23063
Non-trainable params       0
Mult-Adds              23040
==================================================

不同损失函数的训练结果

nll_loss


CE loss

focal loss:γ\gammaγ=1.5,α\alphaα_multiple=2

三种损失函数的比较

  • accuracy:

    nll loss:0.8450

    CE loss:0.8450

    focal loss:

    • γ\gammaγ=2, α\alphaα_multiple=2:0.8390
    • γ\gammaγ=1.5,α\alphaα_multiple=2:0.8380
  • epoch=190时,所有样本的pt分布

  • epoch = 190时,训练集样本的pt分布

结论

三种损失函数的信息

nll loss 和 CE loss 的训练结果完全一致,二者说白了其实是一个损失函数,只是表示的方式不同。

CE loss 的信息如下

loss(x,class)=−log(exp(x[class])∑jexp(x[j]))loss(x,class)=−log(\frac{exp(x[class])}{\sum _jexp(x[j])}) loss(x,class)=−log(∑j​exp(x[j])exp(x[class])​)

This criterion combines nn.LogSoftmax() and nn.NLLLoss() in one single class.

It is useful when training a classification problem with C classes. If provided, the optional argument weight should be a 1D Tensor assigning weight to each of the classes. This is particularly useful when you have an unbalanced training set.

The input is expected to contain raw, unnormalized scores for each class.

nll loss 信息如下

The negative log likelihood loss. It is useful to train a classification problem with C classes.

If provided, the optional argument weight should be a 1D Tensor assigning weight to each of the classes. This is particularly useful when you have an unbalanced training set.

focal loss 是论文[1708.02002] Focal Loss for Dense Object Detection 提出的损失函数。其公式如下:

核心思想其实就是γ\gammaγ项的引入,即 (1−p)γ(1-p)^\gamma(1−p)γ 和 pγp^\gammapγ 这两项。结果为降低高置信度样本产生的损失,从而使模型更加专注于难分类 (即低置信度) 样本

从训练结果可以看出什么

  1. 样本不平衡带来的影响

    上图说明,无论损失函数选择CE、nll或是focal loss,样本类别数最少的一类 (上图中棕色) 是分类正确率最低的一类。这也是为什么说focal loss是处理样本不平衡方法的一种通用方案。因为一般来说,少样本的类别,其样本的置信度普遍不高

  2. CE和nll反映出的样本不平衡

    首先要看,测试集样本占全部样本的比例:

    Case_Based :  0.0470
    Genetic_Algorithms :  0.0263
    Neural_Networks :  0.0501
    Probabilistic_Methods :  0.0657
    Reinforcement_Learning :  0.0968
    Rule_Learning :  0.0444
    Theory :  0.0484
    

    各类别作为训练集的样本比例相差不大,而且样本数最少的类别Rule_Learning (棕色) 比例有0.0444,大致为中间值。即该样本置信度低的原因并不是训练集样本选的少

    从CE和nll的结果来看 (结合训练集样本比例) ,类别的样本数越多,整体的置信度越高 (比如上图,高置信度样本绿色最多,其次是红色和橙色) ;于此相对应的,少样本的类别整体的置信度要低于多样本类别。

  3. focal loss 对模型的影响

    如前所说,focal loss 的核心思想是通过降低高置信度样本产生的损失,从而使模型更加专注于难分类 (即低置信度) 样本

    从实验结果来看,focal loss 模型输出的高置信度样本的数量要远远少于CE,这就反映了focal loss对高置信度样本的抑制 (即认为高置信度 (易分类) 样本对模型提升小,故对其赋予较低的权重) 。

    focal loss的另一个结果是使得第六类 Rule_Learning 的样本的pt整体上浮,即在CE下难以被分类正确的样本在focal loss下更容易被分类正确 (即模型更专注于难分类样本)。


为什么Focal Loss失效了

高置信度样本和低置信度样本的矛盾

这个矛盾简单来说,就是模型更偏向于难样本的同时,并没有对易样本进行保持,这是focal loss的一个副作用。

我们希望易样本一直保持易样本,而使难样本也变成易样本。而在focal loss下,由于对高置信度样本的 γ\gammaγ 衰减,易样本也会有一部分变为难样本

即focal loss下,难样本–>易样本、易样本–>难样本,是同时发生的(有待于进一步的实验验证)。反映在实验结果上,即出现pt向中间聚集的情况 (高置信度样本的损失被抑制,低置信度样本的损失被相对放大)。

而这个副作用,实际上被focal loss的提出场景规避了。

这个还要从 focal loss 提出的场景说起。focal loss是针对目标检测中的one-stage方法提出的,意在从大量的负易样本中分类出正难样本。

关于样本的分类,按照正/负难/易可以分为下面四类:

正难( 正易,γ\gammaγ衰减
负难,α\alphaα衰减 负易,α\alphaα,γ\gammaγ衰减(

focal loss使得正难样本的分类正确率提高 (即正样本被分类为正样本,我们希望看到的) ,不好的一点是会有一部分原本被分类正确的负样本被分类错误 (即负样本被分类为正样本) 。

这个副作用被规避有两个主要的原因:

  1. 目标检测中的负样本中负易占极大的比例

    这就使得,尽管有focal loss对易样本的抑制,负样本被错分的概率依旧比较小。因为相比于pt较小的负难更可能被错误分类为正样本,pt较大的负易经由focal loss之后大概率还是负易

  2. 正样本的意义 > 负样本的意义

    正样本是要检测的目标,负样本是背景。正样本对我们的意义要大于负样本,即正样本被检测出来越多越好。也就是说,只要检测目标的准确率提高了,哪怕背景有时候会被错分,模型性能也是提高的。

而对于分类问题,这两个原因就不成立了。

  1. 分类任务的各类别都是难易样本混杂的

    分类任务几乎不存在一类都是易样本的情况。这就导致,focal loss带来的副作用更大了。即,会有更多的pt较小的、原本被分类正确的难样本,在经过focal loss优化之后,被分类错误。

  2. 各类别重要性不存在高低之分

    也就是说,某一类别准确率的提高,并不能抵消另一类别准确率的下降。

小训练集的过拟合

损失函数是针对训练集优化的。而对于小训练集的而言,训练集样本大多都可以称为易样本。

这样一来,相比于focal loss对难样本的提高,其对易样本的抑制要更为明显。即副作用要更加明显。

[GCN+FocalLoss] 从数据角度分析实验 of Semi-supervised classification with graph convolutional networks相关推荐

  1. GCN - Semi-Supervised Classification with Graph Convolutional Networks 用图卷积进行半监督节点分类 ICLR 2017

    目录 文章目录 1 为什么GCN是谱图卷积的一阶局部近似?- GCN的推导 谱图卷积 Layer-wise Linear Model(逐层线性模型) 简化:K=1(2个参数的模型) 简化:1个参数的模 ...

  2. [GCN] 代码解析 of GitHub:Semi-supervised classification with graph convolutional networks

    本文解析的代码是论文Semi-Supervised Classification with Graph Convolutional Networks作者提供的实现代码. 原GitHub:Graph C ...

  3. SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS 论文/GCN学习笔记

    1 前置知识:卷积与CNN 该内容在论文中并没有涉及,但理解卷积和CNN对于GCN的理解有帮助,因为GCN是将CNN推广到新的数据结构:graph上面. 1.1与1.2的内容均来自视频:https:/ ...

  4. 图卷积网络(Graph Convolutional Networks, GCN)详细介绍

    本文翻译自博客. 在这篇博文中会为大家详细地介绍目前使用广泛的图神经网络--图卷积网络(Graph Convolutional Networks, GCN)的相关知识.首先将带领大家直觉上感受其工作原 ...

  5. 图融合GCN(Graph Convolutional Networks)

    图融合GCN(Graph Convolutional Networks) 数据其实是图(graph),图在生活中无处不在,如社交网络,知识图谱,蛋白质结构等.本文介绍GNN(Graph Neural ...

  6. [GCN] Modification of Graph Convolutional Networks in PyTorch

    Modification of Graph Convolutional Networks in PyTorch 代码见GitHub:Modification-of-Graph-Convolutiona ...

  7. RGCN - Modeling Relational Data with Graph Convolutional Networks 使用图卷积网络对关系数据进行建模 ESWC 2018

    文章目录 1 相关介绍 两个任务 main contributions 2 Neural relational modeling 2.1 符号定义 2.2 关系图卷积网络R-GCN 2.3 Regul ...

  8. [GCN] 增加可视化+代码注释 of GitHub项目:Graph Convolutional Networks in PyTorch

    增加可视化+代码注释 of GitHub项目:Graph Convolutional Networks in PyTorch 更详细的,强烈推荐另一篇博客:[GCN] 代码解析 of GitHub:G ...

  9. 方面级情感分析论文泛03:Aspect-based Sentiment Classification with Aspect-specific Graph Convolutional Networks

    提示1:原文链接 提示2:代码链接 文章目录 前言 一.论文信息 二.笔记要点 2.1 存在的问题 2.2 目前解决方法 2.3 本文方法和创新点 2.4 模型结构 2.5 实验结果 2.6 总结和展 ...

最新文章

  1. 入门必备 | 一文读懂神经架构搜索
  2. ISP PIPLINE (九_1) Denoise 之 space domain denoise
  3. 什么样的数据适合缓存?
  4. python如何做一个数据库_Python创建一个新的Django项目(连接到MySQL数据库),python,新建,mysql...
  5. TabHost选项卡的 功能和用法
  6. windows消息定义
  7. (*长期更新)软考网络工程师学习笔记——Section 14 Linux服务器配置
  8. FTD概要图之MVC架构
  9. zabbix中文乱码的解决办法
  10. AR/VR learning (2)--unity3D在android 上的手势识别与检测
  11. C语言教程-Turbo C
  12. Intellij Idea更换编程字体
  13. 人生感悟-是留丰碑还是墓碑
  14. ESP8266最小系统
  15. CIFAR10图像分类ResNet模型实战(pytorch)
  16. 如何申请Autodesk ReCap 360 photo的云币(Cloud Credit)
  17. cocos2d - 触摸事件
  18. 计算机桌面网络连接,我电脑开机进入桌面后要等近5分钟右下角才会出现网络连接图标,进而才能上网,为什么?...
  19. 算法比赛经历--蓝桥杯,天梯赛,力扣,牛客,cf,acwing,acm
  20. vue-企业微信绑定和解绑

热门文章

  1. 简单python脚本实例-python常用运维脚本实例
  2. 一文读懂语音语义识别技术的现状与未来
  3. android 4实例分析,OpenGL Shader实例分析(4)闪光效果
  4. mac m1 nvm 安装node版本失败
  5. 【java笔记】线程间通信(2):生产者和消费者案例分析
  6. 耐克人脸识别_狄耐克智能交通再结一位“老铁”——与力高地产达成战略合作协议!...
  7. ps打开闪退_PS教程派 | 水花四溅的草莓切块效果,如此简单!
  8. android java代码打印系统日志_Java快速开发平台源码
  9. 【2021牛客暑期多校训练营5】K King of Range(单调队列)
  10. 【基础】算法的时间复杂度分析