这节课中介绍了循环神经网络的第一部分,主要介绍了循环神经网络的基本概念,vanilla循环网络架构,RNN的一些应用,vanilla架构的问题,更先进的rnn架构比如GRU和LSTM

vanilla循环网络架构

在之前的讨论中,我们往往以图像分类问题为基础然后展开,训练网络,输入图像,然后我们可以得到相应的图像标签,但在实际中,我们可能还会需要处理一些序列问题,比如说输入一个图像,我们希望能得到一组单词,表示图像的内容,或者说输入一个视频也就是输入一系列的图像,得到一个标签,或者说输入一组单词,我们能够将其翻译为另一种语言的单词:



循环网络的核心概念大致如上图,简单来说,我们依次使用不同的输入向量和上一个状态,经过一个权重矩阵,实现更新得到新的状态,然会不断重复上述过程直至输入向量全部输入,注意这里我们采用的权重矩阵每一步循环都是相同的,我们以many to many计算图为例:



我们可以看到首先初始化w与h0,然后x1,h0一起与fw作用得到h1之后,重复上述操作,一直得到h2,h3等等,同时每个隐藏层都会输出一个y,用于表示对下一个x的预测结果,然后我们可以利用这个预测结果与实际的下一个输入向量之间的差距,作为损失,反向传播对权重矩阵进行更新。

最常用最简单的循环神经网络就是vanilla RNN:



可以看到它给出了h与y的计算方式,其余结构就和我们之前提到的一样,下面是一个具体的例子,可以看到我们使用了“hello”这个单词来训练我们的循环神经网络。

应用与理解

我们实际上可以使用上述循环网络实现很多有意思的事情,比如说我们可以将莎士比亚的作品作为训练集,然后让ai来以莎士比亚的风格来自己创作:



我们可以看到经过不断不断的训练,ai逐渐能输出更加像样的结果了,尽管从具体内容上来说还是狗屁不通

同样,我们也可以让神经网络去模仿写数学证明或者一些代码,它也能模仿的有模有样:



如果我们将隐藏层可视化,并且选取其中可理解的一些结果观察,我们可以发现一些有意思的一些事情:







实际上隐藏层特定地学习了我们输入的文字序列中的某些信息,比如句子的长度信息,if语句信息以及注释信息等等

我们可以将RNN与CNN结合起来,使用CNN来提取特征向量,然后我们使用RNN来将特征向量作为新的信息加入,这样能够更好地训练我们的网络,为特征向量创建新的权重矩阵:



然后我们可以得到一些非常好的结果:

vanilla架构的问题

vanilla架构最大的问题就是反向传播过程中,有的路径太长,需要经过许多权重矩阵以及tanh(而我们知道tanh存在着杀死梯度的问题),如果矩阵的奇异值大于1,会导致在这个过程中梯度不断增大,直到爆炸,如果奇异值小于1,则会出现梯度消失的现象,这两种情况都会导致vanilla架构只有短期记忆,不能很好地学习,对于第一种,我们可以将梯度缩小,虽然这样已经不是原本的梯度,但还是可以得到不错的效果,对于第二种情况,我们则需要改变RNN网络的架构,这就有了LSTM架构:

LSTM

LSTM采取如下的架构:



把h层放大为4h,然后分成4个小h,每个h分别经过sigmoid,sigmoid,sigmoid以及tanh,分别得到输入门,遗忘门,输出门以及门门,其中输入门表示我们是否向神经元中输入信息,是一个介于0-1之间的值,遗忘门表示是否要遗忘上一次输入的信息,也是一个0-1之间的值,门门表示我们要向神经元中输入多少信息,输出门表述我们最终要输出多少信息

从\(c_{t}\)的推导式中我们也可以看出,首先f遗忘门与前一个c值哈达马积(两个矩阵对应位置元素相乘),表述我们要忘记多少上一层的信息,然后再加上i与g的哈达马积,表示我们要输入多少信息。





通过这样的方法,我们实际上设计了一条新的反向传播路径,只需要先经过一个+号(我们知道反向传播梯度与上游梯度相同),然后再经过一个对应元素相乘的反向传播而不是和矩阵W相乘

实际上这种设计与残差网络的设计有着相同的直觉,它们都提供了一条求解梯度的高速公路,来防止太长的反向传播路径

至于LSTM这种具体结构式怎么想出来的,“it is called reasearch trial and error”hhh

最后介绍几种不同的RNN结构的变体:

多层RNN架构(层数一般不会太深):

GRU(与LSTM思想大致相同,只是构建了不同的高速公路)

以及使用进化搜索研究了10000种不同的RNN架构:



实践证明我们使用LSTM架构一般就能得到较好的效果

umich cv-6-1 循环神经网络基本知识的更多相关文章

  1. Recurrent Neural Network(循环神经网络)

    Reference:   Alex Graves的[Supervised Sequence Labelling with RecurrentNeural Networks] Alex是RNN最著名变种 ...

  2. 神经网络6_CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)概念区分理解

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程,QQ:231469242) https://study.163.com/course/introduction.htm?courseId ...

  3. Recurrent Neural Networks(RNN) 循环神经网络初探

    1. 针对机器学习/深度神经网络“记忆能力”的讨论 0x1:数据规律的本质是能代表此类数据的通用模式 - 数据挖掘的本质是在进行模式提取 数据的本质是存储信息的介质,而模式(pattern)是信息的一 ...

  4. 循环神经网络中BFTT的公式推导

    一.变量定义 此文是我学习BFTT算法的笔记,参考了雷明<机器学习与应用>中的BFTT算法推导,将该本书若干个推导串联起来,下列所有公式都是结合书和资料,手动在PPT上码的,很费时间,但是 ...

  5. [ DLPytorch ] 文本预处理&语言模型&循环神经网络基础

    文本预处理 实现步骤(处理语言模型数据集距离) 文本预处理的实现步骤 读入文本:读入zip / txt 等数据集 with zipfile.ZipFile('./jaychou_lyrics.txt. ...

  6. 十 | 门控循环神经网络LSTM与GRU(附python演练)

    欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! 目录: 门控循环神经网络简介 长短期记忆网络(LSTM) 门控制循环单元(GRU) ...

  7. TensorFlow系列专题(八):七步带你实现RNN循环神经网络小示例

    欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! [前言]:在前面的内容里,我们已经学习了循环神经网络的基本结构和运算过程,这一小节 ...

  8. TensorFlow系列专题(七):一文综述RNN循环神经网络

    欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! 目录: 前言 RNN知识结构 简单循环神经网络 RNN的基本结构 RNN的运算过程 ...

  9. 【学习笔记】循环神经网络(RNN)

    前言 多方寻找视频于博客.学习笔记,依然不能完全熟悉RNN,因此决定还是回到书本(<神经网络与深度学习>第六章),一点点把啃下来,因为这一章对于整个NLP学习十分重要,我想打好基础. 当然 ...

  10. [Pytorch框架] 2.5 循环神经网络

    文章目录 2.5 循环神经网络 2.5.1 RNN简介 RNN的起因 为什么需要RNN RNN都能做什么 2.5.2 RNN的网络结构及原理 RNN LSTM GRU 2.5.3 循环网络的向后传播( ...

随机推荐

  1. tcpdump 常用命令

    最后更新时间 2021-10-05. Linux 的命令太多,tcpdump 是一个非常强大的抓包命令. 有时候想看线上发生的一些问题: nginx 有没有客户端连接过来-- 客户端连接过来的时候 P ...

  2. 河南省CCPC大学生程序设计竞赛赛后总结yy

    这次的ccpc总体来说,取得的成绩并不理想,首先是题目解决的数量较少,其次是罚时太多了.开始也是找到了签到题,按理说应该不难拿下,虽然大家解决这道签到题都不是很快,但是我们小队在比赛已经过去两个小时左 ...

  3. EC600U-4G模组,连接阿里云测试服务器和物联网平台

    原博主视频:https://www.bilibili.com/video/BV1yT4y1P7Gw?share_source=copy_web 连接阿里云服务器 !!需要公网ip(服务器)才能远程,不 ...

  4. 西门子HMI切换页面时的指示功能

    怎么样才能做到像这样按下切换界面的按钮,切换过去之后对应的切换按钮还进行高亮指示呢? 首先我们要先新建模板,把我们的画面拖拽到模板里就会形成按钮 在画面的"属性"中 在属性中选上我 ...

  5. Linux下定时清空某个文件

    问题 在一台单点机器部署完成且运行一段时间后,发现页面接口报错,登上机器发现磁盘满了.通过du -lh --max-depth=1 和 du -sh * 找出是哪个文件. 发现是 项目中 stdout ...

  6. 磁盘问题和解决: fsck,gdisk,fdisk等

    错误: Resize inode not valid 对于gpt分区的硬盘一般fsck只能检查分区, 不能用于检查整个硬盘, 但是如果对硬盘设备运行时遇到这样的错误 $ sudo fsck -n /d ...

  7. VUE3、ElementPlus 重构若依vue2 表单构建功能

    Vue3 + ElementPlus + Vite 重构 若依Vue2 表单构建功能 若依官方的Vue3 版本发布已经有段时间了,就是这个表单构建功能一直没有安排计划去适配到Vue3! 前段时间公司需 ...

  8. VScode 中golang 单元测试,解决单元测试超时timeout30s

    目的:单元测试的主要目的是验证代码的每个单元(函数.方法)是否按照预期工作. 提示:解决单元测试超时30s的问题在序号4 1 准备以_test.go结尾文件和导入testing包 在命名文件时需要让文 ...

  9. BTC中的数据结构

    BTC中的数据结构 普通指针 普通指针存储的是某个结构体在内存中的地址(假如P是指向一结构体的指针,那么P里面存放的就是该结构体在内存中的起始位置) Hash pointer(哈希指针) 对于如下的节 ...

  10. AI 与智能化 API 治理的探索实践

    7月 Eolink 受邀参加 QECon 2023 全球软件质量&效能大会(北京站).Eolink CEO 刘昊臻,发表了主题为「AI 与智能化 API 治理的探索实践」的演讲,分享 Eoli ...