Advertisement

深度学习笔记之循环神经网络(三)循环神经网络思想

阅读量:

深度学习笔记之循环神经网络——循环神经网络思想

  • 引言
    • 回顾:潜变量自回归模型
    • 循环神经网络思想
    • 困惑度

引言

上一节介绍了基于统计算法 的语言模型。本节将介绍基于神经网络 的序列模型——循环神经网络

回顾:潜变量自回归模型

关于潜变量自回归模型,它的概率图结构 表示如下:
潜变量自回归模型——概率图结构
这里仅观察t时刻t+1时刻 随机变量的变化情况。它的变化过程 可划分为两个部分

  • x_{t-1},h_{t-1} \Rightarrow h_{t}过程。其概率图结构 表示为:
    过程1——概率图结构
    对应的因子分解 可表示为:\mathcal P(h_t \mid h_{t-1},x_{t-1})。如果使用自回归模型 去描述h_t后验概率 ,它可以表示为:
    就是以h_{t-1},x_{t-1}作为模型输入,其输出结果对h_t的分布进行描述。\lambda为模型参数。
    \mathcal P(h_t \mid h_{t-1},x_{t-1}) = \mathcal P [h_t \mid f(h_{t-1},x_{t-1};\lambda)]

  • x_{t-1},h_{t} \Rightarrow x_{t}过程。同理,其概率图结构 表示为:
    过程2——概率图结构
    同理,它的因子分解 表示为:\mathcal P(x_t \mid h_{t},x_{t-1}),对该条件概率 进行建模,对应后验概率 可表示为:
    \mathcal P(x_t \mid h_t,x_{t-1}) = \mathcal P[x_t \mid f(h_t,x_{t-1};\eta)]

最终通过对上述两步骤 的交替执行,从而完成对序列信息 的表示。也就是说,在遍历到最后一个随机变量 x_{\mathcal T},得到相应的 特征结果:
\mathcal P(h_{\mathcal T + 1} \mid h_{\mathcal T},x_{\mathcal T}) = \mathcal P[h_{\mathcal T + 1} \mid f(h_{\mathcal T},x_{\mathcal T};\theta)]

循环神经网络思想

观察上述步骤,无论是\mathcal P(h_t \mid h_{t-1},x_{t-1})还是\mathcal P(x_t \mid h_t,x_{t-1}),它们都属于推断过程。而循环神经网络 (\text{Recurrent Neural Network}),就是将上述推断过程 通过神经网络的方式描述出来。

循环神经网络隐藏层计算图 展开结构表示如下:
循环神经网络——展开图结构
该隐藏层结构的前馈计算 过程表示为如下形式:
t时刻到t+1时刻的计算过程为例,并且仅包含1个隐藏层。
\begin{cases} h_{t+1} = \sigma(\mathcal W_{h_t \Rightarrow h_{t+1}} \cdot h_{t} + \mathcal W_{x_t \Rightarrow h_{t+1}} \cdot x_t + b_{h_{t+1}}) \\ \mathcal O_{t+1} = \phi(\mathcal W_{h_{t+1} \Rightarrow \mathcal O_{t+1}} \cdot h_{t+1} + b_{\mathcal O_{t+1}}) \\ \end{cases}
其中,\sigma(\cdot)隐藏层的激活函数\phi(\cdot)表示输出层的激活函数(如\text{Softmax})。可以看出:

上述第一个公式的输出分布 就是后验分布结果 \mathcal P(h_{t+1} \mid h_t,x_t)的描述——将上一时刻的输入信息 x_t以及累积的序列信息 h_t通过\mathcal W_{h_t \Rightarrow h_{t+1}},\mathcal W_{x_t \Rightarrow h_{t+1}}线性计算的方式累积隐变量 h_{t+1}中。

那么\mathcal P(x_{t+1} \mid h_{t+1},x_{t})在哪里?它具体实现 在了什么位置:我们观察第二个 公式:
\mathcal O_{t+1} = \mathcal W_{h_{t+1} \Rightarrow \mathcal O_{t+1}} \cdot h_{t+1} + b_{\mathcal O_{t+1}}
而这个输出 \mathcal O_{t+1}就是关于 下一时刻x_{t+1}预测结果 \mathcal P(\mathcal O_{t+1} \mid h_{t+1},x_t)
其中x_t包含在h_{t+1}内,这里就这样表示了。

观察上图,有意思的是:\mathcal O_{t+1}t+1时刻产生的输出信息 ,而同时刻的x_{t+1}还没有进入到神经网络 内。这意味着:此时的分布 \mathcal P(\mathcal O_{t+1} \mid h_{t+1},x_t)仅仅是以h_{t+1},x_t作为条件,基于当前时刻的模型信息 ,对x_{t+1}进行预测的幻想粒子
关于幻想粒子见传送门

那么真正的 \mathcal P(x_{t+1} \mid h_{t+1},x_t)在哪里?——当预测结果\mathcal P(\mathcal O_{t+1} \mid h_{t+1},x_t)作为神经网络 的输出直接与真实特征 x_{t+1}之间进行比较,将比较出的差异性(损失函数)\mathcal L以梯度的形式对\mathcal W_{h_{t+1} \Rightarrow \mathcal O_{t+1}}进行更新
这里以'梯度下降法'为例,\eta表示学习率。
\mathcal W_{h_{t+1} \Rightarrow \mathcal O_{t+1}} \Leftarrow \mathcal W_{h_{t+1} \Rightarrow \mathcal O_{t+1}} - \eta \cdot \nabla\mathcal L
随着\mathcal W_{h_{t+1} \Rightarrow \mathcal O_{t+1}}优化\mathcal P(\mathcal O_{t+1} \mid h_{t+1},x_t)逐渐逼近 \mathcal P(x_{t+1} \mid h_{t+1},x_t)
当然,也可以将\mathcal P(\mathcal O_{t+1} \mid h_{t+1},x_t)看作是\mathcal P(x_{t+1} \mid h_{t+1},x_t),因为它们之间的关系已经确定,剩余的仅需要去更新\mathcal W_{h_{t+1} \Rightarrow \mathcal O_{t+1}}让两分布逐渐逼近。

如果用一句话描述上述过程 :输出\mathcal O_t预测的是对应时刻 的输入特征x_t,但输出操作发生在输入之前

困惑度

困惑度 (\text{Perplexity})能够衡量 一个语言模型的优劣性 。其基本思想 是:针对测试集 的文本序列,语言模型 对该序列赋予较高 的概率值。也就是说:测试集上的文本序列极大概率是正常的句子/段落 ,该模型就是优秀模型。公式可表示为如下形式:
这就是‘负对数似然’加上均值和指数。
\pi = \exp \left\{\frac{1}{N}\sum_{t=1}^N -\log \mathcal P(x_t \mid x_{t-1},\cdots,x_1)\right\}
该公式可继续化简至如下形式
指数的作用是增大相似性结果的映射程度。映射前的值域为[0,+\infty),映射后的值域为[1,+\infty),但由于\log函数的存在,大括号内项的变化量受到约束;而\exp \{\cdot\}显然释放掉了这个约束。也就是说,但凡出现一点偏差的风吹草动,都会被\exp\{\cdot\}放大。
\begin{aligned} \pi & = \sqrt[N]{\exp \left\{\sum_{t=1}^N -\log \mathcal P(x_t \mid x_{t-1},\cdots,x_1) \right\}} \\ & = \sqrt[N]{\exp \left\{\sum_{t=1}^N \log \left[\frac{1}{\mathcal P(x_t \mid x_{t-1},\cdots,x_1)}\right]\right\}} \\ & = \sqrt[N]{\prod_{i=1}^N \left[\exp \log \frac{1}{\mathcal P(x_t \mid x_{t-1},\cdots,x_1)}\right]} \\ & = \sqrt[N]{\prod_{t=1}^N \frac{1}{\mathcal P(x_t \mid x_{t-1},\cdots,x_1)}} \end{aligned}
根号内 的项就是联合概率分布 的倒数:
\prod_{t=1}^N \frac{1}{\mathcal P(x_t \mid x_{t-1},\cdots,x_1)} = \frac{1}{\prod_{t=1}^N \mathcal P(x_t \mid x_{t-1},\cdots,x_1)} = \frac{1}{\mathcal P(x_1,x_2,\cdots,x_N)}
最终可表示为:
\pi = \mathcal P(x_1,x_2,\cdots,x_N)^{-\frac{1}{N}} = \sqrt[N]{\frac{1}{\mathcal P(x_1,x_2,\cdots,x_N)}}

  • 其中文本序列 的概率\mathcal P(x_1,x_2,\cdots,x_{N})越大 ,得到的文本序列越优秀 ;随之,困惑度\pi越小
  • 平均值 \begin{aligned}\frac{1}{N}\end{aligned}的作用在于:每一个x_t(t=1,2,\cdots,N)后验概率 结果必然小于1,这导致越长 文本序列的概率结果在连乘过程 中必然越来越小。而平均 操作希望:文本序列 中每一个词语的后验概率 结果都比较优秀,而不是仅仅个别优秀词语 对文本序列的贡献。

但是神经网络 中的困惑度常常不是直接使用文本序列的联合概率分布 计算的,而是使用交叉熵 进行实现。基于上述循环神经网络

  • 首先,在t时刻求解x_{t+1}后验概率 \mathcal P(\mathcal O_{t+1} \mid x_t,x_{t-1},\cdots,x_1)本质上是一个分类任务——根据数据集 \mathcal D内出现的所有 词语结果中,选择概率最高 的词作为x_{t+1}的结果:
    使用\text{softmax}去评估各词语的概率分布信息。
    但这个结果只是‘幻想粒子’,关于t+1时刻的输出分布,还需要去与真实分布进行比对。
    \mathcal P(\mathcal O_{t+1} \mid x_t,\cdots,x_1) = \text{Softmax}[\mathcal P(\mathcal O_{t+1} \mid h_{t+1},x_t)]

  • 使用交叉熵 损失函数对分布 \mathcal P(x_{t+1} \mid x_t,\cdots,x_1)\mathcal P(\mathcal O_{t+1} \mid x_t,\cdots,x_1)之间的相似性 进行评估:
    其中x_{t+1}表示语料中的某个真实词。
    \mathcal J_{t+1} = -\sum_{j=1}^{|\mathcal V|} \mathcal P(x_{t+1} \mid x_t,\cdots,x_1) \cdot \log[\mathcal P(\mathcal O_{t+1} \mid x_t,\cdots,x_1)]

  • 这仅仅是某个词对应分布的相似性结果 ,在序列大小\mathcal T整个语料 上使用平均交叉熵 的方式对整体进行表示:
    这里的均值\begin{aligned}\frac{1}{\mathcal T}\end{aligned}和困惑度基本思想中\begin{aligned}\frac{1}{N}\end{aligned}的思路完全相同。
    \mathcal J = \frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \mathcal J_t = - \frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \sum_{j=1}^{|\mathcal V|} \mathcal P(x_{t+1} \mid x_t,\cdots,x_1) \cdot \log[\mathcal P(\mathcal O_{t+1} \mid x_t,\cdots,x_1)]

最终困惑度 是在平均交叉熵 的基础上,添加一个指数,进而描述相似性 结果:

  • 通常情况下取b=2;这里与视频中取值一样,都取\exp
    \begin{aligned} \text{Perplexity} & = b^{\mathcal J} \\ & = \exp\{\mathcal J\} \quad (b = \exp) \\ & = \exp \left\{-\frac{1}{\mathcal T}\sum_{t=1}^{\mathcal T}\sum_{j=1}^{|\mathcal V|} \mathcal P(x_{t+1} \mid x_t,\cdots,x_1) \cdot \log[\mathcal P(\mathcal O_{t+1} \mid x_t,\cdots,x_1)]\right\} \end{aligned}

相关参考:
54 循环神经网络 RNN【动手学深度学习v2】
困惑度(perplexity)的基本概念及多种模型下的计算(N-gram, 主题模型, 神经网络)

全部评论 (0)

还没有任何评论哟~