🎨
Bible-DeepLearning
  • Introduction
  • 第6章 深度前馈网络
    • 6.1 例子:学习XOR
    • 6.2 基于梯度的学习
      • 6.2.1 代价函数
        • 6.2.1.1 使用最大似然学习条件分布
        • 6.2.1.2 学习条件统计量
      • 6.2.2 输出单元
        • 6.2.2.1 用于高斯输出分布的线性神单元
        • 6.2.2.2 用于Bernoulli输出分布的sigmoid单元
        • 6.2.2.3 用于Multinoulli输出分布的softmax单元
    • 6.3 隐藏单元
      • 6.3.1 ReLU及其扩展
      • 6.3.2 logistic sigmoid与双曲正切函数
      • 6.3.3 其他隐藏单元
      • 李宏毅补充 SELU
    • 6.4 架构设计
    • 6.5 反向传播和其他的微分算法
      • 6.5.1 计算图
      • 6.5.2 微积分中的链式法则
      • 6.5.3 递归地使用链式法则来实现反向传播
      • 6.5.4 全连接MLP中的反向传播计算
      • 6.5.5 符号到符号的导数
      • 6.5.6 一般化的反向传播
      • 6.5.7 实例:用于MLP 训练的反向传播
      • 6.5.8 复杂化
  • 第7章 深度学习中的正则化
    • 7.1 参数范数惩罚
      • 7.1.1 L2参数正则化
      • 7.1.2 L1参数正则化
    • 7.2 作为约束的范数惩罚
    • 7.3 正则化和欠约束问题
    • 7.4 数据集增强
    • 7.5 噪声鲁棒性
    • 7.6 半监督学习
    • 7.7 多任务学习
    • 7.8 提前终止
    • 7.9 参数绑定和参数共享
    • 7.10 稀疏表示
    • 7.11 Bagging 和其他集成方法
    • 7.12 Dropout
    • 7.13 对抗训练
    • 7.14 切面距离、正切传播和流形正切分类器
    • Ag补充 一些能用于提升比赛成绩的方法
  • 第8章 深度模型中的优化
    • 8.1 学习和纯优化有什么不同
      • 8.1.1 经验风险最小化
      • 8.1.2 代理损失函数和提前终止
      • 8.1.3 批量算法和小批量算法
    • 8.2 神经网络优化中的挑战
      • 8.2.1 病态
      • 8.2.2 局部极小值
      • 8.2.3 8.2.3 高原、鞍点和其他平坦区域
      • 8.2.4 悬崖和梯度爆炸
      • 8.2.5 长期依赖
      • 8.2.6 非精确梯度
    • 8.3 基本算法
      • 8.3.1 随机梯度下降
      • 8.3.2 动量
      • 8.3.3 Nesterov 动量
    • 8.4 参数初始化策略
    • 8.5 自适应学习率算法
      • 8.5.1 AdaGrad
      • 8.5.2 RMSProp
      • 8.5.3 Adam
      • 8.5.4 选择正确的优化算法
    • 8.6 二阶近似方法
      • 8.6.1 牛顿法
      • 8.6.2 共轭梯度
      • 8.6.3 BFGS
    • 8.7 优化策略和元算法
      • 8.7.1 批标准化
      • 8.7.2 坐标下降
      • 8.7.3 Polyak 平均
      • 8.7.4 监督预训练
      • 8.7.5 设计有助于优化的模型
  • 第9章 卷积网络
    • 9.1 卷积运算
    • 9.2 动机
    • 9.3 池化
    • 9.4 卷积与池化作为一种无限强的先验
    • 9.5 基本卷积函数的变体
    • 9.6 结构化输出
    • 9.7 数据类型
  • 第10章 序列建模:循环和递归网络
    • 10.1 展开计算图
    • 10.2 循环神经网络
      • 10.2.1 导师驱动过程和输出循环网络
      • 10.2.2 计算循环神经网络的梯度
      • 10.2.3 作为有向图模型的循环网络
      • 10.2.4 基于上下文的RNN序列建模
    • 10.3 双向RNN
    • 10.4 基于编码 - 解码的序列到序列架构
    • 10.5 深度循环网络
    • 10.6 递归神经网络
    • 10.7 长期依赖的挑战
    • 10.9 渗漏单元和其他多时间尺度的策略
    • 10.10 长短期记忆和其他门控RNN
      • 10.10.1 LSTM
      • 10.10.2 其他门控RNN
    • 10.11 优化长期依赖
      • 10.11.1 梯度截断
      • 10.11.2 引导信息流的正则化
    • 10.12 外显记忆
  • 第11章 实践方法论
    • 11.1 性能度量
    • 11.2 默认的基准模型
    • 11.3 决定是否收集更多数据
    • 11.4 选择超参数
      • 11.4.1 手动选择超参数
      • 11.4.3 网络搜索
      • 11.4.4 随机搜索
    • 11.5 调试策略
Powered by GitBook
On this page

Was this helpful?

  1. 第10章 序列建模:循环和递归网络

10.12 外显记忆

智能需要知识并且可以通过学习获取知识,这已促使大型深度架构的发展。 然而,知识是不同的并且种类繁多。 有些知识是隐含的、潜意识的并且难以用语言表达——比如怎么行走或狗与猫的样子有什么不同。 其他知识可以是明确的、可陈述的以及可以相对简单地使用词语表达——每天常识性的知识,如"猫是一种动物",或者为实现自己当前目标所需知道的非常具体的事实,如"与销售团队会议在141室于下午3:00开始"。

神经网络擅长存储隐性知识,但是他们很难记住事实。 被存储在神经网络参数中之前,随机梯度下降需要多次提供相同的输入,即使如此,该输入也不会被特别精确地存储。 {Graves-et-al-arxiv2014}推测这是因为神经网络缺乏\textbf{工作存储}(working memory)系统,即类似人类为实现一些目标而明确保存和操作相关信息片段的系统。 这种外显记忆组件将使我们的系统不仅能够快速"故意"地存储和检索具体的事实,也能利用他们循序推论。 神经网络处理序列信息的需要,改变了每个步骤向网络注入输入的方式,长期以来推理能力被认为是重要的,而不是对输入做出自动的、直观的反应{cite?} 。

[success] 神经网络学习知识的局限性: (1)隐性知识 --- 擅长 (2)明确知识 --- 难以记住,不会精确地存储 解决方法:记忆网络 (1)一组记忆单元:LSTM、GRU -> 向量 (2)监督信号 -> 软件注意机制

为了解决这一难题,{Weston2014}引入了记忆网络,其中包括一组可以通过寻址机制来访问的记忆单元。 记忆网络原本需要监督信号指示他们如何使用自己的记忆单元。 {Graves-et-al-arxiv2014}引入的神经网络图灵机,不需要明确的监督指示采取哪些行动而能学习从记忆单元读写任意内容,并通过使用基于内容的软注意机制(见{Bahdanau-et-al-ICLR2015-small}和\sec?),允许端到端的训练。

[success] 端到端学习 以语音识别为例: pipeline学习: audio(X) --(MFCC)--> feature --(DL)--> Phonemes ----> words ----> transcript(y) end-to-end学习: audio(X) ----> transcript(y) 中间方法: audio(X) ----> Phonemes ----> transcript(y) 端到端学习的优点与缺点: 优点:(1)let the data speak(2)需要手工设计的组件更少 缺点:(1)需要大量(X,y)数据(2)排除了可能有用的手工设计的组件 手工设计的组件可以把人类知识直接注入算法。它可以对算法起积极作用,也可以起消极作用。

这种软寻址机制已成为其他允许基于梯度优化的模拟算法机制的相关架构的标准{cite?}。

[warning] 后面只知道大概要干什么,具体原理不懂。

每个记忆单元可以被认为是LSTM和GRU中记忆单元的扩展。 不同的是,网络输出一个内部状态来选择从哪个单元读取或写入,正如数字计算机读取或写入到特定地址的内存访问。

产生确切整数地址的函数很难优化。 为了缓解这一问题,NTM实际同时从多个记忆单元写入或读取。 读取时,它们采取许多单元的加权平均值。 写入时,他们对多个单元修改不同的数值。 用于这些操作的系数被选择为集中在少数单元,如通过softmax函数产生它们。 使用这些具有非零导数的权重允许控制访问存储器的函数能使用梯度下降法优化。 关于这些系数的梯度指示着其中每个参数是应该增加还是减少,但梯度通常只在接收大系数的存储器地址上具有大的值。

这些记忆单元通常扩充为包含向量,而不是由LSTM或GRU存储单元所存储的单个标量。 增加记忆单元大小的原因有两个。 原因之一是,我们已经增加了访问记忆单元的成本。 我们为产生用于许多单元的系数付出计算成本,但我们预期这些系数聚集在周围小数目的单元。 通过读取向量值,而不是一个标量,我们可以抵消部分成本。 使用向量值的记忆单元的另一个原因是,它们允许\textbf{基于内容的寻址}(content-based addressing),其中从一个单元读或写的权重是该单元的函数。 如果我们能够产生一个模式来匹配某些但并非所有元素,向量值单元允许我们检索一个完整向量值的记忆。 这类似于人们能够通过几个歌词回忆起一首歌曲的方式。 我们可以认为基于内容的读取指令是说,"检索一首副歌歌词中带有'我们都住在黄色潜水艇'的歌"。 当我们要检索的对象很大时,基于内容的寻址更为有用——如果歌曲的每一个字母被存储在单独的记忆单元中,我们将无法通过这种方式找到他们。 通过比较,\textbf{基于位置的寻址}(location-based addressing)不允许引用存储器的内容。 我们可以认为基于位置的读取指令是说"检索347档的歌的歌词"。 当存储单元哪怕很小时,基于位置的寻址常常也可以是完全合理的机制。

如果一个存储单元的内容在大多数时间步上会被复制(不被忘记),则它包含的信息可以在时间上向前传播,梯度随时间向后传播,而不会消失或爆炸。

外显记忆的方法在\fig?说明,其中我们可以看到一个"任务神经网络"搭配了一个存储器。 虽然这一任务神经网络可以是前馈或循环的,但整个系统是一个循环网络。 任务网络可以选择读取或写入特定的存储器地址。 外显记忆似乎允许模型学习普通RNN或LSTM RNN不能学习的任务。 这种优点的一个原因可能是因为信息和梯度可以(分别在时间上向前和向后)在非常长的持续时间内传播。

作为存储器单元的加权平均值反向传播的替代,我们可以将存储器寻址系数解释为概率,并依据此概率随机从一个单元读取{cite?}。 优化离散决策的模型需要专门的优化算法,这将在\sec?中描述。 目前为止,训练这些做离散决策的随机架构,仍比训练进行软判决的确定性算法更难。

无论是软(允许反向传播)或随机硬性的,用于选择一个地址的机制与先前在机器翻译的背景下引入的注意力机制形式相同{cite?},这在\sec?中也有讨论。 甚至更早之前,注意力机制的想法就被引入了神经网络,在手写生成的情况下{cite?},有一个被约束为通过序列只向前移动的注意力机制。 在机器翻译和记忆网络的情况下,每个步骤中关注的焦点可以移动到一个完全不同的地方(相比之前的步骤)。

循环神经网络提供了将深度学习扩展到序列数据的一种方法。 它们是我们的深度学习工具箱中最后一个主要的工具。 现在我们的讨论将转移到如何选择和使用这些工具,以及如何在真实世界的任务中应用这些工具。

Previous10.11.2 引导信息流的正则化Next第11章 实践方法论

Last updated 5 years ago

Was this helpful?