当前位置: 首页 > news >正文

Week 12: 深度学习补遗:RNN与LSTM

文章目录

  • Week 12: 深度学习补遗:RNN与LSTM
    • 摘要
    • Abstract
    • 1. Recurrent Neural Network 循环神经网络
    • 2. Elman Network和Jordan Network
    • 3. Bidirectional RNN 双向RNN
    • 4. Long Short-term Memory 长短期记忆存储
      • 4.1 LSTM的实际操作的数据表示
      • 4.2 LSTM在神经网络中的形态
    • 总结

Week 12: 深度学习补遗:RNN与LSTM

摘要

本周继续跟随李宏毅老师的课程进行学习,主要对循环神经网络和长短期记忆进行了解和学习,了解其底层逻辑以及具体数学实现。除此之外,还对其奏效的原因和底层逻辑进行了一定程度的认识。

Abstract

This week, I took a course with Professor Hung-yi Lee on autoencoders and generative models, which are closely related. I mainly studied autoencoders from an abstract and mathematical perspective. The encoder-decoder architecture is a major mainstream structure in current models and is therefore important to learn. Studying autoencoders and generative models has given me a certain understanding of the encoder-decoder architecture.

1. Recurrent Neural Network 循环神经网络

RNN的一个典型应用是Slot Filling,即设置几个槽位(Slot),将句子的相应内容解析到对应的槽位。例如设置“Destination”、“Time of Arrival”两个槽位,对于“Arrive Taipei on November 2nd”这个句子,需要将“Taipei”解析到“Destination”中,“November 2nd”解析到“Time of Arrival”中。

DestinationTime of Arrival
TaipeiNovember 2nd

首先需要将句子嵌入成向量,可以通过1-of-N Encoding的方法或者词哈希等方法进行实现。但使用普通前馈神经网络时会出现一个问题,即对于两个句子“Arrive Taipei on November 2nd”和“Leave Taipei on November 2nd”,FNN会先处理“Arrive”和“Leave”再处理“Taipei”。对于这两个句子,FNN无法分辨“Taipei”在当前句子是出发地还是目的地,因为FNN没有记忆能力

RNN Network Structure

RNN的特点,在于增加了一个暂存模块,隐藏层的输出被存储在内存中,而内存作为一个另外的输入在下次输入进行时一并进行输入。需要注意的时候,在第一次训练时,Memory也必须要被初始化。

设想一个简单的RNN,其权重都被设置为1,无偏差,Memory初始化为0。
Input Sequence:[11][11][22]…Output Sequence:[44][1212][3232]…\text{Input Sequence:}\begin{bmatrix}1\\1\end{bmatrix}\begin{bmatrix}1\\1\end{bmatrix}\begin{bmatrix}2\\2\end{bmatrix} \dots \\ \text{Output Sequence:}\begin{bmatrix}4\\4\end{bmatrix}\begin{bmatrix}12\\12\end{bmatrix}\begin{bmatrix}32\\32\end{bmatrix} \dots\\ Input Sequence:[11][11][22]Output Sequence:[44][1212][3232]
对于第一个输入[11]\begin{bmatrix}1\\1\end{bmatrix}[11],第一个隐藏层的结果为[22]\begin{bmatrix}2\\2\end{bmatrix}[22],输出层的结果为[44]\begin{bmatrix}4\\4\end{bmatrix}[44],将输出层的结果存储到Memory中。

对于第二个输入[11]\begin{bmatrix}1\\1\end{bmatrix}[11],此时第一个隐藏层的结果为[22]+[44]=[66]\begin{bmatrix}2\\2\end{bmatrix} + \begin{bmatrix}4\\4\end{bmatrix}=\begin{bmatrix}6\\6\end{bmatrix}[22]+[44]=[66],输出层的结果为[1212]\begin{bmatrix}12\\12\end{bmatrix}[1212],同样将结果存储到Memory中。

对于第三个输入[22]\begin{bmatrix}2\\2\end{bmatrix}[22],第一个隐藏层的结果为[44]+[1212]=[1616]\begin{bmatrix}4\\4\end{bmatrix} + \begin{bmatrix}12\\12\end{bmatrix} = \begin{bmatrix}16\\16\end{bmatrix}[44]+[1212]=[1616],输出层就为[3232]\begin{bmatrix}32\\32\end{bmatrix}[3232],也存储到Memory中。

通过这种形式,输入的顺序就会影响输出的结果。

同理,将向量换成词向量,就可以表示句子理解中用前文影响后文理解的场景。

Word Vector RNN

当然,RNN也可以变得更深,使用更多的层数使其网络结构变得复杂。

2. Elman Network和Jordan Network

在这里插入图片描述

Elman Network和Jordan Network是两种RNN的不同结构,Elman Network将隐藏层的输出存到Memory中,Jordan Network将输出层的结果存储到Memory中。

通常情况下,Jordan Network的表现会更佳,主要是因为单个隐藏层并没有明确的训练目标,但整体的神经网络有一个明确的训练目标,保存输出层结果可以比较有效的保存上一次的状态,因此表现要更好一些。

3. Bidirectional RNN 双向RNN

BiRNN

RNN可以是双向的,通过这种方式增加网络的感受野,即训练两个方向的RNN,使用两个RNN的隐藏层得到输出层。

这样可以使得在网络在看当前词汇的时候,不仅看过了前文,而且也看过了后文,即相当于RNN是在看完了前后文之后才进行的预测,因此其感受野更大,预测的依据更全面。

4. Long Short-term Memory 长短期记忆存储

LSTM

RNN的结构比较简单,可以任意的对Memory进行读写,并没有进行控制。LSTM是一种更流行的Memory管理方式,LSTM既能看到短期内前后文的影响,还能看到更久之前的前文的影响。

LSTM有3个门(Gate)和4个输入(3个门控制信号与一个Memory输入)、1个输出。

  • Input Gate 输入门:当某个Neuron的输出想要被写入Memory Cell,需要先经过输入门,如果输入门处于关闭状态,则无法被写入。
  • Output Gate 输出门:输出门决定了外界是否能从Memory中读出数据,当其关闭时,同样无法被读取。
  • Forget Gate 遗忘门:遗忘门决定了何时遗忘Memory中的内容,何时进行保存。

所有的门的开关都是由神经网络学习到的。

4.1 LSTM的实际操作的数据表示

LSTM Math
Input: z,zi,zf,zoc′‾Memory Input=g(z)‾Activated Inputf(zi)‾Input Gate+c‾Old Memoryf(zf)‾Forget Gatea‾Output=h(c′)‾Activated Memoryf(zo)‾Output Gate\text{Input: }z, z_i,z_f,z_o \\ \underset{\text{Memory Input}}{\underline{c'}}=\underset{\text{Activated Input}}{\underline{g(z)}}\underset{\text{Input Gate}}{\underline{f(z_i)}}+\underset{\text{Old Memory}}{\underline{c}}\underset{\text{Forget Gate}}{\underline{f(z_f)}} \\ \underset{\text{Output}}{\underline{a}}=\underset{\text{Activated Memory}}{\underline{h(c')}}\underset{\text{Output Gate}}{\underline{f(z_o)}} Input: z,zi,zf,zoMemory Inputc=Activated Inputg(z)Input Gatef(zi)+Old MemorycForget Gatef(zf)Outputa=Activated Memoryh(c)Output Gatef(zo)

4.2 LSTM在神经网络中的形态

LSTM in NN

在神经网络中使用LSTM,只需要把LSTM模块看做一个神经元,把输入向量x⃗\vec{x}x简单输入到zzzzfz_fzfziz_izizoz_ozo等进行学习,就可以完成LSTM的使用。

LSTM一般需要使用4倍的参数量。

总结

本周对循环神经网络和长短期记忆模块进行了一定的认识,学习了普通的循环神经网络如何让时间序列的前文影响后文,还了解了Elman Network、Jordan Network、双向RNN等几种变种。最后,还学习LSTM的数学表示和底层逻辑以及其应用在神经网络中的具体方式和形态。

http://www.dtcms.com/a/335964.html

相关文章:

  • Vue 与 React 深度对比:设计哲学、技术差异与应用场景
  • Zemax 中的透镜设计 - 像差理论
  • Python | 解决 matplotlib 中文乱码
  • CentOS7安装部署GitLab社区版
  • 从需求到部署全套方案:餐饮服务许可证数据可视化分析系统的大数据技术实战
  • 深入浅出全面理解贝叶斯框架(Bayesian Framework)
  • jinja2模板引擎全面解析
  • Python3字符串全面指南:从基础操作到40个内建函数实战
  • Go语言并发编程 ------ 锁机制详解
  • 深入理解 uni-app 页面导航:switchTab、navigateTo、redirectTo、reLaunch 与 navigateBack
  • 2.4 双向链表
  • QUIC浅析
  • 流浪循环 全DLC(Rogue Loops)免安装中文版
  • 超市电商销售分析项目:从数据分析到业务决策
  • 【架构师从入门到进阶】第五章:DNSCDN网关优化思路——第十一节:网关安全-对称与非对称加密
  • PHP静态类self和static用法
  • 【计算机视觉与深度学习实战】04基于K-Means聚类的图像分割系统设计与实现
  • Java Stream 初解
  • 14.web api 5
  • 基于MATLAB多智能体强化学习的出租车资源配置优化系统设计与实现
  • 无人机视角乱堆垃圾垃圾场地分割数据集labelme格式1501张1类别
  • qt svg缺失元素, 原因是不支持 rgba
  • Android studio gradle有关设置
  • 图解 setTimeout + 循环:var 共享变量 vs let 独立绑定
  • 《若依》介绍和环境搭建
  • 基于径向基函数神经网络的数据回归预测 RBF
  • 2024年08月13日 Go生态洞察:Go 1.23 发布与全面深度解读
  • 三维重建-动手学计算机视觉19(完结)
  • Android Studio中创建Git分支
  • ——分治——