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

本文通过整理李宏毅老师的机器学习教程的内容,介绍 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.mzph.cn/news/170481.shtml

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

相关文章

最新AI创作系统ChatGPT系统运营源码,支持GPT-4图片对话能力,上传图片并识图理解对话,支持DALL-E3文生图

一、AI创作系统 SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!本系统使用NestjsVueTypescript框架技术,持续集成AI能力到本系统。支持OpenAI DALL-E3文生图,…

Canvas艺术之旅:探索锚点抠图的无限可能

说在前面 在日常的图片处理中,我们经常会遇到需要抠图的情况,无论是为了美化照片、制作海报,还是进行图片合成。抠图对于我们来说也是一种很常用的功能了,今天就让我们一起来看下怎么使用canvas来实现一个锚点抠图功能。 效果展示…

【数据结构实验】查找(一)基于散列表的查找算法

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

Django 通过 Trunc(kind) 和 Extract(lookup_name) 参数进行潜在 SQL 注入 (CVE-2022-34265)

漏洞描述 Django 于 2022 年6月4 日发布了一个安全更新,修复了 Trunc() 和 Extract() 数据库函数中的 SQL 注入漏洞。 参考链接: Django security releases issued: 4.0.6 and 3.2.14 | Weblog | Djang…

在 Linux 中重命名文件和目录

目录 前言 使用 mv 命令重命名文件和目录 通过组合 mv、find 和 exec 命令重命名与某个模式匹配的多个文件 使用 rename 命令轻松重命名多个文件 总结 前言 在这篇基本命令行教程中,你将学习在 Linux 终端重命名文件和目录的各种方法。 如何在 Linux 终端中重命…

Vue框架学习笔记——键盘事件

文章目录 前文提要键盘事件(并不是所有按键都能绑定键盘事件)常用的按键不同的tab和四个按键keyCode绑定键盘事件(不推荐)Vue.config.keyCode.自定义键名 键码 神奇的猜想div标签和click.enterbutton标签和click.enter 前文提要 …

基于卷积优化算法优化概率神经网络PNN的分类预测 - 附代码

基于卷积优化算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于卷积优化算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于卷积优化优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

1.前端--基本概念【2023.11.25】

1.网站与网页 网站是网页集合。 网页是网站中的一“页”,通常是 HTML 格式的文件,它要通过浏览器来阅读。 2.Web的构成 主要包括结构(Structure) 、表现(Presentation)和行为(Behavior&#xff…

『亚马逊云科技产品测评』活动征文|AWS 域名注册、启动与连接 EC2 新实例、端口开放详细教程

授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 目录 一、AWS 域名注册 二、AWS 域名解析 三、个人网站 ICP 备案 …

Nacos安装使用

Nacos安装使用 官方下载地址: https://github.com/alibaba/nacos/releases 官方文档地址: https://nacos.io/zh-cn/docs/quick-start.html Nacos介绍 Nacos是阿里巴巴开源的一款支持服务注册与发现,配置管理以及微服务管理的组件。用来取代以前常用的注册中心&a…

第二十章 解读PASCAL VOC2012与MS COCO数据集(工具)

PASCAL VOC2012数据集 Pascal VOC2012官网地址:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/ 官方发表关于介绍数据集的文章 《The PASCALVisual Object Classes Challenge: A Retrospective》:http://host.robots.ox.ac.uk/pascal/VOC/pubs/everi…

CH01_适应设计模式

Iterator模式(迭代器模式) 迭代器模式(Iterator),提供一种方法,顺序访问一个聚合对象中各个元素,而不是暴露该对象的内部表示。 类图结构 说明 Iterator(迭代器) 该角色负责定义按…

深入理解 Django 中的事务管理

概要 在数据库操作中,事务是确保数据完整性和一致性的关键机制。Django 作为一个强大的 Python Web 框架,提供了灵活而强大的事务管理功能。理解和正确使用 Django 中的事务对于开发高质量的 Web 应用至关重要。本文将深入探讨 Django 的事务管理机制&a…

2.多行输入【2023.11.24】

1.问题描述 编写一个Python程序,将字符串 ‘Hello World!’ 存储在变量 str1 中,将字符串 ‘Hello Python!’ 存储在变量 str2 中,然后使用 print 语句分别将它们在不同行打印出来。 2.解决思路 使用print()函数即可 3.代码实现 str1&qu…

1.5 C语言之字符输入输出

1.5 C语言之字符输入输出 一、概述二、字符计数三、行计数四、单词计数五、练习 一、概述 字符文本流,是由多行字符构成的字符序列,而每行字符都由0个或多个字符组成,行末是一个换行符。 标准库提供的输入输出模型,用于读取文本内…

前端vue3——html2canvas给网站截图生成宣传海报

文章目录 ⭐前言⭐选择html2canvas实现网页截图💖 截图 ⭐图片url截图显示不出来问题💖 解决 ⭐最终效果💖 定义海报 ⭐总结⭐结束 ⭐前言 大家好,我是yma16,本文分享关于 前端vue3——html2canvas给网站截图生成宣传…

JVM字节码文件的相关概述解读

Java全能学习面试指南:https://javaxiaobear.cn 1、字节码文件 从下面这个图就可以看出,字节码文件是可以跨平台使用的 想要让一个Java程序正确地运行在JVM中,Java源码就必须要被编译为符合JVM规范的字节码。 https://docs.oracle.com/java…

3. 深入探究文件 IO

3. 深入探究文件 IO 1. Linux 系统如何管理文件1.1 静态文件与inode1.2 文件打开时的状态 2. 返回错误处理与errno2.1 strerror 函数2.2 perror 函数 3. 空洞文件4. O_APPEND 和 O_TRUNC5. 多次打开同一个文件6. 复制文件描述符6.1 dup6.2 dup2 7. 文件共享7.1 同一个进程中多次…

Python 测试框架 Pytest 的入门

简介 pytest 是一个功能强大而易于使用的 Python 测试框架。它提供了简单的语法和灵活的功能,用于编写和组织测试代码。 1、简单易用:pytest 的语法简洁明了,使得编写测试用例更加直观和易于理解。它使用 assert 语句来验证预期结果&#x…

从0到0.01入门 Webpack| 005.精选 Webpack面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…