精华内容
下载资源
问答
  • 《混沌时间序列的小 波神经网络预测方法及其优化研究》主要研究成果与 创新点分述 如下: (1)用混沌理论及其分析方法对非线性时间序 列进行了研 究,为混沌时间序列的短期预测性提供了理论基础。 并以上证综 合...
  • BP神经网络进行回归预测分析,从表格中读取数据,进行时间序列分析的预测回归
  • 神经网络时间序列分析中的应用,余元超,魏娜,时间序列分析是通过建立数学模型来刻画数据间的内在联系,而多层神经网络又可以任意精度逼近任何非线性函数,本文研究的主要内容
  • 时间序列模型和神经网络模型在股票预测中的分析
  • 该方案是通过包含隐藏层的人工神经网络来实现的。 作为训练算法,我们使用比例共轭梯度(SCG)方法和贝叶斯正则化(BReg)方法。 第一种方法适用于无噪声的时间序列,而第二种方法也适用于嘈杂的数据集。 我们将...
  • 长短期记忆神经网络用于空调系统故障时间序列分析.pdf
  • 基于小波与BP神经网络的太阳黑子时间序列分析预测.pdf
  • 从复杂系统的历史故障数据出发,提出了一种基于...通过与多种典型时间序列预测模型的实验对比,验证了所提出的LSTM预测模型及其参数优选算法在故障时间序列分析中具有很强的适用性和更高的准确性。 知网论文,学习使用
  • 北京大学内部的金融时间序列讲义,很经典的金融时间序列资料。是基于R语言讲述的,体系特别完整。做LSTM,RNN等神经网络模型时可以参考。
  • matlab动态神经网络进行时间序列预测分析

    万次阅读 多人点赞 2018-02-25 10:45:02
    matlab动态神经网络进行时间序列预测分析 时间序列预测问题分类 有y,无x,即y(t)=f(y(t−1),y(t−2),...)y(t)=f(y(t−1),y(t−2),...)y(t)=f(y(t-1),y(t-2),...)(NAR) 有x,有y,即y(t)=f(x(t−1),x(t−2),......

    matlab动态神经网络进行时间序列预测分析

    时间序列预测问题分类

    • 有y,无x,即 y(t)=f(y(t1),y(t2),...) y ( t ) = f ( y ( t − 1 ) , y ( t − 2 ) , . . . ) (NAR)
    • 有x,有y,即 y(t)=f(x(t1),x(t2),...,y(t1),y(t2),...) y ( t ) = f ( x ( t − 1 ) , x ( t − 2 ) , . . . , y ( t − 1 ) , y ( t − 2 ) , . . . ) (NARX)
    • 有x,无y,即 y(t)=f(x(t1),x(t2),... y ( t ) = f ( x ( t − 1 ) , x ( t − 2 ) , . . . (比较少见)

    matlab中的动态神经网络

    • matlab中有narnet、narxnet等函数可以用于时间序列的预测分析,下面主要对narnet尽心说明
    • narnet需要设置当前值依赖过去值的个数k,即依赖多少个过去的值,同时还需要设置隐含层节点的个数,搭建之后就可以进行构建模型了
    • 预测的时候,需要首先给出预测初始时刻的前k个值,因为当前值是由前k个值决定的,将此作为输入,就可以依次给出后面的预测值。

    代码

    %%
    clc,clear,close all
    t = -5:.01:5;
    pressure = sin(10*t)';
    figure
    plot( pressure )
    %% 训练集与测试集的个数
    num_all_data = length( pressure );
    % 前75%的数据作为训练数据
    num_train = floor( num_all_data * 0.75 );
    % 后25%的数据作为测试数据
    num_test = num_all_data - num_train;
    % 转化为narnet需要的序列数据
    y_train_nn = num2cell( pressure(1:num_train) )';
    y_test_nn = num2cell( pressure(1+num_train:end))';
    %% 延迟,即当前值依赖于过去的多少个值
    feedback_delays = 1:10;
    % 隐含层节点的个数
    num_hd_neuron = 10;
    % narnet构建
    net = narnet(feedback_delays, num_hd_neuron);
    [Xs,Xi,Ai,Ts] = preparets(net,{},{}, y_train_nn);
    net = train(net,Xs,Ts,Xi,Ai);
    view(net)
    Y = net(Xs,Xi);
    perf = perform(net,Ts,Y);
    fprintf( 'neural network: mse on training set : %.6f\n', perf );
    %% 神经网络进行进行预测
    yini = y_train_nn(end-max(feedback_delays)+1:end);
    [Xs,Xi,Ai] = preparets(net,{},{},[yini y_test_nn]);
    y_pred_nn = net(Xs,Xi,Ai)';
    y_pred_nn = cell2mat( y_pred_nn );
    y_test_nn = cell2mat( y_test_nn )';
    
    %% 画图,计算mse
    figure
    title('NARNET预测')
    hold on
    plot( y_test_nn, 'r', 'linewidth', 2 );
    plot( y_pred_nn, 'b--', 'linewidth', 2 );
    legend({ '真实值', '神经网络预测值'})
    nn_per_error = mean(abs(y_pred_nn-y_test_nn) ./ y_test_nn);
    nn_mse_error = mean( (y_pred_nn - y_test_nn).^2 );
    fprintf('nn model: relative error on test set: %.6f\n', nn_per_error);
    fprintf('nn model: mse on test set: %.6f\n', nn_mse_error);
    

    结果

    这里写图片描述

    这里写图片描述

    参考链接

    展开全文
  • 基于时间序列神经网络的山核桃化学成分分析.pdf
  • 将合作企业生产的迷你型洗衣机近4年销售数据和影响销售的关联因素作为训练样本,先建立时间序列回归模型和BP神经网络模型对洗衣机销量进行预测,然后建立遗传算法优化的灰色神经预测模型。通过对三种模型预测结果的...
  • 在利用神经网络分析时间序列预测方法的基础上,用方差分析的统计方法确定样本序列的长度,从而有效地确定神经网络输入层节点数。对太阳黑子年平均活动序列进行了训练和预测,并从网络本身的内在制约因素出发比较了小...
  • 在本研究中,旨在比较人工神经网络的可用性和使用传统的时间序列分析方法以及使用 Box-Jenkins 方法与使用人工神经网络获得的结果来估计长期外国游客人数。 . 为了找到合适的方法,使用了时间序列的统计和理论基础...
  • 【项目实战】基于Python实现时间序列分析建模(ARIMA模型)项目实战 内容包括: 资料说明:包括数据集+源代码+PDF文档说明+代码视频讲解。 资料内容包括: 1)项目背景; 2)数据收集; 3)数预处理; 4)RBF神经网络...
  • 提出一种经验模式分解和时间序列分析网络流量预测方法. 首先, 对网络流量时间序列进行经验模式分解, 产生高低频分量和余量; 然后, 对各分量进行时间序列分析, 确保高频分量采用改进和声搜索算法优化的最小二乘支持...
  • 利用小波神经网络时间序列进行分析,并对交通流量进行预测
  • 依据神经网络建模的原理,提出了一种基于神经网络时间序列预测方法,并通过在山东枣庄矿业集团公司柴里煤矿进行的预测分析,验证了预测方法的有效性。为解决煤炭自燃的预测提供了一条良好的思路和方法,具有较大的理论...
  • 基于小波分析神经网络的金融时间序列预测.pdf
  • 采用BP网络对不平稳时间序列进行数据拟合,处理趋势部分,利用ARMA模型处理随机部分。结合累进算法,对浙江某新建隧道围岩压力进行时间序列预测。结果表明该方法具有较高的预测精度,最大相对误差为3.73%,能够应用...
  • 多变量LSTM当前神经网络用于多变量时间序列的预测和解释 郭,田,陶林和Nino Antulov-Fantulin。 “在多变量数据上探索可解释的LSTM神经网络。” 国际机器学习会议(ICML)。 2019。 郭涛,林涛,卢Y.自回归外生...
  • 基于关联变量时滞分析卷积神经网络的生产过程时间序列预测方法.pdf
  • 一种多趋势时间序列预测的神经网络模型 参考文献 《一种多趋势时间序列预测的神经网络模型,彭相洲,陈雨》 一、引言 时间序列数据无处不在。用户通常期望从历史的时间数据中预测出新的趋势。例如,对近期股票数据...

    一种多趋势时间序列预测的神经网络模型

    参考文献
    《一种多趋势时间序列预测的神经网络模型,彭相洲,陈雨》

    一、引言

    时间序列数据无处不在。用户通常期望从历史的时间数据中预测出新的趋势。例如,对近期股票数据的观测,期望预测未来股价的走势,从而获得更好的收益。然而提取时间序列的自相关趋势、互相关趋势、短期趋势、长期趋势、线性趋势以及非线性趋势等各种趋势是时间序列预测的难点。

    机器学习中,人们希望模型从历史数据中学习其中蕴涵的趋势,并应用于预测。早期的时间序列预测模型主要包括整合移动平均自回归模型、向量自回归模型、支持向量回归机、朴素循环神经网络等。整合移动平均自回归模型是单变量时间序列预测中杰出的统计学模型之一,良好的统计特性使它得到了广泛的研究。在多元时间序列领域中,向量自回归模型是一种更为常见的模型,然而该模型在数据量比较小时容易过拟合。支持向量回归机把时间序列预测问题看做是具有时变参数的回归问题。然而这些基于机器学习的模型通常假定时间序列数据服从某种概率分布或是具体的函数形式,而这些具有具体表达式的机器学习模型通常无法捕获数据背后潜在的复杂非线性趋势,为此本文利用深度学习研究的最新进展提出了一种新的时间序列预测模型,以更好地提取时间序列的非线性趋势。

    在时间序列预测方面,深度神经网络也有很多成功的应用,LSTM是最为著名的神经网络模型之一,但是在超长的记忆情况下LSTM模型存在梯度减弱的问题,从而不能更好地捕获到时间序列数据的超长期趋势。为了克服这种问题,Lai等人提出一种带有跳接记忆的LSTNetSkip模型。然而某些时间序列数据的自相关性以及数据之间的互相性比较强,先进的神经网络模型更多注重数据的非线性趋势,并没有过多地关注数据的相关性。为了提取数据的相关特征,本文提出的模型(DCLSTNet)引入了一种新颖的双重卷积法,充分地提取时间序列数据的局部趋势,即通过纵向卷积提取变量的自相关特征,横向卷积提取变量间的互相关特征,然后使用循环神经网络(RNNGRU)提取时间序列数据的长短期趋势。此外,为了捕获时间序列数据的超长期趋势,DCLSTNet引进了LSTNetSkip模型提出的跳接记忆循环神经网络,最后,DCLSTNet叠加了线性自回归模型(VAR)以提升模型的健壮性。

    二、模型架构

    1、模型介绍

    DCLSTNet模型组合了非线性神经网络模型和线性自回归模型,如图所示,上分支表示非线性神经神经网络模型。首先,使用多张列向量组成的卷积核,沿着时间轴方向对数据进行纵向卷积,得到多张二维卷积特征图,之后把多张特征图组合成一张二维特征图。这一操作可以理解为提取时间序列数据的自相关特征。其次,使用多张宽度等于时间数据特征数的卷积核,沿着时间轴的方向对上一步操作得到的特征图进行横向卷积。这一操作可以理解为提取时间序列数据变量间的互相关特征。然后,把横向卷积得到的多张向量特征图送入GRU循环神经网络,提取时间序列数据的长短期趋势,并跳接GRU神经网络的历史记忆,解决了GRU神经网络梯度减弱的问题,从而提取时间序列数据的超长期趋势。下分支表示线性自回归(VAR)模型,用来捕获数据中的线性趋势。最后,将上下分支预测的结果相加得到预测的最终结果。

    在这里插入图片描述

    2、问题引入

    在股价预测任务中,给定一支股票相关的历史数据Y={y(1),y(2),…,y(T)},n是变量的维度,其中y(t)代表t时刻股价的相关数据,它是一个(1×n)的行向量,向量中的每一个数据代表一个特征。本文的目标是预测未来某个时刻股票的价格。即为了预测y(T+h),T+h表示T时刻之后h时间单位,本文假定{y(1),y(2),…,y(T)}是已知的。同理,如果要预测h下一个时间戳y(T+h+1)的股价,则假定{y(1),y(2),…,y(T),y(T+1)}是已知。因此设定在T时刻输入变量组成的二维矩阵如下定义:XT={y(1),y(2),…,y(T)}∈Rn×T,其中XT的维度是n×T。大多数情况下,未来时刻h根据预测任务而定,如果预测当前时刻之后的第一时刻股价则h选为1,预测当前时刻之后的第二时刻股价则h选为2,通常预测的时间跨度h越大,预测任务越困难。

    3、纵向卷积层

    DCLSTNet模型的第一层是纵向卷积神经网络(不包含池化操作),纵向卷积操作的目的是提取变量自身的自相关特征。纵向卷积层使用多个维度为w×1的卷积核(w代表卷积核的高度)。第k个卷积核扫过矩阵Xt得到

    在这里插入图片描述

    之后把得到的多张二维特征图xk线性加权组合成一张二维特征图。

    在这里插入图片描述

    其中:∗表示卷积操作;xk代表纵向卷积得到的二维特征图;ReLU表示激活函数,定义为ReLU(x)=max(0,x);Nc代表纵向卷积核的数量;xk(i,j)表示第k张特征图在第i行第j列位置的数值;Zt(i,j)代表合并之后的特征图在第i行第j列位置的数值。

    4、横向卷积层

    横向卷积神经网络(不包含池化操作)的目的是提取变量之间的互相关特征。横向卷积层使用多个维度为w×n的卷积核(其中:n代表卷积核的宽度,也等于时间序列数据特征的数目;w代表卷积核的高度)。第k个卷积核扫过矩阵Xt得到

    在这里插入图片描述

    其中:∗表示卷积操作;卷积输出hk是一维向量;ReLU表示激活函数,定义如下:ReLU(x)=max(0,x)。为了使卷积得到的每一个hk的长度为T,当hk<T时,则在hk的左边填充0使其长度为T,卷积层输出一个大小为dc×T的矩阵,dc等于横向卷积核的数量。

    5、循环层

    横向卷积层的输出作为循环神经网络和跳接记忆循环神经网络的输入,以提取时间序列的长短期趋势和超长期趋势。本文使用门控循环体(GRU)作为循环神经网络的循环体,并使用ReLU激活函数作为隐藏层的激活函数。在t时刻,隐藏层的计算公式为

    在这里插入图片描述

    其中:☉表示矩阵点乘;σ表示sigmoid激活函数;xt表示t时刻当前层的输入,当前层输出是前t-T个时刻循环神经网络的记忆{h(t-T),…,h(t-1),h(t)}。

    6、跳接记忆循环层

    循环神经网络可以通过历史的记忆捕获到数据中蕴涵的长期趋势。而在反向传播的过程中,由GRU或LSTM循环体构成的循环神经网络,超长的记忆将导致梯度减弱,从而无法捕获到数据中的超长期趋势。为了克服这个缺点,本文引用了LSTNetSkip模型中提出的跳接记忆循环神经网络,从而扩大了信息流动的范围,使得循环神经网络可以设计得更长,记忆的信息更多,而不用担心梯度减弱的问题,可以捕获时间序列中的超长期趋势。跳接循环层的更新公式为

    在这里插入图片描述

    其中:p代表循环神经网络记忆跳过的数量,p的大小通常根据数据的周期进行选取,本文所用数据集的周期大致等于24,因此指定p=24,在实验过程中发现一个合适的p可以大幅提升模型的表现效果;☉表示矩阵点乘;σ表示sigmoid激活函数;xt是横向卷积层的输出,当前层的输出是前t-p个时刻循环神经网络的记忆{h(t-p+1),h(t-p+2),…,h(t)}。

    将循环神经网络最后时刻的记忆hR(t)和跳接循环神经网络t-p个时刻的记忆{hS(t-p),hS(t-p+1),…,hS(t)}全连接,得到模型上分支的输出hD(t):

    在这里插入图片描述

    7、线性自回归

    输入数据的变化不能及时反映到输出是非线性神经网络的一个缺点,特别是在一些周期不明显的时间序列中,当输入数据的周期发生变化时,模型不能及时捕获到周期变化的趋势,从而导致预测准确率的降低。由于线性模型对输入数据变化十分敏感,本文模型在非线性网络的基础上叠加了线性模型。本文使用经典的自回归模型(VAR),线性部分输出hL(t)为

    在这里插入图片描述

    其中:win表示VAR模型的窗口;Wk代表VAR模型的权值;yk代表k时刻预测目标的真实值。

    最后,DCLSTNet模型整合了线性(VAR模型)和非线性(深度神经网络模型)模型的输出。在t时刻模型的预测结果Y^t为

    在这里插入图片描述

    8、优化的目标函数

    对于大多数预测任务,均方误差是默认的目标函数,对应的优化函数为

    在这里插入图片描述

    其中:θ表示模型的参数集合;Ωtrain表示训练集时间戳集合;‖·‖F表示求范数;h表示当前时刻之后的h时刻。

    9、优化策略

    DCLSTNet模型的优化策略与传统的时间序列模型相同。假定给定一系列历史数据Yt={y(1),y(2),…,y(t)}和h,定义在t时刻模型的输入为Xt={y(t-h),y(t-h+1),…,y(t)},此时预测任务就变成了一个给定特征和目标{Xt,Yt+h}的回归任务,可以采取随机梯度下降(SGD)或者Adam优化器对目标函数进行优化。

    展开全文
  • NeuralProphet是一个python库,用于基于神经网络时间序列数据进行建模。 它建立在PyTorch之上,并受到Facebook Prophet和AR-Net库的极大启发。 NeuralProphet 和 Prophet对比 从库名称中,您可能会问Facebook的...

    NeuralProphet是一个python库,用于基于神经网络对时间序列数据进行建模。 它建立在PyTorch之上,并受到Facebook Prophet和AR-Net库的极大启发。

    NeuralProphet 和 Prophet对比

    从库名称中,您可能会问Facebook的Prophet库和NeuralProphet之间的主要区别是什么。 根据NeuralProphet的文档,增加的功能是[1]:

    • 使用PyTorch的Gradient Descent进行优化,使建模过程比Prophet快得多
    • 使用AR-Net建模时间序列自相关(也称为序列相关)
    • 自定义损失和指标
    • 具有前馈神经网络的可配置非线性层,
    • 等等

    项目维护者

    基于该项目的GitHub页面,该项目的主要维护者是斯坦福大学的Oskar Triebe,Facebook和莫纳什大学的合作。

    安装

    该项目处于测试阶段,因此,如果您要在生产环境中使用此库,我建议您谨慎使用。

    不幸的是,在撰写本文时,该库没有pip或conda软件包。 只能通过克隆存储库并运行pip install。来安装它。但是,如果要在Jupyter Notebook环境中使用该软件包,则应安装其实时版本pip install . 这将提供更多功能,例如使用plot_live_loss()实时训练和验证损失。

    git clone https://github.com/ourownstory/neural_prophet 
    cd neural_prophet 
    pip install .[live]
    

    我建议创建一个新环境(conda或venv),并从新环境安装NeuralProphet软件包,让安装程序处理所有依赖项(它具有Pandas,Jupyter Notebook,PyTorch作为依赖项)。

    现在我们已经安装了软件包,让我们开始吧!

    案例分析实践

    在这里,我使用在Kaggle上的2013年至2017年德里的每日气候数据。 首先,让我们导入主要包。

    import pandas as pd 
    from neuralprophet import NeuralProphet
    

    然后,我们可以将数据读取到Panda DataFrame中。 NeuralProphet对象期望时间序列数据具有一个名为ds的日期列,而我们希望将其预测为y。

    # Data is from https://www.kaggle.com/sumanthvrao/daily-climate-time-series-data 
    df = pd.read_csv("./DailyDelhiClimateTrain.csv", parse_dates=["date"]) 
    df = df[["date", "meantemp"]] 
    df.rename(columns={"date": "ds", "meantemp": "y"}, inplace=True)
    

    现在,让我们初始化模型,为NeuralProphet对象定义的所有默认参数,包括有关某些参数的其他信息。 这些是您可以在模型中配置的超参数。 当然,如果您打算使用默认变量,则只需执行model = NeuralProphet()。

    # model = NeuralProphet() if you're using default variables below.
    model = NeuralProphet(
        growth="linear",  # Determine trend types: 'linear', 'discontinuous', 'off'
        changepoints=None, # list of dates that may include change points (None -> automatic )
        n_changepoints=5,
        changepoints_range=0.8,
        trend_reg=0,
        trend_reg_threshold=False,
        yearly_seasonality="auto",
        weekly_seasonality="auto",
        daily_seasonality="auto",
        seasonality_mode="additive",
        seasonality_reg=0,
        n_forecasts=1,
        n_lags=0,
        num_hidden_layers=0,
        d_hidden=None,     # Dimension of hidden layers of AR-Net
        ar_sparsity=None,  # Sparcity in the AR coefficients
        learning_rate=None,
        epochs=40,
        loss_func="Huber",
        normalize="auto",  # Type of normalization ('minmax', 'standardize', 'soft', 'off')
        impute_missing=True,
        log_level=None, # Determines the logging level of the logger object
    )
    

    配置模型及其超参数后,我们需要训练模型并进行预测。 让我们对温度进行一年的预测。

    metrics = model.fit(df, validate_each_epoch=True, freq="D") 
    future = model.make_future_dataframe(df, periods=365, n_historic_predictions=len(df)) 
    forecast = model.predict(future)
    

    您可以通过调用model.plot(forecast)来简单地绘制预测,如下所示:

    fig, ax = plt.subplots(figsize=(14, 10)) 
    model.plot(forecast, xlabel="Date", ylabel="Temp", ax=ax)
    ax.set_title("Mean Temperature in Delhi", fontsize=28, fontweight="bold")
    

    上面显示了一年的预测图,其中从2017-01-01到2018-01-01之间的时间段是预测。 可以看出,预测图类似于历史时间序列。 它既捕获了季节性,又捕获了线性趋势的缓慢增长。

    也可以通过调用model.plot_parameters()来绘制参数。

    使用平均绝对误差(MAE)的模型损失如下图所示。 您也可以使用“平滑的L1损失”功能。

    fig, ax = plt.subplots(figsize=(14, 10))
    ax.plot(metrics["MAE"], 'ob', linewidth=6, label="Training Loss")  
    ax.plot(metrics["MAE_val"], '-r', linewidth=2, label="Validation Loss")
    # You can use metrics["SmoothL1Loss"] and metrics["SmoothL1Loss_val"] too.
    

    总结

    在本文中,我们讨论了NeuralProphet,这是一个基于神经网络对时间序列进行建模的python库。 该库使用PyTorch作为后端。 作为案例研究,我们为德里的每日气候时间序列数据创建了一个预测模型,并进行了一年的预测。 使用此库的一个优点是其语法与Facebook的Prophet库类似。

    您可以在GitHub上找到此博客文章的Jupyter笔记本。谢谢阅读!

    https://github.com/e-alizadeh/medium/blob/master/notebooks/NeuralProphet/neural_prophet.ipynb

    参考文献

    [1] NeuralProphet

    [2] O. J. Triebe et al, AR-Net: A Simple Auto-Regressive Neural Network For Time-Series, (2019)

    [3] https://facebook.github.io/prophet/

    [4] https://github.com/ourownstory/AR-Net

    作者:Esmaeil Alizadeh

    deephub翻译组

    展开全文
  • 基于MATLAB,用神经网络对已有数据进行时间序列分析、建模、预测。内含视频教学,有数据可供练习。(教程缺乏预测部分,但是网上有简单的教学,一查就可以查到)主要可用于数学建模,美赛国赛均可。
  • 金融时间序列分析

    2018-03-17 21:58:30
    特别是包含当前的研究热点,如风险值、高频数据分析和马尔町夫链蒙特卡罗方法等。主要内容包括:金融时间序列数据的基本...本书可作为金融等专业高年级本科生或研究生的时间序列分析教材,也可供相关专业研究人员参考
  • 以此为出发点,通过对单时间序列特点的分析,构造了基于单时间序列神经网络预测模型,并以渝黔高速公路某边坡位移实际监测数据为例进行了计算。研究结果表明,通过挖掘边坡位移序列中的隐含信息,运用单时间序列BP...
  • 本研究提出了一种将小波与人工神经网络(ANN)相结合的新混合模型,称为小波神经网络(WNN)模型,并将其应用于河流流量的时间序列建模。 通过WNN模型分析了Malaprabha流域(印度卡纳塔克邦)的每日河流流量的时间...
  • 时间序列数据的首选神经网络

    万次阅读 2017-07-16 19:54:49
    本文简单介绍循环神经网络RNN的发展过程,分析了梯度下降算法、反向传播及LSTM过程。 随着科学技术的发展以及硬件计算能力的大幅提升,人工智能已经从几十年的幕后工作一下子跃入人们眼帘。人工智能的背后...
    本文简单介绍循环神经网络RNN的发展过程,分析了梯度下降算法、反向传播及LSTM过程。

    随着科学技术的发展以及硬件计算能力的大幅提升,人工智能已经从几十年的幕后工作一下子跃入人们眼帘。人工智能的背后源自于大数据、高性能的硬件与优秀的算法的支持。2016年,深度学习已成为Google搜索的热词,随着最近一两年的围棋人机大战中,阿法狗完胜世界冠军后,人们感觉到再也无法抵挡住AI的车轮的快速驶来。在2017年这一年中,AI已经突破天际,相关产品也出现在人们的生活中,比如智能机器人、无人驾驶以及语音搜索等。最近,世界智能大会在天津举办成功,大会上许多业内行家及企业家发表自己对未来的看法,可以了解到,大多数的科技公司及研究机构都非常看好人工智能的前景,比如百度公司将自己的全部身家压在人工智能上,不管破釜沉舟后是一举成名还是一败涂地,只要不是一无所获就行。为什么突然之间深度学习会有这么大的效应与热潮呢?这是因为科技改变生活,很多的职业可能在今后的时间里慢慢被人工智能所取代。全民都在热议人工智能与深度学习,就连Yann LeCun大牛都感受到了人工智能在中国的火热!

    时间序列数据的首选神经网络时间序列数据的首选神经网络

    言归正传,人工智能的背后是大数据、优秀的算法以及强大运算能力的硬件支持。比如,英伟达公司凭借自己的强大的硬件研发能力以及对深度学习框架的支持夺得世全球最聪明的五十家公司榜首。另外优秀的深度学习算法有很多,时不时就会出现一个新的算法,真是令人眼花缭乱。但大多都是基于经典的算法改进而来,比如卷积神经网络(CNN)、深度信念网络(DBN)、循环神经网络(RNN)等等。

    本文将介绍经典的网络之循环神经网络(RNN),这一网络也是时序数据的首选网络。当涉及某些顺序机器学习任务时,RNN可以达到很高的精度,没有其他算法可以与之一较高下。这是由于传统的神经网络只是具有一种短期记忆,而RNN具有有限的短期记忆的优势。然而,第一代RNNs网络并没有引起人们着重的注意,这是由于研究人员在利用反向传播和梯度下降算法过程中遭受到了严重的梯度消失问题,阻碍了RNN几十年的发展。最后,于90年代后期出现了重大突破,导致更加准确的新一代RNN的问世。基于这一突破的近二十年,直到Google Voice Search和Apple Siri等应用程序开始抢夺其关键流程,开发人员完善和优化了新一代的RNN。现在,RNN网络遍布各个研究领域,并且正在帮助点燃人工智能的复兴之火。

    与过去有关的神经网络(RNN)

    时间序列数据的首选神经网络时间序列数据的首选神经网络

    大多数人造神经网络,如前馈神经网络,都没有记忆它们刚刚收到的输入。例如,如果提供前馈神经网络的字符“WISDOM”,当它到达字符“D”时,它已经忘记了它刚刚读过字符“S”,这是一个大问题。无论训练该网络是多么的辛苦,总是很难猜出下一个最有可能的字符“O”。这使得它成为某些任务的一个相当无用的候选人,例如在语音识别中,识别的好坏在很大程度上受益于预测下一个字符的能力。另一方面,RNN网络确实记住了之前的输入,但是处于一个非常复杂的水平。

    我们再次输入“WISDOM”,并将其应用到一个复发性网络中。RNN网络中的单元或人造神经元在接收到“D”时也将其之前接收到的字符“S”作为其输入。换句话说,就是把刚刚过去的事情联合现在的事情作为输入,来预测接下来会发生的事情,这给了它有限的短期记忆的优势。当训练时,提供足够的背景下,可以猜测下一个字符最有可能是“O”。

    调整和重新调整

    像所有人工神经网络一样,RNN的单元为其多个输入分配一个权重矩阵,这些权重代表各个输入在网络层中所占的比重;然后对这些权重应用一个函数来确定单个输出,这个函数一般被称为损失函数(代价函数),限定实际输出与目标输出之间的误差。然而,循环神经网络不仅对当前输入分配权重,而且还从对过去时刻输入分配权重。然后,通过使得损失函数最下来动态的调整分配给当前输入和过去输入的权重,这个过程涉及到两个关键概念:梯度下降和反向传播(BPTT)。

    梯度下降

    机器学习中最著名的算法之一就是梯度下降算法。它的主要优点在于它显着的回避了“维数灾难”。什么是“维数灾难”呢,就是说在涉及到向量的计算问题中,随着维数的增加,计算量会呈指数倍增长。这个问题困扰着诸多神经网络系统,因为太多的变量需要计算来达到最小的损失函数。然而,梯度下降算法通过放大多维误差或代价函数的局部最小值来打破维数灾难。这有助于系统调整分配给各个单元的权重值,以使网络变得更加精确。

    通过时间的反向传播

    RNN通过反向推理微调其权重来训练其单元。简单的说,就是根据单元计算出的总输出与目标输出之间的误差,从网络的最终输出端反向逐层回归,利用损失函数的偏导调整每个单元的权重。这就是著名的BP算法,关于BP算法可以看本博主之前的相关博客。而RNN网络使用的是类似的一个版本,称为通过时间的反向传播(BPTT)。该版本扩展了调整过程,包括负责前一时刻(T-1)输入值对应的每个单元的记忆的权重。

    Yikes:梯度消失问题

    时间序列数据的首选神经网络时间序列数据的首选神经网络

    尽管在梯度下降算法和BPTT的帮助下享有一些初步的成功,但是许多人造神经网络(包括第一代RNNs网络),最终都遭受了严重的挫折——梯度消失问题。什么是梯度消失问题呢,其基本思想其实很简单。首先,来看一个梯度的概念,将梯度视为斜率。在训练深层神经网络的背景中,梯度值越大代表坡度越陡峭,系统能够越快地下滑到终点线并完成训练。但这也是研究者陷入困境的地方——当斜坡太平坦时,无法进行快速的训练。这对于深层网络中的第一层而言特别关键,因为若第一层的梯度值为零,说明没有了调整方向,无法调整相关的权重值来最下化损失函数,这一现象就是“消梯度失”。随着梯度越来越小,训练时间也会越来越长,类似于物理学中的沿直线运动,光滑表面,小球会一直运动下去。

    时间序列数据的首选神经网络时间序列数据的首选神经网络

    大的突破:长短期记忆(LSTM)

    在九十年代后期,一个重大的突破解决了上述梯度消失问题,给RNN网络发展带来了第二次研究热潮。这种大突破的中心思想是引入了单元长短期记忆(LSTM)。

    时间序列数据的首选神经网络时间序列数据的首选神经网络

    LSTM的引入给AI领域创造了一个不同的世界。这是由于这些新单元或人造神经元(如RNN的标准短期记忆单元)从一开始就记住了它们的输入。然而,与标准的RNN单元不同,LSTM可以挂载在它们的存储器上,这些存储器具有类似于常规计算机中的存储器寄存器的读/写属性。另外LSTM是模拟的,而不是数字,使得它们的特征可以区分。换句话说,它们的曲线是连续的,可以找到它们的斜坡的陡度。因此,LSTM特别适合于反向传播和梯度下降中所涉及的偏微积分。

    时间序列数据的首选神经网络时间序列数据的首选神经网络

    总而言之,LSTM不仅可以调整其权重,还可以根据训练的梯度来保留、删除、转换和控制其存储数据的流入和流出。最重要的是,LSTM可以长时间保存重要的错误信息,以使梯度相对陡峭,从而网络的训练时间相对较短。这解决了梯度消失的问题,并大大提高了当今基于LSTM的RNN网络的准确性。由于RNN架构的显著改进,谷歌、苹果及许多其他先进的公司现在正在使用RNN为其业务中心的应用提供推动力。

    总结

    循环神经网络(RNN)可以记住其以前的输入,当涉及到连续的、与上下文相关的任务(如语音识别)时,它比其他人造神经网络具有更大的优势。
    关于RNN网络的发展历程:第一代RNNs通过反向传播和梯度下降算法达到了纠正错误的能力。但梯度消失问题阻止了RNN的发展;直到1997年,引入了一个基于LSTM的架构后,取得了大的突破。
    新的方法有效地将RNN网络中的每个单元转变成一个模拟计算机,大大提高了网络精度。
    作者信息
    Jason Roell:软件工程师,热爱深度学习及其可改变技术的应用。
    Linkedin:http://www.linkedin.com/in/jason-roell-47830817/
    本文由北邮@爱可可-爱生活老师推荐,阿里云云栖社区组织翻译。

    本文地址: http://www.linuxprobe.com/time-net.html

    展开全文
  • 具有缺失值的多元时间序列的递归神经网络 题目: 具有缺失值的多元时间序列的递归神经网络 作者: Ben D. Fulcher 来源: Machine Learning (cs.LG) Submitted on 6 Jun 2016 文档链接: arXiv:1606.01865 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,802
精华内容 14,320
关键字:

时间序列分析的神经网络