Geoffrey Hinton讲座回顾:使用快速权重来存储临时记忆

简介: 这个讲座谈了快速权重(fast weight)的思想及其实现。这种快速权重可以被用于存储最近的临时记忆,并且它们提供了一种实现这种类型的对过去的注意(attention)的神经上可行的方法——近期它已被证明在序列到序列模型上是非常有帮助的。通过使用快速权重,我们可以不再需要存储神经活动模式的副本。

介绍:这个讲座谈了快速权重(fast weight)的思想及其实现。这种快速权重可以被用于存储最近的临时记忆,并且它们提供了一种实现这种类型的对过去的注意(attention)的神经上可行的方法——近期它已被证明在序列到序列模型上是非常有帮助的。通过使用快速权重,我们可以不再需要存储神经活动模式的副本。


E48CBBD2-7D90-4AAB-A3D7-E99BA4E25160.jpeg

点击查看原视频


其中的基本思想是临时记忆(temporary memories)可以不通过添加活动神经元(active neurons)来存储,而是可以通过在一些已有神经元上进行一些修改来实现。


对于每一个神经元连接,与这个连接相关的权重都有两个组分。一是标准慢权重(standard slow weight),其代表了长期记忆,学习慢衰减也慢。另一个是快速权重,代表了短期记忆,学习快衰减也快。快速权重是真正存在的,比如:启动(priming)。假设你听到了一个带有大量噪声的词,如果这是你第一次听到这个词,你可能无法识别它。但如果你在半个小时之前听过这个词,你就可以将其识别出来,这是因为你识别这个词的阈值(threshold)被你半小时之前的记忆降低了。一般而言,假设我们有一个局部表示(localist representation),为了实现上述效果,我们就可以临时降低某个特定词的阈值,而不是改变整个结构。你也可以从另一个角度来思考:假设你有一种活动模式,你可以改变活动模式之间的神经元的权重,以使其中一个特定的模式变成一个更强的吸引子(attractor,比如更容易识别一个词)。这是我们存储记忆的方式,我们通过改变权重来存储模式而不是直接存储模式。因为如果我们使用权重矩阵(weight matrix)而非活动向量(activity vector)来存储短期记忆,我们就能通过有限的神经元实现远远更大的容量。


存储临时知识的方式有两种:


长短期记忆(LSTM):在隐藏单元存储活动。它的容量非常有限。假设一个隐藏状态有 H 个单元,那么在关于当前序列的历史上,LSTM 就会受限于 O(H) 的短期记忆(吸引子)。除此之外,LSTM 将信息存储在其隐藏单元之中,从而使得该短期记忆与正在进行的过程无关。


快速权重:让你可以使用权重矩阵来存储短期记忆,这能带来更高的容量。除此之外,该短期记忆可以存储特定于当前序列的历史的信息,从而使得该信息可被用于影响正在进行的过程。


我们可以怎样应用快速权重的思想?


让我们从 ReLU RNN 开始。ReLU RNN 很易于训练,而且很擅长学习长期依赖(长期记忆)。下面的左图表示了普通的 RNN,右图则表示一个相同的 RNN(如果我们使用空矩阵进行了「隐藏→隐藏」权重初始化,如蓝色箭头所示)。为了应用快速权重的思想,这里使用了外积学习规则(outer product learning rule)来更新快速权重矩阵 A。


93EBA3FB-B6A5-4413-A7E3-2F8BF039182F.jpeg


更新快速权重矩阵 A 的规则:每次我们在时间步骤 t 学习到一个隐藏状态 h(t),我们就将当前快速权重 A(t-1) 与权重衰减参数 λ 相乘,并且加上乘以学习率 η 的新学习到的隐藏状态 h(t) 的外积(outer product)。这个更新函数如下所示。其快速权重即为过去的贡献(contribution)与随时间衰减的贡献的总和。在数学上,该贡献即为该隐藏状态的外积 h(t)h(t)^T。


A(t) = λA(t − 1) + ηh(t)h(t)^T

hs+1(t + 1) = f([Wh(t) + Cx(t)] + A(t)hs(t + 1))


0DE23949-1402-4550-AA60-8D8CACE808C2.png00042E3E-3389-4F0A-8000-5CCEA0BCB945.jpeg



增加层归一化(LN)技巧使其效果更好。


在标准 RNN 中,循环单元(recurrent units)的输入总和的平均幅度有一个趋势——每一个时间步骤要么会增大、要么会减小,这会导致梯度爆炸或消失。LN 则是在向隐藏单元所接收到的总输入向量应用非线性(ReLU)之前,将该向量归一化到零均值和单位方差。在一个层归一化的 RNN 中,其归一化项使其在该层的所有输入的总和的规模调整时保持不变,这能得到远远更加稳定的隐藏到隐藏动态(hidden-to-hidden dynamics)?


这样有效吗?


任务 1:联想任务


  • 假设有一个任务,其多个关键值对(key-value pairs)被表示一个序列,该序列作为输入
  • 将该序列转换成一个 R 维度向量,用作该循环隐藏单元的输入
  • 检查这个任务的误差率
  • 结果表说明 RNN 可以通过 100 个暗隐藏单元(dim hidden unit)解决这个问题,LSTM 可以使用 50 个暗隐藏单元解决它,而快速权重 RNN 只需要 20 个即可。这并不令人惊奇,因为在 FW RNN 中的 20 个暗隐藏单元能比普通 RNN 实现远远更大的容量。问题在于:它能够学习怎么使用这种记忆容量吗?是的,因为 FW RNN 在 R=20 时能达到 1.18% 的误差率。

4E5D834A-351C-4961-97D2-CD14AFDF6D8B.png

18DBB603-25B8-4540-974E-A42A3FE552B1.png


任务 2 :使用快速权重结合 glimpse


  • 视觉注意模型:注意模型已经展现出了能克服 ConvNet 一些缺陷的能力:一是理解 ConvNet 注意的地方;二,注意模型能有选择的关注图像的重要部分。注意模型如何工作?给定一张输入图像,视觉注意模型计算一系列的 glimpse,每个 glimpse 对应图像的一个小区域。视觉注意模型能学习找到图像中的不同物体并对他们进行分类,但它使用的计算 glimpse 的方法过于简化:它使用单尺度的 glimpse,并按照特定的顺序扫描整个图像。然而,人类的眼睛能够在不同的尺度上注意图像的不同部分,并结合整个观察做出正确的决定。改进模型记忆近期 glimpse 的能力,应该可以帮助视觉注意模型发现意义重大的 glimpse 策略。快速权重能学习一个序列中的所有 glimpse,因此隐态可被用于决定如何融合视觉信息,并检索合适的记忆。
  • 为了观察快速权重是否有效,想象一个简单的循环视觉注意模型,它不能预测该注意哪里,但却能从不同层级中获得位置的固定序列。该注意模型需要融合 glimpse 信息,从而成功的完成任务。快速权重可使用一个临时缓存来存储 glimpse 计算,而且同一模型的慢权重能融合 glimpse 信息。
  • 在 MINST 上评估多级视觉注意模型
  • Table 2 展现了带有多级 glimpse 的 ReLU RNN 和带有同样 glimpse 序列的 LSTM 的结果。结果表明在隐藏单元数量有限的情况下,快速权重有更强的记忆能力,也因此表现比 LRNN 和 LSTM 更好。此外,LSTM 也不擅长融合 glimpse,因为 LSTM 有序的处理 glimpse。改变 glimpse 的序列不能改变物体的意义。不像必须要融合一系列 glimpse 的模型,ConvNet 并行处理所有的 glimpse,并使用隐藏单元的层来留取所有的融合,所以它的表现要比序列模型更好。


37B68E32-B35A-4EA6-B847-564711882D53.png

实现:

https://github.com/jiamings/fast-weights


Hugo Larochelle 所做笔记:

http://www.shortscience.org/paper?bibtexKey=journals/corr/1610.06258#hlarochelle


思考


  • 该快速联想记忆模型结合了来自神经科学的思路。
  • 该论文没有提到模型在语言相关的任务上的表现,因此在语言任务中用快速权重 RNN 取代 LSTM 会很有趣。
  • 该论文表明不能使用 mini-batch,因为每个序列的快速权重矩阵都不同,但与一系列存储的隐藏向量相比却允许 mini-batch。mini-batch 确保我们能利用 GPU 计算能力的优势,但该快速权重模型如何使用 mini-batch 的思路还很模糊。



©本文为机器之心原创,转载请联系本公众号获得授权


相关文章
|
存储 SQL Java
好多人都说存储过程很难?认真看这篇文章就够了
好多人都说存储过程很难?认真看这篇文章就够了
|
10月前
|
机器学习/深度学习 算法 安全
随机性、熵与随机数生成器:解析伪随机数生成器(PRNG)和真随机数生成器(TRNG)
随机性在密码学、仿真和机器学习等领域中至关重要,本文探讨了随机性、熵的概念以及伪随机数生成器(PRNG)和真随机数生成器(TRNG)的原理和应用。PRNG通过算法生成看似随机的序列,适用于高效需求;TRNG利用物理过程生成真正随机数,适用于高安全需求。文章还讨论了两者的协同应用及其面临的挑战。
558 5
随机性、熵与随机数生成器:解析伪随机数生成器(PRNG)和真随机数生成器(TRNG)
|
6月前
|
机器学习/深度学习 缓存 自然语言处理
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
Tiktokenizer 是一款现代分词工具,旨在高效、智能地将文本转换为机器可处理的离散单元(token)。它不仅超越了传统的空格分割和正则表达式匹配方法,还结合了上下文感知能力,适应复杂语言结构。Tiktokenizer 的核心特性包括自适应 token 分割、高效编码能力和出色的可扩展性,使其适用于从聊天机器人到大规模文本分析等多种应用场景。通过模块化设计,Tiktokenizer 确保了代码的可重用性和维护性,并在分词精度、处理效率和灵活性方面表现出色。此外,它支持多语言处理、表情符号识别和领域特定文本处理,能够应对各种复杂的文本输入需求。
742 6
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
|
7月前
|
人工智能 自然语言处理 搜索推荐
飞算 JavaAI:开发界的 “AI 教练”,助你飞速成长!
飞算JavaAI如同开发者的“AI教练”,通过深度洞察需求、精准绘制开发蓝图,以自然语言解析需求,自动生成接口和表结构,简化业务理解。其全方位开发指导功能,细致设计每个细节,帮助开发者梳理业务规则与数据流程,提高开发效率。全程智能辅助则自动输出完整工程源码,涵盖配置类文件、Java代码及测试资源,让开发者专注于优化业务逻辑和实现个性化功能。无论是新手还是资深开发者,飞算JavaAI都是不可或缺的得力伙伴,助力快速成长与技术突破。
|
10月前
|
机器学习/深度学习 存储 人工智能
【AI系统】Tensor Core 架构演进
自2017年Volta架构推出以来,英伟达的GPU架构不断进化,从Volta的张量核心(Tensor Core)革新,到Turing的整数格式支持,再到Ampere的稀疏矩阵计算优化,以及Hopper的FP8张量核心和Transformer引擎,直至2024年的Blackwell架构,实现了30倍的LLM推理性能提升。每一代架构都标志着深度学习计算的重大突破,为AI技术的发展提供了强大的硬件支持。
336 1
|
10月前
|
API
通用图片搜索-搜狗源免费API接口教程
该接口用于搜索指定关键词并返回搜狗图片搜索结果,支持POST和GET请求。主要参数包括用户ID、用户KEY、关键词、页码及返回图片类型等。返回结果包含状态码、信息提示、结果集及当前页码。示例中提供了详细的请求与响应格式。
|
11月前
|
存储 前端开发 开发者
深入了解 Sass 和 SCSS:CSS 预处理器的强大功能
Sass(Syntactically Awesome Stylesheets)是一个强大的 CSS 预处理器,为开发者提供了诸多高级特性,如变量、嵌套、混合、继承等,简化了 CSS 的编写和管理。SCSS 是 Sass 3 引入的新语法,完全兼容 CSS3,并增强了 Sass 的动态功能。本文详细介绍了 Sass 和 SCSS 的核心特性及其在实际开发中的应用,如变量定义、嵌套规则、混合、继承、以及常用的操作符与扩展功能。
413 0
|
网络安全 数据安全/隐私保护 Docker
Pycharm 远程解释器的配置
Pycharm 远程解释器的配置
|
Ubuntu 安全 Linux
选择合适的Linux内核版本
【8月更文挑战第9天】选择合适的Linux内核版本
638 2
|
存储 持续交付 数据安全/隐私保护
实现镜像管理轻松搞定:Docker 仓库管理详解
实现镜像管理轻松搞定:Docker 仓库管理详解
757 1

热门文章

最新文章