怎样做网站公司的销售,wordpress登录背景,网站开发专业怎么样,html网站怎么做视频教程#x1f935;♂️ 个人主页: AI_magician #x1f4e1;主页地址#xff1a; 作者简介#xff1a;CSDN内容合伙人#xff0c;全栈领域优质创作者。 #x1f468;#x1f4bb;景愿#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长#xff01;#xff01;… ♂️ 个人主页: AI_magician 主页地址 作者简介CSDN内容合伙人全栈领域优质创作者。 景愿旨在于能和更多的热爱计算机的伙伴一起成长 ♂️声明本人目前大学就读于大二研究兴趣方向人工智能硬件虽然硬件还没开始玩但一直很感兴趣希望大佬带带 【深度学习 | LSTM】解开LSTM的秘密:门控机制如何控制信息流 作者 计算机魔术师 版本 1.0 2023.8.27 摘要 本系列旨在普及那些深度学习路上必经的核心概念文章内容都是博主用心学习收集所写欢迎大家三联支持本系列会一直更新核心概念系列会一直更新欢迎大家订阅 该文章收录专栏 [✨— 《深入解析机器学习从原理到应用的全面指南》 —✨] LSTM最全详解 LSTM原理详解(每个神经元)a. 遗忘门Forget Gateb. 输入门Input Gatec. Cell Stated. 输出门Output Gate 参数详解参数计算实际场景 LSTM
原理详解(每个神经元)
LSTMLong Short-Term Memory是一种常用于处理序列数据的循环神经网络模型。LSTM的核心思想是在传递信息的过程中通过门的控制来选择性地遗忘或更新信息。LSTM中主要包含三种门输入门input gate、输出门output gate和遗忘门forget gate以及一个记忆单元memory cell。
在LSTM层中有三个门控单元即输入门、遗忘门和输出门。这些门控单元在每个时间步上控制着LSTM单元如何处理输入和记忆。在每个时间步上LSTM单元从输入、前一个时间步的输出和前一个时间步的记忆中计算出当前时间步的输出和记忆。
在LSTM的每个时间步中输入 x t x_t xt和前一时刻的隐状态 h t − 1 h_{t-1} ht−1被馈送给门控制器然后门控制器根据当前的输入 x t x_t xt和前一时刻的隐状态 h t − 1 h_{t-1} ht−1计算出三种门的权重然后将这些权重作用于前一时刻的记忆单元 c t − 1 c_{t-1} ct−1。具体来说门控制器计算出三个向量**输入门的开启程度 i t i_t it、遗忘门的开启程度 f t f_t ft和输出门的开启程度 o t o_t ot这三个向量的元素值均在[0,1]**之间。
然后使用这些门的权重对前一时刻的记忆单元 c t − 1 c_{t-1} ct−1进行更新计算出当前时刻的记忆单元 c t c_t ct并将它和当前时刻的输入 x t x_t xt作为LSTM的输出 y t y_t yt。最后将当前时刻的记忆单元 c t c_t ct和隐状态 h t h_t ht一起作为下一时刻的输入继续进行LSTM的计算。 如果你对LSTM以及其与反向传播算法之间的详细联系感兴趣我建议你参考以下资源
“Understanding LSTM Networks” by Christopher Olah: https://colah.github.io/posts/2015-08-Understanding-LSTMs/ 强烈推荐TensorFlow官方教程Sequence models and long-short term memory network (https://www.tensorflow.org/tutorials/text/text_classification_rnn)PyTorch官方文档nn.LSTM (https://pytorch.org/docs/stable/generated/torch.nn.LSTM.html)详细讲解RNN,LSTM,GRU https://towardsdatascience.com/a-brief-introduction-to-recurrent-neural-networks-638f64a61ff4
以上资源将为你提供更多关于LSTM及其与反向传播算法结合使用的详细解释、示例代码和进一步阅读材料。 LSTM 的核心概念在于细胞状态以及“门”结构。细胞状态相当于信息传输的路径让信息能在序列连中传递下去。你可以将其看作网络的“记忆”记忆门一个控制信号控制门是否应该保留该信息在实现上通常是乘1或乘0来选择保留或忘记。理论上讲细胞状态能够将序列处理过程中的相关信息一直传递下去。因此即使是较早时间步长的信息也能携带到较后时间步长的细胞中来这克服了短时记忆的影响。信息的添加和移除我们通过“门”结构来实现“门”结构在训练过程中会去学习该保存或遗忘哪些信息。 LSTM的参数包括输入到状态的权重 W x i , W h i , b i W_{xi},W_{hi},b_i Wxi,Whi,bi输入到遗忘门的权重 W x f , W h f , b f W_{xf},W_{hf},b_f Wxf,Whf,bf输入到输出门的权重 W x o , W h o , b o W_{xo},W_{ho},b_o Wxo,Who,bo以及输入到记忆单元的权重 W x c , W h c , b c W_{xc},W_{hc},b_c Wxc,Whc,bc其中 W W W表示权重矩阵 b b b表示偏置向量。在实际应用中LSTM模型的参数通常需要通过训练来获得以最小化预测误差或最大化目标函数。
a. 遗忘门Forget Gate
遗忘门的功能是决定应丢弃或保留哪些信息。来自前一个隐藏状态的信息和当前输入的信息同时传递到 sigmoid 函数中去输出值介于 0 和 1 之间越接近 0 意味着越应该丢弃越接近 1 意味着越应该保留。
遗忘门的计算公式
b. 输入门Input Gate
输入门用于更新细胞状态。首先将前一层隐藏状态的信息和当前输入的信息传递到 sigmoid 函数中去。将值调整到 0~1 之间来决定要更新哪些信息。0 表示不重要1 表示重要。其次还要将前一层隐藏状态的信息和当前输入的信息传递到 tanh 函数中去创造一个新的侯选值向量。最后将 sigmoid 的输出值与 tanh 的输出值相乘sigmoid 的输出值将决定 tanh 的输出值中哪些信息是重要且需要保留下来的 使用tanh作为LSTM输入层的激活函数一定程度上可以避免梯度消失和梯度爆炸的问题。 在LSTM中如果权重值较大或者较小那么在反向传播时梯度值会非常大或者非常小导致梯度爆炸或者消失的情况。而tanh函数的导数范围在[-1, 1]之间可以抑制梯度的放大和缩小从而避免了梯度爆炸和消失的问题(RNN遇到的问题。此外tanh函数在输入为0附近的时候输出接近于线性使得网络更容易学习到线性相关的特征。另外tanh 函数具有对称性在处理序列数据时能够更好地捕捉序列中的长期依赖关系。 因此使用tanh作为LSTM输入层的激活函数是比较常见的做法。 c. Cell State
首先前一层的细胞状态与遗忘向量逐点相乘。如果它乘以接近 0 的值意味着在新的细胞状态中这些信息是需要丢弃掉的。然后再将该值与输入门的输出值逐点相加将神经网络发现的新信息更新到细胞状态中去。至此就得到了更新后的细胞状态。
d. 输出门Output Gate
输出门用来确定下一个隐藏状态的值隐藏状态包含了先前输入的信息。首先我们将前一个隐藏状态和当前输入传递到 sigmoid 函数中然后将新得到的细胞状态传递给 tanh 函数。最后将 tanh 的输出与 sigmoid 的输出相乘以确定隐藏状态应携带的信息。再将隐藏状态作为当前细胞的输出把新的细胞状态和新的隐藏状态传递到下一个时间步长中去。
在LSTM层中每个时间步上的计算涉及到许多参数包括输入、遗忘和输出门的权重以及当前时间步和前一个时间步的输出和记忆之间的权重。这些参数在模型训练过程中通过反向传播进行学习以最小化模型在训练数据上的损失函数。总之LSTM通过门的控制使得信息在传递过程中可以有选择地被遗忘或更新从而更好地捕捉长序列之间的依赖关系广泛应用于语音识别、自然语言处理等领域。
LSTM的输出可以是它的最终状态最后一个时间步的隐藏状态或者是所有时间步的隐藏状态序列。通常LSTM的最终状态可以被看作是输入序列的一种编码可以被送入其他层进行下一步处理。如果需要使用LSTM的中间状态可以将return_sequences参数设置为True这样LSTM层将返回所有时间步的隐藏状态序列而不是仅仅最终状态。 需要注意的是LSTM层在处理长序列时容易出现梯度消失或爆炸的问题。为了解决这个问题通常会使用一些技巧比如截断反向传播、梯度裁剪、残差连接等 参数详解
layers.LSTM 是一个带有内部状态的循环神经网络层其中包含了多个可训练的参数。具体地LSTM层的输入是一个形状为(batch_size, timesteps, input_dim)的三维张量其中batch_size表示输入数据的批次大小timesteps表示序列数据的时间步数input_dim表示每个时间步的输入特征数。LSTM层的输出是一个形状为**(batch_size, timesteps, units)的三维张量其中units表示LSTM层的输出特征数**。以下是各个参数的详细说明
unitsLSTM 层中的单元数即 LSTM 层输出的维度。activation激活函数用于计算 LSTM 层的输出和激活门。recurrent_activation循环激活函数用于计算 LSTM 层的循环状态。use_bias是否使用偏置向量。kernel_initializer用于初始化 LSTM 层的权重矩阵的初始化器。recurrent_initializer用于初始化 LSTM 层的循环权重矩阵的初始化器。bias_initializer用于初始化 LSTM 层的偏置向量的初始化器。unit_forget_bias控制 LSTM 单元的偏置初始化如果为 True则将遗忘门的偏置设置为 1否则设置为 0。kernel_regularizerLSTM 层权重的正则化方法。recurrent_regularizerLSTM 层循环权重的正则化方法。bias_regularizerLSTM 层偏置的正则化方法。activity_regularizerLSTM 层输出的正则化方法。dropoutLSTM 层输出上的 Dropout 比率。recurrent_dropoutLSTM 层循环状态上的 Dropout 比率。return_sequences: 可以控制LSTM的输出形式。如果设置为True则输出每个时间步的LSTM的输出如果设置为False则只输出最后一个时间步的LSTM的输出。因此return_sequences的默认值为False如果需要输出每个时间步的LSTM的输出则需要将其设置为True。
这些参数的不同设置将直接影响到 LSTM 层的输出和学习能力。需要根据具体的应用场景和数据特点进行选择和调整。
tf.keras.layers.LSTM(
units,
activation“tanh”,
recurrent_activation“sigmoid”, #用于重复步骤的激活功能
use_biasTrue, #是否图层使用偏置向量
kernel_initializer“glorot_uniform”, #kernel权重矩阵的 初始化程序用于输入的线性转换
recurrent_initializer“orthogonal”, #权重矩阵的 初始化程序用于递归状态的线性转换
bias_initializer“zeros”, #偏差向量的初始化程序
unit_forget_biasTrue, #则在初始化时将1加到遗忘门的偏置上
kernel_regularizerNone, #正则化函数应用于kernel权重矩阵
recurrent_regularizerNone, #正则化函数应用于 权重矩阵
bias_regularizerNone, #正则化函数应用于偏差向量
activity_regularizerNone, #正则化函数应用于图层的输出其“激活”
kernel_constraintNone,#约束函数应用于kernel权重矩阵
recurrent_constraintNone,#约束函数应用于 权重矩阵
bias_constraintNone,#约束函数应用于偏差向量
dropout0.0,#要进行线性转换的输入单位的分数
recurrent_dropout0.0,#为递归状态的线性转换而下降的单位小数
return_sequencesFalse,#是否返回最后一个输出。在输出序列或完整序列中
return_stateFalse,#除输出外是否返回最后一个状态
go_backwardsFalse,#如果为True则向后处理输入序列并返回反向的序列
statefulFalse,#如果为True则批次中索引i的每个样本的最后状态将用作下一个批次中索引i的样本的初始状态。
time_majorFalse,
unrollFalse,#如果为True则将展开网络否则将使用符号循环。展开可以加快RNN的速度尽管它通常会占用更多的内存。展开仅适用于短序列。
)参数计算
对于一个LSTM长短期记忆模型参数的计算涉及输入维度、隐藏神经元数量和输出维度。在给定输入维度为6432和LSTM神经元数量为32的情况下我们可以计算出以下参数 输入维度6432 这表示每个时间步长sequence step的输入特征维度为32序列长度为64。 隐藏神经元数量32 这是指LSTM层中的隐藏神经元数量。每个时间步长都有32个隐藏神经元。 输入门参数 权重矩阵形状为3232 32的矩阵。其中32是上一时间步的隐藏状态大小另外32是当前时间步的输入维度。偏置向量形状为32的向量。 遗忘门参数 权重矩阵形状为3232 32的矩阵。偏置向量形状为32的向量。 输出门参数 权重矩阵形状为3232 32的矩阵。偏置向量形状为32的向量。 单元状态参数 权重矩阵形状为3232 32的矩阵。偏置向量形状为32的向量。 输出参数 权重矩阵形状为3232的矩阵。将隐藏状态映射到最终的输出维度。偏置向量形状为32的向量。
因此总共的参数数量可以通过计算上述所有矩阵和向量中的元素总数来确定。
实际场景
当使用LSTM长短期记忆神经网络进行时间序列预测时可以根据输入和输出的方式将其分为四种类型单变量单步预测、单变量多步预测、多变量单步预测和多变量多步预测。 单变量单步预测 输入只包含单个时间序列特征的历史数据。输出预测下一个时间步的单个时间序列值。例如给定过去几天的某股票的收盘价使用LSTM进行单变量单步预测将预测未来一天的收盘价。 单变量多步预测 输入只包含单个时间序列特征的历史数据。输出预测接下来的多个时间步的单个时间序列值。例如给定过去几天的某股票的收盘价使用LSTM进行单变量多步预测将预测未来三天的收盘价。 多变量单步预测 输入包含多个时间序列特征的历史数据。输出预测下一个时间步的一个或多个时间序列值。例如给定过去几天的某股票的收盘价、交易量和市值等特征使用LSTM进行多变量单步预测可以预测未来一天的收盘价。 多变量多步预测 输入包含多个时间序列特征的历史数据。输出预测接下来的多个时间步的一个或多个时间序列值。例如给定过去几天的某股票的收盘价、交易量和市值等特征使用LSTM进行多变量多步预测将预测未来三天的收盘价。
这些不同类型的时间序列预测任务在输入和输出的维度上略有差异但都可以通过适当配置LSTM模型来实现。具体的模型架构和训练方法可能会因任务类型和数据特点而有所不同。 到这里如果还有什么疑问欢迎私信博主问题哦博主会尽自己能力为你解答疑惑的如果对你有帮助你的赞是对博主最大的支持