LSTM学习笔记

什么是LSTM模型

定义

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

RNN简介

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

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

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

LSTM模型的数学原理

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

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

公式推导如下:

首先是反向传播,与rnn的误差项传播公式相同。 δ k T = δ k T ∏ i = k t − 1 d i a g [ f ′ ( n e t i ) ] W \delta^T_k=\delta^T_k\prod_{i=k}^{t-1}diag[f'(net_i)]W δkT=δkTi=kt1diag[f(neti)]W

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

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

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

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无法进行长期记忆的问题。

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值