这节课中介绍了循环神经网络的第一部分,主要介绍了循环神经网络的基本概念,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. 现代C++(Modern C++)基本用法实践:三、移动语义

    概述 移动 移动(move)语义C++引入了一种新的内存优化,以避免不必要的拷贝.在构造或者赋值的时候,如果实参是右值(或者左值由std::move转换成右值),便会匹配移动语义的函数调用如下述举例的 ...

  2. 关于 Task 简单梳理

    〇.前言 Task 是微软在 .Net 4.0 时代推出来的,也是微软极力推荐的一种多线程的处理方式. 在 Task 之前有一个高效多线程操作累 ThreadPool,虽然线程池相对于 Thread, ...

  3. MASABlazor在移动端点击保持出现悬停样式

    提出问题 最近在学习MAUIBlazor,用的MASA Blazor,发现在移动端(触屏设备)上,点击会一直显示悬停样式,如下图所示,简单研究了一下,发现这是移动端的通病. 解决问题 MASABlaz ...

  4. javascript中一些难以理解的专有名词 2(也不是很专有)

    作用域链 让人迷惑的例子 function foo() {console.log(v)} function foo1() { var v = "v1" foo() console. ...

  5. GitLab 无仓库 中了勒索病毒

    坑爹的记录一下,并没有解决 Gitlab 昨天(2021-11-29)打开之后看不到项目了,下面这个吊样子 最后发现中病毒了,一堆的这个吊毛文件,复制一个打开看了一下 你别说这个黑客网页写的还不错,这 ...

  6. OpenAI API访问速度不佳?试试用Vercel来加速!

    前言 众所周知,使用openAI API在国内访问体验并不佳,经常遇到访问较慢或者访问失败的问题.本文着重讲讲怎么解决这个问题,让我们日常开发和使用能够更方便的体验到AI带来的便利 为了帮大家省钱,也 ...

  7. node.js中kafka的封装和高并发消费限流优雅降级以及egg-kafka的封装说明

    HI!,你好,我是zane,zanePerfor是一款我开发的一个前端性能监控平台,现在支持web浏览器端和微信小程序端. 我定义为一款完整,高性能,高可用的前端性能监控系统,这是未来会达到的目的,现 ...

  8. 1.JDK的安装与卸载

    1.卸载: 卸载或更改程序,找到相应的JDK程序,删除 2.安装: 官网下载JDK程序:jdk-8u25-windows-i586.exe 双击安装程序,同意协议,更改安装路径:C:\jdk1.8.0 ...

  9. 通过Scrum实现最大生产力的五种方法

    在数字化.信息化.智能化蓬勃发展的今天,敏捷开发和Scrum已成为重塑项目管理的重要方式. 敏捷是一种体现不同方法的思维方式,包括了Scrum,看板,极限编程(XP).精益开发等众多框架. Scrum ...

  10. WASI support in Go

    原文在这里. 由 Johan Brandhorst-Satzkorn, Julien Fabre, Damian Gryski, Evan Phoenix, and Achille Roussel 发 ...