面对配分函数 - 噪扰对比估计(NCE)篇

序言

配分函数(也叫归一化因子)在概率分布和统计模型的计算中扮演着至关重要的角色。然而,在许多实际应用中,特别是自然语言处理和图像处理领域,配分函数的计算往往异常复杂且难以直接实现。为了解决这一难题,噪音对比估计( Noise Contrastive Estimation,NCE \text{Noise Contrastive Estimation,NCE} Noise Contrastive EstimationNCE)应运而生。NCE是一种巧妙的统计模型估计方法,它能够在无法直接计算配分函数的情况下,估算出概率分布的参数。

噪扰对比估计(NCE)

  • 具有难求解的配分函数的大多数模型估计都没有估计配分函数。 SML \text{SML} SML CD \text{CD} CD只估计对数配分函数的梯度,而不是估计配分函数本身。 得分匹配和伪似然避免了和配分函数相关的计算。

  • 噪扰对比估计 noise-contrastive estimation, NCE \text{noise-contrastive estimation, NCE} noise-contrastive estimation NCE) ( Gutmann and Hyvarinen, 2010 \text{Gutmann and Hyvarinen, 2010} Gutmann and Hyvarinen, 2010) 采取了一种不同的策略。在这种方法中,模型估计的概率分布被明确表示为:
    log ⁡ p model ( x ) = log ⁡ p ~ model ( x ; θ ) + c \log p_{\text{model}}(\textbf{x})=\log\tilde{p}_{\text{model}}(\textbf{x};\boldsymbol{\theta})+c logpmodel(x)=logp~model(x;θ)+c — 公式1 \quad\textbf{---\footnotesize{公式1}} 公式1

  • 其中 c c c − log ⁡ Z ( θ ) − \log Z(\boldsymbol{\theta}) logZ(θ) 的近似。不仅仅估计 θ \boldsymbol{\theta} θ, 噪扰对比估计过程将 c c c 视为另一参数,使用相同的算法同时估计 θ \boldsymbol{\theta} θ c c c。因此,所得到的 log ⁡ p model ( x ) \log p_{\text{model}}(\textbf{x}) logpmodel(x) 可能不完全对应有效的概率分布,但随着 c c c 估计的改进,它将变得越来越接近 有效 值 注 1 有效值^{注1} 有效1

  • 这种方法不可能使用最大似然作为估计的标准。最大似然标准可以设置 c c c 为任意大的值,而不是设置 c c c 以创建一个有效的概率分布。

  • NCE \text{NCE} NCE将估计 p ( x ) p(\textbf{x}) p(x) 的无监督学习问题转化为学习一个概率二元分类器,其中一个类别对应模型生成的数据。该监督学习问题中的最大似然学习定义了原始问题的渐近一致估计。

  • 具体来说,我们引入第二个分布, 噪扰分布 ( noise distribution \text{noise distribution} noise distribution) p noise ( x ) p_{\text{noise}}(\textbf{x}) pnoise(x)。 噪扰分布应该易于估计和从中取样。我们现在可以构造一个联合 x \textbf{x} x 和新二元变量 y y y 的模型。在新的联合模型中,我们指定:
    p joint ( y = 1 ) = 1 2 p_{\text{joint}}(y=1)=\displaystyle\frac{1}{2} pjoint(y=1)=21 — 公式2 \quad\textbf{---\footnotesize{公式2}} 公式2
    p joint ( x ∣ y = 1 ) = p model ( x ) p_{\text{joint}}(\textbf{x}\mid y=1)=p_{\text{model}}(\textbf{x}) pjoint(xy=1)=pmodel(x) — 公式3 \quad\textbf{---\footnotesize{公式3}} 公式3

    p joint ( x ∣ y = 0 ) = p noise ( x ) p_{\text{joint}}(\textbf{x}\mid y=0)=p_{\text{noise}}(\textbf{x}) pjoint(xy=0)=pnoise(x) — 公式4 \quad\textbf{---\footnotesize{公式4}} 公式4

  • 换言之, y y y 是一个决定我们从模型还是从噪扰分布中生成 x \textbf{x} x 的开关变量。

  • 我们可以在训练数据上构造一个类似的联合模型。

    • 在这种情况下,开关变量决定是从数据还是从噪扰分布中抽取 x \textbf{x} x
    • 形式地, p train ( y = 1 ) = 1 2 p_{\text{train}}(y = 1) =\displaystyle\frac{1}{2} ptrain(y=1)=21 p train ( x ∣ y = 1 ) = p data ( x ) p_{\text{train}}(\textbf{x} \mid y = 1) =p_{\text{data}}(\textbf{x}) ptrain(xy=1)=pdata(x),和 p train ( x ∣ y = 0 ) = p noise ( x ) p_{\text{train}}(\textbf{x} \mid y = 0) = p_{\text{noise}}(\textbf{x}) ptrain(xy=0)=pnoise(x)

注1: NCE \text{NCE} NCE也适用于具有易于处理的,不需要引入额外参数 c c c 的配分函数的问题。它已经是最令人感兴趣的,估计具有复杂配分函数模型的方法。


  • 现在我们可以应用标准的最大似然学习拟合 p joint p_{\text{joint}} pjoint p train p_{\text{train}} ptrain 的监督学习问题:
    θ , c = arg max ⁡ θ , c E x , y ∼ p train log ⁡ p joint ( y ∣ x ) \boldsymbol{\theta},c=\argmax\limits_{\boldsymbol{\theta},c} \mathbb{E}_{\textbf{x},\text{y}\sim\ p_{\text{train}}} \log p_{\text{joint}}(y\mid\textbf{x}) θ,c=θ,cargmaxEx,y ptrainlogpjoint(yx) — 公式5 \quad\textbf{---\footnotesize{公式5}} 公式5

  • 分布 p joint p_{\text{joint}} pjoint 本质上是将逻辑回归模型应用于模型和噪扰分布之间的对数概率之差:
    { p joint ( y = 1 ∣ x ) = p model ( x ) p model ( x ) + p noise ( x ) — 公式6 = 1 1 + p noise ( x ) p model ( x ) — 公式7 = 1 1 + e log ⁡ p noise ( x ) p model ( x ) — 公式8 = σ ( − log ⁡ p noise ( x ) p model ( x ) ) — 公式9 = σ ( log ⁡ p model ( x ) − log ⁡ p noise ( x ) ) — 公式10 \begin{cases} \begin{aligned} p_{\text{joint}}(y=1\mid\textbf{x})&=\frac{p_{\text{model}}(\textbf{x})}{p_{\text{model}}(\textbf{x})+p_{\text{noise}}(\textbf{x})} &\quad\textbf{---\footnotesize{公式6}}\\\\ &=\frac{1}{1+\displaystyle\frac{p_{\text{noise}}(\textbf{x})}{p_{\text{model}}(\textbf{x})}} &\quad\textbf{---\footnotesize{公式7}}\\\\ &=\displaystyle\frac{1}{1+ e^{\log \displaystyle\frac{p_{\text{noise}}(\textbf{x})}{p_{\text{model}}(\textbf{x})}}} &\quad\textbf{---\footnotesize{公式8}}\\\\ &=\sigma\left(-\log \displaystyle\frac{p_{\text{noise}}(\textbf{x})}{p_{\text{model}}(\textbf{x})}\right) &\quad\textbf{---\footnotesize{公式9}}\\\\ &=\sigma\left( \log p_{\text{model}}(\textbf{x})-\log p_{\text{noise}}(\textbf{x}) \right) &\quad\textbf{---\footnotesize{公式10}} \end{aligned} \end{cases} pjoint(y=1x)=pmodel(x)+pnoise(x)pmodel(x)=1+pmodel(x)pnoise(x)1=1+elogpmodel(x)pnoise(x)1=σ(logpmodel(x)pnoise(x))=σ(logpmodel(x)logpnoise(x))公式6公式7公式8公式9公式10

  • 因此,只要 log ⁡ p ~ model \log \tilde{p}_{\text{model}} logp~model 易于反向传播,并且如上所述, p noise p_{\text{noise}} pnoise 应易于估计(以便评估 p joint p_{\text{joint}} pjoint)和抽样(以生成训练数据),那么 NCE \text{NCE} NCE就易于使用。

  • NCE \text{NCE} NCE能够非常成功地应用于随机变量较少的问题,即使这些随机变量取到很大的值,它也很有效。

    • 例如,它已经成功地应用于给定单词上下文建模单词的条件分布 ( Mnih and Kavukcuoglu, 2013 \text{Mnih and Kavukcuoglu, 2013} Mnih and Kavukcuoglu, 2013)。
    • 虽然单词可以采样自一个很大的词汇表,但是只能采样一个单词。
  • NCE \text{NCE} NCE应用于具有许多随机变量的问题时,其效率会变得较低。

    • 当逻辑回归分类器发现某个变量的取值不大可能时,它会拒绝这个噪扰样本。
    • 这意味着在 p model p_{\text{model}} pmodel学习了基本的边缘统计之后,学习速率会大大减慢。
    • 想象一个使用非结构化高斯噪扰作为 p noise p_{\text{noise}} pnoise 来学习面部图像的模型。
    • 如果 p model p_{\text{model}} pmodel 学习了眼睛,而没有学习任何其他面部特征,如嘴,它会拒绝几乎所有的非结构化噪扰样本。
  • p noise p_{\text{noise}} pnoise必须是易于估计和采样的约束可能是过度的限制。当 p noise p_{\text{noise}} pnoise 比较简单时,大多数采样可能与数据有着明显不同,而不会迫使 p model p_{\text{model}} pmodel 进行显著改进。

  • 类似于得分匹配和伪似然,如果 p p p 只有下界,那么 NCE \text{NCE} NCE不会有效。

    • 这样的下界能够用于构建 p joint ( y = 1 ∣ x ) p_{\text{joint}}(y = 1 \mid \textbf{x}) pjoint(y=1x) 的下界,但是它只能用于构建 p joint ( y = 0 ∣ x ) p_{\text{joint}}(y = 0 \mid \textbf{x}) pjoint(y=0x)(出现在一般的 NCE \text{NCE} NCE对象中)的上界。
    • 同样地, p noise p_{\text{noise}} pnoise 的下界也没有用,因为它只提供了 p joint ( y = 1 ∣ x ) p_{\text{joint}}(y = 1 \mid \textbf{x}) pjoint(y=1x) 的上界。
  • 当在每个梯度步骤之前,模型分布被复制来定义新的噪扰分布时, NCE \text{NCE} NCE定义了一个被称为自对比估计的过程,其梯度期望等价于最大似然的梯度期望 ( Goodfellow, 2014 \text{Goodfellow, 2014} Goodfellow, 2014)。特殊情况的 NCE \text{NCE} NCE( 噪扰采样由模型生成)表明最大似然可以被解释为使模型不断学习以将现实与自身发展的信念区分的过程,而噪扰对比估计通过让模型区分现实和固定的基准( 噪扰模型),降低了计算成本。

  • 在训练样本和生成样本(使用模型能量函数定义分类器)之间进行分类以得到模型的梯度的方法,已经在更早的时候以各种形式提出来 ( Welling et al., 2003b; Bengio, 2009 \text{Welling et al., 2003b; Bengio, 2009} Welling et al., 2003b; Bengio, 2009)。

  • 噪扰对比估计是基于良好生成模型应该能够区分数据和噪扰的想法。一个密切相关的想法是,良好的生成模型能够生成分类器没法将其与数据区分的采样。这个想法诞生了生成式对抗网络。

总结

噪音对比估计( NCE \text{NCE} NCE)作为一种创新的统计模型估计方法,为解决配分函数难以计算的问题提供了有效的策略。通过将多分类问题转化为二分类问题, NCE \text{NCE} NCE不仅简化了计算过程,还提高了模型的训练效率。在自然语言处理和图像处理等复杂任务中, NCE \text{NCE} NCE展现了其出色的性能和广泛的应用前景。

具体而言, NCE \text{NCE} NCE通过对比真实数据和噪声样本,学习一个分类器以区分两者,从而实现对数据分布的有效估计。这种方法避免了直接计算配分函数的困难,转而通过优化二分类问题的损失函数来间接估算概率分布的参数。在实际应用中, NCE \text{NCE} NCE不仅降低了计算量,还提高了模型的泛化能力。

综上所述,噪音对比估计为配分函数的计算提供了一种新的思路和方法,它在解决复杂计算问题和提高模型性能方面具有显著的优势。随着研究的深入和应用的拓展, NCE \text{NCE} NCE有望在更多领域发挥重要作用,推动机器学习和统计模型的发展。

往期内容回顾

面对配分函数 - 引言篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ORACLE 19C安装 RAC报错

1. 问题描述 在Oracle 19C RAC的安装过程中,使用克隆方式在两个节点上部署集群。当第一个节点配置好基础服务后,关机并克隆节点。当尝试在第二个节点上通过页面进行RAC安装时,出现以下错误: [INS-32070] Could not remove the n…

React01 开发环境搭建

React 开发环境搭建 一、创建 React 项目二、项目精简 一、创建 React 项目 执行下述命令创建 react 项目 blu-react-basis npx create-react-app blu-react-basis项目目录结构如下: 执行下述命令启动项目 npm run start启动效果如下: 二、项目精简 …

Vue3:同一项目同一浏览器只允许打开一个标签页

说明: 阻止同一浏览器打开多个项目标签页,防止多标签页重复时间统计累加,适用于基于微信公众号页面或指定浏览器的计时统计等项目活动,计时在线学习时间统计等。 效果: main.js import {createApp} from vue import…

【Linux系统编程】第三十四弹---使用匿名管道构建简易Linux进程池

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、引言 2、进程池的基本概念 3、管道在进程池中的应用 4、进程池的实现 4.1、master类定义 4.2、测试信道 4.3、通过cha…

OpenCV高级图形用户界面(12)用于更改指定窗口的大小函数resizeWindow()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::resizeWindow() 函数用于更改指定窗口的大小。这使得你可以根据需要调整窗口的宽度和高度。 注释 指定的窗口大小是指图像区域的大小。工具栏…

Linux 手撕线程池

前言 线程池 是 池化技术 中很典型的一个,它旨在高效的管理和复用线程资源!在现在的计算机体系中,线程是执行任务(调度)的基本单位。然而,频繁的创建和销毁线程也会带来较大的开销,包括系统资源…

区块链开发入门: 原理、技术与实践

随着区块链技术的迅猛发展,它不仅改变了金融领域,还对供应链、医疗、身份认证等多个行业产生了深远影响。对于想要进入区块链开发领域的初学者而言,了解区块链的基本原理、相关技术以及实际应用场景至关重要。本文将为您提供一份全面的区块链…

网络变压器在PCIe网口应用的案例

PCIe(Peripheral Component Interconnect Express)是一种高速串行计算机总线标准,用于连接计算机主板上的设备,如显卡、网络适配器、存储控制器等。H82422S 网络变压器(Ethernet Transformer),在…

[Git]一文速通

概述 Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等, )在软件开发过程中被广泛使用 Git的作用 代码回溯版本切换多人协作远程备份 通过Git 仓库来存储和管理代码 文件,Git 仓库分为两种: 本地仓库: 开…

循序渐进丨在 MogDB 数据库中实现 Oracle ASH能力

我们都知道,当 Oracle 数据库出现性能故障后,一般会在线上实时诊断数据库性能问题,特别是资源突然打高的场景,这个时候用到ASH的数据,就能很大程度上准确定位问题所在。 Oracle ASH 在 Oracle 数据库中,实…

基于微博评论的自然语言处理情感分析

目录 一、项目概述 二、需要解决的问题 三、数据预处理 1、词汇表构建(vocab_creat.py) 2、数据集加载(load_dataset.py) 四、模型构建(TextRNN.py) 1、嵌入层(Embedding Layer&#xff…

【学术会议论文投稿】ECMAScript标准:塑造现代Web开发的基石

https://www.ais.cn/attendees/index/MVNV3U 更多学术会议论文投稿请看:https://ais.cn/u/nuyAF3 目录 引言 ECMAScript的历史背景与版本更新 ECMAScript的核心特性 1. 变量和数据类型 2. 变量声明 3. 运算符 4. 控制流语句 5. 函数 6. 错误处理 7. 模板…

github学生认证(Github Copilot)

今天想配置一下Github Copilot,认证学生可以免费使用一年,认证过程中因为各种原因折腾了好久,记录一下解决方法供大家参考。 p.s.本文章只针对Github学生认证部分遇到的问题及解决方法,不包括配置copilot的全部流程~ 1、准备工作…

构建后端为etcd的CoreDNS的容器集群(六)、编写自动维护域名记录的代码脚本

本文为系列测试文章,拟基于自签名证书认证的etcd容器来构建coredns域名解析系统。 一、前置文章 构建后端为etcd的CoreDNS的容器集群(一)、生成自签名证书 构建后端为etcd的CoreDNS的容器集群(二)、下载最新的etcd容…

Github 2024-10-19 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-10-19统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Python项目2Dart项目1TypeScript项目1Vue项目1CUE项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, …

敏捷Scrum项目管理方法,如何做好敏捷项目管理❓

在当今快速变化的商业环境中,项目管理方法的选择对于项目的成功至关重要。敏捷Scrum作为一种轻量级、迭代式的项目管理方法,因其灵活性和高效性而备受推崇。作为项目经理,掌握敏捷Scrum项目管理方法不仅有助于提升项目交付效率,还…

2024年软件设计师中级(软考中级)详细笔记【7】面向对象技术(上)(分值10+)

目录 前言第7章 面向对象技术 (上)7.1 面向对象基础(3-4分)7.1.1 面向对象的基本概念7.1.2 面向对象分析(熟记)7.1.3 面向对象设计7.1.4 面向对象程序设计7.1.5 面向对象测试 7.2 UML(3~4分)7.2.1 事务7.2.2 关系7.2.2…

Qt 支持打包成安卓

1. 打开维护Qt,双击MaintenanceTool.exe 2.登陆进去,默认是添加或移除组件,点击下一步, 勾选Android, 点击下一步 3.更新安装中 4.进度100%,完成安装,重启。 5.打开 Qt Creator,编辑-》Preferences... 6.进…

Windows下配置Nginx和PHP

之前在Windows开发php项目用的是phpstudy,好用的很。但是phpstudy好久没有更新了,感觉PHP像没有人再用了一样。但是PHP拿来开发小系统,还是很高效的,今天记录如何在Windows环境下配置Nginx和PHP。 1. 配置nginx Nginx软件下载解压…

【Python】selenium遇到“InvalidArgumentException”的解决方法

在使用try……except 的时候捕获到这个错误: InvalidArgumentException: invalid argument (Session info: chrome112.0.5614.0) 这个错误代表的是,当传入的参数不符合期望时,就会抛出这个异常: InvalidArgumentException: invali…