动手学深度学习 | 序列模型 | 51

序列模型

我们这个是第四部分的一开始,叫做序列模型的东西,也就是 Sequence Model。其实就是整个RNN,整个NLP都是在处理一个序列。我们之前看到的图片是一个空间信息,而我们现在要考虑一个时间信息的模型,这个就是很不一样的地方。

之前我们都是假设有t个独立的随机变量,也就是这张图片和上一张图片是没有关系的。但是序列模型这里,这t个是不独立的随机变量。这也是时序序列和之前序列的一个主要区别。

那么不独立的随机变量,可以用上图的条件概率来进行表示。

根据上面的条件概率,可以讲\(p(x)\)写出来,先按照正方向进行书写,那么意思就是\(x_2\)要以来于\(x_1\),同理,\(x_3\)要依赖于\(x_1,x_2\),以此类推。这个其实很好理解,如果是一个时序序列,那么对当前建模,是要知道过去发生了什么事情的。

当然这个过程可以是可以反过来的,就是先计算后面的,然后反过去推导。反序在某些时候是有意义的,就是我已经知道未来的事情,然后反过来推前面的事情。

这是正反方向后面在RNN都可以看到,可以正着来,也可以反着回去。

现在我们来看进行前向计算的这种情况。

\(p(x_t|x_1,...,x_{t-1})=p(x_t|f(x_1,...,x_{t-1}))\),现在是给定了\(x_1,...,x_{t-1}\),然后要计算\(x_t\),那么做法就是先将\(x_1,...,x_{t-1}\)进行建模,表示为\(f(x_1,...,x_{t-1})\),\(f()\)可以认为是用前面的数据训练了一个模型,然后来预测下一个模型。这个会跟之前不一样,之前是给定一个图片去预测一个标号,标号和图片不是一个东西,标号是标号,图片是图片。但是现在是根据前面的数据,去预测下一个数据,就是标号和真实的样本是一个东西,这样的模型叫做自回归模型。所谓的自回归,就是给定一些数据,我去预测数据的时候,不是用另外的数据,而是用了前面的样本,所以叫做自回归(用见过的数据自己建模,叫做自回归)。

核心思想是怎么计算\(f(x_1,...,x_{t-1})\),还有就是给定这个\(f()\)后怎么去计算这个\(P(x_t)\)

马尔可夫假设:假设当前数据只跟过去\(\tau\)个过去数据相关。

原始的模型是当前的数据,是和过去所有的数据都相关的,这会导致很多问题,当时间特别长的时候,需要往回看很多东西,会导致计算不容易。

现在利用马尔可夫假设,预测当前的数据只需要看前面\(\tau\)个,\(\tau\)取小一点,那么模型就简单点,\(\tau\)取大一点,那么模型就复杂点。好处就是\(\tau\)固定住了,那么\(\tau\)就不会随着时间的增大而增大,这多多少少也是符合现实中的逻辑,比如股票预测,会和一个月前相关,一年前相关,但是时间再久,相关性就不再那么强了。还有就是预测文本的文字,可能跟邻近的句子相关性会强,但是跟在前面的句子,基本也就不那么相关了。

如果是\(\tau\)个数据,我们对其建模,也就是\(f(x_{t-\tau},...,x_{t-1})\),这个看上去就比较容易做了,我们就在上面训练一个MLP就行了。假设\(x\)是一个标量的话,就是每次给\(f()\)一个\(\tau\)长的向量,然后去预测一个标量,这个就是最简单的回归问题。意思就是给定这个\(\tau\),让变长的数据变成定长的数据,那么之前的所有技术都是可以使用的。

这里这么理解,如果是计算\(x'\)的话,除了和前一个时间的\(x\)是相关的,当然也和隐变量\(h'\)相关。这里核心的是说,一旦我们引入了潜变量的话,我们可以不断的去更新\(h\)

\(h'\)的计算也是看前一个时间的\(h\)还有\(x\)计算出来的。

所以其实上面是建立了两个模型,也就是紫色圈出来的部分。

模型1:如果根据前一个时间的\(h\)\(x\)来计算当前时间\(h'\)

模型2:给定新的\(h\)和前一个时间\(x\)来计算当前时间\(x'\)

代码

这里是代码展示使用MLP来实现马尔可夫假设,进行时序模型的预测。其实最难的点是预测很远的未来,就算是正弦函数,使用MLP预测一个很远的未来也是一个非常困难的事情。

QA

  1. 在常规范围内,tau是不是越大越好?

tau大一些,当然预测的效果越好一些。但是tau越大,那么模型就要越复杂,同时样本的数量也会变少,那么这个是一个比较大的问题,所以tau的数值需要自己进行一个权衡。

  1. 潜变量模型和隐马尔可夫模型有什么区别?

它们之间是没有太多联系的,是不同的观点,但是它们可以相互借鉴,就是潜变量模型是可以使用马尔可夫假设的,之后的RNN都是用了马尔可夫假设,潜变量就是说我在更新的时候如何使用马尔可夫假设。马尔可夫假设说的是这个数据和前面多少个数据有关,而潜变量更多是说怎么进行建模。

  1. 可以认为mlp基础了过去数据的模式?然后去用这个模式去画出未来的趋势吗?

可以的,mlp是可以记住数据的。RNN也是可以记住数据的。

但是要说一句,只能记住数据的模型并不行,因为这样模型的泛化能力会很差。

  1. 有个想法,对时序数据分类,可以看作一幅图,然后使用cnn去做图像分类吗?

其实文本可以看作是时序序列,也可以看作是一个一维空间信息。

后面会讲如何使用conv-1d 来对文本进行分类。

posted @ 2021-09-26 08:38  RowryCho  阅读(278)  评论(0编辑  收藏  举报