machine-learning-notes
  • 封面
  • 目录
  • 前言
  • 个人前言
  • 机器学习前言
    • 什么是机器学习和模式识别
    • 机器学习的应用
    • 机器学习的流程
    • 不同的机器学习算法对相同数据预测效果不同
    • 快速入门机器学习
    • 机器学习需要参考哪些书
    • 机器学习的学习路径
    • 深度学习的学习路径
    • 互联网机器学习特定岗位所需技能
  • 机器学习面试
  • 数学基础
  • 微积分
    • 泰勒展开
    • e的直观认识
    • 傅里叶变换
    • 希尔伯特空间
  • 线性代数
    • 范数
    • 矩阵求导
    • 特征值
    • 奇异值分解
  • 概率与信息论
    • 综述概率论基本定义
    • 概率论与贝叶斯先验
    • 正态分布
    • 贝叶斯概率
    • 概率符号说明
    • 共轭先验
    • 信息论
  • 数值计算与优化
    • 最小二乘法
    • 等式约束的拉格朗日乘子法
    • 凸优化
      • 凸集和凸函数
      • 凸优化问题
  • 梯度下降算法
    • 随机梯度下降SGD
    • 动量法Momentum
    • 牛顿动量Nesterov
    • AdaGrad
    • RMSprop
    • Adadelta
    • Adam
    • Nadam
    • AMSGrad
    • AdasMax
  • 概率图模型
    • 概率图模型概论
    • 概率图简介
  • 编程基础
  • linux
    • linux常用命令
    • shell
      • 输入输出重定向
  • python
    • python简介
    • python语法
      • 基础语法
      • 数据结构
      • 过程控制
      • 函数
      • 类和对象
      • 文件操作
      • 正则表达式
    • python库
      • numpy
      • pandas
      • scipy
      • matplotlib
      • scikit-learn
    • python应用
      • 排序算法
  • 数据结构与算法
    • 数据结构
    • 算法思想
      • 排序
        • 堆排序
        • 归并排序
        • 快速排序
      • 递归
    • 剑指offer
      • 链表
      • 二叉树
      • 数组
      • 字符串
      • 栈和队列
      • 递归
      • 动态规划
      • 其他
    • leetcode
    • 编程语言
      • c++
  • Hadoop
    • Hadoop简介
    • MapReduce
  • Hive
  • Spark
  • TensorFlow
    • TensorFlow1.0
      • TensorFlow基础
      • TensorFlow基础概念解析
      • TensorFlow机器学习基础
      • Tensorflow分布式架构
    • TensorFlow2.0
  • PyTorch
  • 机器学习
  • 机器学习概论
  • 特征工程
  • 感知机
  • k近邻
  • 朴素贝叶斯
  • 线性模型
    • 最大熵模型
    • 指数族分布与广义线性模型
    • 线性回归
      • Ridge回归(岭回归)
      • Lasso回归
    • Logistic回归-对数几率回归
  • 决策树
  • 支持向量机
    • 线性可分支持向量机与硬间隔最大化
    • 线性支持向量机与软间隔最大化
    • 非线性支持向量机与核函数
    • 序列最小最优化算法SMO
    • SVM总结
  • 集成学习
    • Bagging
      • 随机森林
    • Boosting
      • AdaBoost
      • GradientBoosting
        • GBDT
        • XGBoost
          • XGBoost理论
          • XGBoost实践
    • Stacking
  • 降维
    • PCA主成分分析
    • 流形学习
  • EM算法
  • HMM隐马尔科夫模型
  • CRF条件随机场
  • 聚类
    • k均值聚类
    • 高斯混合模型
  • 主题模型
    • LDA隐狄利克雷分布
  • 知识点
    • 损失函数
    • 负采样
  • 机器学习算法总结
  • 深度学习
  • 深度学习概论
  • ANN人工神经网络
  • 知识点
    • Batch Normalization
  • CNN卷积神经网络
  • 深度学习优化算法
  • RNN循环神经网络
  • LSTM长短期记忆网络
  • GRU门控循环单元
  • GNN图神经网络
    • GNN图神经网络综述
    • GCN图卷积网络
      • GCN图卷积网络初步理解
      • GCN图卷积网络的numpy简单实现
      • GCN图卷积网络本质理解
      • GCN图卷积网络全面理解
      • SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS ICLR2017
  • 神经网络架构搜索
    • Weight-Agnostic-Neural-Networks Google2019
  • 强化学习
  • 强化学习概论
  • 马尔科夫决策过程
  • 动态规划
  • 无模型方法一:蒙特卡洛
  • 无模型方法二:时间差分
  • 无模型方法三:多步自举
  • 函数近似和深度网络
  • 策略梯度算法
  • 深度强化学习
  • 基于模型的强化学习
  • 强化学习前景
  • 自然语言处理
  • 自然语言处理概论
  • 自然语言
  • 语言模型和中文分词
  • word2vec
    • word2vec概述
    • word2vec算法原理
    • word2vec源码分析
    • word2vec实践
  • Seq2Seq模型和Attention机制
  • Self-Attention和Transformer
  • 知识图谱
  • 推荐系统
  • 推荐系统概论
  • 基础知识
  • 进阶知识
    • 机器学习
      • Factorization Machines ICDM2010
    • embedding
      • Network Embedding
        • LINE: Large-scale Information Network Embedding
    • 深度学习
      • DeepFM: A Factorization-Machine based Neural Network for CTR Prediction 2017
      • DSSM: Learning Deep Structured Semantic Models for Web Search using Clickthrough Data CIKM2013
    • 图卷积网络
      • Graph Convolutional Neural Networks for Web-Scale Recommender Systems KDD2018
    • 强化学习
      • DRN基于深度强化学习的新闻推荐模型
  • 业界应用
    • YouTube
      • Deep Neural Networks for YouTube Recommendations RecSys2016
    • Alibaba
      • Learning Tree-based Deep Model for Recommender Systems KDD2018
      • Deep Interest Network for Click-Through Rate Prediction KDD2018
      • DSIN:Deep Session Interest Network for Click-Through Rate Prediction IJCAI2019
Powered by GitBook
On this page
  • RNN循环神经网络
  • 为什么需要RNN
  • RNN原理
  • RNN的不同架构
  • 多层Deep的RNN
  • Elman和Jordan网络架构
  • 双向RNN
  • RNN的梯度消失问题
  • 参考资料

Was this helpful?

RNN循环神经网络

Previous深度学习优化算法NextLSTM长短期记忆网络

Last updated 5 years ago

Was this helpful?

RNN循环神经网络

  • 返回顶层目录

  • 为什么需要RNN

  • RNN原理

  • RNN的不同架构

    • 多层Deep的RNN

    • Elman和Jordan网络架构

    • 双向RNN

为什么需要RNN

以订票系统的填空(slot filling)为例,比如一个智慧订票系统,往往需要slot filling技术。

假设订票系统需要根据人说的话得到两个slot:目的地和到达时间。

这个问题我们首先想到可以用全连接网络(FNN:FeedForword Neural Network)来解决。

这个全连接网络的输入是一个词汇,比如把台北变为一个Embedding(OneHot、N-gram、Word2vec)输入到神经网络里。然后希望输出是一个概率,即属于所有slot的几率。

但是只有这样是不够的,全连接网络不能解决这个问题。为什么呢?

如果有两个输入:

arrive Taipei on November 2nd
leave Taipei on November 2nd

但对于全连接神经网络来说,输入一样,输出也会一样。输入Taipei,要么输出是目的地的几率最高,要么是出发地的几率最高,没有办法有时候让目的地的几率最高,有时候让出发地的几率最高,那怎么办呢?

这个时候,我们就希望神经网络是有记忆力的。

如果神经网络是有记忆力的,它会记得在看到红色Taipei这个词之前,就已经看过arrive这个词汇;它会记得在看到绿色Taipei这个词之前,就已经看过leave这个词汇。它会根据这段话的上下文,产生不同的输出。

如果神经网络是有记忆力的,这样就可以解决输入同样的词汇,但是输出必须不同这个问题。那么这种有记忆力的神经网络,就叫做Recurrnt Neural Network(RNN)。

RNN原理

每次前向神经网络里的隐藏层的神经元产生输出(下图中的a1a_1a1​和a2a_2a2​)后,都会被存到memory中去,然后当下一个input输入后,隐藏层的输入不仅仅考虑x1x_1x1​和x2x_2x2​,还会考虑上一次的隐藏层输出存在memory中的值。

那具体过程是怎样的呢?用一个简单的例子来说明会比较清楚。

假设如下图所示的所有权值都是1,所有的神经元都没有bias,假设所有的激活函数都是线性的,假设input是sequence,具体值如下图中所示,假设memory的初始值是0。

然后如下图所示隐藏层的值2被写到memory中,接下来再输入第二个单词的embedding,那么隐藏层的输入有四个,加权的结果是6,输出的结果也是6。

由上图可以看出,输入是一样的,但是输出是可能不一样的,因为存在memory中的值是不一样的。

接下来,如下图所示上图中隐藏层的输出6就会被存到memory中去,memory中的值就由2变为6。隐藏层的输入有四个(6+6+2+2=16),所以隐层的输出就是16。

所以因为memory的存在,任意调换sequence的顺序,那么输出就会不一样。比如把sequence的最后一个单词挪到最前面去,则输出是会完全不一样的。所以,RNN会考虑输入的seqence的顺序。

example:

现在RNN的原理就讲完了,下面还是用前面的订票系统来距离说明。

上面并不是三个网络,而是同一个神经网络,是同一个网络在三个不同的时间点被使用了三次。

所以,有了memory以后,我们希望输入同一个词汇,输出不同的概率这个问题,就有可能解决。

如下图所示,同样是输入Taipei,但是因为红色Taipei前面接leave,绿色Taipei前面接arrive,因为leave和arrive它们的embedding不一样,所以隐层的输出也会不同,存在memory里面的值也会不同。所以虽然现在两个x2x^2x2是一模一样的,但是因为存在memory里面的值不同,所以隐层的输出就会不一样,所以最后的输出也就会不一样。

RNN的不同架构

多层Deep的RNN

RNN当然也可以有很多层,如下图所示

Elman和Jordan网络架构

前面我们讲的都是Elman网络架构,Jordan网络往memory中存的是output的值。Jordan网络可以得到比较好的性能,因为Elman网络的隐藏层是没有target的,比较难控制它学到了什么信息,但是Jordan网络的输出y是有target的,可以对放在memory中的是什么东西比较清楚的。

双向RNN

RNN的读取方向不仅可以是按照句子的顺序,也可以是反过来的。

可以同时train一个正向的RNN和逆向的RNN,然后把两个RNN的隐藏层都拿出来接给一个输出层,得到最后的输出y。

用双向RNN的好处,就是网络产生输出的时候,看的范围比较广。如果只有正向的RNN,在产生yt+1y^{t+1}yt+1的时候,网络只看过x1x^1x1一直到xt+1x^{t+1}xt+1,但是如果是双向的RNN,在产生yt+1y^{t+1}yt+1的时候,网络不只是看过x1x^1x1一直到xt+1x^{t+1}xt+1,也看了从句尾一直到xt+1x^{t+1}xt+1。就是说,网络是看了整个sequence后,才决定输出是什么,会比只看句子的一半得到更好的性能。

RNN的梯度消失问题

RNN的缺陷是梯度消失问题,即便是LSTM也只能缓解该问题。

参考资料

  • 李宏毅教授讲解 RNN LSTM的视频

  • B站李宏毅深度学习RNN2019

本文参考了该视频。两个视频都一样。

  • Recurrent Neural Networks (RNN) - The Vanishing Gradient Problem

  • paper: On the difficulty of training recurrent neural networks

"RNN的梯度消失问题"参考该博客,paper没看,但是觉得有用。

===

完全图解RNN、RNN变体、Seq2Seq、Attention机制

seq2seq学习笔记

RNN基础 对于RNN,我看到讲得最通俗易懂的应该是Andrej发的博客: The Unreasonable Effectiveness of Recurrent Neural Networks

这里有它的中文翻译版本: 递归神经网络不可思议的有效性

如果想了解 LSTM 的原理,可以参考这篇文章:(译)理解 LSTM 网络 (Understanding LSTM Networks by colah)。 下面的连接中对RNN还有BPTT(RNN的反向传播算法),LSTM和GRU的原理和实现讲解得也是非常棒: http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/

Visualizing memorization in RNNs

谁能用比较通俗有趣的语言解释RNN和LSTM?

一文读懂LSTM和循环神经网络

深度学习循环神经网络详解

【深度学习之美】循环递归RNN,序列建模套路深(入门系列之十三)

【Deep Learning】通俗大白话详述RNN理论和LSTM理论

深度学习实战教程(五):循环神经网络

The Ultimate Guide to Recurrent Neural Networks (RNN)

slot-filling
book-tiket
rnn.jpg
rnn-example1.jpg
rnn-example2
rnn-example3
rnn-example4
rnn-example5
rnn-structure
rnn-structure2
rnn-structure3
rnn-vanishing-gradient