博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于《Domain Adaptation with Adversarial Training and Graph Embeddings》的理解
阅读量:2457 次
发布时间:2019-05-10

本文共 1658 字,大约阅读时间需要 5 分钟。

使用对抗学习和图像嵌入的域适应学习

本文将基于对抗学习和图像嵌入的域适应运用于危机状态下的舆情分析,主要处理的前提是:源域有labeled的数据和unlabeled的数据,而目标域unlabeled。模型则包含基于域适应的对抗学习基于图像的半监督学习。数据来源是 two real-world crisis datasets collected from Twitter。

作者做这个模型的立意是为了能有效判断危机状态下社交网络上的信息是否与危机有关,进而讲这些筛选出来的信息加以利用来 例及时营救或者减少损失。(吐槽一下,真正危机状态下还能发社交网络的人是真的“临危不惧”)。

模型的整体思想是:domain adaptation部分来处理 域之间的distribution drift问题,semi-supervised learning来学习两个域中的数据。模型亮点在于:将domain adaptation,semi-supervised learning两部分融合到一个统一的深度学习网络中。该网络中包含基本的CNN网络和domain adaptation部分以及semi-supervised learning部分。semi-supervised learning来学习内部的代表特征通过预测图中的上下文节点(该图则将labeled和unlabeled训练数据之间的相似性编码)。domain adaptation 通过训练特征提取器来实现。整体来讲:学习高度抽象的代表特征来处理主要的分类任务,但是这些特征在域之间保持不变。

得出三条结论:

1半监督+监督  优于   监督

2域适应+对抗   优于  域适应

3神经网络+ 对抗+ 半监督  效果赛高

目前代码还没给出,数据看了看倒是有。

神经网络模型图丢出来:

可以看到整个的神经网络很清楚,通过shared层的处理过程,之后再分为三个不同的训练,最终反向传播,整个流程很清晰。模型训练的过程中使用SGD。

之后就是分别计算三个部分的损失,需要注意的是Semi-supervised Component部分中用到了graph embedding算法,这有个介绍graph embedding的网站,(网上关于介绍graph embedding的不多,我只找到这个,有同学找到更好的请评论留言)。

下面是作者给出的算法流程的伪代码:

最终的结果:

1.

可以看到 graph-based semi-supervised的方法明显要由于其他两种方法;

2.

L代表supervised       L+U表示semi-supervised

可以看到semi-supervised的效果较与supervised有很大的提升,但是我们可以看到提升主要是在100-1000 batch size范围内,超出1000的batch后提升就不大了。所以作者说“The results obtained using batch sizes 500 and 1,000 are reasonably in the acceptable range when labeled and unlabeled instances are combined”当然500-1000也是训练的合适数量,原话“ which is also a reasonable number of training examples to obtain at the onset of an event.”

3.

作者提出的domain adaptation with adversarial training along with graph-based semi-supervised learning的效果当然世界无敌,宇宙最高了。

总结:

1半监督学习是个好东西,遇到labeled、unlabeled的数据可以试一下

2 graph embedding是个好东西,得好好学习

3 对抗的域适应也是棒棒的,要多用

你可能感兴趣的文章
Java ObjectOutputStream flush()方法与示例
查看>>
Java FileInputStream finalize()方法与示例
查看>>
计算机串口映射_计算机科学组织| 映射技术
查看>>
python 示例_带有示例的Python Set remove()方法
查看>>
c# 字节往前移6个字节_C#中字节与字节之间的差异
查看>>
clock.tick_Java Clock类| tick()方法与示例
查看>>
Java BigDecimal ulp()方法与示例
查看>>
java isset_Java Calendar isSet()方法与示例
查看>>
console java_Java Console reader()方法与示例
查看>>
java enummap_Java EnumMap remove()方法与示例
查看>>
hashmap示例_Java HashMap putAll()方法与示例
查看>>
c语言中typedef_C语言中typedef的示例
查看>>
stl vector 函数_vector :: end()函数,以及C ++ STL中的示例
查看>>
Java Collections fill()方法与示例
查看>>
Java Vector removeAll()方法与示例
查看>>
c++ 向量复制_在C ++中复制向量的不同方法
查看>>
kotlin 取整数_Kotlin程序连接两个整数数组
查看>>
kotlin 查找id_Kotlin程序来查找数字的总和
查看>>
测试类型及其测试场景_软件测试及其基本类型
查看>>
NCERT的完整形式是什么?
查看>>