RNN 网络结构及训练过程简介

news2024/11/17 22:41:27

本文通过整理李宏毅老师的机器学习教程的内容,介绍 RNN(recurrent neural network)的网络结构。

RNN 网络结构, 李宏毅


RNN


RNN 的特点在于存储功能,即可以记忆前面时刻的信息。

最简单的 RNN 结构如下:
最简单的 RNN 结构

当然,网络结构可以很深,多少层都可以:
不止一层的网络结构

如果存储的是隐藏层(hidden layer)的值,则称为 Elman Network;
如果存储的是输出值,则称为 Jordan Network:
Elman Network & Jordan Network

据说 Jordan Network 的表现更好,因为所存储的是输出值,其中包含了优化目标的信息。

RNN 可以是双向的:
双向 RNN

LSTM(Long Short-Term Memory)


LSTM 单元的结构简图如下:
LSTM 单元的结构简图

其内部的具体结构如下:
LSTM 单元的具体结构

需要注意的是,遗忘门(forget gate)这个称呼与我们的直觉相反,即打开时数据保留,关闭时数据清除。

将上述 LSTM 单元视为神经网络中的神经元,即可构成网络结构,其输入数量是普通神经元的 4 倍:
LSTM 神经元

在实际计算过程中,输入数据在进入三个门之前会分别乘三个矩阵:
输入过程

下图为前后两个时刻的输入数据之间的关系,可以看出,实际的 LSTM 输入数据还要加上前一时刻的隐藏层(hidden layer)的输出 h t h^t ht,以及前一时刻的存储数据 c t c^t ct(该操作称为 peephole):
实际的 LSTM 输入数据

LSTM 不会只有一层,现在通常都会有至少五六层,其层级之间的连接结构如下:

多层 LSTM

现在通常讲的 RNN 都是 LSTM。

Keras 框架支持三种 RNN:

  • LSTM
  • GRU:少了一个门的 LSTM,会把输入门(input gate)和遗忘门(forget gate)联动起来,其中一个打开,则另一个关闭,这样相当于减少了三分之一的参数,但据说表现跟 LSTM 差不多
  • SimpleRNN:前一节介绍的最基本的 RNN

训练过程


以句法分析为例,优化目标为最小化交叉熵(cross entropy):

优化目标

训练过程中,更新参数的方法叫 BPTT(backpropagation through time),即考虑时间信息的反向传播法。

此外,在训练过程中,RNN 的 total loss 容易出现很大的波动:
total loss

这是因为,RNN 的 error surface 会有比较陡峭的地方,解决该问题的技巧是对梯度(gradient)做裁剪(clipping):
error surface & clipping

前述波动的来源并不是 sigmoid 函数,因为如果换成 ReLU 函数也会很差,所以激活函数并不是这里的关键点。

从一个最简单的例子可以看出,问题出在权重参数的变化会在后续时刻被不断放大,即便在学习率(learning rate)很小时也是一样:
the simplest example

然而,LSTM 可以解决梯度消失(gradient vanishing)的问题,也就是 error surface 很平坦的问题,因此可以把学习率设置得比较小,但是并不能解决 error surface 很崎岖的问题(gradient explode):
LSTM 解决 gradient vanishing

LSTM 能够解决梯度消失问题的原因,是存储数据不会被随时清除,因此也需要保证遗忘门在多数时间是开启的。

另外两种解决梯度消失问题的方法是 Clockwise RNN 和 SCRN:
helpful techniques

值得一提的是,一篇 Hinton 推荐的论文提到,当使用单位矩阵(identity matrix)初始化参数、并使用 ReLU 函数作为激活函数时,普通 RNN 的表现效果会很好,甚至超过 LSTM。但是如果是通常的训练方式,即使用随机矩阵初始化参数,ReLU 函数的表现效果就不如 sigmoid 函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1253235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MUYUCMS v2.1:一款开源、轻量级的内容管理系统

MuYuCMS:一款基于Thinkphp开发的轻量级开源内容管理系统,为企业、个人站长提供快速建站解决方案。它具有以下的环境要求: 支持系统:Windows/Linux/Mac WEB服务器:Apache/Nginx/ISS PHP版本:php > 5.6 (…

JDK源码系列:StringBuffer与StringBuilder对比

一、源码分析StringBuffer与StringBuilder的区别 1、StringBuffer是多线程安全的,StringBuilder是多线程不安全的 多线程安全指的是 多个线程同时对一个对象进行append 等操作,不会出现覆盖、丢失的情况。 看下StringBuffer是如何做到多线程安全的&#…

吉他初学者学习网站搭建系列(3)——如何实现吉他在线调音

文章目录 背景知识teoriapitchytone效果 背景知识 学过初中物理就会知道,声音是由空气振动产生的。振动产生波,所以声音就是不同振幅和频率的波构成的。振幅决定了声音的响度,频率决定了声音的音高。想更进一步了解的可以访问这个网页wavefo…

C++ STL map迭代器失效问题

最近在开发过程中,定位一个问题的时候,发现多线程场景下大量创建和销毁某个C:\Windows\System32\reg.exe时出现了383个进程创建消息处理的接口,和384个进程销毁处理消息的接口都在等待锁,另外一个线程也在等锁,后面看了…

【数据结构实验】查找(二)基于线性探测法的散列表

文章目录 1. 引言2. 实验原理2.1 散列表2.2 线性探测法 3. 实验内容3.1 实验题目(一)输入要求(二)输出要求 3.2 算法实现三、实验设计3.3 代码整合 4. 实验结果 1. 引言 本实验将通过C语言实现基于线性探测法的散列表 2. 实验原理…

车载通信架构 —— 传统车内通信网络CAN(可靠性为王)

车载通信架构 —— 传统车内通信网络CAN(可靠性为王) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非…

cesium轨迹线(闪烁轨迹线)

cesium轨迹线(闪烁轨迹线) 下面有源码 实现思路 使用ellipse方法加载圆型,修改polyline中‘material’方法重写glsl来实现当前效果(cesium版本1.109) 示例代码 index.html <!DOCTYPE html> <html lang="en"><head

SQL Server秘籍:数据分隔解密,数据库处理新境界!

点击上方蓝字关注我 在数据数据过程中经常会遇到数据按照一定字符进行拆分&#xff0c;而在不同版本的SQL SERVER数据库中由于包含的函数不同&#xff0c;处理的方式也不一样。本文将列举2个版本的数据库中不同的处理方法。 1. 使用 XML 方法 在SQL SERVER 2016版本之前&#x…

VMware OpenSLP漏洞解决方案

PS&#xff1a;早期为客户做VMware检测的方法&#xff0c;大家如有遇到可参考 OpenSLP堆溢出漏洞攻击大量ESXI服务器&#xff0c;该漏洞编号为CVE-2021-21974&#xff0c;由 OpenSLP 服务中的堆溢出问题引起 大于以下版本则不受影响 ESXi versions 7.x prior to ESXi7…

LangChain 10思维链Chain of Thought一步一步的思考 think step by step

LangChain系列文章 LangChain 实现给动物取名字&#xff0c;LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储&#xff0c;读取YouTube的视频文本搜索I…

nodejs+vue+python+PHP+微信小程序-健身俱乐部在线管理平台的设计与实现-安卓-计算机毕业设计

随着经济的发展、财富的累积&#xff0c;人们生活水平、生活质量大幅度提高&#xff0c;生活环境得到明显改善&#xff0c;但是竞争激烈、人们生活压力大、生活节奏快加上饮食习惯和生活方式不合理导致国内 亚健康人群逐年增多。统计数据表明当前我国亚健康人群比例已经超过了7…

Linux-基本指令(1.0)

Linux是一个非常流行的操作的知识&#xff0c;并提供实例帮助读者更好地理解。让我们一起来学习吧&#xff01;系统&#xff0c;也是云计算、大数据、人工智能等领域的重要基础。学习Linux命令是Linux系统管理的基础&#xff0c;也是开发过程中必不可少的技能。本博客将介绍Lin…

思维模型 波纹效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。小变化&#xff0c;大影响。 1 波纹效应的应用 1.1 波纹效应在市场中的应用 2008 年&#xff0c;美国金融危机爆发&#xff0c;导致全球经济陷入衰退。这场危机的起因是美国房地产市场的崩…

【人工智能】Chatgpt的训练原理

前言 前不久&#xff0c;在学习C语言的我写了一段三子棋的代码&#xff0c;但是与我对抗的电脑是没有任何思考的&#xff0c;你看了这段代码就理解为什么了&#xff1a; void computerMove(char Board[ROW][COL], int row, int col) {while (1){unsigned int i rand() % ROW, …

基于 STM32 的温度测量与控制系统设计

本文介绍了如何基于 STM32 微控制器设计一款温度测量与控制系统。首先&#xff0c;我们将简要介绍 STM32 微控制器的特点和能力。接下来&#xff0c;我们将详细讨论温度传感器的选择与接口。然后&#xff0c;我们将介绍如何使用 STM32 提供的开发工具和相关库来进行温度测量和控…

nrm安装及使用

一、介绍 nrm 是一个 Node.js 的 registry 管理工具&#xff0c;它允许你快速地在不同的 npm registry 之间进行切换。通过使用 nrm&#xff0c;你可以方便地将 npm 的 registry 切换为淘宝镜像、npm 官方镜像或者其他定制的镜像&#xff0c;以加快包的下载速度。nrm仓库请点击…

MyBatisPlus入门介绍

目录 一、MyBatisPlus介绍 润物无声 效率至上 丰富功能 二、Spring集成MyBatisPlus 三、SpringBoot集成MyBatisPlus 一、MyBatisPlus介绍 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个MyBatis的增强工具&#xff0c;在MyBatis的基础上只做增强不做改变&#xff0c…

单调栈 模板

class Solution { public: //从后往前的方法 vector<int> dailyTemperatures(vector<int>& temperatures) {int n temperatures.size();vector<int> ans(n);//创建一个大小为n的数组stack<int> st;//这个时候栈中没有任何元素for(int i n-1;i &g…

存算一体还是存算分离?谈谈数据库基础设施的架构选择

从一则用户案例说起 某金融用户问&#xff0c;数据库用服务器本地盘性能好还是外置存储好&#xff1f;直觉上&#xff0c;本地盘路径短性能应该更好。然而测试结果却出乎意料&#xff1a;同等中等并发压力&#xff0c;混合随机读写模型&#xff0c;服务器本地SSD盘合计4万 IOPS…

Spring Boot配置文件 Spring日志文件相关的知识

在上文中&#xff0c;小编带领大家创建了一个Spring Boot项目&#xff0c;并且成功的执行了第一个SPring Boot项目&#xff08;在网页上运行hello world&#xff09; 那么&#xff0c;本文的主要作用便是带领大家走进&#xff1a;Spring Boot配置文件 && Spring日志文件…