论文阅读Single-Model Uncertainties for Deep Learning

Posted 来日可期1314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论文阅读Single-Model Uncertainties for Deep Learning相关的知识,希望对你有一定的参考价值。

论文下载
GitHub
bib:

@INPROCEEDINGSTagasovska2019QinputLoss,
  title		= Single-Model Uncertainties for Deep Learning,
  author	= Natasa Tagasovska and David Lopez-Paz,
  booktitle	= NIPS,
  year		= 2019,
  pages     = 6417--6428

1. 摘要

We provide single-model estimates of aleatoric and epistemic uncertainty for deep neural networks.

To estimate aleatoric uncertainty, we propose Simultaneous Quantile Regression (SQR), a loss function to learn all the conditional quantiles of a given target variable.

These quantiles can be used to compute well-calibrated prediction intervals.

To estimate epistemic uncertainty, we propose Orthonormal Certificates (OCs), a collection of diverse non-constant functions that map all training samples to zero.

These certificates map out-of-distribution examples to non-zero values, signaling epistemic uncertainty.

Our uncertainty estimators are computationally attractive, as they do not require ensembling or retraining deep models, and achieve competitive performance.

Note:

  • 本文研究的问题是量化深度神经网络的不确定性。其中,不确定性可以大致分为两种,一种是aleatoric uncertainty, 另外一种是epistemic uncertainty
  • 本文针对两种不确定性,分别提出了两种量化方法,一种是Simultaneous Quantile Regression(SQR),另外一种是Orthonormal Certificates(OCs)。

2. 前置知识

参考文献

2.1. approximation uncertainty

近似误差。它描述的是简单模型无法拟合复杂数据的所产生的误差(例如,线性模型拟合正弦曲线所产生的误差)。

2.2. aleatoric uncertainty

偶然不确定性。我理解的是标记数据中本身存在的误差,本质上是由于测量导致的误差。

2.3. epistemic uncertainty

认知不确定性。模型对于测试数据预测的不确定性,体现的是泛化误差。

3. 算法


训练数据包含非高斯噪声(蓝点)、预测中值(实线)、65%和80%分位数(虚线)、任意不确定性或95%预测间隔(灰色阴影,由SQR估计)和认知不确定性(粉色阴影,由QCs估计)。

3.1. SQR

普通的分位数损失
f ^ τ ∈ arg min ⁡ f 1 n ∑ i = 1 n ℓ τ ( f ( x i ) , y i ) (1) \\hatf_\\tau \\in \\argmin_f\\frac1n\\sum_i=1^n\\ell_\\tau(f(x_i), y_i) \\tag1 f^τfargminn1i=1nτ(f(xi),yi)(1)
普通的分位数损失只能拟合对应的分位数 τ \\tau τ, 注意拟合函数 f f f的入参只有训练数据 x i x_i xi

SQR Loss:
f ^ ∈ arg min ⁡ f 1 n ∑ i = 1 n E τ ∼ U [ 0 , 1 ] [ ℓ τ ( f ( x i , τ ) , y i ) ] (2) \\hatf \\in \\argmin_f\\frac1n\\sum_i=1^n\\mathbbE_\\tau \\sim U[0, 1][\\ell_\\tau(f(x_i, \\tau), y_i)] \\tag2 f^fargminn1i=1nEτU[0,1][τ(f(xi,τ),yi)](2)
SQR Loss想拟合对应所有的分位数 τ ∼ U [ 0 , 1 ] \\tau \\sim U[0, 1] τU[0,1],注意此时拟合函数 f f f的入参有训练数据 x i x_i xi对应的分位数 τ \\tau τ

置信区间
u α ( x ∗ ) : = f ^ ( x ∗ , 1 − α / 2 ) − f ^ ( x ∗ , α / 2 ) (3) u_\\alpha(x^*) := \\hatf(x^*, 1 - \\alpha/2) - \\hatf(x^*, \\alpha/2) \\tag3 uα(x):=f^(x,1α/2)f^(x,α/2)(3)
其中, α \\alpha α表示显著性水平, u α ( x ∗ ) u_\\alpha(x^*) uα(x)表示置信度 1 − α 1- \\alpha 1α下, x ∗ x^* x的置信区间。例如, α = 0.05 \\alpha=0.05 α=0.05,也就是95%置信度下, u 0.05 ( x ∗ ) : = f ^ ( x ∗ , 0.975 ) − f ^ ( x ∗ , 0.025 ) u_0.05(x^*) := \\hatf(x^*, 0.975) - \\hatf(x^*, 0.025) u0.05(x):=f^(x,0.975)f^(x,0.025)

3.2. QCs

QCs是为了量化认知不确定性(epistemic uncertainty)的技术。认知不确定性可以描述与我们的模型在特征空间的某些区域缺乏经验有关的错误。口水话就是说没见过的数据,就会存在认知不确定性,这种没见过体现在类别,如训练集只有猫狗,没见过猪; 也体现在数据变换,比如训练集有猫狗,但是没有见过进行了图像转化后的猫狗(旋转,裁剪,加噪声)。

针对上述的,论文中想将数据分为见过的,和没见过的,这里我理解的是变成了一个二分类的问题。特殊的是,这个二分类问题中,只会有正类(也就是见过的),不会有没见过的数据(因为训练集中训练后都会变成见过的),很神奇😑。

C ^ ∈ arg min ⁡ C ∈ R h × k 1 n ∑ i = 1 n ℓ c ( C T ϕ ( x i ) , 0 ) + λ ⋅ ∥ C T C − I k ∥ (4) \\hatC \\in \\argmin_C \\in \\mathbbR^h \\times k\\frac1n\\sum_i=1^n\\ell_c(C^\\mathsfT\\phi(x_i), 0) + \\lambda \\cdot \\|C^\\mathsfTC - I_k\\| \\tag4 C^CRh×kargminn1i=1nc(CTϕ(xi),0)+λCTCIk(4)

这里 ϕ ( x i ) \\phi(x_i) ϕ(xi)相当于是是一个特征转换层,转化后的特征维数是 h h h C ^ \\hatC C^相当于 k k k个度量是否见过当前数据(在训练集见过),见过就是0,训练集中没有标签为1的数据。正则项 ∥ C T C − I k ∥ \\|C^\\mathsfTC - I_k\\| CTCIk是为了确保 k k k个分类器各自不同,保证多样性(diverse),这里就是简单的做了一次正交,保证线性无关。

最后计算认知不确定性公式:
u e ( x ∗ ) : = ∥ C T ϕ ( x ∗ ) ∥ = ∥ a T ϕ ( x ∗ ) + b ∥ u_e(x^*):=\\|C^\\mathsfT\\phi(x^*)\\| = \\|\\mathbfa^\\mathsfT\\phi(x^*)+\\mathbfb\\| ue(x):=CTϕ(x)=a李沐

  • 吴恩达
  • 参考:

  • 论文的结构一般是:

    • title(标题)
    • abstract(摘要)
    • intro(导言)
    • method(提出的算法)
    • exp(实验)
    • conclusion(结论)

    当然可以从头读到尾,但是论文这么多时间划不来,而且适合的文章可能就一小部分,需要快速找到适合的文章,并对他进行精读

    李沐

    第 一 遍 是 做 海 选 ; 第 二 遍 对 相 关 的 论 文 做 精 选 ; 第 三 遍 重 点 研 读 一 些 论 文 \\colorred第一遍是做海选;第二遍对相关的论文做精选;第三遍重点研读一些论文

    1. 第一遍:文章主要讲什么

    1.1 看整体

    1. 关注标题【了解这篇论文是不是跟自己相关】;
    2. 摘要【简单的介绍这篇论文在做什么】;
    3. 直接跳到结论【通常跟摘要是一样的,但是把摘要中提到的一两个问题用一些实际的结论,实际的数字证明了一下】

    1.2 看图表

    1. 跳到实验部分看一些关键的图和表;
    2. 瞄一眼在方法里面的图和表;

    这第一遍读下来,往往十几分钟的时间,但是你就能对一篇文章有了一个通盘的把握。第一遍,目的是就是为了了解哪些文章对我是重要的,这决定了你是否还要再继续读下去。


    2. 第二遍:文章每一部分讲什么

    对整个文章过一遍【从标题一直往下读到最后】,知道每一块到底在干什么东西;

    这时候不用太注意很多的细节,公式、特别的证明或者一些很细节的部分可以忽略掉。

    1. 主要是搞清楚重要的图和表:第一遍你瞄了一眼的图表,此时就需要一个字一个字弄清楚作者是怎么做的,算法流程图里面是怎么一步步实现的,作者提出的算法和原有方法之间有什么区别,改进在何处。

      可能这一遍读还是不太能搞清楚论文的具体逻辑,尤其是对于刚进入一个领域的新人来说,但至少你熟悉了很多这个领域的专有名词,你可以去查阅每个名词的意思,帮助你更好地理解这篇文章。

    2. 关注经典文献

      • 这时还没有特别没有搞得懂他在干什么,这个可以标记,留到之后在这一遍大概对整个论文的各个部分都有一个大概的了解;
      • 可以将相关的文献圈出来【作者根据其他的观点提出来的,或是改进的等等,这些文献没有读过的话可以圈出来】,读完之后就可以继续判断要不要继续往下读。

        这些被引用的文献很多都是该领域的奠基之作或有重大影响力的论文,这些论文就值得你圈出来,去用之前读第一遍的方式浏览一下。

      第二遍读,目的就是厘清文章脉络,知道在讲什么、怎么做的、做的怎么样,同时也决定你是否要读第三遍。


    3. 第三遍:真正读懂

    1. 在这一遍需要知道每一句话在干什么,每一段在说什么;在大脑中脑补整个过程是怎样的,使得自己像做过了一样;
    2. 在读的过程中,思考自己来完成作者所提出的问题时需要怎么做,需要用什么方法来实现这个东西;
    3. 在读实验部分时,思考自己能不能比作者做的更好;
    4. 作者留下的问题,思考自己能不能继续往前走。

    第三遍读方法论最少,但实际上要求最高,要能对整篇文章达到一个烂熟于心的水平,让你去做这篇文章的分享,几乎能抵挡得住来自四面八方的提问。要能在合上文章之后脑海里清晰浮现每一个细节和难点,只有这样才能算真正读懂。 第三遍读,就在于真正读懂。


    吴恩达

    1.1 系统阅读论文集

    1. 第一步:收集资源,并整合起来。

      1. 论文、博客文章、GitHub资源库、视频……在谷歌上搜索「***」这个词,得到所有关于这个关键词的资源都要整理下来。
      2. 这一阶段,资源数量是没有限制的。只要是你认为重要的资料都可以整理,但要注意,一定要创建一个有用的论文、视频和文章的短名单。
    2. 第二步:将你认为的与主题相关的任何资源进行深入研究。

      1. 这时候,你可以绘制一张表格。

        对每种资源的理解程度,做一个实时的跟踪。

        具体来讲,最好的方式就是:

        1. 对所有你收集到的资源都有一个10%~20%的理解程度。
          这样,就确保你已经对你所收集到的资源,有了足够的了解,并且还能准确的评估其相关性。
          很好, 你 已 经 对 这 项 技 术 基 本 入 门 \\colorred你已经对这项技术基本入门 了。
        2. 仔细研读相关程度更高的文章资源。这时候,就出现了一个问题,大概多少论文足够了呢?
          吴恩达说:对 5 ~ 20 篇 \\colorred5~20篇 520的论文的理解,那么就说明你对这个领域以及研究进展有了 基 本 的 了 解 \\colorred基本的了解
        3. 如果研读到了 50 ~ 100 篇 \\colorred50~100篇 50100,那么已经 非 常 了 解 这 个 领 域 \\colorred非常了解这个领域 了。
      2. 这时候,你的表格可能是这样。

        如果可以的话,还可以做一下笔记,用自己的话总结论文当中的关键发现、技术和研究。

    1.2 论文至少要看三遍

    吴恩达认为,要理解一篇论文,一次将一篇论文从第一个字读到最后一个字,可能并不是最佳方式。

    正确的打开方式是,一篇论文至少要看三遍

    1.2.1 第一遍,仔细阅读论文中的标题、摘要和关键词。

    1.2.2 第二遍,阅读文中的导言、结论以及图表,快速扫描一下论文剩下的内容。

    这一步主要是要把握论文中的关键信息,不光是导言和结论,还包括文章中任何小结论的总结,文中涉及的补充信息都跳过。

    1.2.3 第三遍,阅读论文的整个部分,但是要跳过任何可能陌生看不懂的数学公式,技术术语。

    不过,如果你需要对这个专业领域有一个「深入」的理解,那就必须要搞懂那些公式术语了。

    1.3 问自己问题

    如何检测你对这篇文章的关键信息有了基本的了解?问自己问题吧!

    吴恩达提供了一系列的问题,在阅读的时候询问自己。这里就摘取一部分。

    1. Describe what the authors of the paper aim to accomplish, or perhaps did achieve.
      这篇论文作者的目标是什么,或者也许已经实现了什么。

    2. If a new approach/technique/method was introduced in a paper, what are the key elements of the newly proposed approach?
      如果文中引入了一种新方法/技术,那么这一新提出的方法/技术的关键要素是什么?

    3. What content within the paper is useful to you?
      论文中,有哪些内容对你有用。

    4. What other references do you want to follow?
      你还想关注哪些参考资料/文献?

    1.4 一些有用的在线资源

    • The Machine Learning Subreddit:
      https://www.reddit.com/r/MachineLearning/
    • The Deep Learning Subreddit:
      https://www.reddit.com/r/deeplearning/
    • Paper With Code:
      https://paperswithcode.com/
    • Research Gate:
      https://www.researchgate.net/
    • 还有一些顶级会议,比如NIPS、ICML、ICLR…

    1.5 Learn steadily rather than short burst for longevity.

    Learn   steadily   rather   than   short   burst   for   longevity. \\colorred\\textbfLearn steadily rather than short burst for longevity. Learn steadily rather than short burst for longevity.
    稳扎稳打,而不是短时的突击,才能长久的学习。这不光是对机器学习领域,还对整个学术领域有益。

    参考:

    1. 李沐:如何读一篇论文
    2. 吴恩达:如何读一篇论文
    3. 快速阅读论文技巧

    以上是关于论文阅读Single-Model Uncertainties for Deep Learning的主要内容,如果未能解决你的问题,请参考以下文章

    论文阅读笔记

    吴恩达关于论文阅读的建议

    如何高效的阅读论文

    如何阅读论文

    如何阅读论文

    如何阅读论文