• 【深度学习】第四章:循环神经网络


    1. 为什么要使用循环神经网络?

    因为全连接神经网络存在如下缺点:

    1. 网络没有记忆:每次网络的输出只依赖于当前的输入,不能处理输入之间有联系的数据。
    2. 参数太多:层与层之间全连接,层内无连接。
    3. 无法处理变长的序列数据,如视频、语音、文本 :因为输入和输出的维数都是固定的,不能任意改变。

    其中,最主要的缺点还是第一点,输入之间没有联系,即网络没有记忆。那么如何给网络增加记忆能力? 有三种方法:

    1. 延时神经网络
      在这里插入图片描述

    2. 自回归模型
      在这里插入图片描述

    3. 循环神经网络
      在这里插入图片描述
      RNN主要用于解决输入之间具有时序关系的问题。

    接下来介绍的就是其中的循环神经网络。

    2. 简单循环神经网络

    在这里插入图片描述

    当隐藏层的个数不止一层时,就成了深度循环神经网络

    3. 双向循环神经网络

    在这里插入图片描述

    4. 应用到机器学习

    1. 序列到类别模式:输入是序列,输出是类别,用于解决分类问题。比如:文本分类、情感分类等

    2. 同步的序列到序列模式:主要用于序列标注任务,即每一时刻都有输入和输出,输入序列和输出序列的长度相同。比如:词性标注、中文分词、信息抽取等

    3. 异步的序列到序列模式:也称编码器-解码器模型,即输入序列和输出序列不需要有严格的对应关系,也不需要保持相同的长度。比如:机器翻译中,输入为源语言的单词序列,输出是目标语言的单词序列。

    5. 参数学习

    可通过梯度下降的方法进行学习。主要有两种计算梯度的方式:

    1. 随时间反向传播算法(BPTT)
    2. 实时循环学习算法

    5.1 随时间反向传播算法(BPTT)

    主要思想是通过类似前馈神经网络的反向传播误差来计算梯度。过程如下:

    1. 前向计算激活值:在简单神经网络中提到过
      在这里插入图片描述

    2. 反向传播误差
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    3. 更新参数

      在这里插入图片描述
      在这里插入图片描述

    6. RNN的梯度爆炸与消失、长程依赖问题

    1. 梯度爆炸:靠近输入层的网络层,计算的到的偏导数极其大,更新后W变成一个很大的数(爆炸)。
    2. 梯度消失:靠后面网络层(如layer3)能够正常的得到一个合理的偏导数,但是靠近输入层的网络层,计算的到的偏导数近乎零,参数几乎无法得到更新。
    3. 长程依赖问题:RNN并不能很好的处理较长的序列。一个主要的原因是,RNN在训练中很容易发生梯度爆炸梯度消失,这导致训练时梯度不能在较长序列中一直传递下去,从而使RNN无法捕捉到长距离的影响。

    那么,如何避免梯度爆炸梯度消失,从而解决RNN的长程依赖问题?
    在这里插入图片描述

    7. 长短时记忆网络 (LSTM)

    在这里插入图片描述
    LSTM使用了三个门去控制LSTM的三个输入是否输入:
    在这里插入图片描述

    门实际上就是一层全连接层,它的输入是一个向量,输出是一个0到1之间的实数向量。
    在这里插入图片描述

    8. RNN vs CNN vs DNN

    • DNN的代表是全连接神经网络,其层之间是全连接的,层内无连接。主要用于传统的机器学习,进行预测。
    • CNN是卷积神经网络,其层之间是局部连接的,层内无连接。主要用于处理图像分类
    • RNN是循环神经网络,其层之间是全连接的,层内是有连接的。主要用于解决时序数据的,比如语音识别、语言翻译等。
  • 相关阅读:
    零代码工具推荐---HiFlow
    HTML简介与常见标签
    《异常检测——从经典算法到深度学习》29 EasyTSAD: 用于时间序列异常检测模型的工业级基准
    键盘失灵按什么键恢复?详细方法分享!
    c++ unordered_map和map的区别
    Java项目中排查JVM问题的思路
    DP总结-壹-最长公共型
    『现学现忘』Docker相关概念 — 6、虚拟化技术分类
    C语言冒泡排序
    【算法】树形DP③ 监控二叉树 ⭐(二叉树染色&二叉树灯饰)!
  • 原文地址:https://blog.csdn.net/qq_43546676/article/details/127809724