精华内容
下载资源
问答
  • lstm模型的优缺点
    千次阅读
    2021-12-08 15:05:56

            BiLSTM是Bi-directional Long Short-Term Memory的缩写,是由前向LSTM与后向LSTM组合而成。LSTM模型是由在RNN基础上增加了输入门,遗忘门,单元状态,输出门组成。在网络训练过程中,可通过门结构来添加或移除信息,不同神经网络都可通过单元状态上的门结构来决定去记住或遗忘哪些相关信息。

            LSTM的计算过程可以概括为,通过对细胞状态中信息遗忘和记忆新的信息使得对后续时刻计算有用的信息得以传递,而无用的信息被丢弃,并在每个时间步都会输出隐层状态,其中遗忘,记忆与输出由通过上个时刻的隐层状态和当前输入计算出来的遗忘门,记忆门,输出门来控制。

            输入门用来更新单元状态。先将先前隐藏状态的信息和当前输入的信息输入到Sigmoid函数,在0和1之间调整输出值来决定更新哪些信息,0表示不重要,1表示重要。将隐藏状态和当前输入传输给Tanh函数,并在-1和1之间压缩数值以调节网络,然后把Tanh输出和Sigmoid输出相乘,Sigmoid输出将决定在Tanh输出中哪些信息是重要的且需要进行保留。

            遗忘门能决定应丢弃或保留哪些信息。来自隐藏状态的信息和当前输入的信息同时输入到Sigmoid函数,输出值处于0和1之间,越接近0意味着越应该忘记,越接近1意味着越应该保留。

            单元状态是能传输相关信息的通路,让信息在序列链中传递下去,这部分可看作是网络的“记忆”。在序列处理过程中,单元状态能一直携带着相关信息。在较早时间步中获得的信息也能传输到较后时间步的单元中,减弱短期记忆的影响。

            输出门能决定下个隐藏状态的值,隐藏状态中包含了先前输入的相关信息。隐藏状态也可用于预测。首先把先前的隐藏状态和当前输入传递给Sigmoid函数;接着把新得到的单元状态传递给Tanh函数;然后把Tanh输出和Sigmoid输出相乘,以确定隐藏状态应携带的信息;最后把隐藏状态作为当前单元输出,把新的单元状态和新的隐藏状态传输给下个时间步。

    BILSTM优点:

            LSTM模型是由在RNN基础上增加了门机制和记忆单元,有效的防止了梯度爆炸和梯度消失,同时更好的捕捉到较长距离的依赖,使用BILSTM可以捕捉到双向的语义依赖。

    资料收集于网络资源。

    更多相关内容
  • 时间序列lstmAn LSTM (or long-short term memory network) is a neural network that accounts for dependencies across observations in a time series. As such, they are commonly used for forecasting ...

    lstm优点缺点

    This post was last updated on August 19th 2020

    此帖最后更新于2020年8月19日

    An LSTM (or long-short term memory network) is a neural network that accounts for dependencies across observations in a time series. As such, they are commonly used for forecasting purposes.

    LSTM(或长期短期记忆网络)是一个神经网络,负责计算时间序列中各个观测值之间的依赖性。 因此,它们通常用于预测目的。

    In my experience, ARIMA tends to forecast more accurate results on data where there is a clear trend in the series, whereas LSTM tends to do better on volatile time series with more of a stationary component.

    以我的经验,ARIMA倾向于在序列趋势明显的情况下,对数据预测更准确的结果,而LSTM倾向于在具有更多固定成分的不稳定时间序列上做得更好。

    Let’s see how LSTM fares when it comes to forecasting air passenger numbers. The data is sourced from San Francisco Open Data: Air Traffic Passenger Statistics. The below analysis uses a previous example from Machine Learning Mastery as a template in using LSTM models to analyse air passenger data.

    让我们看看LSTM在预测航空乘客人数方面的表现。 该数据来自“旧金山开放数据:空中交通旅客统计” 。 下面的分析使用来自Machine Learning Mastery的先前示例作为模板,使用LSTM模型来分析航空乘客数据。

    In this example, passenger numbers for United Airlines from February 2014 — June 2020 are analysed. The specific segment of passengers analysed are enplaned, domestic, departing from Terminal 3 at Boarding Area E.

    在此示例中,分析了2014年2月至2020年6月联合航空的乘客人数。 从3号航站楼E登机区出发的经过分析的特定旅客是国内旅客。

    Here is a visual overview of the time series:

    这是时间序列的直观概述:

    We can see that the dataset shows more or less a stationary trend (where the mean, variance, and autocorrelation are constant over time), albeit with a sharp drop in the series at the end — due to an unprecedented drop in flight demand as a result of COVID-19.

    我们可以看到,数据集显示出或多或少的平稳趋势(均值,方差和自相关随时间变化是恒定的),尽管最后该系列急剧下降,这是由于航班需求空前下降。 COVID-19的结果。

    How would an LSTM have done in forecasting this before COVID-19 occurred? While it is unreasonable to expect that the model would have predicted a drop on this scale — could the model have had some predictive power in this regard?

    LSTM将如何在COVID-19发生之前进行预测? 尽管不期望模型会预测这种规模的下降是不合理的,但是模型在这方面是否具有一定的预测能力?

    建筑模型 (Model Building)

    Of the 77 months in the time series, the first 62 are selected for training and validation purposes.

    在时间序列的77个月中,前62个月被选择用于培训和验证。

    df = df[:62]

    The remaining 15 months will be used as a test set to compare the predictions — and ensure that the model is not being influenced by the latter entries in the series.

    剩下的15个月将用作测试集以比较预测-并确保该模型不受系列中后面条目的影响。

    A dataset matrix is formed whereby the time series is regressed on previous entries in the series:

    形成一个数据集矩阵,由此时间序列在该序列的先前条目上回归:

    # Form dataset matrix
    def create_dataset(df, previous=1):
    dataX, dataY = [], []
    for i in range(len(df)-previous-1):
    a = df[i:(i+previous), 0]
    dataX.append(a)
    dataY.append(df[i + previous, 0])
    return np.array(dataX), np.array(dataY)

    The data is normalized with MinMaxScaler:

    数据使用MinMaxScaler规范化:

    scaler = MinMaxScaler(feature_range=(0, 1))
    df = scaler.fit_transform(df)
    df

    The data is then split into training and validation sets. A previous parameter of 5 is defined — meaning that the series at time t is regressed against the series at time t — 5.

    然后将数据分为训练和验证集。 定义了先前的参数5-意味着将时间t的序列相对于时间t-5的序列进行回归

    # Training and Validation data partition
    train_size = int(len(df) * 0.8)
    val_size = len(df) - train_size
    train, val = df[0:train_size,:], df[train_size:len(df),:]# Number of previous
    previous = 5
    X_train, Y_train = create_dataset(train, previous)
    X_val, Y_val = create_dataset(val, previous)

    The LSTM model is then configured as follows:

    然后,将LSTM模型配置如下:

    # reshape input to be [samples, time steps, features]
    X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1]))
    X_val = np.reshape(X_val, (X_val.shape[0], 1, X_val.shape[1]))# Generate LSTM network
    model = tf.keras.Sequential()
    model.add(LSTM(4, input_shape=(1, previous)))
    model.add(Dense(1))
    model.compile(loss='mean_squared_error', optimizer='adam')
    history=model.fit(X_train, Y_train, validation_split=0.2, epochs=20, batch_size=1, verbose=2)

    输出和解释 (Output and Interpretation)

    Here is the training and validation loss:

    这是训练和验证损失:

    Image for post
    Source: Jupyter Notebook Output
    资料来源:Jupyter Notebook输出

    The root mean squared error (RMSE) is calculated across the training and validation sets as follows:

    整个训练和验证集的均方根误差(RMSE)如下计算:

    >>> # calculate RMSE
    >>> trainScore = math.sqrt(mean_squared_error(Y_train[0], >>> trainpred[:,0]))
    >>> print('Train Score: %.2f RMSE' % (trainScore))
    >>> valScore = math.sqrt(mean_squared_error(Y_val[0], valpred[:,0]))
    >>> print('Validation Score: %.2f RMSE' % (valScore))Train Score: 28315.24 RMSE
    Validation Score: 36880.52 RMSE

    With a mean of 271,588 passengers monthly across the validation set, the size of the root mean squared error accounts for just over 13% of the mean — which shows a respectable degree of accuracy.

    在整个验证集中,平均每月有271,588名乘客,均方根误差的大小仅占均值的13%以上,这显示了可观的准确性。

    Here are the training and validation predictions plotted against the actual predictions:

    以下是针对实际预测绘制的训练和验证预测:

    Image for post
    Source: Jupyter Notebook Output
    资料来源:Jupyter Notebook输出

    验证测试数据的预测 (Validate Predictions on Test Data)

    While the model has performed well in predicting validation data, the ultimate test for the LSTM is to examine whether the model can accurately predict unseen values in the time series — in particular the sharp drop in passenger numbers as a result of COVID-19.

    虽然该模型在预测验证数据方面表现良好,但是LSTM的最终测试是检查该模型是否可以准确预测时间序列中看不见的值,尤其是由于COVID-19导致的乘客人数急剧下降。

    Specifically, the previous five observations (from t-5 up to t-1) are used to predict the value at time t. e.g. passenger numbers from month 57 to month 62 are used to predict the value at month 63, and so on.

    具体来说,前五个观察值(从t-5t-1 )用于预测时间t的值。 例如,使用从第57个月到第62个月的乘客人数来预测第63个月的值,依此类推。

    The test data (Xnew) is defined as follows:

    测试数据( Xnew )定义如下:

    Xnew = np.array([tseries.iloc[57:62],tseries.iloc[58:63],tseries.iloc[59:64],tseries.iloc[60:65],tseries.iloc[61:66],tseries.iloc[62:67],tseries.iloc[63:68],tseries.iloc[64:69],tseries.iloc[65:70],tseries.iloc[66:71],tseries.iloc[67:72],tseries.iloc[68:73],tseries.iloc[69:74],tseries.iloc[70:75],tseries.iloc[71:76]])

    Predictions are then generated on the test set:

    然后在测试集上生成预测:

    Xnew = scaler.fit_transform(Xnew)
    Xnew
    Xnewformat = np.reshape(Xnew, (Xnew.shape[0], 1, Xnew.shape[1]))
    ynew=model.predict(Xnewformat)

    The RMSE is calculated as follows:

    RMSE计算如下:

    >>> mse = mean_squared_error(actualpd, ynewpd)
    >>> rmse = sqrt(mse)
    >>> print('RMSE: %f' % rmse)RMSE: 83184.960387

    The RMSE has seen a significant increase to 83,184. For the actual test set, the mean monthly passengers comes in at 263,439, with a minimum of 7,115 and a maximum of 353,409.

    RMSE显着增加到83,184。 对于实际的测试集,平均每月乘客量为263,439,最少为7,115,最多为353,409。

    Therefore, the size of the RMSE relative to the mean stands at roughly 31%. While this is clearly higher than that of the validation set — the model still does show a reasonable degree of predictive accuracy.

    因此,RMSE相对于均值的大小约为31%。 尽管这显然比验证集的要高,但是该模型仍显示出合理程度的预测准确性。

    Here is a graph of the predictions versus the actual values from the test set:

    这是预测与测试集中实际值的图表:

    Image for post
    Source: Jupyter Notebook Output
    资料来源:Jupyter Notebook输出

    We can see that while the LSTM model clearly did not forecast that passenger numbers would effectively drop to near zero — the model does show a significant drop in passenger numbers to just under 100,000. In this regard, the model has been able to incorporate previous data in forecasting a significant drop in passenger numbers on the way — even if not on the scale which has been caused by COVID-19.

    我们可以看到,尽管LSTM模型显然没有预测到旅客人数实际上将下降到接近零,但该模型的确显示出旅客人数显着下降到100,000以下。 在这方面,该模型能够将先前的数据纳入预测途中的乘客数量大幅下降的过程中,即使不是在COVID-19造成的规模上也是如此。

    局限性 (Limitations)

    One of the main limitations of forecasting a time series with an LSTM is that this model depends heavily on stepwise predictions. As we saw in our example, the previous five values were used to predict air passenger numbers at time t. Therefore, long-range forecasting with an LSTM may prove ineffective.

    用LSTM预测时间序列的主要限制之一是该模型在很大程度上取决于逐步的预测。 正如我们在示例中看到的那样,前五个值用于预测时间t处的航空乘客人数。 因此,使用LSTM进行的远程预测可能无效。

    Additionally, there is the issue of data size. An LSTM is a neural network, and like any neural network requires a large amount of data to be trained on properly. In this example, 62 months were used for training and validation purposes. However, the RMSE as measured across the test data was still sizeable.

    此外,还有数据大小的问题。 LSTM是一个神经网络,就像任何神经网络一样,需要大量数据才能对其进行正确训练。 在此示例中,将62个月用于培训和验证目的。 但是,通过测试数据测得的RMSE仍然相当大。

    The main reason LSTMs can work well with a volatile time series is that they have an inherent ability to adjust quickly to sharp changes in the trend. For instance, an ARIMA model would not have been able to adjust to the sudden drop in passenger numbers as quickly.

    LSTM可以在波动的时间序列中很好地工作的主要原因是,它们具有快速适应趋势中急剧变化的固有能力。 例如,ARIMA模型将无法尽快适应乘客人数的突然下降。

    However, the overall RMSE was still quite significant and the model ended up underestimating passenger numbers at the beginning of the test set, while overestimating them in the latter half of the test set.

    但是,总体RMSE仍然很重要,该模型在测试集开始时最终低估了乘客人数,而在测试集的后半部分则高估了他们。

    Another useful article by G. Lemus explains how LSTMs can fail if configured incorrectly.

    G. Lemus的另一篇有用的文章解释了LSTM如果配置不正确将如何失败。

    结论 (Conclusion)

    In this example, we have seen the predictive power of an LSTM when forecasting a volatile time series — in this case air passenger numbers.

    在此示例中,我们已经看到了LSTM在预测波动性时间序列时的预测能力-在这种情况下为航空旅客人数。

    However, LSTMs also come with their own limitations and these should be taken into account when conducting time series analysis.

    但是,LSTM也有其自身的局限性,在进行时间序列分析时应考虑这些局限性。

    Hope you enjoyed this article, and any questions or feedback appreciated. You can find the code and datasets for this example at the MGCodesandStats GitHub repository.

    希望您喜欢这篇文章,并希望有任何疑问或反馈。 您可以在MGCodesandStats GitHub存储库中找到此示例的代码和数据集。

    Caveat: This has been an introductory tutorial to how LSTMs can be used to conduct time series forecasting. However, the real-world implementation of these models tends to be a lot more complex, and LSTMs themselves come with quite a few limitations. Here is another article where I discuss this issue.

    警告:这是有关如何使用LSTM进行时间序列预测的入门教程。 但是,这些模型的实际实现往往要复杂得多,并且LSTM本身也有很多限制。 这是我讨论此问题的另一篇文章

    Disclaimer: This article is written on an “as is” basis and without warranty. It was written with the intention of providing an overview of data science concepts, and should not be interpreted as professional advice in any way.

    免责声明:本文按“原样”撰写,不作任何担保。 它旨在提供数据科学概念的概述,并且不应以任何方式解释为专业建议。

    翻译自: https://towardsdatascience.com/why-lstms-work-well-with-volatile-time-series-1bd2fd4ade62

    lstm优点缺点

    展开全文
  • LSTM模型介绍

    2022-07-28 11:47:36
    lstm+code

    LSTM模型

    什么是LSTM模型

    LSTM (Long Short-Term Memory)也称长短时记忆结构,它是传统RNN的变体,与经典RNN相比能够有效捕捉长序列之间的语义关联,缓解梯度消失或爆炸现象.同时LSTM的结构更复杂,它的核心结构可以分为四个部分去解析:
    ●遗忘门
    ●输入门
    ●细胞状态
    ●输出门

    LSTM的内部结构

    结构图

    在这里插入图片描述
    与RNN很类似,LSTM有两个输出,下一个时间步有三个输入

    隐藏层结构解释

    在这里插入图片描述

    遗忘门

    遗忘门部分结构图与计算公式

    遗忘门结构分析:

    ●与传统RNN的内部结构计算非常相似,首先将当前时间步输入x()与上-个时间步隐含状态h(t-1)拼接, 得到[x(t), h(t-1)],然后通过-个全连接层做变换, 最后通过sigmoid函数进行激活得到f(),我们可以将f(t)看作是门值,好比一扇门开合的大小程度,门值都将作用在通过该扇门的张量,遗忘门门值将作用的上一层的细胞状态上,代表遗忘过去的多少信息,又因为遗忘门门值是由x(t), h(t-1)计算得来的,因此整个公式意味着根据当前时间步输入和上一个时间步隐含状态h(t- 1)来决定遗忘多少上一层的细胞状态所携带的过往信息。

    激活函数的作用

    用于帮助调节流经网络的值,sigmoid函数将值压缩在0-1之间

    输出门

    输出们部分结构分析

    在这里插入图片描述
    i t i_t it代表输入, C t C_t Ct代表细胞状态

    ●输入门结构分析: :
    ●我们看到输入门的计算公式有两个,第-个就是产生输入门门值的公式, 它和遗忘门公式几乎相同,区别只是在于它们之后要作用的目标上.这个公式意味着输入信息有多少需要进行过滤.输入门的第二个公式是与传统RNN的内部结构计算相同.对于L STM来讲,它得到的是当前的细胞状态,而不是像经典RNN- -样得到的是隐含状态。

    细胞状态更新分析:

    细胞状态更新图与计算公式
    在这里插入图片描述

    ●细胞更新的结构与计算公式非常容易理解,这里没有全连接层,只是将刚刚得到的遗忘门门值与上一个时间步得到的C(t 1)相乘,再加上输入门门值与当前时间步得到的未更新C(t)相乘的结果.最终得到更新后的C()作为下一一个时间步输入的一部分.整个细胞状态更新过程就是对遗忘门和输入门的应用。

    输出门结构分析

    在这里插入图片描述
    ●输出门部分的公式也是两个,第一个即是计算输出门的门值,它和遗忘门,输入门计算方式相同.第二个即是使用这个门值产生隐含状态h(t),他将作用在更新后的细胞状态C(t)上,并做tanh激活,最终得到h(t)作为下一时间步输入的一部分.整个输出门的过程,就是为了产生隐含状态h(t)。

    Bi-LSTM

    Bi-LSTM即双向LSTM,他没有改变LSTM本身任何的内部结构,只是将LSTM应用两次且方向不同,再将两次得到的LSTM结果进行拼接作为最终输出。

    在这里插入图片描述
    BiLSTM结构分析:
    ●我们看到图中对我爱中国"这句话或者叫这个输入序列,进行了从左到右和从右到走两次LSTM处理,将得到的结果张量进行了拼接作为最终输出。这种结构能够捕捉语言语法中一些特定的前置或后置特征,增强语义关联,但是模型参数和计算复杂度也随之增加了一倍, 一般需要对语料和计算资源进行评估后决定是否使用该结构。

    代码实现

    Pytorch中LSTM工具 的使用:

    ●位置:在torch.nn工具包之中,通过torch.nn.LSTM可调用.

    nn.LSTM类初始化主要参数解释:

    ●input size: 输入张量x中特征维度的大小
    ●hidden. size:隐层张量h中特征维度的大小
    ●num. layers:隐含层的数量
    ● bidirectional: 是否选择使用双向LSTM,如果为True,则使用;默认不使用

    nn.LSTM类实例化对象主要参数解释:

    ●input: 输入张量x
    ● h0:初始化的隐层张量h
    ●c0: 初始化的细胞状态张量c

    #定义LSTM的参数含义: (input_ size, hidden_ size, num_ layers)
    #定义输入张量的参数含义: (sequence_ length, batch. size, input_ size)
    #定义隐藏层初始张量和细胞初始状态张量的参数含义:
    # (num_layers * num_ directions, batch_ size,hidden_ size)
    import torch.nn as nn
    import torch
    #实例化LSTM对象
    #第一个参数: input_ size(输入张量x的维度)
    #第二个参数: hidden_ size( 隐藏层的维度,隐藏层神经元数量)
    #第三个参数: num_ .layers (隐藏层的层数)
    
    lstm= nn.LSTM(5, 6,20)
    #设定输入的张量x
    #第一个参数: sequence_ length( 输入序列的长度)
    #第二个参数: batch Isize(批次的样本数)
    #第三个参数: input_ _size(输入张量x的维度)
    
    input1 = torch. randn(1, 3,5)
    #设定初始化的h0,和细胞状态c0
    #第一个参数: num_ .layers * num_ directions (层数*网络方向数)
    #第二个参数: batch_ size( 批次的样本数)
    #第三个参数: hidden_ size( 隐藏层的维度)
    
    h0 = torch. randn(2, 3,6)
    c0 = torch. randn(2, 3,6)
    
    #输入input1,h0,c0放入LSTM中,得到输出张量结果
    output, (hn, cn) = lstm(input,(h0,c0))
    output
    '''
    tensor([[[ 0.0447,-0.0335,0.1454,0.0438,0.0865,0. 0416],
    [0.0105,0.1923,0.5507,-0.1742,0.1569,-0.0548],
    [-0.1186,0.1835,-0.0022,-0.1388,-0.0877,-0.4007]]],grad_ fn=<StackBackward>)'''
    
    hn
    '''
    tensor([[[ 0.4647,-0.236,0.0645,-0.3996,-0.0500,-0.0152],
    [0.3852,0. 0704,0.2103,-0.2524,0 .0243,0. 0477],
    [ 0.2571,0. 0608,0.232, 0.1815,-0.0513,-0. 0291]],
    [[ 0.0447,-0.0335,0.1454, 0.0438,0.0865,0.0416],
    [0.0105,0.1923,0.5507,-0. 1742,0.1569,-0.0548 ],
    [-0.1186,0.1835,-0.0022,-0. 1388,-0.0877,-0.4007]]],
    grad_fn=<StackBackward> )'''
    
    cn
    '''
    tensor([[[ 0.8083,-0.5500,0.1009,-0.5806,-0.0668,-0.1161],
    [0.7438,0.095,0.5509,-0.7725,0.0824,0.0626 ],
    [ 0.3131,0.0920,0.8359,0.9187,-0.4826,-0.0717]],grad_fn=<StackBackward> )'''
    

    优缺点

    LSTM优势:

    LSTM的门 门结构能够有效减缓长序列问题中可能出现的梯度消失或爆炸,虽然并不能杜绝这种现象,但在更长的序列问题上表现优于传统RNN。

    LSTM缺点:

    ●由于内部结构相对较复杂,因此训练效率在同等算力下较传统RNN低很多。

    展开全文
  • LSTM模型

    2022-04-26 17:34:46
    LSTM模型
    • LSTM(Long Short-Term Memory)也称长短时记忆结构, 它是传统RNN的变体, 与经典RNN相比能够有效捕捉长序列之间的语义关联, 缓解梯度消失或爆炸现象. 同时LSTM的结构更复杂, 它的核心结构可以分为四个部分去解析:
      • 遗忘门
      • 输入门
      • 细胞状态
      • 输出门

    LSTM的内部结构图


    • 结构解释图:


    • 遗忘门部分结构图与计算公式:


    • 遗忘门结构分析:
      • 与传统RNN的内部结构计算非常相似, 首先将当前时间步输入x(t)与上一个时间步隐含状态h(t-1)拼接, 得到[x(t), h(t-1)], 然后通过一个全连接层做变换, 最后通过sigmoid函数进行激活得到f(t), 我们可以将f(t)看作是门值, 好比一扇门开合的大小程度, 门值都将作用在通过该扇门的张量, 遗忘门门值将作用的上一层的细胞状态上, 代表遗忘过去的多少信息, 又因为遗忘门门值是由x(t), h(t-1)计算得来的, 因此整个公式意味着根据当前时间步输入和上一个时间步隐含状态h(t-1)来决定遗忘多少上一层的细胞状态所携带的过往信息.

    • 遗忘门内部结构过程演示:


    • 激活函数sigmiod的作用:
      • 用于帮助调节流经网络的值, sigmoid函数将值压缩在0和1之间.


    • 输入门部分结构图与计算公式:


    • 输入门结构分析:
      • 我们看到输入门的计算公式有两个, 第一个就是产生输入门门值的公式, 它和遗忘门公式几乎相同, 区别只是在于它们之后要作用的目标上. 这个公式意味着输入信息有多少需要进行过滤. 输入门的第二个公式是与传统RNN的内部结构计算相同. 对于LSTM来讲, 它得到的是当前的细胞状态, 而不是像经典RNN一样得到的是隐含状态.

    • 输入门内部结构过程演示:


    • 细胞状态更新图与计算公式:


    • 细胞状态更新分析:
      • 细胞更新的结构与计算公式非常容易理解, 这里没有全连接层, 只是将刚刚得到的遗忘门门值与上一个时间步得到的C(t-1)相乘, 再加上输入门门值与当前时间步得到的未更新C(t)相乘的结果. 最终得到更新后的C(t)作为下一个时间步输入的一部分. 整个细胞状态更新过程就是对遗忘门和输入门的应用.

    • 细胞状态更新过程演示:


    • 输出门部分结构图与计算公式:


    • 输出门结构分析:
      • 输出门部分的公式也是两个, 第一个即是计算输出门的门值, 它和遗忘门,输入门计算方式相同. 第二个即是使用这个门值产生隐含状态h(t), 他将作用在更新后的细胞状态C(t)上, 并做tanh激活, 最终得到h(t)作为下一时间步输入的一部分. 整个输出门的过程, 就是为了产生隐含状态h(t).

    • 输出门内部结构过程演示:


    • 什么是Bi-LSTM ?
      • Bi-LSTM即双向LSTM, 它没有改变LSTM本身任何的内部结构, 只是将LSTM应用两次且方向不同, 再将两次得到的LSTM结果进行拼接作为最终输出.


    • Bi-LSTM结构分析:
      • 我们看到图中对"我爱中国"这句话或者叫这个输入序列, 进行了从左到右和从右到左两次LSTM处理, 将得到的结果张量进行了拼接作为最终输出. 这种结构能够捕捉语言语法中一些特定的前置或后置特征, 增强语义关联,但是模型参数和计算复杂度也随之增加了一倍, 一般需要对语料和计算资源进行评估后决定是否使用该结构.

    • Pytorch中LSTM工具的使用:
      • 位置: 在torch.nn工具包之中, 通过torch.nn.LSTM可调用.

    • nn.LSTM类初始化主要参数解释:
      • input_size: 输入张量x中特征维度的大小.
      • hidden_size: 隐层张量h中特征维度的大小.
      • num_layers: 隐含层的数量.
      • bidirectional: 是否选择使用双向LSTM, 如果为True, 则使用; 默认不使用.

    • nn.LSTM类实例化对象主要参数解释:
      • input: 输入张量x.
      • h0: 初始化的隐层张量h.
      • c0: 初始化的细胞状态张量c.

    • nn.LSTM使用示例:
    # 定义LSTM的参数含义: (input_size, hidden_size, num_layers)
    # 定义输入张量的参数含义: (sequence_length, batch_size, input_size)
    # 定义隐藏层初始张量和细胞初始状态张量的参数含义:
    # (num_layers * num_directions, batch_size, hidden_size)
    
    >>> import torch.nn as nn
    >>> import torch
    >>> rnn = nn.LSTM(5, 6, 2)
    >>> input = torch.randn(1, 3, 5)
    >>> h0 = torch.randn(2, 3, 6)
    >>> c0 = torch.randn(2, 3, 6)
    >>> output, (hn, cn) = rnn(input, (h0, c0))
    >>> output
    tensor([[[ 0.0447, -0.0335,  0.1454,  0.0438,  0.0865,  0.0416],
             [ 0.0105,  0.1923,  0.5507, -0.1742,  0.1569, -0.0548],
             [-0.1186,  0.1835, -0.0022, -0.1388, -0.0877, -0.4007]]],
           grad_fn=<StackBackward>)
    >>> hn
    tensor([[[ 0.4647, -0.2364,  0.0645, -0.3996, -0.0500, -0.0152],
             [ 0.3852,  0.0704,  0.2103, -0.2524,  0.0243,  0.0477],
             [ 0.2571,  0.0608,  0.2322,  0.1815, -0.0513, -0.0291]],
    
            [[ 0.0447, -0.0335,  0.1454,  0.0438,  0.0865,  0.0416],
             [ 0.0105,  0.1923,  0.5507, -0.1742,  0.1569, -0.0548],
             [-0.1186,  0.1835, -0.0022, -0.1388, -0.0877, -0.4007]]],
           grad_fn=<StackBackward>)
    >>> cn
    tensor([[[ 0.8083, -0.5500,  0.1009, -0.5806, -0.0668, -0.1161],
             [ 0.7438,  0.0957,  0.5509, -0.7725,  0.0824,  0.0626],
             [ 0.3131,  0.0920,  0.8359,  0.9187, -0.4826, -0.0717]],
    
            [[ 0.1240, -0.0526,  0.3035,  0.1099,  0.5915,  0.0828],
             [ 0.0203,  0.8367,  0.9832, -0.4454,  0.3917, -0.1983],
             [-0.2976,  0.7764, -0.0074, -0.1965, -0.1343, -0.6683]]],
           grad_fn=<StackBackward>)
    

    • LSTM优势:
      • LSTM的门结构能够有效减缓长序列问题中可能出现的梯度消失或爆炸, 虽然并不能杜绝这种现象, 但在更长的序列问题上表现优于传统RNN.

    • LSTM缺点:
      • 由于内部结构相对较复杂, 因此训练效率在同等算力下较传统RNN低很多.

    小节总结

    • LSTM(Long Short-Term Memory)也称长短时记忆结构, 它是传统RNN的变体, 与经典RNN相比能够有效捕捉长序列之间的语义关联, 缓解梯度消失或爆炸现象. 同时LSTM的结构更复杂, 它的核心结构可以分为四个部分去解析:
      • 遗忘门
      • 输入门
      • 输出门
      • 细胞状态

    • 遗忘门结构分析:

      • 与传统RNN的内部结构计算非常相似, 首先将当前时间步输入x(t)与上一个时间步隐含状态h(t-1)拼接, 得到[x(t), h(t-1)], 然后通过一个全连接层做变换, 最后通过sigmoid函数进行激活得到f(t), 我们可以将f(t)看作是门值, 好比一扇门开合的大小程度, 门值都将作用在通过该扇门的张量, 遗忘门门值将作用的上一层的细胞状态上, 代表遗忘过去的多少信息, 又因为遗忘门门值是由x(t), h(t-1)计算得来的, 因此整个公式意味着根据当前时间步输入和上一个时间步隐含状态h(t-1)来决定遗忘多少上一层的细胞状态所携带的过往信息.

    • 输入门结构分析:

      • 我们看到输入门的计算公式有两个, 第一个就是产生输入门门值的公式, 它和遗忘门公式几乎相同, 区别只是在于它们之后要作用的目标上. 这个公式意味着输入信息有多少需要进行过滤. 输入门的第二个公式是与传统RNN的内部结构计算相同. 对于LSTM来讲, 它得到的是当前的细胞状态, 而不是像经典RNN一样得到的是隐含状态.

    • 细胞状态更新分析:

      • 细胞更新的结构与计算公式非常容易理解, 这里没有全连接层, 只是将刚刚得到的遗忘门门值与上一个时间步得到的C(t-1)相乘, 再加上输入门门值与当前时间步得到的未更新C(t)相乘的结果. 最终得到更新后的C(t)作为下一个时间步输入的一部分. 整个细胞状态更新过程就是对遗忘门和输入门的应用.

    • 输出门结构分析:

      • 输出门部分的公式也是两个, 第一个即是计算输出门的门值, 它和遗忘门,输入门计算方式相同. 第二个即是使用这个门值产生隐含状态h(t), 他将作用在更新后的细胞状态C(t)上, 并做tanh激活, 最终得到h(t)作为下一时间步输入的一部分. 整个输出门的过程, 就是为了产生隐含状态h(t).

    • 什么是Bi-LSTM ?

      • Bi-LSTM即双向LSTM, 它没有改变LSTM本身任何的内部结构, 只是将LSTM应用两次且方向不同, 再将两次得到的LSTM结果进行拼接作为最终输出.

    • Pytorch中LSTM工具的使用:

      • 位置: 在torch.nn工具包之中, 通过torch.nn.LSTM可调用.

    • LSTM优势:

      • LSTM的门结构能够有效减缓长序列问题中可能出现的梯度消失或爆炸, 虽然并不能杜绝这种现象, 但在更长的序列问题上表现优于传统RNN.

    • LSTM缺点:

      • 由于内部结构相对较复杂, 因此训练效率在同等算力下较传统RNN低很多.
    展开全文
  • LSTM的优点和缺点

    万次阅读 2020-09-07 23:23:13
    优点: 在序列建模问题上有一定优势,具有长时记忆功能。实现起来简单。 缺点: 并行处理上存在劣势。与一些最新的网络相对效果一般
  • 改进snapshot模型集成方法,增加样本权重调整方法,在训练单个LSTM模型的过程中得到多个具有不同权值的模型;利用得到的多个模型构造新数据集,在新数据集上训练逻辑回归模型。实验结果表明,该方法相比于单模型LSTM,可以...
  • 最近在用TensorFlow2做营收预测项目,由于数据具有明显的时序特性,想利用RNN类模型试一下效果,当然首先使用LSTM、GRU之类的。今天来总结下LSTM相关知识吧。
  • LSTM 优缺点 前言 了解LSTM内部结构及计算公式. 掌握Pytorch中LSTM工具的使用. 了解LSTM的优势与缺点. LSTM(Long Short-Term Memory)也称长短时记忆结构, 它是传统RNN的变体, 与经典RNN相比能够有效捕捉长序列...
  • 作者:谢志宁 https://www.zhihu.com/question/46688107/answer/117448674 两者各有优缺点LSTM:像RNN、LSTM、BILSTM这些模型,它们在序列建模上很强大,它们能够capture长远的上下文信息,此外还具备神经网络...
  • 1.1 认识RNN模型 学习目标 了解什么是RNN模型. 了解RNN模型的作用. 了解RNN模型的分类. 什么是RNN模型 RNN(Recurrent Neural Network), 中文称作循环神经网络, 它一般以序列数据为输入, 通过网络内部的结构设计...
  • 一维卷积和LSTM模型的比较

    千次阅读 2020-05-15 13:39:09
    本篇文章会分析比较LSTM模型和一维卷积模型的特点。 在进行比较之前,我们需要加载之前训练好的两个模型。 from keras.models import load_model from keras.datasets import imdb from keras.preprocessing....
  • 时间序列预测——LSTM模型(附代码实现)

    万次阅读 热门讨论 2022-05-10 17:23:15
    长短时记忆网络( Long short-term memory,LSTM )是一种循环神经网络 (Recurrent neural network, RNN)的特殊变体。
  • 时间序列预测(四)—— LSTM模型

    万次阅读 多人点赞 2019-05-20 15:28:38
    时间序列预测(四)—— LSTM模型 文章链接 (一)数据预处理 (二)AR模型(自回归模型) (三)Xgboost模型 (四)LSTM模型 (五)Prophet模型(自回归模型) 模型原理   LSTM(Long-short time memory,LSTM)...
  • BiLSTM理解

    千次阅读 2020-09-06 22:59:39
    基于前面的lstm的介绍,这里BiLSTM就是将前向lstm和后向lstm进行结合。这里利用网上博客经常用的例子进行说明。 比如,我们对“我爱中国”这句话进行编码,模型如图所示:
  • 【个人整理】长短是记忆网络LSTM的原理以及缺点

    万次阅读 多人点赞 2019-04-04 11:16:43
    在本文中,我们将介绍一种改进之后的循环神经网络:长短时记忆网络(Long Short Term Memory Network, LSTM),它成功的解决了原始循环神经网络的缺陷,成为当前最流行的RNN,在语音识别、图片描述、自然语言处理等...
  • LSTM模型理论总结

    万次阅读 2017-10-25 11:27:44
    1.传统RNN模型的问题:梯度的消失和爆发  说到LSTM,无可避免的首先要提到最简单最原始的RNN。    我们经常可以看到有人说,LSTM适合时序序列,变长序列,尤其适合自然语言处理。那么是什么赋予它可以处理...
  • 传统的神经网络无法做到这一点,这似乎是一个主要缺点。例如,假设您想对电影中每一点发生的事件进行分类。目前尚不清楚传统的神经网络如何利用其对电影中先前事件的推理来告知后来的事件。递归神经网络解决了这个...
  • 什么是SVM?SVM的优缺点?

    千次阅读 2020-09-24 23:27:24
    SVM:中文名叫支持向量机,它的基本模型是定义在特征空间上的间隔最大的线性分类器。 具体来说就是在线性可分时,在原空间寻找两类样本的最优分类超平面。 在线性不可分时,加入松弛变量并通过非线性映射将低维...
  • 文章目录前言一、命名实体识别-NER二、LSTM三、Bi-LSTM总结 前言 LSTM的顶顶大名大家应该都听过,针对序列特征,LSTM相比于普通的RNN网络解决了两...说的是给模型一句话,如何让模型将话里面的实体标注出来,比如说,
  • LSTM的性能局限

    千次阅读 2019-09-05 11:13:32
    元学习论文总结||小样本学习论文总结 2017-2019年计算机视觉顶会文章收录 AAAI2017-2019 CVPR2017-2019 ECCV2018 ICCV2017-2019 ICLR2017-2019 NIPS2017-2019 ...LSTM和RNN被发明于上世纪80、90年代...
  • 把我: LSTM 里面:遗忘门f_t,记忆门i_t,...本文简要介绍了BiLSTM的基本原理,并以句子级情感分类任务为例介绍为什么需要使用LSTM或BiLSTM进行建模。在文章的最后,我们给出在PyTorch下BiLSTM的实现代码,供读...
  • ARIMA时间序列与LSTM神经网络的PK

    千次阅读 多人点赞 2019-10-09 22:22:00
    根据以往数据预测9月23日至9月27日ICBC股价(最高价),下载数据可见后文lstm模型开头有下载办法。 #导入下载的数据 w("F:/ML/习题数据、案例数据、R代码/data/i.csv",sep=",",header = T); x(w$high,start=c...
  • 语音识别模型优缺点简介(一)

    千次阅读 2018-06-29 10:36:02
    2011年微软和谷歌在语音识别上采用DNN模型,将词错误率降低20%-30%。这里的DNN主要采用的是DBN,即深度置信网络。随着语音识别以及深度学习的发展,研究人员发现将CNN和RNN模型应用于语音识别领...
  • 来自:AI算法小喵写在前面今天要跟大家分享的是西湖大学张岳老师2018年发表在顶会ACL上的一篇中文实体识别论文 Lattice LSTM。论文名称:《Chinese NER Using Lattice LSTM》论文链接:...
  • 1.什么是LSTM
  • 5.3 LSTM模型

    2020-05-17 21:37:21
    3 LSTM模型 学习目标: 了解LSTM内部结构及计算公式. 掌握Pytorch中LSTM工具的使用. 了解LSTM的优势与缺点. LSTM(Long Short-Term Memory)也称长短时记忆结构, 它是传统RNN的变体, ...
  • 基于LSTM的库存预测方法lstm是什么:初步模型lstm优缺点为什么用于股票预测(研究目标,研究内容)数据集介绍数据预处理模型介绍(三个)结果比较为什么需要时间序列模型?您想正确地模拟股票价格,因此作为股票购买...
  • 文章目录带时间序列的任务场景标准神经网络建模的弊端一、RNN1.1 结构1.2 特点1.3 前向传播1.4 损失函数1.5 反向传播1.6 缺点二、LSTM2.1 思路2.22 结构2.23 对比RNN2.3 单元结构2.4 前向传播2.5 记忆细胞2.6 举例...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,504
精华内容 4,201
关键字:

lstm模型的优缺点

友情链接: bolangliceshimoxing.zip