文章目录

  • 前言
  • 主要内容
  • 一、序列生成问题解决方法
  • 二、RNN的引入
  • 三、Long Short Term Memory(LSTM)
  • 4、序列生成音乐
  • 本文引用:



前言

  • 掌握使用PyTorch构建LSTM模型的方法
  • 掌握使用LSTM生成MIDI音乐的方法

主要内容

  • 如何用神经网络做序列生成?
  • RNN 与 LSTM 的工作原理
  • RNN 是如何记忆 Pattern 的?
  • MIDI 音乐的原理
  • 如何用LSTM 作曲

pytorch LSTM回归吗 pytorch lstm模型_笔记

pytorch LSTM回归吗 pytorch lstm模型_笔记_02

一、序列生成问题解决方法

  1. 将生成问题转化成一个预测问题
  2. 完成自举过程: 给定一个种子,不断用已经生成的数据预测下一个数据
    例子:

二、RNN的引入

pytorch LSTM回归吗 pytorch lstm模型_pytorch LSTM回归吗_03


pytorch LSTM回归吗 pytorch lstm模型_pytorch_04

公式讲解:

隐藏层运算pytorch LSTM回归吗 pytorch lstm模型_权重_05和上一时刻的pytorch LSTM回归吗 pytorch lstm模型_权重_06以及输入的pytorch LSTM回归吗 pytorch lstm模型_pytorch_07,权重pytorch LSTM回归吗 pytorch lstm模型_权重_08有关

输出层pytorch LSTM回归吗 pytorch lstm模型_权重_05乘上权重矩阵pytorch LSTM回归吗 pytorch lstm模型_pytorch LSTM回归吗_10再经过一个非线性的激活函数pytorch LSTM回归吗 pytorch lstm模型_权重_11和前馈神经网络类似;

人类视角:记忆/计数能力

3:代表开始

2:代表结束

0/1:代表rnn学习的model

pytorch LSTM回归吗 pytorch lstm模型_pytorch_12


pytorch LSTM回归吗 pytorch lstm模型_权重_13


输入为one-hot编码

输出为多分类

pytorch LSTM回归吗 pytorch lstm模型_学习_14


损失函数:交叉熵

pytorch LSTM回归吗 pytorch lstm模型_pytorch_15


pytorch LSTM回归吗 pytorch lstm模型_权重_16


pytorch LSTM回归吗 pytorch lstm模型_pytorch_17


pytorch LSTM回归吗 pytorch lstm模型_pytorch LSTM回归吗_18


我们发现测试效果中,我们的pytorch LSTM回归吗 pytorch lstm模型_权重_19—"pytorch LSTM回归吗 pytorch lstm模型_笔记_20"并没有很好的预测

其实这是必然的

但是我们的结束字符是工作很好的

pytorch LSTM回归吗 pytorch lstm模型_学习_21


采样方式如上

pytorch LSTM回归吗 pytorch lstm模型_学习_22


pytorch LSTM回归吗 pytorch lstm模型_学习_23


训练好的网络的权重是固定的,那么我们读出相关的权重就可以画出相应的输出层

pytorch LSTM回归吗 pytorch lstm模型_笔记_24

pytorch LSTM回归吗 pytorch lstm模型_学习_25


序列变长时:(反复横跳)

pytorch LSTM回归吗 pytorch lstm模型_权重_26


更长的时候,开始震荡

pytorch LSTM回归吗 pytorch lstm模型_权重_27

P Rodriguez et al., A Recurrent Neural Network that Learns toCount, Connection Science, Vol.11,No1,1999:5-40

RNN弊端:
RNN的局限:长期依赖(Long-TermDependencies)问题
在这个间隔不断增大时,RNN会丧失学习到连接如此远的信息的能力;

换句话说, RNN会受到短时记忆的影响。如果一条序列足够长,那它们将很难将信息从较早的时间步传送到后面的时间步。

因此,如果你正在尝试处理一段文本进行预测,RNN可能从一开始就会遗漏重要信息。
在反向传播期间(反向传播是一个很重要的核心议题,本质是通过不断缩小误差去更新权值,从而不断去修正拟合的函数),RNN会面临梯度消失的问题。
因为梯度是用于更新神经网络的权重值(新的权值 = 旧权值 - 学习率*梯度),梯度会随着时间的推移不断下降减少,而当梯度值变得非常小时,就不会继续学习。

即:RNN处理不了距离长的问题

pytorch LSTM回归吗 pytorch lstm模型_学习_28

三、Long Short Term Memory(LSTM)

pytorch LSTM回归吗 pytorch lstm模型_学习_29


与rnn进行对比


pytorch LSTM回归吗 pytorch lstm模型_pytorch_30


pytorch LSTM回归吗 pytorch lstm模型_pytorch_31

构成

pytorch LSTM回归吗 pytorch lstm模型_权重_32


pytorch LSTM回归吗 pytorch lstm模型_笔记_33


pytorch LSTM回归吗 pytorch lstm模型_学习_34

pytorch LSTM回归吗 pytorch lstm模型_权重_35

LSTM一个细胞的结构:

pytorch LSTM回归吗 pytorch lstm模型_权重_36


遗忘门pytorch LSTM回归吗 pytorch lstm模型_权重_37

在LSTM模型中,第一步是决定我们从“细胞”中丢弃什么信息,这个操作由一个忘记门层来完成。该层读取当前输入x和前神经元信息h,由pytorch LSTM回归吗 pytorch lstm模型_权重_37来决定丢弃的信息。输出结果1表示“完全保留”,0 表示“完全舍弃”。

pytorch LSTM回归吗 pytorch lstm模型_笔记_39


输入门(更新门pytorch LSTM回归吗 pytorch lstm模型_pytorch LSTM回归吗_40

第二步是确定细胞状态所存放的新信息,这一步由两层组成。sigmoid层作为“输入门层”,决定我们将要更新的值i;tanh层来创建一个新的候选值向量 pytorch LSTM回归吗 pytorch lstm模型_笔记_41

加入到状态中。在语言模型的例子中,我们希望增加新的主语到细胞状态中,来替代旧的需要忘记的主语。


第三步就是更新旧细胞的状态,将pytorch LSTM回归吗 pytorch lstm模型_pytorch_42更新为 pytorch LSTM回归吗 pytorch lstm模型_笔记_43。我们把旧状态与pytorch LSTM回归吗 pytorch lstm模型_权重_37相乘,丢弃掉我们确定需要丢弃的信息。接着加上pytorch LSTM回归吗 pytorch lstm模型_pytorch_45。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的信息并添加新的信息的地方。

最后一步就是确定输出了,这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。在语言模型的例子中,因为语境中有一个代词,可能需要输出与之相关的信息。例如,输出判断是一个动词,那么我们需要根据代词是单数还是负数,进行动词的词形变化。

pytorch LSTM回归吗 pytorch lstm模型_学习_46


pytorch LSTM回归吗 pytorch lstm模型_权重_47


pytorch LSTM回归吗 pytorch lstm模型_学习_48


pytorch LSTM回归吗 pytorch lstm模型_笔记_49

4、序列生成音乐

pytorch LSTM回归吗 pytorch lstm模型_学习_50


pytorch LSTM回归吗 pytorch lstm模型_权重_51


pytorch LSTM回归吗 pytorch lstm模型_pytorch_52


pytorch LSTM回归吗 pytorch lstm模型_笔记_53

本文引用:

  1. 如何从RNN起步,一步一步通俗理解LSTM(强烈推荐读这篇)
  2. 《理解LSTM网络》
  3. 史上最小白之RNN详解
  4. 【重温经典】大白话讲解LSTM长短期记忆网络 如何缓解梯度消失,手把手公式推导反向传播
  5. 长短期记忆网络(LSTM)【动手学深度学习v2】
  6. 图神经网络项目实战 4 GNN+LSTM模型StemGNN
  7. 人人都能看懂的LSTM介绍及反向传播算法推导(非常详细)
  8. RNN、lstm、gru详解
  9. 图解LSTM——一文吃透LSTM

代码 参考文献:

Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting下载地址