🎨
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章 序列建模:循环和递归网络
  2. 10.2 循环神经网络

10.2.3 作为有向图模型的循环网络

Previous10.2.2 计算循环神经网络的梯度Next10.2.4 基于上下文的RNN序列建模

Last updated 5 years ago

Was this helpful?

[warning] “作为有向图模型”是什么意思?

目前为止,我们接触的循环网络例子中损失$L^{(t)}$是训练目标$y^{(t)}$和输出$o^{(t)}$之间的交叉熵。

[success] 符号$y^{(t)}$用得有点歧义。 有的地方$y^{(t)}$表示为训练目标,一开始就确定的。 有的地方$y^{(t)}$表示为模型在t时刻产生的结果,相当于$\hat y^{(t)}$或$o^{(t)}$。

与前馈网络类似,原则上循环网络几乎可以使用任何损失。 但必须根据任务来选择损失。 如前馈网络,我们通常希望将RNN的输出解释为一个概率分布,并且我们通常使用与分布相关联的交叉熵来定义损失。 均方误差是与单位高斯分布的输出相关联的交叉熵损失,例如前馈网络中所使用的。

当我们使用一个预测性对数似然的训练目标,如\eqn?,我们将RNN训练为能够根据之前的输入估计下一个序列元素$y^{(t)}$的条件分布。 这可能意味着,我们最大化对数似然

log⁡p(y(t)∣x(1),⋯ ,x(t)),\begin{aligned} \log p(y^{(t)} \mid x^{(1)},\cdots, x^{(t)}), \end{aligned}logp(y(t)∣x(1),⋯,x(t)),​

或者,如果模型包括来自一个时间步的输出到下一个时间步的连接,

log⁡p(y(t)∣x(1),⋯ ,x(t),y(1),⋯ ,y(t−1)).\begin{aligned} \log p(y^{(t)} \mid x^{(1)},\cdots, x^{(t)},y^{(1)},\cdots, y^{(t-1)} ). \end{aligned}logp(y(t)∣x(1),⋯,x(t),y(1),⋯,y(t−1)).​

将整个序列$y$的联合分布分解为一系列单步的概率预测是捕获关于整个序列完整联合分布的一种方法。

[success] 整个序列$y$的联合分布:$p(y1, y2, ..., yt)$ 一系列单步的概率:$p(y1),p(y2), ..., p(yt)$

当我们不把过去的$y$值反馈给下一步作为预测的条件时,那么有向图模型不包含任何从过去$y^{(i)}$到当前$y^{(t)}$的边。

[success] "不把过去的$y$值反馈给下一步作为预测的条件" 我理解是不存在$\hat y$ -> h, 但仍可以存在y->h或h->h

在这种情况下,给定x序列后,输出的y值之间条件独立。在这种情况下,输出$y$与给定的$x$序列是条件独立的。

[warning] [?]输出$y$与给定的$x$序列是条件独立的

当我们反馈真实的$y$值(不是它们的预测值,而是真正观测到或生成的值)给网络时,那么有向图模型包含所有从过去$y^{(i)}$到当前$y^{(t)}$的边。

[success] 什么是真实的y?这句话有歧义。 训练目标y和预测结果$\hat y$都是真实的。 预测值和生成的值都是$\hat y$的意思。 这里到底想反馈的是什么? 我理解是$\hat y$

举一个简单的例子,让我们考虑对标量随机变量序列$ \Bbb Y = {y^{(1)},\cdots,y^{(\tau)}}$建模的RNN,也没有额外的输入$x$。 在时间步$t$的输入仅仅是时间步$t-1$的输出。 该RNN定义了关于$y$变量的有向图模型。 我们使用链式法则(用于条件概率的\eqn?)参数化这些观察值的联合分布:

其中当$t=1$时竖杠右侧显然为空。 因此,根据这样一个模型,一组值${y^{(1)},\cdots,y^{(\tau)} }$的负对数似然为

其中

[warning] 从这里开始看不懂了。

图模型中的边表示哪些变量直接依赖于其他变量。 许多图模型的目标是省略不存在强相互作用的边以实现统计和计算的效率。 例如,我们通常可以作Markov假设,即图模型应该只包含从${ y^{(t-k)}, \cdots, y^{(t-1)}}$到$y^{(t)}$的边,而不是包含整个过去历史的边。 然而,在一些情况下,我们认为整个过去的输入会对序列的下一个元素有一定影响。 当我们认为$y^{(t)}$的分布可能取决于遥远过去(在某种程度)的$y^{(i)}$的值,且无法通过$y^{(t-1)}$捕获$y^{(i)}$的影响时,RNN将会很有用。

解释RNN作为图模型的一种方法是将RNN视为定义一个结构为完全图的图模型,且能够表示任何一对$y$值之间的直接联系。 \fig?是关于$y$值且具有完全图结构的图模型。 该RNN完全图的解释基于排除并忽略模型中的隐藏单元$h^{(t)}$。

更有趣的是,将隐藏单元$h^{(t)}$视为随机变量,从而产生RNN的图模型结构\footnote{给定这些变量的父变量,其条件分布是确定性的。 尽管设计具有这样确定性的隐藏单元的图模型是很少见的,但这是完全合理的。}。 在图模型中包括隐藏单元预示RNN能对观测的联合分布提供非常有效的参数化。 假设我们用表格表示法来表示离散值上任意的联合分布,即对每个值可能的赋值分配一个单独条目的数组,该条目表示发生该赋值的概率。 如果$y$可以取$k$个不同的值,表格表示法将有$\Bbb O(k^\tau)$个参数。 对比RNN,由于参数共享,RNN的参数数目为$\Bbb O(1)$且是序列长度的函数。 % ?? 我们可以调节RNN的参数数量来控制模型容量,但不用被迫与序列长度成比例。 \eqn?展示了所述RNN通过循环应用相同的函数$f$以及在每个时间步的相同参数$\theta$,有效地参数化的变量之间的长期联系。 \fig?说明了这个图模型的解释。 在图模型中结合$h^{(t)}$节点可以用作过去和未来之间的中间量,从而将它们解耦。 遥远过去的变量$y^{(i)}$可以通过其对$h$的影响来影响变量$y^{(t)}$。 该图的结构表明可以在时间步使用相同的条件概率分布有效地参数化模型,并且当观察到全部变量时,可以高效地评估联合分配给所有变量的概率。

即便使用高效参数化的图模型,某些操作在计算上仍然具有挑战性。 例如,难以预测序列中缺少的值。

循环网络为减少的参数数目付出的代价是\emph{优化}参数可能变得困难。

在循环网络中使用的参数共享的前提是相同参数可用于不同时间步的假设。 也就是说,假设给定时刻$t$的变量后,时刻$t +1$变量的条件概率分布是平稳的,这意味着之前的时间步与下个时间步之间的关系并不依赖于$t$。 原则上,可以使用$t$作为每个时间步的额外输入,并让学习器在发现任何时间依赖性的同时,在不同时间步之间尽可能多地共享。 相比在每个$t$使用不同的条件概率分布已经好很多了,但网络将必须在面对新$t$时进行外推。

为了完整描述将RNN作为图模型的观点,我们必须描述如何从模型采样。 我们需要执行的主要操作是简单地从每一时间步的条件分布采样。 然而,还有一个额外的复杂性。 RNN必须有某种机制来确定序列的长度。 这可以通过多种方式实现。

在当输出是从词汇表获取的符号的情况下,我们可以添加一个对应于序列末端的特殊符号{cite?}。 当产生该符号时,采样过程停止。 在训练集中,我们将该符号作为序列的一个额外成员,即紧跟每个训练样本$x^{(\tau)}$之后。

另一种选择是在模型中引入一个额外的Bernoulli输出,表示在每个时间步决定继续生成或停止生成。 相比向词汇表增加一个额外符号,这种方法更通用,因为它适用于任何RNN,而不仅仅是输出符号序列的RNN。 例如,它可以应用于一个产生实数序列的RNN。 新的输出单元通常使用sigmoid单元,并以交叉熵作为损失函数进行训练。 在这种方法中,sigmoid被训练为最大化正确预测的对数似然,即在每个时间步序列决定结束或继续。

确定序列长度$\tau$的另一种方法是将一个额外的输出添加到模型并预测整数$\tau$本身。 模型可以采出$\tau$的值,然后采$\tau$步有价值的数据。 这种方法需要在每个时间步的循环更新中增加一个额外输入,使得循环更新知道它是否是靠近所产生序列的末尾。 这种额外的输入可以是$\tau$的值,也可以是$\tau - t$即剩下时间步的数量。 如果没有这个额外的输入,RNN可能会产生突然结束序列,如一个句子在最终完整前结束。 此方法基于分解

直接预测$\tau$的例子见{Goodfellow+et+al-ICLR2014a}。

P(Y)=P(y(1),⋯ ,y(τ))=∏t=1τP(y(t)∣y(t−1),y(t−2),⋯ ,y(1)),\begin{aligned} P(\Bbb Y) = P(y^{(1)},\cdots,y^{(\tau)}) = \prod_{t=1}^{\tau}P(y^{(t)} \mid y^{(t-1)},y^{(t-2)}, \cdots,y^{(1)}), \end{aligned}P(Y)=P(y(1),⋯,y(τ))=t=1∏τ​P(y(t)∣y(t−1),y(t−2),⋯,y(1)),​
L=∑tL(t),\begin{aligned} L = \sum_{t} L^{(t)}, \end{aligned}L=t∑​L(t),​
L(t)=−log⁡P(y(t)=y(t)∣y(t−1),y(t−2),⋯ ,y(1)).\begin{aligned} L^{(t)} = -\log P(y^{(t)} = y^{(t)} \mid y^{(t-1)},y^{(t-2)}, \cdots, y^{(1)}). \end{aligned}L(t)=−logP(y(t)=y(t)∣y(t−1),y(t−2),⋯,y(1)).​
P(x(1),⋯ ,x(τ))=P(τ)P(x(1),⋯ ,x(τ)∣τ).\begin{aligned} P(x^{(1)},\cdots, x^{(\tau)}) = P(\tau) P(x^{(1)},\cdots,x^{(\tau)} \mid \tau) . \end{aligned}P(x(1),⋯,x(τ))=P(τ)P(x(1),⋯,x(τ)∣τ).​