首页 > 其他分享 >深度学习| 循环神经网络RNN与应用

深度学习| 循环神经网络RNN与应用

时间:2023-04-01 16:45:41浏览次数:52  
标签:状态 RNN 输出 细胞 神经网络 深度 LSTM

循环神经网络

1. 场景与多种应用

  • 模仿论文(生成序列)
  • 模型Linux内核代码“写程序” (生成序列)
  • 模仿小四的作品(生成文本序列)
  • 机器翻译
  • Image to text/ 看图说话

我们知道神经网络结构如下:

 

 

 那循环神经网络和它是什么关系呢?

循环神经网络

为什么有BP神经网络,CNN,还要RNN?

  • 传统神经网络(包括RNN),输入和输出都是互相独立的;
    • 图像上的猫和狗是分隔开的,但有些任务,后序的输出和之前的内容是相关的;
    • “我是中国人,我的母语是__”
  • RNN引入“记忆”的概念
    • 循环2字来源于其每个元素都执行相同的任务;
    • 但是输出依赖于输入和“记忆”

 

2. 层级结构

简单来看,把序列按时间展开

 

 

  •  Xt是时间t处的输入;
  • St是时间t处的“记忆”,St=f(UXt+WSt-1),f可以是tanh等;
  • Ot是时间t处的输出,比如是预测下个词的话,可能是softmax输出的属于每个候选词的概率,Ot=softmax(VSt

结构细节:

  • 可以把隐状态St视作“记忆体”,捕获了之前时间点上的信息;
  • 输出Ot由当前时间及之前所有的“记忆”共同计算得到;
  • 很可惜,实际应用中,St并不能捕获和保留之前所有信息(记忆有限?)
  • 不同于CNN,这里的RNN其实整个神经网络都共享一组参数(U, V, W),极大减小了需要训练和预估的参数量;
  • 图中的Ot在有些任务下是不存在的,比如文本情感分析,其实只需要最后的output结果就行;

 

3. 多种RNN

双向RNN

有些情况下,当前的输出不只依赖于之前的序列元素,还可能依赖之后的序列元素;

比如从一段话踢掉部分词,让你补全;

直观理解:双向RNN叠加;

 

深层双向RNN 

和双向RNN的区别是每一步/ 每个时间点我们设定多层结构 

 

 

4. BPTT算法

MPL(DNN)与CNN用BP算法求偏导

BPTT和BP是一个思路,只不过既然有step,就和时间t有关系

 

 

 

 

 

 

5. 生成模型与图像描述

简单image to text 

 

 

 

图片描述数据集 

Microsoft COCO数据集: http://mscoco.org 

RNN与图片描述

部分结果

 

 

LSTM

前面提到的RNN解决了,对之前的信息保存的问题

但是!存在长期依赖的问题。

  • 看电影的时候,某些情节的推断需要依赖很久以前的一些细节;
  • 很多其他的任务也一样;
  • 很可惜随着时间间隔不断增大时,RNN会丧失学习到连接如此远的信息的能力;
  • 也就是说,记忆容量有限,一本书从头到尾一字不漏的去记哦,肯定离得越远的东西忘得越多。
  • 怎么办:LSTM 

LSTM是RNN一种,大体结构几乎一样,区别是:

  • 它的“记忆细胞”改造过;
  • 该记的信息会一直传递,不该记的会被“门”截断;

 

1. 长时依赖问题

 RNN的结构

 

 把“记忆细胞”表现的炫酷一点 

 

 LSTM呢

  “记忆细胞”变得稍微复杂了一点点

 

 

 

 

2. “记忆细胞”与状态

 LSTM关键:“细胞状态” 

细胞状态类似于传送带,直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。

 

 

 LSTM怎么控制“细胞状态”?

  • 通过“门”让信息选择性通过,来去除或者增加信息到细胞状态;
  • 包含一个sigmoid神经网络层和一个pointwise乘法操作;
  • sigmoid层输出0到1之间的概率值,描述每个部分有多少量可以通过。0代表“不允许量通过”,1就指“运行任意量通过” 

 LSTM的几个关键“门”与操作

  • 第一步:决定从“细胞状态”中丢弃什么信息 => “忘记门”
  •  比如完形填空中填“他” 或者“她”的问题,细胞状态可能包含当前主语的类别,当我们看到新的代词,我们希望忘记旧的代词。

 

 

 第二步:决定放什么信息到“细胞状态”中

  • sigmoid层决定什么值需要更新;
  • tanh层创建一个新的候选值向量Ct
  • 上述2步是为状态更新做准备;

 

 第三步:更新“细胞状态” 

  • 更新Ct-1为C
  • 把旧状态与f相乘,丢弃掉我们确定需要丢弃的信息;
  • 加上it * Ct ,这就是新的候选值,根据我们决定更新每个状态的程度进行变化。

 

 第四步:基于“细胞状态”得到输出

  • 首先运行一个sigmoid层来确定细胞状态的哪个部分将输出;
  • 接着用tanh处理细胞状态(得到一个在-1到1之间的值),再将它和sigmoid门的输出相乘,输出我们确定输出的那部分。
  • 比如我们可能需要单复数信息来确定输出“他”还是“他们” 

 

3. LSMT的变体

变种1 

  • 增加“peephole connection” 
  • 让门层也会接受细胞状态的输入;

 

 变种2 

通过使用coupled忘记和输入门;

之前是分开确定需要忘记和添加的信息,这里是一同做出决定。

 

 

 

4. GRU

 Gated Recurrent Unit (GRU),2014年提出

  • 将忘记门和输入门合成了一个单一的更新门;
  • 同样还混合了细胞状态和隐藏状态,和其他一些改动;
  • 比标准LSTM简单;

 生成模式

字符级别的生成模型

纯手工撸制代码请戳 https://gist.github.com/karpathy/d4dee566867f8291f086 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:状态,RNN,输出,细胞,神经网络,深度,LSTM
From: https://www.cnblogs.com/shengyang17/p/17278069.html

相关文章

  • 卷积神经网络(Convolutional Neural Network)
    前置芝士:神经网络前言人脑视觉机理,是指视觉系统的信息处理在可视皮层是分级的,大脑的工作过程是一个不断迭代、不断抽象的过程。视网膜在得到原始信息后,首先经由区域V1初步处理得到边缘和方向特征信息,其次经由区域V2的进一步抽象得到轮廓和形状特征信息,如此迭代地经由更多更高层......
  • 神经网络
    1.简介简单来说就是模仿动物神经网络行为特征进行信息处理的算法模型每一个神经元接收多个上一级神经元传递的信号,将其处理后,若电信号足够强超过了阈值,神经元就会发信号给下一级神经元神经网络也是这个思路,每一层的神经元都与下一层的链接,并通过权重将自己的值传输到下一个神经......
  • 深度学习概念辨析——Epoch、Batch、Iteration
    本文转载自简书https://www.jianshu.com/p/22c50ded4cf7写在前面在训练神经网络的时候,我们难免会看到Batch、Epoch和Iteration这几个概念。曾对这几个概念感到模糊,看了网上的一些文章后,在这里做几个小小的总结。名词解释:【图片来源:https://zhuanlan.zhihu.com/p/29409502......
  • 深度学习之量化概念初步理解
    也许标题并不是很对,但一再听到有人提起量化这个词,搜索了下,稍作整理如下:量化任务的简要总结:1、量化映射方法,也就是将float-32映射到Int数据类型,每个间隔是相等的还是不相等的,这里就是均匀量化(uniformquantization)和非均匀量化(non-uniformquantization),也可以叫作线性量化和......
  • 深度学习——用简单的线性模型构建识别鸟与飞机模型
    本文仅为深度学习的入门学习,故采用线性模型而非CNN处理图像数据集。一、准备工作1.下载CIFAR-10数据集这是一个\(32\times32\)像素的RGB图像集合,用于学习使用。fromtorchvisionimportdatasetsdata_path="./data/"cifar10=datasets.CIFAR10(root=data_path,train=......
  • 手把手带你玩转Spark机器学习-深度学习在Spark上的应用
    文章目录系列文章目录前言一、ApacheSparkTimeline二、开发步骤1.在jupyter中启动SparkSession和SparkContext2.下载数据3.用Spark读取图片3.TransferLearning总结前言本文将介绍深度学习在Spark上的应用,我们将聚焦于深度学习Pipelines库,并讲解使用DLPipelines的方式。我们......
  • 《很多反相吧友的知识体系,既没深度,也没广度》 回复
    《很多反相吧友的知识体系,既没深度,也没广度》      https://tieba.baidu.com/p/8325085511      @真Djh801   在 36 楼回复里说   “单叶红枫:回复Ehg2000:对,你说对了。迈-实验实际就只是一个验证地球上光速各向相同性的实验。而不能作......
  • LeetCode 559.二叉树的最大深度
    1.题目:给定一个N叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。示例1:输入:root=[1,null,3,2,4,null,5,6]输出:3来源:力扣(LeetCode)链接:https://leetcode.cn/problems/maximum......
  • 深度学习(二)--神经网络
    一:神经网络的历史神经网络的发展可谓经历了一波三折:神经网络的发展过程二:M-P模型三:感知机四:多层感知机五:误差反向传播函数六:误差函数和激活函数七:似然函数八:随机梯度下降法......
  • PytorchOCR工程的CRNN文本识别模型训练
    环境:python3.9+pytorch1.8.1+opencv4.5.2+cuda11.1pyTorchOCR工程:https://github.com/WenmuZhou/PytorchOCR 1、准备训练数据:(这里是生成的数据生成:https://blog.51cto.com......