网络流量预测入门一之RNN 介绍

作者: 段小辉


目录

  • [网络流量预测入门(一)之RNN 介绍]
  • [RNN简介]
  • [RNN 结构]
  • [RNN原理]
    • [结构原理]
    • [损失函数$E$]
    • [反向传播]
  • [总结]
    • [参考]


网络流量预测入门(一)之RNN 介绍

了解RNN之前,神经网络的知识是前提,如果想了解神经网络,可以去参考一下之前写的博客:数据挖掘入门系列教程(七点五)之神经网络介绍 and 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST

这篇博客介绍RNN的原理,同时推荐大家去看李宏毅老师的课程:ML Lecture 21-1: Recurrent Neural Network (Part I)。基本上看完他的课程,也就没有必要看这篇博客了。

RNN简介

RNN全称Recurrent Neural Network ,中文名为循环神经网络(亦或称递归神经网络)。相信大家在看这篇博客之前都已经简单的了解过RNN。将RNN说的简单一点,就是进行预测(或者回归)的时候,不仅要考虑到当前时刻的输入,还要考虑上一个时刻的输入(甚至有些RNN的变种还会考虑未来的情况)。换句话说,预测的结果不仅与当前状态有关,还与上一个时刻的状态有关。 RNN用于处理时序信息 。而在传统的神经网络中,们认为输入的 \(x_1,x_2,x_3\),是相互独立的:比如说在Iris分类中,们认为鸢尾花的长宽是独立的,之间不存在前后序列逻辑关系。

尽管传统的神经网络在预测中能够取得不错的成绩(比如说人脸识别等等),但是对于以下方式情景可能就爱莫能助了。

当们想要预测一段话"小丑竟是自“时,们必须根据前文的意思来predict。而RNN之所以叫做循环(recurrent),这是因为它的预测会考虑以前的信息。换句话说,也就是RNN具有memory,它"记得"之前计算后的情况。

在知乎全面理解RNN及其不同架构上,说了一个很形象的例子:

以捏陶瓷为例,不同角度相当于不同的时刻:

  • 若用前馈网络:网络训练过程相当于不用转盘,而是徒手将各个角度捏成想要的形状。不仅工作量大,效果也难以保证。
  • 若用递归网络(RNN):网络训练过程相当于在不断旋转的转盘上,以一种手势捏造所有角度。工作量降低,效果也可保证。

RNN 结构

RNN的原理图,们最多见的便是如左图所示,但是实际上将它展开,便是如下右图所示。

  1. 在RNN中,们可以将黄框称之为一个layer,所有的layer的参数 在一个batch中是相同的(参数共享),也就是说,上图中的 \(U,W,V\) 等参数在某个batch全部相同。(通过一个batch的训练之后,经过反向传播,参数会发生改变)
  2. Layer的层数根据自己的需要来定,举个例子,比如说们分析的句子是5个单词构成的句子,那么layer的层数便是5,每一个layer对应一个单词。
  3. 上图既有多个输入\(X{t-1},X{t},X{t+1}\) , 也可以有多个输出\(O{t-1},O{t},O{t+1}\) , 但是实际上输出可以根据实际的需要而定,既可以为多个输出,也可以只有一个输出,有如下几种:
   |         **Type of RNN**         |                                       **Illustration**                                        |        **Example**         |
   |---------------------------------|-----------------------------------------------------------------------------------------------|----------------------------|
   | One-to-one \\(T_x=T_y=1\\)      | ![](https://img2020.cnblogs.com/blog/1439869/202101/1439869-20210125120443357-1684700888.png) | Traditional neural network |
   | One-to-many \\(T_x=1, T_y\>1\\) | ![](https://img2020.cnblogs.com/blog/1439869/202101/1439869-20210125120443605-1961147767.png) | Music generation           |
   | Many-to-one \\(T_x\>1, T_y=1\\) | ![](https://img2020.cnblogs.com/blog/1439869/202101/1439869-20210125120443803-1432149687.png) | Sentiment classification   |
   | Many-to-many \\(T_x=T_y\\)      | ![](https://img2020.cnblogs.com/blog/1439869/202101/1439869-20210125120443989-430482236.png)  | Name entity recognition    |
   | Many-to-many \\(T_x\\neq T_y\\) | ![](https://img2020.cnblogs.com/blog/1439869/202101/1439869-20210125120444282-292207015.png)  | Machine translation        |

Gif图如下所示:

下图是李宏毅老师在课堂上讲的一个例子。

RNN原理

结构原理

下面是来自Recurrent Neural Networks cheatsheet对RNN原理的解释:

\(a^\) 和 \(y^\) 的表达式如下所示:


\[a^{}=g{1}\left(W{a a} a^{}+W{a x} x^{}+b{a}\right) \quad \text { and } \quad y^{}=g{2}\left(W{y a} a^{}+b_{y}\right) \]


  • \(W{a x}, W{a a}, W{y a}, b{a}, b{y}\) 在时间上是共享的:也就是说,在一个batch中,无论是哪一个layer,其\(W{a x}, W{a a}, W{y a}, b{a}, b{y}\)都是相同的(shared temporally)。当然,经过一个batch的训练之后,其值会因为反向传播而发生改变。
  • \(g, g{2}\) 皆为激活函数(比如说tanh,sigmoid)

损失函数\(E\) $ \mathcal{L}$ 为可微分的损失函数,比如交叉熵,其中\(y^{}\)为t时刻正确的词语,\(\hat{y}^{}\)为t时刻预测的词语。


\[\mathcal{L}^{} = \mathcal{L}(\hat{y}^{}, y^{}) \\ {E}(\hat{y}, y)=\sum{t=1}^{T{y}} \mathcal{L}^{} \]


反向传播

反向传播目的就是求预测误差 \(E\) 关于所有参数 \((U, V, W)\) 的梯度, 即 \(\frac{\partial E}{\partial U}, \frac{\partial E}{\partial V}\) 和 \(\frac{\partial E}{\partial W}\) 。关于具体的推导可以参考循环神经网络(RNN)模型与前向反向传播算法

知道梯度后,便可以对参数系数进行迭代更新了。

总结

在上述博客中,简单的对RNN进行了介绍,介绍了RNN作用,以及部分原理。而在下篇博客中,将介绍如何使用keras构建RNN模型写唐诗。🤭 参考

  1. 什么是 LSTM RNN 循环神经网络 (深度学习)? What is LSTM in RNN (deep learning)?
  2. ML Lecture 21-1: Recurrent Neural Network (Part I)
  3. Recurrent Neural Network (RNN) Tutorial for Beginners
  4. Recurrent Neural Networks cheatsheet
  5. Recurrent Neural Networks Tutorial, Part 1 – Introduction to RNNs
  6. 全面理解RNN及其不同架构
  7. 神经网络与深度学习(邱锡鹏)
  8. 循环神经网络(RNN)模型与前向反向传播算法
  9. 深度学习框架PyTorch:入门与实践

    原文创作:段小辉

    原文链接:https://www.cnblogs.com/xiaohuiduan/p/14324502.html

文章列表

更多推荐

更多
  • .NET人工智能教程-四、使用自然语言理解 什么是 NLU?,自然语言理解的历史,为什么机器很难理解自然语言,语言理解智能服务(LUIS),为 LUIS 获取 Azure 订阅,演示:定义应用,概述,自然语言的复杂性,统计模型作为解决方案是不够的,充满希望的未来,基于 LUIS
    Apache CN

  • .NET人工智能教程-十、人工智能的未来 AI 为什么这么受欢迎?,改进的计算能力,人工智能算法的发明,数据是新的货币,云计算的出现,服务 vs 解决方案?,认知类别,NLU 的挑战和未来,演讲的挑战和未来,搜索的挑战和未来,挑战和建议的未来,AI 优先,智能边缘,将被淘汰的是
    Apache CN

  • .NET人工智能教程-七、与语音 API 交互 与语音互动的方式,入门指南,首先获取 JSON Web 令牌,消费者语音 API,语音合成,定制语音服务,说话人识别,摘要,认知搜索 API,语音识别,语音识别内部,定制声学模型,自定义语言模型,发音数据,自定义语音转文本端点,说话人验
    Apache CN

  • .NET人工智能教程-五、探索认知语言模式 iamfeanggoodgermanyvsargentinafootballliveepic fail,Bing 拼写检查 API,文本分析 API,Web 语言模型(WebLM) API,语言分析 API,概述,这是什么?
    Apache CN

  • .NET人工智能教程-一、人工智能基础入门 真实与虚构,历史和演变,微软和人工智能,基本概念,微软的认知服务,概述,当前的事态,人工智能的商品化,机器学习,语言,演讲,计算机视觉,视力,演讲,语言,知识,搜索, 想象一下,创建一个如此智能的软件,它不仅能理解人类语言,还能理解俚语
    Apache CN

  • .NET人工智能教程-三、使用微软技术构建对话式用户界面 什么是对话式用户界面?,简史,设计原则,微软机器人框架,使用 Bot 框架创建 CUI 应用,概述,一开始:命令行界面(CLI),然后是图形用户界面,UI 又一次进化了:对话式用户界面,艾在《崔》中的角色,崔的陷阱,混合用户界面(CUI
    Apache CN

  • .NET人工智能教程-二、在 Visual Studio 中创建基于人工智能的应用 使用认知服务的先决条件,设置开发环境,获取认知服务的 Azure 订阅密钥,测试 API,创建你的第一个基于人工智能的应用,让你的应用更有趣,概述,步骤 1:设置 Azure 帐户,步骤 2:创建一个新的认知服务帐户,步骤 3:获取订阅
    Apache CN

  • .NET人工智能教程-八、应用搜索产品 搜索无处不在,普及、预测、主动(搜索的三个 p),冰的历史,必应有什么独特之处?,搜索 API,Bing 图像搜索 API,Bing 新闻搜索 API,Bing 视频搜索 API,如何使用 Bing 视频搜索 API,Bing 网络搜索
    Apache CN

  • .NET人工智能教程-九、使用建议 了解基础知识,经常汇集(FBT)的建议,逐项,基于过去历史的建议,这些建议是如何起作用的?,模型和类型,建议构建,经常聚集在一起(FBT)建设,排名,SAR(智能自适应)构建,在构建中设置规则,离线评估,用户界面,摘要, 机器学习无处不
    Apache CN

  • .NET人工智能教程-六、消费和应用 LUIS 规划您的应用,创建 LUIS 应用,添加意图,添加/标记话语,发布您的应用,添加实体,添加短语列表,建议的后续步骤,LUIS 与 Bot 框架的集成,将您的机器人添加到 Skype,概述,机器人应该能做什么?,机器人需要用户提供什么信息
    Apache CN

  • 近期文章

    更多
    文章目录

      推荐作者

      更多