网络流量预测入门(一)之RNN 介绍
网络流量预测入门(一)之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的原理图,我们最多见的便是如左图所示,但是实际上将它展开,便是如下右图所示。

在RNN中,我们可以将黄框称之为一个layer,所有的layer的参数在一个batch中是相同的(参数共享),也就是说,上图中的 \(U,W,V\) 等参数在某个batch全部相同。(通过一个batch的训练之后,经过反向传播,参数会发生改变)
Layer的层数根据自己的需要来定,举个例子,比如说我们分析的句子是5个单词构成的句子,那么layer的层数便是5,每一个layer对应一个单词。
上图既有多个输入\(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>}\) 的表达式如下所示:
\]
\(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时刻预测的词语。
{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 介绍的更多相关文章
- 网络流量预测入门(二)之LSTM介绍
目录 网络流量预测入门(二)之LSTM介绍 LSTM简介 Simple RNN的弊端 LSTM的结构 细胞状态(Cell State) 门(Gate) 遗忘门(Forget Gate) 输入门(Inp ...
- 网络流量预测入门(三)之LSTM预测网络流量
目录 网络流量预测入门(三)之LSTM预测网络流量 数据集介绍 预测流程 数据集准备 SVR预测 LSTM 预测 优化点 网络流量预测入门(三)之LSTM预测网络流量 在上篇博客LSTM机器学习生成音 ...
- ARIMA模型实例讲解——网络流量预测可以使用啊
ARIMA模型实例讲解:时间序列预测需要多少历史数据? from:https://www.leiphone.com/news/201704/6zgOPEjmlvMpfvaB.html 雷锋网按:本 ...
- 网络流量预测 国内外研究现状【见评论】——传统的ARIMA、HMM模型,目前LSTM、GRU、CNN应用较多,貌似小波平滑预处理步骤非常关键
Time Series Anomaly Detection in Network Traffic: A Use Case for Deep Neural Networks from:https://j ...
- Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量
Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量 from:https://www.leiphone.com/news/201712/zbX22Ye5wD6CiwCJ.html 导语 ...
- Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测
Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测 2017年12月13日 17:39:11 机器之心V 阅读数:5931 近日,Artur Suilin 等人发布了 Kaggl ...
- mrtg监控网络流量简单配置
Mrtg服务器搭建(监控网络流量) [日期:2012-07-03] 来源:Linux社区 作者:split_two [字体:大 中 小] [实验环境] 监控机:Red Hat linux 5.3 ...
- 利用神经网络进行网络流量识别——特征提取的方法是(1)直接原始报文提取前24字节,24个报文组成596像素图像CNN识别;或者直接去掉header后payload的前1024字节(2)传输报文的大小分布特征;也有加入时序结合LSTM后的CNN综合模型
国外的文献汇总: <Network Traffic Classification via Neural Networks>使用的是全连接网络,传统机器学习特征工程的技术.top10特征如下 ...
- [转]HTTPS网络流量解密方法探索系列(一)
前言 分析网络流量总是绕不开HTTPS,因其广泛使用甚至是强制使用逐渐被大众熟知,在保证其安全的同时也提高了对流量进行研究的难度.目前解析HTTPS协议的文章很多,有很多不错的文章可以带着入门,老实说 ...
随机推荐
- cmd.exe解释器漏洞
安全研究员Julian Horoszkiewicz发现了cmd.exe命令行解释器中的漏洞,该漏洞允许执行任意命令. 在寻找新的攻击媒介以允许Windows中注入命令时,Khoroshkevich发现 ...
- python 画图二(三维图,多轴图)
import sys reload(sys) sys.setdefaultencoding('utf-8') import matplotlib.pyplot as plt import numpy ...
- 去掉关闭按钮同时禁用alt+f4进行关闭
public int ctype = 0; private const int GWL_STYLE = -16; private const int WS_SYSMENU = 0x80000; [Sy ...
- 老板居然让我在Java项目中“造假”
1. 前言 老板说,明天甲方要来看产品,你得造点数据,而且数据必须是"真"的,演示效果要好看一些,这样他才会买我们的产品,我好明年给你换个嫂子.一般开发接到这种过分要求都不会很乐意 ...
- 【Java并发编程】阿里最喜欢问的几道线程池的面试题?
引言 上一篇文章我们有介绍过线程池的一个基本执行流程<[Java并发编程]面试必备之线程池>以及它的7个核心参数,以及每个参数的作用.以及如何去使用线程池 还留了几个小问题..建议看这篇文 ...
- 10分钟带你入门git到github
git的产生背景 开局先来一个故事吧,故事看完如果不想看枯燥无味的指令,没关系我已经把这篇文章的内容录制成了一个视频,点击文末阅读原文就可以观看.或者说你已经熟练掌握git的使用了,可以直接跳到总结部 ...
- 【vue-1】vue-cli3.0以上的搭建与配置(2.X的版本是不一样的)
为什么要使用 vue-cli Vue CLI 致力于将 Vue 生态中的工具基础标准化.它确保了各种构建工具能够基于智能的默认配置即可平稳衔接,这样你可以专注在撰写应用上,而不必花好几天去纠结配置的问 ...
- 毕大从自身设计HSF的角度出发谈服务化这回事
服务化的过去.现在和未来 原创: bluedavy HelloJava 9月18日 服务化毫无疑问是技术圈一直火热的buzzword,而且其实已经非常多年了,这在日益更新的技术圈还挺神奇的,作为在服 ...
- Azure Service Bus(三)在 .NET Core Web 应用程序发送ServiceBus Queue
一,引言 在之前上一篇讲解到 Azure ServiceBus Queue 中,我们实地的演示了在控制台中如何操作ServiceBus Queue ,使用 Azure.Messgae.Service ...
- APP逆向案例---x会app
步骤一 抓个包 其中m_d,m_e为加密参数 步骤二(已经看了是360加固我们脱壳一下) # Author: hluwa <hluwa888@gmail.com> # HomePage: ...
