LSTM

  • 什么是LSTM模型
  • 定义
  • RNN简介
  • LSTM模型的数学原理
  • LSTM模型的应用
  • 应用场景
  • pytorch实现
  • 模型的改进
  • 评价LSTM模型


什么是LSTM模型

定义

LSTM全称是长短期记忆网络,是一种机器学习算法,属于机器学习监督学习领域,是RNN(Recurrent Neural Network)的一个分支种类

RNN简介

RNN中文名叫循环神经网络或递归神经网络,主要指已经通过网络得到输出的信息,不会直接消失,而会影响之后进入网络的信息的判断。

RNN网络的神经元不再是简单的向后传播结果,而是进行循环输入,允许输入某个神经元的信息持续存在。

LSTM神经网络预测传热系数 lstm神经网络模型_神经网络


LSTM神经网络预测传热系数 lstm神经网络模型_python_02

RNN比较难训练,且难以处理长距离的依赖,因此我们对其进行了改进。

LSTM模型的数学原理

LSTM是RNN的一种,用于学习连续的前后关联的输入,如语言、语音等。

为了保存长距离的依赖,LSTM与RNN的区别在LSTM的隐藏层存有两个状态,一个对短期的输入比较敏感,一个对长期的输入比较敏感。这样相当于把每个隐含层分成两部分。

公式推导如下:

首先是反向传播,与rnn的误差项传播公式相同。LSTM神经网络预测传热系数 lstm神经网络模型_LSTM神经网络预测传热系数_03

反向传播后,是如何控制两个状态的更新,短期状态的控制同RNN,长期状态的控制通过三个开关实现。一个开关控制继续保持长期状态c,一个开关控制把即时状态输入到长期状态c,一个状态负责控制是否把长期状态c作为当前的输出。

LSTM神经网络预测传热系数 lstm神经网络模型_LSTM神经网络预测传热系数_04

之后是如何进行全链接,难点就是上面三个开关,通过遗忘门、输入门和输出门三个门来实现。

具体训练过程的公式,只能说很复杂。

LSTM模型的应用

应用场景

应用于时间序列、自然语言识别,语音识别等领域。

相当于有连续的输入,且输入之间存在先后关系。

pytorch实现

pytorch有官方实现的LSTM的多个版本的框架,直接使用即可。

import torch
# 实现一个num_layers层的LSTM-RNN
class RNN(torch.nn.Module):
    def __init__(self,input_size, hidden_size, num_layers):
        super(RNN,self).__init__()
        self.input_size = input_size
        self.hidden_size=hidden_size
        self.num_layers=num_layers
        self.lstm = torch.nn.LSTM(input_size=input_size,hidden_size=hidden_size,num_layers=num_layers,batch_first=True)
    
    def forward(self,input):
        # input应该为(batch_size,seq_len,input_szie)
        self.hidden = self.initHidden(input.size(0))
        out,self.hidden = lstm(input,self.hidden)
        return out,self.hidden
    
    def initHidden(self,batch_size):
        if self.lstm.bidirectional:
            return (torch.rand(self.num_layers*2,batch_size,self.hidden_size),torch.rand(self.num_layers*2,batch_size,self.hidden_size))
        else:
            return (torch.rand(self.num_layers,batch_size,self.hidden_size),torch.rand(self.num_layers,batch_size,self.hidden_size))

input_size = 12
hidden_size = 10
num_layers = 3
batch_size = 2
model = RNN(input_size,hidden_size,num_layers)
# input (seq_len, batch, input_size) 包含特征的输入序列,如果设置了batch_first,则batch为第一维
input = torch.rand(2,4,12)
model(input)

模型的改进

LSTM模型有众多改进版本,其中比较出名的是GRU。

GRU将上面的三个门改为更新门和重置门两个门,同时将单元状态与输出合并为一个状态。

GRU在保证模型效果的情况下,大大简化了计算。

评价LSTM模型

通过分开存储长期与短期记忆的方式,很大程度上解决了RNN无法进行长期记忆的问题。

与此同时,模型的计算量增加了许多。