4_Making RNNs More Effective(提升RNN的效果)

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 4_Making RNNs More Effective(提升RNN的效果)

一、Stacked RNN(多层RNN)


80417e2c2fd48834f81ba2631a400391.png

from keras.models import Sequential
from keras.layers import LSTM,Embedding,Dense
# 设置超参数
vocabulary = 10000   # 词典里面有10000个词汇
embedding_dim=32     # shape(x)=32,词向量x的维度为32
word_num = 500       # 每个电影评论有500个单词,如果超过500个单词,就会被截掉;如果不到500,就会补够。
state_dim =32        # shape(h) = 32,状态向量h的维度为32
# 开始搭建网络
model = Sequential()     # 建立Sequential()模型
# 往model里面加层,Embedding层,把词映射成向量
model.add(Embedding(vocabulary,embedding_dim,input_length=word_num))
# 需要指定状态向量h的维度,设置RNN层的return_sequences=False,表示RNN只输出最后一个状态向量h,把之前的状态向量舍去
model.add(LSTM(state_dim,return_sequences=True,dropout=0.2))
model.add(LSTM(state_dim,return_sequences=True,dropout=0.2))
model.add(LSTM(state_dim,return_sequences=False,dropout=0.2))
# 全连接层,输入RNN的最后一个状态h,输出0-1之间的数
model.add(Dense(1, activation="sigmoid"))
model.summary()

cb178483b3c2a593abe7d48560c92d3f.png


二、Bidirectional RNN(双向RNN)


  • 训练两条RNN,一条从左往右,另一条从右往左。
  • 两条RNN是独立的,不共享参数,也不共享状态
  • 两条RNN各自输出自己的状态向量,然后把他们的状态向量进行合并,计作向量y。


e2e0d34f68eec3011f576c9416a4fc7f.png


from keras.models import Sequential
from keras.layers import LSTM,Embedding,Dense,Bidirectional
# 设置超参数
vocabulary = 10000   # 词典里面有10000个词汇
embedding_dim=32     # shape(x)=32,词向量x的维度为32
word_num = 500       # 每个电影评论有500个单词,如果超过500个单词,就会被截掉;如果不到500,就会补够。
state_dim =32        # shape(h) = 32,状态向量h的维度为32
# 开始搭建网络
model = Sequential()     # 建立Sequential()模型
# 往model里面加层,Embedding层,把词映射成向量
model.add(Embedding(vocabulary,embedding_dim,input_length=word_num))
# 需要指定状态向量h的维度,设置RNN层的return_sequences=False,保留两条链最后的状态,把之前的状态向量舍去
model.add(Bidirectional(LSTM(state_dim,return_sequences=False,dropout=0.2)))
# 全连接层,输入RNN的最后一个状态h,输出0-1之间的数
model.add(Dense(1, activation="sigmoid"))
model.summary()


三、Pretrain(预训练)


预训练在深度学习中非常常用:比如在训练卷积神经网络的时候,如果网络太大而训练集不够大,那么可以先在大数据上做预训练,这样可以让神经网络有比较好的初始化,也可以避免过拟合。


Observation: The embedding layer contributes most of the parameters!


有320000个参数,而我们只有20000个训练样本,这个embedding layer太大,导致模型过拟合。


解决办法:对embedding layer层做预训练。


d70cc8752eb5deef4a205b5c2d1ff8d3.png

3.1 Pretrain the Embedding Layer


第一步,首先找一个更大的数据集,可以是情感分析的数据,也可以是其它类型的数据,但是任务最好是接近情感分析的任务,最好是学出来的词向量带有正面或者负面的情感,两个任务越相似,预训练之后的transformer就会越好,有了大数据集之后要搭建一个神经网络,这个神经网络是什么样的结构都可以(可以不用是RNN,只要这个神经网络有Embedding layer),然后在这个大数据集上训练神经网络。


e1d7094273386f05c7b5f7e5aa790c4f.png


第二步,训练好之后,把上面的层全部丢弃,只保留Embedding Layer和训练好的模型参数。


433c8e82fc955d4f0ca7f66d49717be1.png


第三步,搭建自己的RNN网络,这个新的RNN网络跟之前预训练的可以有不同的结构。搭建好之后,新的RNN层和全连接层都是随机初始化,而Embedding Layer的参数是预训练出来的,要把Embedding Layer的参数固定住,不训练这个Embedding Layer,只训练其它的层。


697d7bea4bfbe15dc86eaa8fd2890d43.png


四、Summary(总结)


SimpleRNN and LSTM are two kinds of RNNs; always use LSTM instead of SimpleRNN.

Use Bi-RNN instead of RNN whenever possible.

Stacked RNN may be better than a single RNN layer (if n is big).

Pretrain the embedding layer (if n is small). 如果训练数据较小,在大数据集上预训练


相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
7月前
|
机器学习/深度学习 算法
【文献学习】RoemNet: Robust Meta Learning based Channel Estimation in OFDM Systems
本文提出了一种基于元学习的鲁棒信道估计算法RoemNet,旨在解决OFDM系统中由于训练和部署信道模型不一致导致的问题,并展示了其在不同信道环境下优越的性能。
53 5
|
7月前
|
机器学习/深度学习 网络协议 PyTorch
【文献学习】DCCRN: Deep Complex Convolution Recurrent Network for Phase-Aware Speech Enhancement
本文介绍了一种新的深度复数卷积递归网络(DCCRN),用于处理语音增强问题,特别是针对低模型复杂度的实时处理。
298 5
|
7月前
|
机器学习/深度学习 算法 测试技术
|
10月前
|
TensorFlow 算法框架/工具
[seq2seq]论文实现:Effective Approaches to Attention-based Neural Machine Translation(上)
[seq2seq]论文实现:Effective Approaches to Attention-based Neural Machine Translation(上)
67 1
|
10月前
|
机器学习/深度学习 Python TensorFlow
[seq2seq]论文实现:Effective Approaches to Attention-based Neural Machine Translation(下)
[seq2seq]论文实现:Effective Approaches to Attention-based Neural Machine Translation(下)
64 1
|
10月前
|
机器学习/深度学习 自然语言处理 算法
[BPE]论文实现:Neural Machine Translation of Rare Words with Subword Units
[BPE]论文实现:Neural Machine Translation of Rare Words with Subword Units
67 0
|
机器学习/深度学习 自然语言处理 算法
TASLP21-Reinforcement Learning-based Dialogue Guided Event Extraction to Exploit Argument Relations
事件抽取是自然语言处理的一项基本任务。找到事件论元(如事件参与者)的角色对于事件抽取至关重要。
134 0
|
算法 计算机视觉 知识图谱
ACL2022:A Simple yet Effective Relation Information Guided Approach for Few-Shot Relation Extraction
少样本关系提取旨在通过在每个关系中使用几个标记的例子进行训练来预测句子中一对实体的关系。最近的一些工作引入了关系信息
152 0
|
机器学习/深度学习 自然语言处理 PyTorch
Re6:读论文 LeSICiN: A Heterogeneous Graph-based Approach for Automatic Legal Statute Identification fro
Re6:读论文 LeSICiN: A Heterogeneous Graph-based Approach for Automatic Legal Statute Identification fro
Re6:读论文 LeSICiN: A Heterogeneous Graph-based Approach for Automatic Legal Statute Identification fro
|
机器学习/深度学习 数据挖掘
Paper:《Generating Sequences With Recurrent Neural Networks》的翻译和解读
Paper:《Generating Sequences With Recurrent Neural Networks》的翻译和解读
Paper:《Generating Sequences With Recurrent Neural Networks》的翻译和解读