当前位置: 首页 > news >正文

第3章 循环神经网络

        处理序列化的数据,比如视频或者Linux下一段命令行操作记录等,准确的识别与判断需要依赖上下文,或者说需要能够保存一段时间的记忆来辅助判断,这就引入了循环神经网络。

3.1 循环神经算法概述

        RNN(Recurrent  Neural Networks,循环神经网络)是深度学习算法中非常有名的一种算法。RNN之所以成为循环神经网络,是因为一个序列当前的输出与前面的输出也有关。具体的表现形式为,网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出,还包括上一时刻隐藏层的输出。理论上,RNN能够对任何长度的序列数据进行处理。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关。

        RNN的独特能力来自于它的特殊结构,输出的一部分会作为输入的一部分重新输入,于是RNN具有了一定的记忆性。RNN等效于一连串共享系数的神经元串联在一起,特别适合处理时序数据。

        但是生活的经验告诉我们,对于比较复杂的情况,只分析时序数据的最近几个数据难以得到合理的结果,需要更长的记忆来追根溯源,于是就有了LSTM(Long Short Term Memory,长短程记忆),LSTM可以在更长的时间范围来分析时序数据。

         LSTM的关键就是神经细胞状态,水平线在图上方贯穿运行,细胞状态类似于传送带,状态通过水平线在细胞之间传递,从而保证长期记忆能保存。

        LSTM有通过精心设计的称作“门”的结构来去除或增加信息到细胞状态的能力。门是一种让信息选择式通过的方法,包含一个Sigmoid神经网络层和一个乘法操作。Sigmoid层输出0到1之间的数值,描述每个部分有多少量可以通过。0代表“不许任何量通过”,1代表“允许任意量通过”。

        由于LSTM的优异表现,它成为了RNN的事实标准,后面的例子如果没有特别声明,RNN的实现都是基于LSTM。

3.2 单向循环神经网络结构与实现

        在TensorFlow中,LSTM被封装成一个组件,使用时只需指定节点数即可。

3.3 双向循环神经网络结构与实现

        双向循环神经网络的基本思想是,提出每一个训练序列向前和向后分别是两个循环神经网络,而且这两个都连接着一个输出层。这个结构提供给输出层输入序列中每一个点的完整的过去和未来的上下文信息。

3.4 循环神经网络在序列分类的应用

       分类问题是各类机器学习算法基本都会面对的问题,循环神经网络算法也是如此,其基本过程是通过分析一段输入序列,通过LSTM分析判断得到对应的分类结果。

3.5 循环神经网络在序列生成的应用

        序列生成中使用最多的是char RNN模型。所谓的char RNN模型,就是以字符为最小的单元,把每个字符当做一个输入,这样一个单词、一句话甚至一篇文章都可以看成由字符组成的一个序列,通常这样的字符集合会包括字母、数字和常用标点。RNN本质上只能理解数字序列,所以需要建立一个映射关系,把字符映射成数字,这种映射关系称为char-idx。

3.6 循环神经网络在序列标记的应用

       自然语言分析技术大致分为3个层面:词法分析、句法分析和语义分析。语义角色标注(Semantic Role Labeling, SRL)是实现浅层语义分析的一种方式。在一个句子中,谓词是对主语的陈述或说明,指出“做什么”‘’是什么”或“怎么样”,代表了一个事件的核心。跟谓词搭配的名词称为论元。语义角色标注以句子的谓词为中心,不对句子所包含的语义信息进行深入分析,只分析句子中各成分与谓词之间的关系,并用语义角色来描述这些结构关系,是许多自然语言理解任务(如信息抽取、篇章分析、深度问答等)的一个重要中间步骤。在研究中一般都假定谓词是给定的,所要做的就是找出给定谓词的各个论元和它们的语义角色。

       循环神经网络是一种对序列建模的重要模型,在自然语言处理任务重有着广泛地因公,它能够处理输入之间前后关联的问题,学习长序列中蕴含的长程依赖关系。使用神经网络模型解决问题的思路通常是,前层网络学习输入的特征表示,网络的最后一层在特征基础上完成最终的任务。

3.7 循环神经网络在序列翻译的应用

        序列翻译又称Seq2Seq(Sequence to Sequence,序列到序列),本质上是LSTM将输入序列转化成另一个序列。最典型的应用就是机器翻译。

        机器翻译是用计算机来实现不同语言之间翻译的技术。被翻译的语言通常称为源语言,翻译成的结果语言称为目标语言。机器翻译即实现从源语言到目标语言转换的过程,是自然语言处理的重要研究领域之一。早期机器翻译系统多为基于规则的翻译系统,需要由语言学家编写两种语言之间的转换规则,再将这些规则录入计算机。该方法对语言学家的要求非常高,而且我们几乎无法总结一种语言会用到的所有规则,更何况两种甚至更多的语言。因此,传统机器翻译方法面临的主要挑战是无法得到一个完备的规则集合。

        为解决以上问题,统计机器翻译(Statistical Machine Translation, SMT)技术应运而生。在统计机器翻译技术中,转化规则是由机器自动从大规模的语料中学习得到的,而非我们主动提供规则。因此,它克服了基于规则的翻译系统所面临的知识获取瓶颈的问题,但仍然存在许多挑战:

        (1)人为设计许多特征,但永远无法覆盖所有的语言现象。

        (2)难以利用全局的特征。

        (3)依赖许多预处理环节,如词语对齐、分词或符号化、规则抽取、句法分析等,而每个环节的错误会逐步累积,对翻译的影响也越来越大。

        近年来,深度学习技术的发展为解决上述挑战提供了新的思路。将深度学习应用于机器翻译任务的方法大致分为两类。一是仍以统计机器翻译系统为框架,只是利用神经网络来改进其中的关键模块,如语言模型、调序模型等。二是不再以统计机器翻译系统为框架,二是直接用神经网络将源语言映射到目标语言,即端到端的神经网络机器翻译(End-to-End Neural Machine Translation, End-to-End NMT),简称为NMT模型。

        编码器-解码器框架,用于解决由一个任意长度的源序列到另一个任意长度的目标序列的变换问题。即在编码阶段将整个源序列编码成一个向量,在解码阶段通过最大化预测序列概率,从中解码出整个目标序列。编码和解码的过程通常都使用RNN来实现机器翻译的NMT模型。

相关文章:

  • 机器学习入门八
  • java毕业设计流浪动物救助公益平台源码+lw文档+mybatis+系统+mysql数据库+调试
  • 物联网IOT面临挑战
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • Intel汇编-奇偶标志位测试
  • CMSC5724-关于条件概率和朴素贝叶斯分类器
  • FFmpeg入门详解之50:SDL2键盘事件案例
  • c 关键字
  • 使用hardhat 开发以太坊智能合约-发布合约
  • 【Linux】进程间通信介绍及匿名管道使用
  • sqlite数据库
  • 奇迹mu服务端架设开服技术教程
  • Kafka 介绍
  • 智能通风柜手势控制界面设计与实现
  • 2021年系统架构师综合知识错题
  • 自己简单写的 事件订阅机制
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 0x05 Python数据分析,Anaconda八斩刀
  • Android开源项目规范总结
  • co.js - 让异步代码同步化
  • docker-consul
  • JavaScript 奇技淫巧
  • js面向对象
  • js写一个简单的选项卡
  • Magento 1.x 中文订单打印乱码
  • nginx 配置多 域名 + 多 https
  • node 版本过低
  • Node项目之评分系统(二)- 数据库设计
  • node学习系列之简单文件上传
  • opencv python Meanshift 和 Camshift
  • Promise初体验
  • Protobuf3语言指南
  • SegmentFault 2015 Top Rank
  • 程序员最讨厌的9句话,你可有补充?
  • 服务器之间,相同帐号,实现免密钥登录
  • 面试遇到的一些题
  • 听说你叫Java(二)–Servlet请求
  • 无服务器化是企业 IT 架构的未来吗?
  • 学习ES6 变量的解构赋值
  • 怎么将电脑中的声音录制成WAV格式
  • 容器镜像
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #Z2294. 打印树的直径
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (a /b)*c的值
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)LINQ之路
  • (转)创业的注意事项
  • .gitignore文件—git忽略文件
  • .net 8 发布了,试下微软最近强推的MAUI