网络流量预测入门(一)之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\) Traditional neural network
    One-to-many \(T_x=1, T_y>1\) Music generation
    Many-to-one \(T_x>1, T_y=1\) Sentiment classification
    Many-to-many \(T_x=T_y\) Name entity recognition
    Many-to-many \(T_x\neq T_y\) Machine translation

Gif图如下所示:

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

RNN原理

结构原理

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

\(a^{<t>}\) 和 \(y^{<t>}\) 的表达式如下所示:

\[a^{<t>}=g_{1}\left(W_{a a} a^{<t-1>}+W_{a x} x^{<t>}+b_{a}\right) \quad \text { and } \quad y^{<t>}=g_{2}\left(W_{y a} a^{<t>}+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_{1}, g_{2}\) 皆为激活函数(比如说tanh,sigmoid)

损失函数\(E\)

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

\[\mathcal{L}^{<t>} = \mathcal{L}(\hat{y}^{<t>}, y^{<t>}) \\
{E}(\hat{y}, y)=\sum_{t=1}^{T_{y}} \mathcal{L}^{<t>}
\]

反向传播

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

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

总结

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

网络流量预测入门(一)之RNN 介绍的更多相关文章

  1. 网络流量预测入门(二)之LSTM介绍

    目录 网络流量预测入门(二)之LSTM介绍 LSTM简介 Simple RNN的弊端 LSTM的结构 细胞状态(Cell State) 门(Gate) 遗忘门(Forget Gate) 输入门(Inp ...

  2. 网络流量预测入门(三)之LSTM预测网络流量

    目录 网络流量预测入门(三)之LSTM预测网络流量 数据集介绍 预测流程 数据集准备 SVR预测 LSTM 预测 优化点 网络流量预测入门(三)之LSTM预测网络流量 在上篇博客LSTM机器学习生成音 ...

  3. ARIMA模型实例讲解——网络流量预测可以使用啊

    ARIMA模型实例讲解:时间序列预测需要多少历史数据? from:https://www.leiphone.com/news/201704/6zgOPEjmlvMpfvaB.html   雷锋网按:本 ...

  4. 网络流量预测 国内外研究现状【见评论】——传统的ARIMA、HMM模型,目前LSTM、GRU、CNN应用较多,貌似小波平滑预处理步骤非常关键

    Time Series Anomaly Detection in Network Traffic: A Use Case for Deep Neural Networks from:https://j ...

  5. Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量

    Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量 from:https://www.leiphone.com/news/201712/zbX22Ye5wD6CiwCJ.html 导语 ...

  6. Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测

    Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测 2017年12月13日 17:39:11 机器之心V 阅读数:5931   近日,Artur Suilin 等人发布了 Kaggl ...

  7. mrtg监控网络流量简单配置

    Mrtg服务器搭建(监控网络流量) [日期:2012-07-03] 来源:Linux社区  作者:split_two [字体:大 中 小]   [实验环境] 监控机:Red Hat linux 5.3 ...

  8. 利用神经网络进行网络流量识别——特征提取的方法是(1)直接原始报文提取前24字节,24个报文组成596像素图像CNN识别;或者直接去掉header后payload的前1024字节(2)传输报文的大小分布特征;也有加入时序结合LSTM后的CNN综合模型

    国外的文献汇总: <Network Traffic Classification via Neural Networks>使用的是全连接网络,传统机器学习特征工程的技术.top10特征如下 ...

  9. [转]HTTPS网络流量解密方法探索系列(一)

    前言 分析网络流量总是绕不开HTTPS,因其广泛使用甚至是强制使用逐渐被大众熟知,在保证其安全的同时也提高了对流量进行研究的难度.目前解析HTTPS协议的文章很多,有很多不错的文章可以带着入门,老实说 ...

随机推荐

  1. 一劳永逸,解决基于 keep-alive 的后台多级路由缓存问题

    用过 vue-element-admin 的同学一定很清楚,路由的配置直接关系侧边栏导航菜单的展示,也得益于这种设计思路,几乎大部分后台框架都采用这个方案,当然也包括了我写的 Fantastic-ad ...

  2. MySQL高可用(三)搭建主备同步实战

    目标 掌握如何搭建一主一备的主备架构 实验环境 系统:Ubuntu 18.04.1 LTS MySQL版本:5.7.32 主库IP:192.168.200.120 备库IP:192.168.200.1 ...

  3. SpringBoot 与 SpringSecurity

    一.环境搭建 (1)IDEA创建SpringBoot工程 (2)导入依赖 (3)如果是thymeleaf项目 需导入thymeleaf整合security的依赖 (4)编写配置类(采用AOP横切入程序 ...

  4. 小团队产品研发管理V0.0.1

    序言 之前做研发的时候非常鄙视管理,觉得管理的那些人就知道搞政治,后来做了开发主管,以及到部门经理之后,管的人多了发现管理真是门大学问,真的应该每个人都要学习一些基本管理知识,特别是刚入社会的打工人. ...

  5. double 转为long类型

    System.out.println(new Double(234314.999999999).longValue());//234314  System.out.println(new Double ...

  6. json 与 ajax

    json类似与js中的对象,但是json中不能有方法,json相当于python中的字典,但是json中的键值如果是字符串的话,需要加上双引号:ajax是一个前后台配合的技术,它可以让js发送http ...

  7. 自动化运维工具-Ansible之7-roles

    自动化运维工具-Ansible之7-roles 目录 自动化运维工具-Ansible之7-roles Ansible Roles基本概述 Ansible Roles目录结构 Ansible Roles ...

  8. IDEA maven项目报错,找不到或无法找到主类

    最近在写UDF,依赖复制的公司的依赖, <dependency> <groupId>org.apache.hive</groupId> <artifactId ...

  9. Beta冲刺——第十天(补发)

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...

  10. http ContentLength 为0 下载问题

    如图 通过http 下载某个东西 ,    WebResponse response = request.GetResponse(); response 调试如图 ContentLength 为0  ...