Inferring Generative Model Structure with Static Analysis-2017

此论文的两个重点:

  • 生成模型(Generative Model)
  • 静态数据分析(Static Analysis)

要干的活:
使用弱监督方法对大量无标注的数据进行弱监督的标注,然后使用弱监督标注的概率标签去训练分类的神经网络模型,得到的模型精度不亚于强监督学习的效果。
就像下面流程图所示:

无标注数据data
弱监督生成模型标注
probabilistic label
判别式模型训练
predict label

关键是:
如何构建弱监督生成模型

前言

在实际的深度学习模型训练过程中,数据是天,就是说只要是数据的质量不行,即使模型是Nasnet也不能学习出令人满意的效果;其中数据的质量可以理解为两部分:一是有有标注的数据太少了,根本不足以训练一个强分类器;二是数据集的标注质量有问题,直接拿错误的标注来训练,也肯定训练不出什么好东西。
在日常的任务中,尤其是医疗领域,数据集一般都是有标注的数据太少,也就是周志华老师所说的不完全监督,但是医疗的数据量却是异常庞大的,标注要花费掉大量的人力和金钱,对于像医疗这种,还必须是领域专家才能做准确的标注,但是有些时候,领域专家的标注也不一定是准确的。。
如何有效的大量标注未标注的数据呢?而且,得到的标注还必须能够用于神经网络判别器的学习。
一般,一个流行的解决方案是使用生成模型组合多个弱监督源。什么是弱监督源呢?其实就是能够对数据进行快速标注的函数,但是标注的准确性可能仅仅是60%左右。组合有很多方式,最简单的方法:投票。但是这个是最LOW的办法,得到的标注根本不敢用,也无法进行保证。
举个例子:

现在有两个数据源,1和2。1的准确率高,而2的准确率低。两个源有重叠。这时如果我们使用投票的方法来获得标签的化是行不通的,因为只有两个源。那么,如果我们能知道,1的准确率高,而2的准确率低,即在标注的时候,如果1有标注,则使用1的标注,否则才使用2的标注,然后再去训练最终的判别网络,那么,即使判别器的准确率为100%,学习到的实际准确率也只是如图计算的60.3%。这样,其实就是解决了冲突,但是最终的准确率仍然很低,这时我们还需将其次,将有关标签质量的关键谱系信息传递给正在培训的最终模型。告诉判别模型,哪么标签的更可信!----如何定义这个标签到底有多少可信的程度呢?我们后面会讨论到这个问题。—>实际上是利用了概率标注
所以生成模型上场了!
如何构建生成模型是最难的一部分了,构建好了就可以对大量的数据进行标注了,构建不好,就白做了很多的功夫;所以需要评价生成模型的好坏,这方面可能还是得需要一些真实的标注,这部分后面会提到。
本文的创新可能就是如何利用这个弱监督源了,分析这些弱监督源之间的关系,当然,这些弱监督源必须具有代码的结构,或者函数式的方式才行,不然就无法分析了。
本论文提出了Coral(珊瑚–猜测可能是寓意生成模型中所用到的关系图谱吧),一个通过静态分析这些启发式代码来推断生成模型结构的范例,因为对弱监督源进行分析,从而大大减少了学习结构所需的数据。

首先先来学习下新的基本概念吧!

Coral架构的部分名词解析

因为是搭建了一个架构,所以有些新的专业名字需要了解一下:

  1. 从特定领域抽取的基本单元DSP-domain-specific primitives
    什么是DSP呢?举个例子:
    在下面骨肿瘤的分类中,主要任务为判断肿瘤为良性或者是恶性,使用分割算法分割出肿瘤,然后提出相应的DSP。

    此处提取了4个DSP:
    (1) 肿瘤的面积area; (2).周长perimeter;(3). 强度intensity;(4).比例ratio
  2. 启发式函数-HFs-heuristic functions
    HF可以理解为简单的标注函数,不过是对处理过的数据中的DSP进行分析,得到并不准确的标注。
    继续使用上面的例子,下面就是定义了三个HF:λ1\lambda_1λ1​,λ2\lambda_2λ2​ 和λ3\lambda_3λ3​:

    HF的输入为DSP,判断并返回相应的标注结果,当然并不是准确的。不能直接用的!我们在前言中讨论过了。接下来,我们不仅仅是使用HF的输出,我们会分析每一个HF的代码,输入,输出,输入之间的关系以及各个HF之间的关系等,我们要利用的是这些东西!
    HF的编写是基于一些人为能够观察到特征。像鸟都有翅膀,或者鸟到会飞(当然并不是所有的鸟都会飞)。这些code都是我们将要分析的对象。

    再来一个官方教程上的例子:判断人是否骑在自行车上,如下图所示,可以很明显的看出DSP与HF的关系:
  3. 抽象语法树 abstract syntax tree (AST)
    上面说了,每个DSP可能是单独的,也有可能是其他的DSP组成的,这些也是非常重要的关系!使用AST分析DSP之间可能存在依赖关系。比如,在骨肿瘤诊断的例子中P.ratio就是由P.perimeter 和 P.intensity得到的。
    如下图所示的AST:

Coral对创建DSP和HF的源代码进行静态分析(Static Analysis),通过是否共用了相同的DSP来确定那些HF之间是有相应的关系的。所以就有了我们上一节的AST。一旦Coral确定了这些依赖关系,它就使用一个因子图来建模HF、DSP和真正的类标签之间的关系。
使用coral的一个完整例子,coral会分析每个HF的准确性,并针对训练的数据集给出概率标注,再回顾一下整个流程:

以上都准备妥当之后,我们就要开始本论文第一关键的一步了:
静态数据分析(Static Analysis)!

静态独立性分析

1、HF分组以及源码分析

Coral利用了这样一个事实,即用户在已知的有限DSP集上编写HFs。它通过简单地查看如何构造dsp和HFs的源代码来推断HFs之间存在的依赖关系。这个过程我只是对HF的构造代码和输入进行分析,根本没有用到数据呀!,所以这个过程的学习非常的快!
这个部分有两步,先是根据是否共享同一个dsp对HF进行分组;再根据各自构造的源码进行分析。获得HF的依赖关系。
但是如果他们不共享DSP呢?那么这部分根据HF的输入是学习不到HF之间的依赖关系的。像下面例子中的λ1\lambda_1λ1​,λ2\lambda_2λ2​ 和λ3\lambda_3λ3​输入都不相同。但是,其实我们知道λ2\lambda_2λ2​ 和λ3\lambda_3λ3​之间是存在关系的,但是我们并没有发现。
这时我们就需要继续对DSP的组成来进行分析了,弥补HF输入分析的不足!接下来就是DSP的依赖分析

2. DSP的依赖分析

Coral使用AST来分析每一个DSP的组成。Coral遍历以赋值表达式为根的子树,并添加所有其他遇到的DSP作为P.name的依赖项。如果子树中没有遇到DSP,则将该DSP标记为独立于其他的DSP。通过AST可以得到DSP的组成结构。

3. HF的独立性结构分析

知道了所有的DSP是如何构成的,接下来我们就可以再重新回过头来分析HF的输入了,前面已经说了。λ1\lambda_1λ1​ ,λ2\lambda_2λ2​ 和λ3\lambda_3λ3​三个HF,其中,λ1\lambda_1λ1​的输入为P.area,λ2\lambda_2λ2​ 输入为P.perimeter,λ3\lambda_3λ3​ 的输入为P.ratio,而P.ratio由P.area和P.perimeter构成。λ2\lambda_2λ2​ 和λ3\lambda_3λ3​同时与一个dsp有关系P.perimeter,那么很明显λ2\lambda_2λ2​ 和λ3\lambda_3λ3​之间就存在相应的依赖关系。这个关系结构隐式地编码关于HFs的依赖信息——如果一个边缘点从一个原语指向n个HFs,那么这些n个HFs通过dsp以n种方式存在关系。此依赖项信息可以更正式地编码为如下所示的因子图(因子图在构建生成模型时会讲到):

生成模型

Coral使用因子图来表示各个dsp,hf以及隐含的真实label之间的关系。

有关生成模型的算法,最有发言权的就是贝叶斯算法了。

回顾一下贝叶斯和罗辑回归!(参考)

参考一:
Bayes定理公式如下:

P(H∣E)=P(H)⋅P(E∣H)P(E)P(H|E) = \frac{P(H) \cdot P(E|H)}{P(E)} P(H∣E)=P(E)P(H)⋅P(E∣H)​

公式中的每一项都有一个单独的名字:

P(H) ⇒ 先验概率(prior probability),又叫基础概率,是无任何条件限制下事件H发生的概率

P(H|E) ⇒ 后验概率(posterior probability)

P(E|H) ⇒ 条件似然(conditional likelihood), 有时候我自己称之为似然概率。
举个形象化的例子:

问题1: 一机器在良好状态生产合格产品几率是90%,在故障状态生产合格产品几率是30%,机器良好的概率是75%,若一日第一件产品是合格品,那么此日机器良好的概率是多少。

分析:假定事件A代表机器良好,事件B代表某一日生产的是合格品,则目标概率是P(A|B),而已知条件包括:

  1. 先验概率P(A)P(A)P(A)= 0.75
  2. 我们前面所谓的两类人在本题中指的就是A机器良好和~A机器故障,而题目中给出的似然概率就是这两种不同的机器生产产品时的合格率是不同的。

套公式:
P(A∣B)P(A|B)P(A∣B) = 0.9
此时我们得到的是一个概率,如果在生成模型中判断类别的化,那么就可以另label为1当P(A∣B)P(A|B)P(A∣B) > 0.5的时候。
0.9可以只是当成一个事件的概率,或者是一个类别是否正确的概率—准确度。此处的生成模型恰好也是利用了这一点。

参考二:
逻辑回归算法会事先求一个全局的概率分布,如下所示:
定义:
P(y=1│x;θ)=hθ(x)P(y=1│x;θ)=h_θ (x)P(y=1│x;θ)=hθ​(x)

P(y=0│x;θ)=1−hθ(x)P(y=0│x;θ)=1-h_θ (x)P(y=0│x;θ)=1−hθ​(x)
则全局分布:
P(y∣x;θ)=(hθ(x))y(1−hθ(x))1−yP(y|x;\theta) = (h_{\theta}(x))^y(1-h_{\theta}(x))^{1-y}P(y∣x;θ)=(hθ​(x))y(1−hθ​(x))1−y
然后我们使用极大似然估计对θ\thetaθ进行估计,使我们的分布逼近数据集的真实分布。
但是,在现在这种情况下,我们没有真实的标注yyy,所以,这里使用了一种估计方式:
最大伪似然估计,并使用吉布斯采样来近似优化时的参数。
参考三:
本文生成模型的结构设计是根据下面这篇论文改进而来:
(Learning the Structure of Generative Models without Labeled Data
Stephen)

简单提一下本论文的一个简单思路,为了后面的理解:
记住一点:

真实的标签true label在生成模型中是一个隐变量
对于一个数据点xix_ixi​,它的真实标注为(实际上没有)yi∈−1,1y_i \in {-1, 1}yi​∈−1,1,
现在有nnn个标记函数,然后对xix_ixi​就可以得到nnn个预测结果,Λi1\Lambda_{i1}Λi1​, …Λin\Lambda_{in}Λin​。
如何从nnn个结果中我们可以通过生成模型得到一个最终的结果Λi∈−1,0,1\Lambda_i \in {-1,0, 1}Λi​∈−1,0,1,三个值分别对应false,不确定,true。
现在我们要找到Λi\Lambda_iΛi​与yiy_iyi​的关系。
我们的目标是估计一个概率模型,生成labeling-function输出Λ∈−1,0,1m×nΛ∈{ −1 ,0, 1 }^{m×n}Λ∈−1,0,1m×n
假设nnn个结果Λi1\Lambda_{i1}Λi1​, …,Λin\Lambda_{in}Λin​都条件独立于yiy_iyi​,Λi\Lambda_iΛi​与yiy_iyi​之间就存在nnn个准确性依赖关系,那么估计每个结果相对于真实标签的一个准确率:
ϕjAcc(Λi,yi):=yiΛij\phi_j^{Acc}(\Lambda_i, y_i) := y_i\Lambda_{ij}ϕjAcc​(Λi​,yi​):=yi​Λij​
一个参数θjAccθ^{Acc}_jθjAcc​建模每个标签函数λjλ_jλj​是多么准确。
我们将此结构称为条件独立模型,并将其指定为:

在概率论和统计学中,两事件R和B在给定的另一事件Y发生时条件独立,类似于统计独立性,就是指当事件Y发生时,R发生与否和B发生与否就条件概率分布而言是独立的。换句话讲,R和B在给定Y发生时条件独立,当且仅当已知Y发生时,知道R发生与否无助于知道B发生与否,同样知道B发生与否也无助于知道R发生与否。(维基百科)

我们要优化的目标函数:
我们估计的参数θ通过最小化的边际负对数似然pθ(Λ^)p_θ(\hatΛ)pθ​(Λ^),Λ^\hatΛΛ^为观测矩阵函数输出Λ^\hatΛΛ^:

再使用随机梯度下降对似然函数进行优化~~(才疏学浅,怎么优化的其实还没有搞明白)。

本论文对其进行改进,并不仅仅是对标记函数的输出进行建模,更加上了标记函数的分析,基元之间的关系分析等。。
此处仍然没有用到真实标签。

隐含关系
隐含关系
one data without label
n label function
n nosie label
生成模型
one label Λ
true label

1. 对HF的独立性进行建模

我们已经可以追本溯源的得到HF依赖关系的图谱了,接下来就是对其进行生成模型建模的过程。
通过静态分析推断出相关性,我们的目标是了解每个HF的准确性,并相应地为训练数据分配标签。
因子图因此包含两种类型的因子:
精度因子-ϕacc\phi^{acc}ϕacc,HF因子-ϕHF\phi^{HF}ϕHF。
精度因子指定每个λiλiλi HF的准确性,公式定义为:

nnn为HF的总个数。
下面公式为静态分析因子(没搞明白什么时候值取0,其他情况竟然取负无穷。。。。)

这些因子都不需要任何的数据,只是通过分析因子图得到的结果。
有些时候,通过我们的静态分析,可能并不能完全分析出DSP之间的依赖关系,这时新增添了一个因子ϕDSP\phi^{DSP}ϕDSP对成对的DSP进行依赖建模:

最终的,概率分布!!

P(y,λ1,...,λn,p1,.....,pm)=exp(∑i=1nθiAccϕiAcc)∗exp(∑i=1nϕiHF)∗exp(∑i=1m∑j=i+1mθijSimϕijSim)P(y,\lambda_1,...,\lambda_n, p_1,.....,p_m) = exp(\sum_{i=1}^n\theta_i^{Acc}\phi_i^{Acc}) *exp(\sum_{i=1}^n\phi_i^{HF})*exp(\sum_{i=1}^m \sum_{j=i+1}^m\theta_{ij}^{Sim}\phi_{ij}^{Sim})P(y,λ1​,...,λn​,p1​,.....,pm​)=exp(i=1∑n​θiAcc​ϕiAcc​)∗exp(i=1∑n​ϕiHF​)∗exp(i=1∑m​j=i+1∑m​θijSim​ϕijSim​)

2. Generating Probabilistic Training Labels

说白了就是对目标函数进行优化。

为什么生成模型得到的Probabilistic Training Labels不能直接定一个阈值,然后得到label呢,而要再经过一个判别模型的训练??
2019-04-15

使用的方法跟[1]中是一样的,最大化 the L1-regularized marginal pseudolikelihood(伪似然函数)。
对于每个数据点,我们都有特定于领域的dsp,从这些dsp中启发式函数可以计算出有噪声的标签。然后通过这些精度因子估计潜在类标签的分布,并利用这些噪声标签训练判别模型。

具体的推导还是很麻烦的,具体就不放上来了,看的头疼,感兴趣的化可以自己研究一下。
生成模型还是很难的~~。。。呃呃
与之前的一个对比。

3. 生成概率标注用于最终模型训练

这是2017年论文Snorkel的一个流程.。
最终判别式模型接受的仅仅是概率标签哦!
骨肿瘤的诊断:
使用了一组802标记的骨肿瘤x线图像及其放射学家绘制的分割。我们定义了我们的任务来区分恶性和良性肿瘤,生成的HFs是手工调整规则和决策树生成规则的组合(对数据集的一小部分进行调整)。鉴别模型使用了一组400个手工调优的特性(注意,这些特征与dsp之间没有重叠),这些特征编码了各种形状、纹理、边缘和基于强度的特征。虽然在这个数据集中没有显式共享的dsp,但是生成模型仍然能够更准确地建模训练标签,知道HF操作了多少个dsp,从而显著地改进了独立的情况。
在骨肿瘤诊断中,加上DSP依赖关系的提升不大。
各个项目的解释:

项目 含义
MV 投票
Indep 假设所有的HF都相互独立
Learn Dep [1]学习启发式的内部依赖关系
HF Dep 从静态分析中得到HF相互之间的依赖性
HF+DSP Dep HF之间的依赖性 + DSP之间的依赖性
FS 全监督


得到柱状图对比如下:

HF+DSP Dep 相比于其他方法在不同任务上的提升!

骨肿瘤使用的DSP:

参考

[1] S. H. Bach, B. He, A. Ratner, and C. Ré. Learning the structure of generative models without labeled data. In ICML, 2017.
[2] Snorkel: Rapid Training Data Creation with Weak Supervision
arXiv:1711.10160v1
[3] A. J. Ratner, C. M. De Sa, S. Wu, D. Selsam, and C. Ré. Data programming: Creating large training sets, quickly. In Advances in Neural Information Processing Systems, pages 3567–3575, 2016.

Inferring Generative Model Structure with Static Analysis-2017【论文理解】相关推荐

  1. 《A Unified Generative Framework for Aspect-Based Sentiment Analysis》论文阅读

    文章目录 文章概述 文章模型 问题定义 文章模型 文章总结 附录 文章概述   目前对于情感分析ASTE三元组任务(aspect, opinion, sentiment)的提取主要采用流水线(pipe ...

  2. 2019 ICCV best paper:sinGAN: Learning a Generative Model from a Single Natural Image解读

    sinGAN: Learning a Generative Model from a Single Natural Image 论文地址: https://arxiv.org/abs/1905.011 ...

  3. SinGAN: Learning a Generative Model from a Single Natural Image

    Abstract(摘要) We introduce SinGAN, an unconditional generative model that can be learned from a singl ...

  4. 对比关系生成模型(Comparative Relation Generative Model)

    文章来源 Tkachenko M, Lauw H W. Comparative Relation Generative Model[J]. IEEE Transactions on Knowledge ...

  5. 判别模型和生成模型(Discriminative Model Generative Model)【转】

    又是碰到了一些简单的基本概念,但是仔细想想发现自己没有理解透彻,Search一下,总结如下: [摘要] - 生成模型:无穷样本==>概率密度模型 = 产生模型==>预测 - 判别模型:有限 ...

  6. 17. A Unified Generative Framework for Aspect-Based Sentiment Analysis

    A Unified Generative Framework for Aspect-Based Sentiment Analysis 论文地址:https://arxiv.org/pdf/2106.0 ...

  7. 机器学习-白板推导系列(三十)-生成模型(Generative Model)

    机器学习-白板推导系列(三十)-生成模型(Generative Model) 30.1 生成模型的定义 前面所详细描述的模型以浅层的机器学习为主.本章将承上启下引出后面深度机器学习的部分.本小节,主要 ...

  8. Redhawk:Static Analysis

    redhawk分析中遇到的常见问题都可以参考我之前的文章: redhawk常见问题 做Static Analysis需要遵循以下流程: 1.data preparation 常用的文件格式内容见: r ...

  9. 论文阅读 - Jukebox: A Generative Model for Music

    文章目录 1 概述 2 什么是VQ-VAE 2.1 Auto-encoder(AE) 2.2 Variational AutoEncoder(VAE) 2.3 Vector-Quantized Var ...

  10. 判别式模型和生成式模型的区别(discriminative model and generative model)

    判别式模型和生成式模型的区别(discriminative model and generative model) 本博客转载自: http://blog.csdn.net/amblue/articl ...

最新文章

  1. tftp 在线更新 cisco switch IOS
  2. OpenCV EM clustering集群的实例(附完整代码)
  3. ffmpeg推送摄像头rtmp流
  4. 自动驾驶科普:一辆无人车到底是怎样工作的?
  5. Ajax的异步,是鸡肋还是鸡排?
  6. SQL查询中having和where的异同点
  7. android 开源图表动画,Android 图表开发开源库MPAndroidChart-Go语言中文社区
  8. HDOJ1800 Flying to the Mars【Hash】
  9. Stata因为“只读文件”不能存储的处理方法
  10. 新零售电商:订单管理系统设计
  11. 日历控件My97DatePicker使用--onchange不生效
  12. 计算机考试反思1000,高一期中考试反思1000字,高一学生期中考试总结
  13. SiamRPN论文笔记
  14. 周鸿祎反流氓的基本商业逻辑(ZZ)
  15. Credential Harvester Attack Method获得用户信息
  16. OLED电视与量子点电视,谁更值得买?
  17. 生物信息学linux安装,构建生物信息学环境-1(Win10 Linux子系统的安装)
  18. pg安装部署linux_Linux下postgresql数据库部署与配置
  19. matlab 有限元分析
  20. 【技术美术图形部分】2.3 HLSL常用函数

热门文章

  1. FFPLAY的原理(三)
  2. 读书笔记:《知道做到》
  3. 两本关于sharepoint 2010的书值得参考
  4. 反射使用 非空表向空表赋值
  5. RabbitMQ基础--总结
  6. 面向对象程序的设计模式
  7. jquery 之for 循环
  8. Thread was being aborted.(调试或执行较长时间的程序时发生的错误)
  9. IE7 绝对定位z-index问题
  10. word 的脚注横线和文字怎么调整为左对齐?