通俗理解RNN

2023-05-16

全连接神经网络和卷积神经网络他们都只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的。但是,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。比如,当我们在理解一句话意思时,孤立的理解这句话的每个词是不够的,我们需要处理这些词连接起来的整个序列;当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析这些帧连接起来的整个序列。这时,就需要用到深度学习领域中另一类非常重要神经网络:循环神经网络(Recurrent Neural Network)。

RNN种类很多,也比较绕脑子。不过读者不用担心,本文将一如既往的对复杂的东西剥茧抽丝,帮助您理解RNNs以及它的训练算法,并动手实现一个循环神经网络。

语言模型

RNN是在自然语言处理领域中最先被用起来的,比如,RNN可以为语言模型来建模。那么,什么是语言模型呢?

我们可以和电脑玩一个游戏,我们写出一个句子前面的一些词,然后,让电脑帮我们写下接下来的一个词。比如下面这句:

我昨天上学迟到了,老师批评了____。

我们给电脑展示了这句话前面这些词,然后,让电脑写下接下来的一个词。在这个例子中,接下来的这个词最有可能是『我』,而不太可能是『小明』,甚至是『吃饭』。

语言模型就是这样的东西:给定一个一句话前面的部分,预测接下来最有可能的一个词是什么。

语言模型是对一种语言的特征进行建模,它有很多很多用处。比如在语音转文本(STT)的应用中,声学模型输出的结果,往往是若干个可能的候选词,这时候就需要语言模型来从这些候选词中选择一个最可能的。当然,它同样也可以用在图像到文本的识别中(OCR)。

使用RNN之前,语言模型主要是采用N-Gram。N可以是一个自然数,比如2或者3。它的含义是,假设一个词出现的概率只与前面N个词相关。我们以2-Gram为例。首先,对前面的一句话进行切词:

我 昨天 上学 迟到 了 ,老师 批评 了 ____。

如果用2-Gram进行建模,那么电脑在预测的时候,只会看到前面的『了』,然后,电脑会在语料库中,搜索『了』后面最可能的一个词。不管最后电脑选的是不是『我』,我们都知道这个模型是不靠谱的,因为『了』前面说了那么一大堆实际上是没有用到的。如果是3-Gram模型呢,会搜索『批评了』后面最可能的词,感觉上比2-Gram靠谱了不少,但还是远远不够的。因为这句话最关键的信息『我』,远在9个词之前!

现在读者可能会想,可以提升继续提升N的值呀,比如4-Gram、5-Gram…….。实际上,这个想法是没有实用性的。因为我们想处理任意长度的句子,N设为多少都不合适;另外,模型的大小和N的关系是指数级的,4-Gram模型就会占用海量的存储空间。

所以,该轮到RNN出场了,RNN理论上可以往前看(往后看)任意多个词。单向

循环神经网络是啥

循环神经网络种类繁多,我们先从最简单的基本循环神经网络开始吧。

基本循环神经网络
下图是一个简单的循环神经网络如,它由输入层、一个隐藏层和一个输出层组成:

这里写图片描述

纳尼?!相信第一次看到这个玩意的读者内心和我一样是崩溃的。因为循环神经网络实在是太难画出来了,网上所有大神们都不得不用了这种抽象艺术手法。不过,静下心来仔细看看的话,其实也是很好理解的。

如果把上面有W的那个带箭头的圈去掉,它就变成了最普通的全连接神经网络。x是一个向量,它表示输入层的值(这里面没有画出来表示神经元节点的圆圈);s是一个向量,它表示隐藏层的值(这里隐藏层面画了一个节点,你也可以想象这一层其实是多个节点,节点数与向量s的维度相同);U是输入层到隐藏层的权重矩阵;o也是一个向量,它表示输出层的值;V是隐藏层到输出层的权重矩阵。那么,现在我们来看看W是什么。循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重。

如果我们把上面的图展开,循环神经网络也可以画成下面这个样子:

这里写图片描述

这里写图片描述

双向循环神经网络

对于语言模型来说,很多时候光看前面的词是不够的,比如下面这句话:

我的手机坏了,我打算____一部新手机。

可以想象,如果我们只看横线前面的词,手机坏了,那么我是打算修一修?换一部新的?还是大哭一场?这些都是无法确定的。但如果我们也看到了横线后面的词是『一部新手机』,那么,横线上的词填『买』的概率就大得多了。

在上一小节中的基本循环神经网络是无法对此进行建模的,因此,我们需要双向循环神经网络,如下图所示:

这里写图片描述

这里写图片描述

深度循环神经网络

前面我们介绍的循环神经网络只有一个隐藏层,我们当然也可以堆叠两个以上的隐藏层,这样就得到了深度循环神经网络。如下图所示:

这里写图片描述

这里写图片描述

循环神经网络的训练

循环神经网络的训练算法:BPTT

BPTT算法是针对循环层的训练算法,它的基本原理和BP算法是一样的,也包含同样的三个步骤:
1. 前向计算每个神经元的输出值;
2. 反向计算每个神经元的误差项值,它是误差函数E对神经元j的加权输入的偏导数;
3. 计算每个权重的梯度。

最后再用随机梯度下降算法更新权重。

循环层如下图所示:

这里写图片描述

前向计算

使用前面的式2对循环层进行前向计算:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通俗理解RNN 的相关文章

  • RNN模型训练经验总结

    文章目录 RNN模型训练经验总结数据准备 look at your data 小步试错 搭建模型设置端到端的训练评估框架 forward propagation设置激活函数dropout back propagation设置学习率 lear
  • RNN 循环/递归神经网络入门

    目录 RNN 循环 递归神经网络 RNN概述 RNN模型 LSTM长短记忆网络 LSTM结构 细胞状态 xff1a 决定丢弃信息 确定更新的信息 更新细胞状态 输出信息 GRU算法 值得学习的博客记录 RNN 循环 递归神经网络 RNN概述
  • RNN训练过程详解

    Hinton 第七课 这里先说下RNN有recurrent neural network 和 recursive neural network两种 xff0c 是不一样的 xff0c 前者指的是一种人工神经网络 xff0c 后者指的是一种深
  • 深度神经网络(DNN)通俗理解

    首先要明白俩个函数 xff0c 特别重要的俩个函数 线性的关系函数 激活函数 xff08 顾名思义是激活用的把得到的Z放入函数中 xff0c 来重新得到结果 xff09 中间的线相当于线性关系函数中的w 神经元相当于一个激活函数 xff0c
  • EKF的通俗理解

    导 xff1a ekf xff0c 扩展卡尔曼滤波简称 xff0c 应用非常广泛 xff1b 1 五个黄金公式 2 应用场合 1 xff09 找清楚模型 2 xff09 对准五个公式的公式 3 xff09 实现 xff1a 求革新值 xff
  • RNN,LSTM,GRU回顾(主要知道代码怎么使用)

    RNN的计算流程 RNN的计算流程图如下图所示 nn RNN的初始化是这样规定的 rnn nn RNN input size hidden size bias False batch first True 这里的input size就是其中
  • 无框架的底层代码实现普通RNN、LSTM的正反向传播过程及应用

    1 准备 首先导入所需要的包rnn utils py import numpy as np def softmax x e x np exp x np max x return e x e x sum axis 0 def sigmoid
  • 深度学习(Deep Learning)读书思考六:循环神经网络一(RNN)

    概述 循环神经网络 RNN Recurrent Neural Network 是神经网络家族中的一员 擅长于解决序列化相关问题 包括不限于序列化标注问题 NER POS 语音识别等 RNN内容比较多 分成三个小节进行介绍 内容包括RNN基础
  • 基于Numpy构建RNN模块并进行实例应用(附代码)

    文章目录 一 写在前面 二 RNN原理介绍说明 1 RNN架构说明 2 RNN的数学模型及代码 正向传播 输入层 隐藏层 正向传播 隐藏层 输出层 反向传播 输出层 隐藏层 反向传播 隐藏层 输入层 三 RNN在实例中的应用 1 实例问题说
  • RNN原理及输入输出

    文章目录 循环神经网络 一 功能简介 二 基本原理 三 输入格式 四 输出格式 循环神经网络 一 功能简介 循环神经网络 Recurrent Neural Neural Networks RNN 是一种反馈网络 它可以有效处理序列特性的数据
  • 一步一步详解LSTM网络【从RNN到LSTM到GRU等,直至attention】

    一步一步详解LSTM网络 从RNN到LSTM到GRU等 直至attention 0 前言 1 Recurrent Neural Networks循环神经网络 2 The Problem of Long Term Dependencies长期
  • 使用Tensorflow的RNN(LSTM)生成音乐(基础)

    跟着Tensorflow的官方教程 搭建一个简单的LSTM模型 生成midi格式的音乐 只是为了熟悉tensorflow机器学习的代码一般格式 在音乐生成的模型上有很多不合理的操作 所以结果也不太好 安装 用的目前最新版Tensorflow
  • 现代循环神经网络-门控循环单元(GRU)

    理论 门控隐状态 门控循环单元与普通的循环神经网络之间的关键区别在于 前者支持隐状态的门控 这意味着模型有专门的机制来确定应该何时更新隐状态 以及应该何时重置隐状态 这些机制是可学习的 并且能够解决了上面列出的问题 例如 如果第一个词元非常
  • 循环神经网络RNN论文解读

    版权声明 本文为CSDN博主 了不起的赵队 的原创文章 遵循CC 4 0 by sa版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net zhaojc1995 article details 80572
  • 【优化算法】多目标蝗虫优化算法(MOGOA)

    一 简介 1 GOA数学模型 2 GOA迭代模型 3 GOA算法的基本流程 4 GOA缺点 二 源代码 clc clear close all Change these details with respect to your proble
  • 【机器学习】LSTM 讲解

    2 LSTM 2 1 长期依赖问题 标准 RNN 结构在理论上完全可以实现将最初的信息保留到即使很远的时刻 但是在实践中发现 RNN 会受到短时记忆的影响 如果一条序列足够长 那它们将很难将信息从较早的时刻传送到后面的时刻 因此 如果正在尝
  • RNN Pytorch实现——up主:刘二大人《PyTorch深度学习实践》

    b站up主 刘二大人 PyTorch深度学习实践 教程 https www bilibili com video BV1Y7411d7Ys p 6 vd source 715b347a0d6cb8aa3822e5a102f366fe 单层
  • 基于深度学习的文本分类系统(完整代码+数据)bert+rnn textcnn fastcnn bert

    程序说明 硬件 GPU Tesla V100 32GB显存 内存 32GB
  • torch rnn网络中,embedding.weight会反向更新吗?

    结论 在 PyTorch 中 如果在训练中使用了 embedding 层 那么 embedding weight 会被反向更新 这是因为在训练过程中 模型的参数会根据损失函数的反向传播进行更新 而 embedding 层的参数 embedd
  • 人工智能超分辨率重建:揭秘图像的高清奇迹

    导言 人工智能超分辨率重建技术 作为图像处理领域的一项重要创新 旨在通过智能算法提升图像的分辨率 带来更为清晰和细致的视觉体验 本文将深入研究人工智能在超分辨率重建方面的原理 应用以及技术挑战 1 超分辨率重建的基本原理 单图超分辨率 利用

随机推荐

  • XuperOS真·监督与真·共建合成藏品亮相!

    2023年年初 xff0c XuperOS发布了成长计划 xff0c 分别为 xff1a 创世 监督 共建 国际化四个阶段 开放网络 xff08 XuperOS xff09 是基于百度自主研发且开源的区块链技术XuperChain搭建的区块
  • Nginx编译安装时常见错误分析

    本篇文章主要是关于Nginx在编译安装时 xff0c 可能出现的错误的解决方法 1 Nginx启动脚本错误 xff1a env etc init d nginx No such file or directory 明明上传了Nginx服务控
  • Pytorch模型如何查看每层输入维度输出维度

    在 PyTorch 中 xff0c 可以使用 torchsummary 库来实现对 PyTorch 模型的结构及参数统计的输出 xff0c 其可以方便我们查看每层输入 输出的维度以及参数数量等信息 安装 torchsummary 库 xff
  • ERROR: Cannot uninstall ‘xxx‘. It is a distutils installed project and thus we cannot accurately det

    ERROR Cannot uninstall TBB It is a distutils installed project and thus we cannot accurately determine which files belon
  • python装饰器的使用方法

    0 前言 装饰器在 python 中使用的频率非常高 xff0c 它可以在不改动原有函数的基础上对其进行增强功能 下面主要是介绍装饰器的各种用法 xff0c 并理解其运行过程 1 使用 1 1 在函数上添加装饰器 decro 是一个装饰器函
  • 【Linux operation 46】Centos 7.9中安装使用nmap

    1 nmap 介绍 nmap xff08 Network Mapper xff09 是一个开源的网络探测和安全扫描程序 nmap 的设计目标是快速地扫描大型网络 xff0c 当然用它扫描单个主机也没有问题 nmap 以新颖的方式使用原始 I
  • Nginx配置ssl证书

    1 下载证书 在ssl证书管理界面下载对应于Nginx的证书 下载的Nginx证书压缩文件解压后包含 xff1a pem xff1a 证书文件 PEM文件的扩展名为CRT格式 key xff1a 证书的密钥文件 申请证书时如果未选择自动创建
  • 0009基于51单片机智能门禁系统设计

    资料下载地址 单片机原理教程 初级 xff08 视频 xff0c 源仿真源代码 xff09 功能 60 可输入密码进行解锁 可以对IC卡进行注册或注销 可用已注册的IC卡解锁 可实现液晶显示当前时间 密码连续输错三次时能强制退出并报警 具有
  • 基于openstreetmap数据的SUMO路网生成路线

    一 一步到位 xff1a 基于SUMO自带工具smWebWizard py 使用SUMO自带的osmWebWizard py脚本 xff08 sumo tools xff09 进行下载 xff0c 脚本执行后会打开一个操作网页 xff0c
  • STM32烧写一次程序后,再次烧写识别不到单片机

    STM32cubeMX生成的程序 xff0c 编译后烧录一次后 xff0c 在次烧录会发现识别不到单片机了 xff0c 解决方案 xff1a 在STM32cubeMX工程中的SYS中 xff0c Debug中选择Serial Wire 使能
  • 百度超级链学院开课啦!第一讲教你《如何快速建链》

    百度超级链Xuperchain开源之后 xff0c 我们感受到了开发者伙伴们的热情关注 xff0c 其中有不少朋友提到希望进一步了解百度超级链网络的搭建方法 今天 xff0c 百度超级链小X姐姐和百度资深研发工程师静姐姐 xff0c 为大家
  • centos7操作/关闭防火墙

    前言 xff1a 测试环境部署不同端口的服务 xff0c 需要频繁使用防火墙放行端口 xff0c 比较麻烦 xff0c 所以需要彻底关闭防火墙 xff0c 整理了以下命令 xff0c 提供使用 systemctl status firewa
  • [kubernates]kube-flannel-ds 一直 CrashLoopBackOff

    使用 Kubeadm 安装 K8s 集群 xff0c 在安装 flannel 网络插件后 xff0c 发现 kube flannel ds 一直处于 CrashLoopBackOff 状态 xff1a span class token pu
  • Bottom-up And Top-down

    Bottom up 自下而上的处理可以理解为 xff1a 将感应器结果作为输入 xff0c 也就是激励 因此自下而上可以被描述为是数据驱动的 例如 xff0c 在一个人的花园正中有一朵花儿 xff0c 这个花儿的视觉和所有的激励信息都从视网
  • pyqt5在statusbar中不断的刷新显示不同的信息

    在PYQT5中不断的显示新的信息 需求 xff1a 需要在statusbar 上不断的显示新的测试数据 现在在测试例子中 xff0c 数据由numpy生成 总结如下 xff1a span class token comment coding
  • 如何在VS下调试自己写的dll

    一 准备资料 1 qt写的应用程序 test pro xff0c 编译程序可执行文件test exe 2 qt写的动态库程序 dll pro 二 调试步骤 1 用vs打开dll pro 2 dll工程右键属性如下图所示修改 3 编译运行dl
  • 通俗理解网络架构搜索(NAS)

    什么是NAS 我们假设模型必须是一个三层的全连接神经网络 xff08 一个输入层 一个隐层 一个输出层 xff09 xff0c 隐层可以有不同的激活函数和节点个数 xff0c 假设激活函数必须是relu或sigmoid中的一种 xff0c
  • GDB 的进入和退出

    进入和退出GDB 本节讨论如何启动和退出GDB 主要包括 xff1a 输入 39 gdb 进入GDB调试器输入quit或者按下Ctrl d退出调用GDB xff1a 如何启动GDB退出GDB xff1a 如何退出GDBShell脚本命令 x
  • OpenGL 矩阵变换GLM库的使用

    GLM和MVP矩阵操作速记 连续工作15小时 xff0c 累了 xff0c 睡觉 include glm glm hpp include glm gtc matrix transform hpp 若未特别说明 xff0c 以下示例均假设矩阵
  • 通俗理解RNN

    全连接神经网络和卷积神经网络他们都只能单独的取处理一个个的输入 xff0c 前一个输入和后一个输入是完全没有关系的 但是 xff0c 某些任务需要能够更好的处理序列的信息 xff0c 即前面的输入和后面的输入是有关系的 比如 xff0c 当