首页 > 其他分享 >循环神经网络入门基础

循环神经网络入门基础

时间:2023-06-30 12:31:35浏览次数:46  
标签:状态 入门 偏导 神经网络 循环 记忆 信息 隐藏 RNN

文章和代码已经归档至【Github仓库:<https://github.com/timerring/dive-into-AI> 】或者公众号【AIShareLab】回复 神经网络基础 也可获取。

循环神经网络

序列数据

序列数据是常见的数据类型,前后数据通常具有关联性

例如 “Cats average 15 hours of sleep a day”

循环神经网络入门基础_数据

语言模型

语言模型是自然语言处理 (NLP, Natural Language Processing) 重要技术。

NLP中常把文本看为离散时间序列,一段长度为T的文本的词依次为 循环神经网络入门基础_数据_02, 其中 循环神经网络入门基础_语言模型_03 是\*\时间步 ( Time Step)\\*t 的输出或标签。

语言模型将会计算该序列概率循环神经网络入门基础_数据_04,例如 Cats average 15 hours of sleep a day,这句话中 T = 8.

语言模型计算序列概率:

循环神经网络入门基础_数据_05

例如:P( 我, 在, 听, 课 ) = P(我) \* P(在|我)\* P( 听|我 ,在)\* P(课 | 我 ,在,听)

统计\*\语料库(Corpus)\\*中的词频,得到以上概率,最终得到P(我, 在, 听, 课)

缺点: 时间步t的词需要考虑t -1步的词,其计算量随t呈指数增长。

RNN—循环神经网络(Recurrent neural network)

RNN 是针对序列数据而生的神经网络结构,核心在于循环使用网络层参数,避免时间步增大带来的参数激增,并引入\*\隐藏状态(Hidden State)\\*用于记录历史信息,有效处理数据的前后关联性。

循环神经网络入门基础_重置_06

\*\隐藏状态(Hidden State)\\用于记录历史信息,有效处理数据的前后关联性,\\激活函数采用Tanh,将输出值域限制在(-1,1),防止数值呈指数级变化。\\*可以进行如下对比:

循环神经网络入门基础_数据_07

RNN构建语言模型,实现文本生成。假设文本序列:“想”,“要”,“有”,“直”,“升”,“机”。

循环神经网络入门基础_数据_08

RNN特性:

  1. 循环神经网络的隐藏状态可以捕捉截至当前时间步的序列的历史信息;
  2. 循环神经网络模型参数的数量不随时间步的增加而增长。(一直是循环神经网络入门基础_数据_09循环神经网络入门基础_语言模型_10循环神经网络入门基础_数据_11

循环神经网络入门基础_语言模型_12

RNN的通过(穿越)时间反向传播(backpropagation through time)

循环神经网络入门基础_数据_13

有几条通路,就几项相加。

方便起见,一下分别称为式1-4.

循环神经网络入门基础_数据_14

如上,T=3。可以由第二个式子算出循环神经网络入门基础_重置_15对于循环神经网络入门基础_数据_16的偏导。

然后由第三个式子计算循环神经网络入门基础_重置_15对于循环神经网络入门基础_重置_18的偏导,注意其中的循环神经网络入门基础_重置_15对于循环神经网络入门基础_数据_16的偏导已经计算完成了,直接带入即可。

然后以此类推,得到一个循环神经网络入门基础_重置_15对于循环神经网络入门基础_重置_18的偏导的通式,见第四个式子。

这里可以用第四个通式计算一下循环神经网络入门基础_重置_15对于循环神经网络入门基础_语言模型_24的偏导,如下:

循环神经网络入门基础_数据_25

计算剩余两个参数,由于通路过多,因此这里再计算通路就相对来说复杂了,只需要采用反向传播的思想即可,将问题拆解。但是结果还是很复杂的,如下所示,计算循环神经网络入门基础_语言模型_26的梯度,使用了循环神经网络入门基础_重置_18的偏导,同时如上,求循环神经网络入门基础_重置_18的偏导还会涉及循环神经网络入门基础_重置_29的偏导,递归下去...梯度的计算穿越了时间。

方便起见,一下分别称为式5-6.

循环神经网络入门基础_重置_30

因此会存在一个问题:梯度随时间t呈指数变化,易引发梯度消失梯度爆炸。(例如循环神经网络入门基础_数据_09,见式4循环神经网络入门基础_重置_32涉及一个次方问题,那么循环神经网络入门基础_数据_09 < 1会使最终趋于0,引发梯度消失,而若循环神经网络入门基础_数据_09 > 1会使最终趋于无穷,引发梯度爆炸)。

GRU—门控循环单元

引入门的循环网络缓解RNN梯度消失带来的问题,引入门概念,来控制信息流动,使模型更好的记住长远时期的信息,并缓解梯度消失。

  • 重置门:哪些信息需要遗忘
  • 更新门:哪些信息需要注意

激活函数为:sigmoid,值域为(0, 1),0表示遗忘,1表示保留。可知,门的值域是(0, 1)之间。

循环神经网络入门基础_数据_35

重置门是用于候选隐藏状态计算过程当中遗忘上一时间步隐藏状态中的哪一些信息。

更新门的作用是更新当前时间步隐藏状态的时候,组合上一时间步隐藏状态循环神经网络入门基础_语言模型_36。以及当前时间步的候选隐藏状态循环神经网络入门基础_数据_37得到最终的循环神经网络入门基础_数据_38

循环神经网络入门基础_数据_39

侯选隐藏状态

输入与上一时间步隐藏状态共同计算得到候选隐藏状态,用于隐藏状态计算。通过重置门,对上一时间步隐藏状态进行选择性遗忘, 对历史信息更好的选择。

GRU:

循环神经网络入门基础_语言模型_40

试比较原来的RNN:

循环神经网络入门基础_语言模型_41

循环神经网络入门基础_重置_42

隐藏状态

隐藏状态由候选隐藏状态上一时间步隐藏状态组合得来

循环神经网络入门基础_重置_43

循环神经网络入门基础_数据_44

GRU特点:

门机制采用Sigmoid激活函数,使门值为(0,1),0表示遗忘, 1表示保留。

若更新门自第一个时间步到 t - 1时间过程中,一直保持为1 , 信息可有效传递到当前时间步

循环神经网络入门基础_重置_43

重置门:用于遗忘上一时间步隐藏状态

循环神经网络入门基础_语言模型_40

更新门: 用于更新当前时间步隐藏状态

循环神经网络入门基础_重置_43

LSTM—长短期记忆网络

LSTM

引入 3 个门记忆细胞,控制信息传递

  • 遗忘门:哪些信息需要遗忘
  • 输入门:哪些信息需要流入当前记忆细胞
  • 输出门:哪些记忆信息流入隐藏状态
  • 记忆细胞: 特殊的隐藏状态,记忆历史信息

循环神经网络入门基础_语言模型_48

循环神经网络入门基础_语言模型_49

候选记忆细胞

记忆细胞:可理解为特殊隐藏状态,储存历史时刻信息

循环神经网络入门基础_语言模型_50

记忆细胞与隐藏状态

记忆细胞由候选记忆细胞上一时间步记忆细胞组合得来

循环神经网络入门基础_数据_51

由输出门控制记忆细胞信息流入隐藏状态

循环神经网络入门基础_数据_52

循环神经网络入门基础_语言模型_53

总结

循环神经网络入门基础_数据_54

标签:状态,入门,偏导,神经网络,循环,记忆,信息,隐藏,RNN
From: https://blog.51cto.com/u_15736437/6589673

相关文章

  • Vue3从入门到精通(三)
    vue3插槽Slots在Vue3中,插槽(Slots)的使用方式与Vue2中基本相同,但有一些细微的差异。以下是在Vue3中使用插槽的示例://ChildComponent.vue<template><div><h2>ChildComponent</h2><slot></slot></div></template>​//ParentComponent......
  • ShardingSphere5入门到实战
    ShardingSphere5入门到实战第01章高性能架构模式互联网业务兴起之后,海量用户加上海量数据的特点,单个数据库服务器已经难以满足业务需要,必须考虑数据库集群的方式来提升性能。高性能数据库集群的第一种方式是“读写分离”,第二种方式是“数据库分片”。1、读写分离架构读写分......
  • MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(8)-Ant Design Blazor前端
    前言前面的章节我们介绍了一些值得推荐的BlazorUI组件库,通过该篇文章的组件库介绍最终我选用AntDesignBlazor这个UI框架作为ToDoList系统的前端框架。因为在之前的工作中有使用过AntDesignVue、AntDesignAngular习惯并且喜欢AntDesign设计规范和风格,废话不多说今天我......
  • 【Android Kotlin】全网最全的Android Kotlin入门教程指南,入股不亏
    前言2017年的谷歌大会上,Kotlin被指定为官方的Android开发语言,从长远的角度来看,Kotlin语言是作为Android开发者必须要掌握的一门编程语言。Kotlin编程语言极易上手,而且它不像Java那样代码繁琐,Kotlin代码更简洁,可读性也更强,可以花更少的时间来编写和理解代码,极大地提高了工作效率,不仅......
  • 信捷XD XC系列PLC 控制台达B2系列伺服电机程序,手动自动,循环,循环次数设定
    信捷XDXC系列PLC控制台达B2系列伺服电机程序,手动自动,循环,循环次数设定原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/620589573989.html......
  • bp神经网络交叉验证算法和确定最佳隐含层节点个数matlab 程序
    bp神经网络交叉验证算法和确定最佳隐含层节点个数matlab程序,直接运行即可。数据excel格式,注释清楚,效果清晰,一步上手。"使用交叉验证算法和确定最佳隐含层节点个数的bp神经网络,可以通过编写注释清晰、效果清晰的Matlab程序来处理Excel格式的数据。这个方法可以帮助您快速上手,实现......
  • HLS - 循环优化
    参考https://blog.csdn.net/pc153262603/article/details/106385483https://www.xilinx.com/htmldocs/xilinx2017_4/sdaccel_doc/fde1504034360078.htmlhttps://hitsz-cslab.oschina.io/dla/lab2/theory/#31.单个循环延迟优化1.1循环展开(Unroll)将一个循环展开成多......
  • 动态规划入门指南
     动态规划入门指南动态规划是一种解决复杂问题的方法,它可以将一个问题分解为若干个子问题,并利用子问题的最优解来构造原问题的最优解。动态规划适用于具有重叠子问题和最优子结构的问题,即子问题之间有相互依赖的关系,且子问题的最优解可以推导出原问题的最优解。本文将介绍动态......
  • 01 pixi.js入门
    写在前面:写该笔记时pixi.js版本为V7.2.41.安装npminstallpixi.js或者<scriptsrc="https://cdn.jsdelivr.net/npm/[email protected]/dist/pixi.min.js"></script>又或者<scriptsrc="https://unpkg.com/[email protected]/dist/pixi.min.js"><......
  • springboot入门教程,大家都是怎么学习的?
     学习SpringBoot可以帮助你提高Java后端开发的效率和质量,更快速地构建应用程序,并与当前的开发趋势保持一致。不过,建议你始终关注最新的版本和技术发展,及时了解并学习最新的特性和最佳实践。SpringBoot入门教程对于初学者来说是非常好学的。B站上动力节点王妈妈的springboot3教程......