写点什么

实用机器学习笔记十六:循环神经网络

作者:打工人!
  • 2021 年 12 月 17 日
  • 本文字数:1387 字

    阅读完需:约 5 分钟

实用机器学习笔记十六:循环神经网络

前言:

本文是个人在 B 站自学李沐老师的实用机器学习课程【斯坦福 2021 秋季中文同步】的学习笔记,感觉沐神讲解的非常棒 yyds。

从多层感知机到循环神经网络(RNN):


上一篇文章讲的是图片分类问题,今天来讲自然语言处理中的语言模型循环神经网络。


  • 语言模型:目的就是预测下一个单词,比如:

  • hello----->world hello world----->!


  • 上面这个预测案例也可以使用 MLP 来解决


MLP语言模型


  • hello 可以使用 one-hot 编码作为输入,输出可以使用 softmax 分类来解决,比如可能有 1000 个分类,那么输出就是 1000 维的向量。再对 world 做预测,使用同样的模型和同样的模型权重参数。不知道大家有没有注意到一个问题:在对 world 做预测时,模型只看到了 world 这个词,并没有看到 world 前面的词 hello,也就是说只看到了上一时刻的 world,没有看到 world 之前的信息,信息无法传过来。可能你会说在对 world 做预测时,把 hello 也放进输入,那么输入的维度就发生了变化,全连接层的输入维度是不能发生变化的。问题就是如何把长度会变的一个序列表示成一个固定长度的输入?可能你会想到之前介绍的 Bag-of-word(词袋包:每一个词的独热编码相加)来解决,但是这种相加的方式并没有把时序信息(比如:hello world 变成 world hello 后,独热编码相加并不会变化)表示出来。


  • 循环神经网络来解决:


  • 如下图是循环神经网络的语言模型。为了在为 world 做预测时可以拿到前一时刻的信息,就在两个全连接层之间添加了一条数据通道,把全连接层对 hello 处理的输出结果拿出来作为隐藏信息 H 和 world 做拼接,这样就拿到了前面时序的信息。这个隐藏信息里面包含了 hello 之前所有时刻的输入信息,因为 hello 之前的信息也在往 hello 这里传递。而且最重要的是,不管这个传递有多少步,隐藏状态 H 的维度是不变的,唯一能决定 H 维度的就是全连接层的神经元的个数。


循环神经网络语言模型

RNN 和 Gated RNN(门 RNN):


  • 基础版 RNN:具体形式如下:


看上面这个式子,如果去掉激活函数实际上也是一个线性模型。在 RNN 中,即在下面这张图中,是有激活函数的),这和上一张图中不太一样,但是我反复听了几遍课程,确实是这样的,不知道是不是沐神说错了还是怎么的,我又查了几篇博客,都是和下面这个图是一个意思。所以这里就认为下下面这个图是正确的。这里的是一个 h*h 的矩阵,只和 RNN 单元的输出神经元个数有关,加入输入是一个 x 维的向量,是 h*x 维的矩阵。


基础版RNN


  • Gated RNN(LSTM,GRU):更好的控制信息流。

  • 输入遗忘门:控制当前时刻输入,流入 RNN 的量

  • 隐藏遗忘门:控制以往时刻信息流入当前时刻 RNN 的量


  • 代码:

W_xh = nn.Parameter(torch.randn(num_inputs, num_hiddens)*0.01)W_hh = nn.Parameter(torch.randn(num_hiddens, num_hiddens)*0.01)b_h = nn.Parameter(torch.zeros(num_hiddens))
H = torch.zeros(num_hiddens)outputs = []
for X in inputs: # input shape : (num_steps, batch_size, num_inputs), # 这个循环次数就是num_steps,就是有几个时间步 H = torch.tanh(X @ W_xh,+ H @ W_hh + b_h) outputs.append(H)
复制代码

Bi-RNN(双向 RNN) 和 Deep RNN:


  • Bi-RNN:

Bi-RNN 的输出既有正向时序的信息,也有反向时序的信息,比如你做完形填空时,就可以根据后面的句子来推导前面的空。


Bi-RNN


  • Deep RNN:

Deep RNN


发布于: 2 小时前阅读数: 11
用户头像

打工人!

关注

打工人! 2019.11.10 加入

InfoQ年度最佳内容获得者。 InfoQ签约作者 本人打工人一枚,自动化和控制专业入坑人一枚。目前在研究深度强化学习(DRL)技术。准备入坑互联网小白一枚。喜欢了解科技前沿技术,喜欢拍照。

评论

发布
暂无评论
实用机器学习笔记十六:循环神经网络