70页论文,图灵奖得主Yoshua Bengio一作:“生成流网络”拓展深度学习领域

本文主要是介绍70页论文,图灵奖得主Yoshua Bengio一作:“生成流网络”拓展深度学习领域,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

3bddfeb6e8ff7f3c6f9ab241fc900f76.png

来源:机器之心
本文约2800字,建议阅读10分钟
GFlowNet会成为新的深度学习技术吗?

近日,一篇名为《GFlowNet Foundations》的论文引发了人们的关注,这是一篇图灵奖得主 Yoshua Bengio 一作的新研究,论文长达 70 页。

在 Geoffrey Hinton 的「胶囊网络」之后,深度学习的另一个巨头 Bengio 也对 AI 领域未来的方向提出了自己的想法。在该研究中,作者提出了名为「生成流网络」(Generative Flow Networks,GFlowNets)的重要概念。

9c38076b9ea819f90542b6a3b7999725.png

GFlowNets 灵感来源于信息在时序差分 RL 方法中的传播方式(Sutton 和 Barto,2018 年)。两者都依赖于 credit assignment 一致性原则,它们只有在训练收敛时才能实现渐近。由于状态空间中的路径数量呈指数级增长,因此实现梯度的精确计算比较困难,因此,这两种方法都依赖于不同组件之间的局部一致性和一个训练目标,即如果所有学习的组件相互之间都是局部一致性的,那么我们就得到了一个系统,该系统可以进行全局估计。

至于 GFlowNets 作用,论文作者之一 Emmanuel Bengio 也给出了一些回答:「我们可以用 GFlowNets 做很多事情:对集合和图进行一般概率运算,例如可以处理较难的边缘化问题,估计配分函数和自由能,计算给定子集的超集条件概率,估计熵、互信息等。」

4d2334c8181deb3e52e128ef3c5efef4.png

本文为主动学习场景提供了形式化理论基础和理论结果集的扩展,同时也为主动学习场景提供了更广泛的方式。GFlowNets 的特性使其非常适合从集合和图的分布中建模和采样,估计自由能和边缘分布,并用于从数据中学习能量函数作为马尔可夫链蒙特卡洛(Monte-Carlo Markov chains,MCMC)一个可学习的、可分摊(amortized)的替代方案。

GFlowNets 的关键特性是其学习了一个策略,该策略通过几个步骤对复合对象 s 进行采样,这样使得对对象 s 进行采样的概率 P_T (s) 与应用于该对象的给定奖励函数的值 R(s) 近似成正比。一个典型的例子是从正例数据集训练一个生成模型,GFlowNets 通过训练来匹配给定的能量函数,并将其转换为一个采样器,我们将其视为生成策略,因为复合对象 s 是通过一系列步骤构造的。这类似于 MCMC 方法的实现,不同的是,GFlowNets 不需要在此类对象空间中进行冗长的随机搜索,从而避免了 MCMC 方法难以处理模式混合的难题。GFlowNets 将这一难题转化为生成策略的分摊训练(amortized training)来处理。

本文的一个重要贡献是条件 GFlowNet 的概念,可用于计算不同类型(例如集合和图)联合分布上的自由能。这种边缘化还可以估计熵、条件熵和互信息。GFlowNets 还可以泛化,用来估计与丰富结果 (而不是一个纯量奖励函数) 相对应的多个流,这类似于分布式强化学习。

本文对原始 GFlowNet (Bengio 等人,2021 年)的理论进行了扩展,包括计算变量子集边缘概率的公式(或自由能公式),该公式现在可以用于更大集合的子集或子图 ;GFlowNet 在估计熵和互信息方面的应用;以及引入无监督形式的 GFlowNet(训练时不需要奖励函数,只需要观察结果)可以从帕累托边界进行采样。

尽管基本的 GFlowNets 更类似于 bandits 算法(因为奖励仅在一系列动作的末尾提供),但 GFlowNets 可以通过扩展来考虑中间奖励,并根据回报进行采样。GFlowNet 的原始公式也仅限于离散和确定性环境,而本文建议如何解除这两种限制。最后,虽然 GFlowNets 的基本公式假设了给定的奖励或能量函数,但本文考虑了 GFlowNet 如何与能量函数进行联合学习,为新颖的基于能量的建模方法、能量函数和 GFlowNet 的模块化结构打开了大门。

3f307cf958018a4283fe72f8246d5af8.png

论文地址:https://arxiv.org/pdf/2111.09266.pdf

小编对这篇论文的主要章节做了简单介绍,更多细节内容请参考原论文。

GFlowNets:学习流(flow)

研究者充分考虑了 Bengio et al. (2021)中引入的一般性问题,在这些问题中给出了一些关于流的约束或偏好。研究者的目标是使用估计量 Fˆ(s)和 Pˆ(s→s'|s)找到最能匹配需求的函数,如状态流函数 F(s)或转移概率函数 P(s→s' |s),这些可能不符合 proper flow。因此,他们将这类学习机器称为 Generative Flow Networks(简称为 GFlowNets)。

GFlowNets 的定义如下:

8610d98aade8c6e2d97a1940a3c6dcea.png

需要注意的是,GFlowNet 的状态空间(state-space)可以轻松修改以适应底层状态空间,其中转换(transition)不会形成有向无环图(directed acyclic graph, DAG)。

对于从终端流(Terminal Flow)估计转换概率,在 Bengio et al. (2021)的设置中, 研究者得到了与「作为状态确定性函数的终端奖励函数 R 」相对应的终端流:

4b2505c80acb499652377944f177ccf5.png

这样一来就可以扩展框架并以各种方式处理随机奖励。

GFlowNets 可以作为 MCMC Sampling 的替代方案。GFlowNet 方法分摊前期计算以训练生成器,为每个新样本产生非常有效的计算(构建单个配置,不需要链)。

流匹配和详细的平衡损失。为了训练 GFlowNet,研究者需要构建一个训练流程,该流程可以隐式地强制执行约束和偏好。他们将流匹配(flow-matching)或细致平衡条件(detailed balance condition)转换为可用的损失函数。

对于奖励函数,研究者考虑了「奖励是随机而不是状态确定性函数」的设置。如果有一个像公式 44 中的奖励匹配损失,则终端流 F(s→s_f)的有效目标是预期奖励 E_R[R(s),因为这是给定 s 时最小化 R(s)上预期损失的值。

1ae32bef28caaac22cdc110d39603391.png

如果有一个像公式 43 中的奖励匹配损失,终端流 log F(s→s_f)的 log 有效目标是 log-reward E_R[log R(s)]的预期值。这表明了使用奖励匹配损失时,GFlowNets 可以泛化至匹配随机奖励。

f35e1b0cca86c407307cc7a1deed7087.png

此外,GFlowNets 可以像离线强化学习一样离线训练。对于 GFlowNets 中的直接信用分配(Direct Credit Assignment),研究者认为可以将使用 GFlowNet 采样轨迹的过程等同于在随机循环神经网络中采样状态序列。让事情变得更复杂的原因有两个,其一这类神经网络不直接输出与某个目标匹配的预测,其二状态可能是离散(或者离散和连续共存)的。

条件流和自由能

本章主要介绍了条件流(Conditional flows)和自由能(Free energies)。

流的一个显著特性是:如果满足细致平衡或流匹配条件,则可以从初始状态流 F(s_0) 恢复归一化常数 Z(推论 3)。Z 还提供了与指定了终端转换流的给定终端奖励函数 R 相关联的配分函数(partition function)。下图展示了如何条件化 GFlowNet,给定状态 s,考虑通过原始流(左)和转移流来创建一组新的流(右)。

64ac2275e1e45df5d318e6151dfa114a.png

自由能是与能量函数相关的边缘化操作(即对大量项求和)的通用公式。研究者发现对自由能的估计为有趣的应用打开了大门,以往成本高昂的马尔可夫链蒙特卡洛(Markov chain Monte Carlo, MCMC)通常是主要方法。

自由能 F(s)的状态定义如下:

e479a7974d7fbc75e6b2cc60d673ff58.png

如何估计自由能呢?让我们考虑条件式 GFlowNet 的一种特殊情况,它允许网络估计自由能 F(s)。为此,研究者提议训练一个条件式 GFlowNet,其中条件输入 x 是轨迹中较早的状态 s。

状态条件式 GFlowNet 的定义如下,并且将 F(s|s)定义为 conditional state self-flow。

085fed41bcdf527b5852c018aa6e32b4.png

研究者表示,使用 GFlowNet 可以训练基于能量的模型。具体地,GFlowNet 被训练用于将能量函数转换为逼近对应的采样器。因此,GFlowNet 可以用作 MCMC 采样的替代方法。

此外,GFlowNet 还可用于主动学习。Bengio et al. (2021)使用的主动学习方案中,GFlowNet 被用于对候选 x 进行采样,其中研究者预计奖励 R(x)通常很大,这是因为 GFlowNet 与 R(x)成比例地采样。

多流、分布式 GFlowNets、无监督 GFlowNets 和帕累托 GFlowNets 

与分布式强化学习类似,非常有趣的一点是,泛化 GFlowNets 不仅可以捕获可实现的最终奖励的预期值,还能得到其他分布式统计数据。更一般地讲,GFlowNets 可以被想象成一个族(family),其中每一个都可以在自身流中对感兴趣的特定的未来环境结果进行建模。

下图为以结果为条件的(outcome-conditioned)GFlowNet 的定义:

b8cab6938835e343da9258a8c35f1e0f.png

在实践中,GFlowNet 永远无法完美地训练完成,因此应当将这种以结果为条件的 GFlowNet 与强化学习中以目标为条件的策略或者奖励条件颠倒的强化学习(upside-down RL)同等看待。未来更是可以将这些以结果为条件的 GFlowNets 扩展到随机奖励或随机环境中。

此外,训练一个以结果为条件的 GFlowNet 只能离线完成,因为条件输入(如最终返回)可能只有在轨迹被采样后才能知道。

8eddcdaf90ce9d9b2a12f5f26050875c.png

论文的完整目录如下:

0013f8e70862533cdd2db88f3c73fc96.png

9f212181092d30027a8cdc51e992de27.png

编辑:黄继彦

校对:杨学俊

c8829478e13d4ebba25b65ef1b55e3cb.png

这篇关于70页论文,图灵奖得主Yoshua Bengio一作:“生成流网络”拓展深度学习领域的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/901023

相关文章

使用python生成固定格式序号的方法详解

《使用python生成固定格式序号的方法详解》这篇文章主要为大家详细介绍了如何使用python生成固定格式序号,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录生成结果验证完整生成代码扩展说明1. 保存到文本文件2. 转换为jsON格式3. 处理特殊序号格式(如带圈数字)4

Java使用Swing生成一个最大公约数计算器

《Java使用Swing生成一个最大公约数计算器》这篇文章主要为大家详细介绍了Java使用Swing生成一个最大公约数计算器的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下... 目录第一步:利用欧几里得算法计算最大公约数欧几里得算法的证明情形 1:b=0情形 2:b>0完成相关代码第二步:加

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

Vue3 如何通过json配置生成查询表单

《Vue3如何通过json配置生成查询表单》本文给大家介绍Vue3如何通过json配置生成查询表单,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录功能实现背景项目代码案例功能实现背景通过vue3实现后台管理项目一定含有表格功能,通常离不开表单

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC