您的位置:首页 > 其它

RNN杂谈

2017-03-18 22:13 204 查看

RNN杂谈

RNN 用于序列建模,输入输出均为序列,常见的应用有NLP中的语言模型、时间序列建模两类。

语言模型

一个句子的概率模型可以表示为

p(x)=p(x1)⋅p(x2|x1)⋅p(x3|x1,x2)⋅⋅⋅p(xn|x2,x2,...xn−1)

这里 x 表示一个 sentence, 构成 x 的单词为xi 。

一个常见的实例是给定一个句子的前半部分,预测接下来的一个词:

This is the People’s Republic of [ ].

My favorite movie is called [ ].

使用RNN解决这个问题可以这样做:

1) 给每个句子加上起止符”\begin”,”\end”

2) 以 I love pandas.为例,训练任务是给定 \begin i love ,期待预测输出 i love pandas \end

3) 这个例子中RNN 的两个主要参数 predict_length=1, sequence_length =3

4) 以每个句子为一条训练数据(这样RNN 的 sequence_length在训练过程中 是可变的,可使用tensorflow中的padding with 0 的 trick),训练得到模型

5) 以预测My favorite movie is called [ ] 为例,将已知的my / favorite / movie / is / called 依次输入模型(一个RNN cell)更新其 state ,取最后的输出作为预测的单词

predict_length 是模型期望的预测能力,取值越大则期望的预测能力越高,比如有人能预测一年后的收入,远比预测一个月后的收入具有挑战性;

sequence_length 是模型对过去的记忆长度,取值越大则记忆的时间越长

一般来说 predict_length 越小, sequence_length 越大,模型的预测能力越高,预测效果越好,但 sequence_length增加后可能会面临着 cell记忆能力不够的问题,RNN 的变体 LSTM即使解决这样的问题的。

RNN 也可以用来生成文本,给定 my / favorite /,可能会输出 animal / is / pandas , animal的生成同上例最后一个单词的产生(更新状态后输出),is 和 pandas 的产生是预测的预测,即由 animal 产生 is , is 产生 pandas,但是预测的预测容易产生的问题是重复输出一个单词,比如 animal / animal / animal,可见预测的预测效果不是很好,这里可以采用 beam_search 的方法避免这个问题。

短期预测的效果要远好于长期预测。

RNN 也可用于古诗的生成,古诗有着规整的长度,古诗生成可以给定一句诗,生成它的下一句,两句古诗之间对仗工整,上下句之间由明显的对应关系,比如“两个黄鹂鸣翠柳,一行白鹭上青天”,那么预测的过程可以是

输入x输出y
两个/黄鹂/鸣/翠柳一行/白鹭/上/青天
一行/白鹭/上/青天窗/含/西岭/千秋/雪
窗/含/西岭/千秋/雪门/泊/东吴/万里/船
这里 predict_length = 1 句诗; sequence_length= 1 句诗

古诗生成也可以是给定前三句,预测输出最后一句,那么 predict_length= 1 句诗,sequence_length= 3 句诗

时间序列

以某个基站的流量数据为例,假设我们已知某个基站3个月的流量数据,时间粒度为 1h,即我们有 3*30*24个流量数据记录,我们想预测未来一周的流量。注意这里的流量粒度为 1h ,如果想预测未来一个月的流量,就相当于是长期细粒度预测,很难实现。

时间序列与语言建模的明显区别是时间序列会有明显的周期性,这里的 predict_length 一般等于周期的长度或其整数倍,而 sequence_length 只要大于 predict_length 即可,作为超参数调参可以找出最适合的数值。

假设我们有 24 条流量记录,记为1,2,3,…,24

batch_size = 2

sequence_length = 4

predict_length = 3



红色框表示 batch 输入,黑色框表示 batch 真实值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: