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

循环神经网络三

一.介绍

在普通的神经网络中,信息的传递是单向的,这种限制虽然使得网络变得更容易学习,单在一定程度上也减弱了神经网络模型的能力。特别是在现实生活中,网络的输出不仅和当前时刻的输入相关,也过去一段时间的输出相关。此外,普通网络难以处理时序任务,比如语言,视频,文本等等,时序数据的长度一般是不固定的,而前馈神经网络要求和输出的维数都是固定的,不能任意改变。所以处理这一类时序相关的问题时,需要一种能力更强的模型

循环神经网络(Recurrent Neural Network,RNN )是一类具有短期记忆的神经网络。在循环神经网络中,神经元不仅可以接收其他神经元的信息,还可以接收自身的信息,形成具有环路的网络结构。

 可以看到RNN比传统的审计网络多了一个循环,这个循环表示在下一个时间步上会返回作为输入的一部分,把RNN时间点展开就是:

就是在t_0时刻x_0输入后返回h_0的同时将h_0当成输入和下一个时间点的x_1一起输入,如此反复 

或者是:当x_t-1输入后返回的结果h_t-1和x_t一起当作输入后通过tanh计算后输出h_t同时向下一个时间点输入h_t

在不同的时间步中,RNN的输入都与之前的时间状态有关,t_n时刻网络的输出和之前的所有历史共同作用的结果。

 

 图1:固定长度的输入和输出,比如图像分类

图2:序列输入,输入一个数据,逐渐分析结果,比如图像转文字

图3:数列输入,输入一些数据,总结后得出结果,比如文本分类

图4:异步的序列输入和输出,比如文本翻译

图5:同步的序列输入和输出,比如根据视频的每一帧来对视频分类

二.LSTM

1.LSTM的基础介绍

假如现在有一个文本预测,比如天上的云朵漂浮在__,通过间隔不愿的位置可以预测到答案是天上。但是对于有些句子,答案可能在很远的位置,间隔非常大,随着间隔的增大对于RNN来说,效果就不怎么好了。而LSTM(Long Short-Term Memory)可以解决这个问题,LSTM是RNN的一种特殊类型,可以长期依赖信息,而RNN只能短期的依赖。

其中x表示相乘,+表示相加,\sigma表示使用某个函数

2.LSYM的核心

LSTM的核心在于单元中的状态,也就是图中最上边那根弦。

如果只要这跟线,那么就不能对信息增加或者删除,所以在LSTM是通过一个叫做门的结构实现的,门可以选择让信息通过或者不通过

这个门主要是通过sigmoid和点乘实现的

sigmoid函数的结果是在0-1之间的,如果结果为0那么就不让这个信息通过,如果是1就全部通过

3.遗忘门

遗忘门是通过sigmoid函数实现的,用来决定哪些信息保留,哪些信息遗忘。

下图就是h_t-1和x_t进行合并后乘上权重和偏置然后通过sigmoid函数,输入一个0-1之间的值,这个值会和前一个细胞输出的状态c_t-1进行点乘,从而决定是遗忘还是保留

4.输入门

i_i是sigmoid函数后,结果在0-1之间,决定哪些信息会被更新,tanh会创造一个新的候选量C_t如果i_i不是0的话可能会添加到细胞中,比如昨天我吃了苹果,今天我想吃梨,通过遗忘门可以遗忘掉苹果,通过输入门可以输入梨。

经过输入门后就可以更新细胞状态了,C_t-1更新为C_t。怎样更新呢

1.旧的细胞状态和遗忘门的结果相乘

2.然后加上输入门和tanh相乘的结果

5.输出门

最后,我们需要决定哪些信息会被输出,和输入门差不多,线通过sigmoid函数结果来决定哪些细胞状态会被输出

1.前一次的输出结果h_t-1和当前时间步输入的x_t组和通过sigmoid函数进行处理后结果

2.在输入门的时候更新过的细胞状态C_t会经过tanh层的处理将数据转换到(-1,1)之间

3.将1和2的结果点乘后得到结果,一个输入结果,一个输入到下一个时间步的结果

三.GPU

GRU(Gated Recurrent Unit),是一种LSTM的变形版本,它将遗忘门和输入门组合成一个“更新门”。它还合并了单元状态和隐藏状态,并进行了一些更改。

1.z_t就是上一次的结果和这一次的数据通过sigmoid函数后的结果

2.r_t和z_t一样

3.h_t一把是r_t和上一次的结果h_t-1点乘后于x_t组合后通过tanh后的结果

4.h_t是z_t通过1-后点乘上一次的结果后加上z_t点乘上h_t一把的结果

r_t到z_t是更新门,而后面的就是输入出门

四.双向LSTM

结合上面的例子,都是对前面的结果进行计算,而一个词语填空有些时候也要看后面的数据。那么就需要有一种计制,能够使模型不仅能够从前面获得记忆,还要从后获得记忆。此时就要用到双向LSTM了。

从图中可以看出,没给x的输入后不仅得到了结果,这个结果还传到了下一个时间步中计算,而且还生成了一个LSTM_b的结果,因为LSTM_0的箭头是从后往前的,所以使得当前这个时步同时拥有了前后的数据。

都看到这里了,一键三连呗!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • uniapp版本更新除了plus.runtime.getProperty的解决办法
  • XHTML 简介
  • 单元测试注解:@ContextConfiguration
  • 企微SCRM在私域流量运营中的痛点解决之道
  • 畅捷通基于Flink的实时数仓落地实践
  • python 提取视频中的音频 采用ffmpeg-python 库
  • Ubuntu 系统的部署和基础操作(使用)
  • 51单片机-第七节-DS1302实时时钟
  • 6.3 第三方库的安装与使用
  • 51单片机—串口
  • 【Material-UI】使用指南:快速入门与核心功能解析
  • 单细胞组学与RNA转录组技术的深度对比:揭示基因表达的微观与宏观世界
  • 打破老美垄断,潘展乐商业价值起飞
  • 基于VEH的无痕HOOK
  • 【Python】解决“TypeError: __init__() got an unexpected keyword argument ‘XXX‘”的方法
  • JAVA 学习IO流
  • javascript面向对象之创建对象
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • mysql外键的使用
  • ucore操作系统实验笔记 - 重新理解中断
  • Xmanager 远程桌面 CentOS 7
  • 关于Flux,Vuex,Redux的思考
  • 前端知识点整理(待续)
  • 首页查询功能的一次实现过程
  • 协程
  • 学习JavaScript数据结构与算法 — 树
  • 移动端 h5开发相关内容总结(三)
  • const的用法,特别是用在函数前面与后面的区别
  • mysql面试题分组并合并列
  • ​ubuntu下安装kvm虚拟机
  • ​第20课 在Android Native开发中加入新的C++类
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #、%和$符号在OGNL表达式中经常出现
  • #《AI中文版》V3 第 1 章 概述
  • (1)(1.13) SiK无线电高级配置(五)
  • (javaweb)Http协议
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (八)c52学习之旅-中断实验
  • (编译到47%失败)to be deleted
  • (附源码)php新闻发布平台 毕业设计 141646
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (转)【Hibernate总结系列】使用举例
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)JAVA中的堆栈
  • (转)关于pipe()的详细解析
  • .NET Core 项目指定SDK版本
  • .net操作Excel出错解决
  • .NET构架之我见
  • .NET关于 跳过SSL中遇到的问题
  • .net开发时的诡异问题,button的onclick事件无效
  • @Bean有哪些属性
  • @hook扩展分析
  • [android] 切换界面的通用处理