学习笔记TF017:自然语言处理、RNN、LSTM
自然语言处理 (NLP)问题都是序列化的。前馈神经网络,在单次前馈中对到来数据处理,假定所有输入独立,模式丢失。循环神经网络(recurrent neural network,RNN)对时间显式建模神经网络。RNN神经元可接收其他神经元加权输入。RNN神经元可与更高层建立连接,也可与更低层建立连接。隐含活性值在同一序列相邻输入间被记忆。2006年 LSTM。语音识别、语音合成、手写连体字识别、时间序列预测、图像标题生成、端到端机器翻译。
RNN由神经元和连接权值构成任意有向图。输入神经元(input neuron)拥有“到来”连接,活性值由输入数据设置。输出神经元(output neuron)是数据流图一组可读取预测结果神经元。所有其他神经元为隐含神经元(hidden neuron)。每个时间步,通过设置输入神经元为网络提供输入序列下一帧。隐含活性值作为下一个时间步附加输入。RNN当前隐含活性值为状态。序列最开始设置值0空状态。RNN状态依赖当前输入和上一状态。状态与序列所有前输入都间接相关,工作记忆(woring memory)。RNN权值矩阵定义执行程序,决定隐含活性值输入,不同活性值整合新活性值输出。sigmoid激活函数 RNN 2006年被证明图录完备(Turing-complete)。给定正确权值,RNN可完成任意计算程序相同计算。不存在找到完美权值方法,可用梯度下降法得到次好结果。
优化RNN,沿时间输展开,用优化前馈网络相同方式优化。复制序列神经元,连接在副本传递,移除循环边接而不改计算语义。相邻时间步权值相同强度。随时间反向传播(Back-Propagation Through Time,BPTT),返回时间相关误差对权值(包括联结相邻副本权值)偏导。联结权值(tied weight)梯度相加。
循环神经网络常见映射:序列分类、序列生成、序列标注、序列翻译。序列标注(sequential labelling),序列作为输入,训练网络为每帧数据产生正确输出,一个序列到另一个序列等长映射。序列分类(sequential classification),每个序列输入对应一个类别标签,可仅选择上一帧输出训练RNN,更新权值时误差流经所有时间步收集集成有用信息。序列生成(sequential generation),给定一个类别标签,输出反馈给网络作为下一步输入,生成序列。单个向量视为信息稠密表示。序列翻译(sequential translation),域中序列编码,最后隐含活性值解码为另一个域中序列。输入输出概念层次有差异,两个不同RNN,第一个模型最后活性值初始化第二个模型。单个网络,序列后传入特殊符号输入,通知网络停止编码,开始解码。
带输出投影RNN网络结构,全连接隐含单元,映射输入输出。所有隐含单元都为输出,堆叠前馈层。隐含单元和输出单元不同激活函数。
TensorFlow支持RNN各种变体,tf.nn.rnn_cell。tensor flow.models.rnn中tf.nn.dynamic_rnn实现RNN动力学。接收循环网络定义,输入序列批数据。所有序列等长。返回保存每个时间步输出和隐含状态两个张量。从tensor flow.models.rnn导入rnn_cell和rnn。输入数据维数为batch_size*sequence_length*frame_size。不希望限制批次大小,第1维尺寸可以设None。rnn_cell.BasicRNNCell 创建基础RNN。rnn.dynamic_rnn 定义sequence_length步模拟RNN运算。定义RNN,沿时间轴展开,加载数据,选择TensorFlow优化器训练网络,tf.train.RMSPropOptimizer、tf.train.AdamOptimizer。
长时依赖性,网络记住含有许多后续不相关帧的序列第一帧。长序列,基础RNN展开网络深度非常大,层数非常多,每一层反向传播算法将来自网络上一层误差乘以局部偏导。如果大多数局部偏导远小于1,梯度每层变小,指数衰减,最终消失。如果很多偏导大于1,梯度值急剧增大。误差项包含相乘项权值矩阵转置。RNN相邻时间步联结一起,权值局部偏导都小于1或大于1,RNN每个权值都向相同方向缩放,梯度消失、爆炸问题突出。数值优化,浮点精度对梯度值产生影响。长短时记忆网络(long-short term memory,LSTM)RNN架构解决方案。
LSTM专门解决梯度消失、爆炸问题。学习长时依赖关系的RNN事实标准。将RNN普通神经元替换为内部拥有少量记忆LSTM单元(LSTM Cell)。联结一起,内部状态记忆时间步误差。LSTM内部状态有固定权值为1自连接,线性激活函数,局部偏导始终为1。反向传播,常量误差传输子(constant error carousel)在时间步携带误差不发生梯度消失或爆炸。内部状态随时间步传递误差,LSTM环绕门(surrounding gates)负责学习,非线性激活函数(sigmoid)。原始LSTM单元,一种门学习对到来活性值缩放,另一种门学习输出活性值缩放,学习包含或忽略新输入,学习给其他单元传递特征。单元输入送入不同权值门。可以把循环神经网络用为规模更大网络架构组成部分。
LSTMCell类可替换BasicRNNCell类,一个完整的LSTM层。输入非线性->输入门->状态->输出非线性->输出门。
LSTM流行变种,添加对内部循环连接比例缩放遗忘门(forget gate),网络学会遗忘,内部循环连接局部偏导变成遗忘门活性值,可取非1值。当上下文重要,遗忘门保持关闭状态。输入非线性->输入门->状态->遗忘门->输出非线性->输出门。
添加窥视孔连接(peephole connection),门能看到单元状态。当精确时间选择和间隔时有益。TensorFlow LSTM层传入use-peepholes=Trues标记激活窥视孔连接。
门限循环单元(Gated Recurrent Unit,GRU),架构简单,更少计算量,没有输出门,输入和遗忘门整合单独更新门(update gate)。更新门决定内部状态与候选活性值融合比例。重置门(reset gate)和新输入确定部分隐含状态计算得到候选活性值。TensorFlow GRU层对应GRUCell类。只需要单元数目参数。输入->候选活性值->更新门->重置门->状态。
全连接隐含单元RNN,训练期间把不需要权值置0。最常见做法,两层或多层全连接RNN相互堆叠,信息只能在两层之间向上流动,多层RNN权值数目少,学习到更多抽象特征。
参考资料:
《面向机器智能的TensorFlow实践》
欢迎加我微信交流:qingxingfengzi
我的微信公众号:qingxingfengzigz
我老婆张幸清的微信公众号:qingqingfeifangz
学习笔记TF017:自然语言处理、RNN、LSTM的更多相关文章
- 学习笔记TF059:自然语言处理、智能聊天机器人
自然语言处理,语音处理.文本处理.语音识别(speech recognition),让计算机能够"听懂"人类语音,语音的文字信息"提取". 日本富国生命保险公司 ...
- 学习笔记CB010:递归神经网络、LSTM、自动抓取字幕
递归神经网络可存储记忆神经网络,LSTM是其中一种,在NLP领域应用效果不错. 递归神经网络(RNN),时间递归神经网络(recurrent neural network),结构递归神经网络(recu ...
- tensorflow学习之(十一)RNN+LSTM神经网络的构造
#RNN 循环神经网络 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data tf.se ...
- 学习笔记之自然语言处理(Natural Language Processing)
自然语言处理 - 维基百科,自由的百科全书 https://zh.wikipedia.org/wiki/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7 ...
- 学习笔记(7)- 基于LSTM的对话模型
LSTM based Conversation Models 本文介绍一种会话语言模型,结合了局部.全局的上下文,以及参与者的角色. 问题提出者 倾向于用"任何人"."如 ...
- NLTK学习笔记(四):自然语言处理的一些算法研究
自然语言处理中算法设计有两大部分:分而治之 和 转化 思想.一个是将大问题简化为小问题,另一个是将问题抽象化,向向已知转化.前者的例子:归并排序:后者的例子:判断相邻元素是否相同(与排序). 这次总结 ...
- 【pytorch学习笔记0】-CNN与LSTM输入输出维度含义
卷积data的四个维度: batch, input channel, height, width Conv2d的四个维度: input channel, output channel, kernel, ...
- 深度学习中的序列模型演变及学习笔记(含RNN/LSTM/GRU/Seq2Seq/Attention机制)
[说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![认真看图][认真看图] [补充说明]深度学习中的序列模型已经广泛应用于自然语言处理(例如机器翻 ...
- 学习笔记TF035:实现基于LSTM语言模型
神经结构进步.GPU深度学习训练效率突破.RNN,时间序列数据有效,每个神经元通过内部组件保存输入信息. 卷积神经网络,图像分类,无法对视频每帧图像发生事情关联分析,无法利用前帧图像信息.RNN最大特 ...
随机推荐
- Win32汇编学习(11):对话框(2)
我们将进一步学习对话框,探讨如何把对话框当成输入设备.如果您看了前一篇文章,那就会发现这次的例子只有少量的改动,就是把我们的对话框窗口附属到主窗口上.另外,我们还要学习通用对话框的用法. 理论: 把对 ...
- Python实现机器学习算法:决策树算法
''' 数据集:Mnist 训练集数量:60000 测试集数量:10000 ------------------------------ 运行结果:ID3(未剪枝) 正确率:85.9% 运行时长:35 ...
- Android 虹软2.0人脸识别,注册失败问题 分析synchronized的作用
人脸识别需要init初始化(FaceServer中),离开时需要unInit销毁:当一个含有人脸识别的界面A跳向另一个含有人脸识别的界面B时,由于初始化和销毁都是对FaceServer类加锁(sync ...
- MDK编译过程
原博文:https://blog.csdn.net/qq_33894122/article/details/83994564
- ThinkPHP5.0完全开发手册 --技术文档
1.ThinkPHP5.0完全开发手册.chm 链接:https://pan.baidu.com/s/1199wK6q6O9IyOf5RU_-Xow 提取码:hnek 2.ThinkPHP5.0完全开 ...
- 完整的Django入门指南学习笔记6
前言 欢迎来到系列教程的第六部分!在这篇教程中,我们将详细探讨基于类的视图(简称CBV).我们也将重构一些现有的视图,以便利用内置的基于类的通用视图(Generic Class-Based Views ...
- CentOS7下mariadb日常管理
在CentOS7下,官方提供的mysql的rpm包就是mariadb,可查看mariadb包信息 [root@host ~]$rpm -qi mariadb # 需要先安装该包 Name : mari ...
- Opencv-Android安装使用
这是本人第一篇博客,写博客并不是说本人的技术能力有多强,或者说炫耀自己取得的进展.在当今这个数据信息大爆炸的年代,每个人肯定会接受很多新鲜事物,但不是所有东西你都能记得一清二楚,写博客一方面是为了巩固 ...
- ceph crush的问题
ceph crush的问题看一遍忘一遍,现将<ceph源码分析>一书中相关章节摘抄如下: 4.2.1 层级化的Cluster Map例4-1 Cluster Map定义层级化的Cluste ...
- Sql server数据库连接Oracle库的步骤
本地使用环境 操作系统: win10 64 ,SQL Server 2012 ,Oracle Server 11g 第一步:安装好oracle客户端,并配置好TNS信息 ORCL = (DESCR ...