RNN学习笔记(一)


前言

最近做实验需要处理时序数据,先要用LSTM处理一下看看效果如何。所以记录一下自己的学习过程。


提示:本篇文章内容仅供参考

一、数据处理

  1. Categorical features转换为Numerical features为什么用one hot vector表示?
    不能用标量表示Categorical features。举个例子,国家这个属性,如果1:美国,2:中国,3:印度,那么1+2=3,不能说美国加中国等于印度。但是用向量表示就可以理解了。

  2. Tokenizatiom:把文本变成单词列表
    这里需要注意的地方:大小写含义是否相同、去除stop words(比如of,a等对分类无意义的词)、拼写纠错等等

  3. 建立词频表,处理列表:对于列表中的单词,出现过的词频+1,未出现过的词插入词频表。

  4. 生成字典:按词频将词频表中的单词排序(从大到小),用index替换词频(frequency),即出现最多的词为1,次多的为2,以此类推。这个表就叫字典,将单词映射到数字。

  5. 删除低频词:低频词可能是书写错误或者特殊专有名词,删除低频词能减少参数,降低计算量和过拟合的风险。
    接下来如果有必要还可以将数字转换成向量。

  6. 样本长度不一:超过阈值的截取一部分,不足的补0。

  7. Word Embedding
    关于Embedding层,可以参考Embedding层作用讲解,讲的非常通俗易懂。在这里插入图片描述

二、Simple RNN

诸如Logical Regression和CNN都是典型的一对一模型,即一个输入对应一个输出,显然不适合针对时序数据。我们阅读的时候会从左到右阅读,在读的过程中不断积累信息,从而理解最终意思而不会一次一段文字直接输入大脑。而且对于时序数据,输入与输出长度不固定(如翻译),显然多对一或者多对多模型更加合适。所以RNN闪亮登场!

RNN图示
流程:将输入的词用word embedding转化为词向量,每次把词向量输入RNN,用状态h积累结果。如图,h1包含第一个词的信息,h2包含前两个词的信息,以此类推(h可以理解为特征向量)

简单的RNN模型如图所示:
Simple RNN
注:
1. h(t-1)和x(t)做concat
2. A是模型参数
3. tanh函数:放置循环次数过多导致,A的次方太大或太小导致h爆炸或者消失。
4. 可以只输出h(t)再使用sigmod函数得到结果,也可以保留所有状态向量合成一个矩阵在用Flatten展平。

Simple RNN的缺点:
对长内容处理效果并不好。理论上来说,状态h(t)应该和x(0)到x(t)都有关,但是,当t增大到一定数量时,如 h 100 h_{100} h100 ∂ h 1 00 ∂ x 1 \frac{\partial h_100 }{\partial x_1 } x1h100 接近于0,说明状态 h 100 h_{100} h100已经快忘记 x 1 x_{1} x1

三、LSTM

原理

原理类似Simple RNN,结构更复杂。LSTM提出的动机是为了解决上面我们提到的长期依赖问题。
使用双向RNN也能一定程度上解决遗忘问题。
LSTM图示
具体参考知乎:LSTM解析

基于pytorch的RNN的实现

参考视频:RNN与LSTM知识讲解与实战

新建一个RNN实例,有三个参数

  • input_size:输入数据的维度,如对于文本处理而言,一个单词用一个100维的向量表示,则该参数为100,对于房价预测而言数据只有一个数,那么该参数就是1。
  • hidden_size:h的数量
  • num_layers:RNN的层数

向前传播:
在这里插入图片描述
输入的时候直接讲所有数据同时输入即可,pytorch会自动处理。想要更细致的处理可以使用RNNCell。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值