循环神经网络

循环神经网络

x t − P ( x t , x t − 1 , … , x 1 ) x_t - P(x_t, x_{t-1}, \dots, x_1) xtP(xt,xt1,,x1)

自回归模型

  • 第一种策略,在现实情况下相当长的序列 x t − 1 , … , x 1 x_{t−1},…,x_1 xt1,,x1​可能是不必要的, 因此我们只需要满足某个长度为ττ的时间跨度, 即使用观测序列 x t − 1 , … , x t − τ x_{t−1},…,x_{t−τ} xt1,,xtτ

  • 第二种策略,是保留一些对过去观测的总结 h t h_t ht​, 并且同时更新预测 x t ^ \hat{x_t} xt^​和总结 h t h_t ht

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tDRohxhQ-1647166155908)(http://zh-v2.d2l.ai/_images/sequence-model.svg)]

马尔可夫模型

P ( x 1 , … , x T ) = ∏ t = 1 T P ( x t ∣ x t − 1 ) P(x_1,\dots,x_{T})=\prod\limits_{t=1}^TP(x_t|x_{t-1}) P(x1,,xT)=t=1TP(xtxt1)

便于使用马尔科夫链精确计算结果
KaTeX parse error: Expected 'EOF', got '&' at position 20: …_{t+1}|x_{t-1})&̲=\frac{\sum_{x_…

因果关系

然而,在许多情况下,数据存在一个自然的方向,即在时间上是前进的。 很明显,未来的事件不能影响过去。

因此,解释 P ( x t + 1 ∣ x t ) P(x_{t+1}∣x_t) P(xt+1xt)​应该比解释 P ( x t ∣ x t + 1 ) P(x_t∣x_{t+1}) P(xtxt+1)更容易。

内插法(在现有观测值之间进行估计)和外推法(对超出已知观测范围进行预测)在实践的难度上差别很大。因此,对于你所拥有的序列数据,在训练时始终要尊重其时间顺序,即最好不要基于未来的数据进行训练。

序列模型的估计需要专门的统计工具,两种较流行的选择是自回归模型和隐变量自回归模型。

对于时间是向前推进的因果模型,正向估计通常比反向估计更容易。

对于直到时间步 t 的观测序列,其在时间步 t+k 的预测输出是“ k 步预测”。随着我们对预测时间 k 值的增加,会造成误差的快速累积和预测质量的极速下降。

文本预处理

  1. 将文本作为字符串加载到内存中。
  2. 将字符串拆分为词元(如单词和字符)。
  3. 建立一个词表,将拆分的词元映射到数字索引。
  4. 将文本转换为数字索引序列,方便模型操作。
停用词

在所有文本中出现频率最高的词

齐普夫定律

n i = 1 i α + c n_i = \frac{1}{i^ \alpha} +c ni=iα1+c

等价于

log ⁡ n i = − α log ⁡ i + c \log n_i = -\alpha \log i +c logni=αlogi+c

读取长序列数据

当序列变得太长而不能模型一次性全部处理时,我们可能希望拆分这样的序列方便模型读取

我们可以从随机偏移量开始划分序列,同时获得覆盖性和随机性

随机采样

在随机采样中,每个样本都是在原始的长序列上任意捕获的子序列。 在迭代过程中,来自两个相邻的、随机的、小批量中的子序列不一定在原始序列上相邻。 对于语言建模,目标是基于到目前为止我们看到的词元来预测下一个词元, 因此标签是移位了一个词元的原始序列。

顺序分区

在迭代过程中,除了对原始序列可以随机抽样外, 我们还可以保证两个相邻的小批量中的子序列在原始序列上也是相邻的。 这种策略在基于小批量的迭代过程中保留了拆分的子序列的顺序,因此称为顺序分区。

循环神经网络

隐变量模型:

P ( x t ∣ x t − 1 , … , x 1 ) ≈ P ( x t ∣ h t − 1 ) P(x_t∣x_{t−1},…,x_1)≈P(x_t∣h_{t−1}) P(xtxt1,,x1)P(xtht1)

其中 h t − 1 h_{t−1} ht1​​是隐状态(hidden state), 也称为隐藏变量(hidden variable), 它存储了到时间步t−1的序列信息。 通常,我们可以基于当前输入 x t x_t xt​和先前隐状态 h t − 1 h_{t−1} ht1来计算时间步t处的任何时间的隐状态:

h t = f ( x t , h t − 1 ) h_t=f(x_t,h_{t−1}) ht=f(xt,ht1)

困惑度

一个更好的语言模型应该能让我们更准确地预测下一个词元。 因此,它应该允许我们在压缩序列时花费更少的比特。 所以我们可以通过一个序列中所有的n个词元的交叉熵损失的平均值来衡量:

即: 1 n ∑ t = 1 n − l o g P ( x t ∣ x t − 1 , … , x 1 ) \frac{1}{n}\sum \limits_{t=1}^n -log P(x_t|x_{t-1},\dots,x_1) n1t=1nlogP(xtxt1,,x1)

P P P由语言模型给出, x t x_t xt是在时间步t从该序列中观察到的实际词元。

使得不同长度文档具有可比性

用困惑度进行度量:其值为

e x p ( − 1 n ∑ t = 1 n log ⁡ P ( x t ∣ x t − 1 , … , x 1 ) ) exp(-\frac{1}{n}\sum\limits_{t=1}^n\log P(x_t|x_{t-1},\dots,x_1)) exp(n1t=1nlogP(xtxt1,,x1))

困惑度的另一种理解:下一个词元的实际选择数的调和平均数

  • 在最好的情况下,模型总是完美地估计标签词元的概率为1。 在这种情况下,模型的困惑度为1。
  • 在最坏的情况下,模型总是预测标签词元的概率为0。 在这种情况下,困惑度是正无穷大。
  • 在基线上,该模型的预测是词表的所有可用词元上的均匀分布。 在这种情况下,困惑度等于词表中唯一词元的数量。 事实上,如果我们在没有任何压缩的情况下存储序列, 这将是我们能做的最好的编码方式。 因此,这种方式提供了一个重要的上限, 而任何实际模型都必须超越这个上限。
    型的预测是词表的所有可用词元上的均匀分布。 在这种情况下,困惑度等于词表中唯一词元的数量。 事实上,如果我们在没有任何压缩的情况下存储序列, 这将是我们能做的最好的编码方式。 因此,这种方式提供了一个重要的上限, 而任何实际模型都必须超越这个上限。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值