• umich cv-6-1 循环神经网络基本知识


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

    vanilla循环网络架构

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

    img
    循环网络的核心概念大致如上图,简单来说,我们依次使用不同的输入向量和上一个状态,经过一个权重矩阵,实现更新得到新的状态,然会不断重复上述过程直至输入向量全部输入,注意这里我们采用的权重矩阵每一步循环都是相同的,我们以many to many计算图为例:
    img
    我们可以看到首先初始化w与h0,然后x1,h0一起与fw作用得到h1之后,重复上述操作,一直得到h2,h3等等,同时每个隐藏层都会输出一个y,用于表示对下一个x的预测结果,然后我们可以利用这个预测结果与实际的下一个输入向量之间的差距,作为损失,反向传播对权重矩阵进行更新。

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

    应用与理解

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

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

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

    如果我们将隐藏层可视化,并且选取其中可理解的一些结果观察,我们可以发现一些有意思的一些事情:
    img
    img
    img
    实际上隐藏层特定地学习了我们输入的文字序列中的某些信息,比如句子的长度信息,if语句信息以及注释信息等等

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

    vanilla架构的问题

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

    LSTM

    LSTM采取如下的架构:
    img
    把h层放大为4h,然后分成4个小h,每个h分别经过sigmoid,sigmoid,sigmoid以及tanh,分别得到输入门,遗忘门,输出门以及门门,其中输入门表示我们是否向神经元中输入信息,是一个介于0-1之间的值,遗忘门表示是否要遗忘上一次输入的信息,也是一个0-1之间的值,门门表示我们要向神经元中输入多少信息,输出门表述我们最终要输出多少信息
    ct" role="presentation">ct的推导式中我们也可以看出,首先f遗忘门与前一个c值哈达马积(两个矩阵对应位置元素相乘),表述我们要忘记多少上一层的信息,然后再加上i与g的哈达马积,表示我们要输入多少信息。

    img
    img
    通过这样的方法,我们实际上设计了一条新的反向传播路径,只需要先经过一个+号(我们知道反向传播梯度与上游梯度相同),然后再经过一个对应元素相乘的反向传播而不是和矩阵W相乘
    实际上这种设计与残差网络的设计有着相同的直觉,它们都提供了一条求解梯度的高速公路,来防止太长的反向传播路径
    至于LSTM这种具体结构式怎么想出来的,“it is called reasearch trial and error”hhh

    最后介绍几种不同的RNN结构的变体:
    多层RNN架构(层数一般不会太深):
    img

    GRU(与LSTM思想大致相同,只是构建了不同的高速公路)
    以及使用进化搜索研究了10000种不同的RNN架构:
    img
    实践证明我们使用LSTM架构一般就能得到较好的效果

  • 相关阅读:
    Android 四种启动方式
    java计算机毕业设计疫情下图书馆管理系统源程序+mysql+系统+lw文档+远程调试
    你不知道的cookie
    jsp 新能源汽车论坛网Myeclipse开发mysql数据库web结构java编程计算机网页项目
    C语言strcat函数再学习
    spring---第六篇
    安科瑞EMS能效管理平台降低铜电解单耗的应用-Susie 周
    测绘程序设计疑惑指导
    什么是GraphQL?它与传统的REST API有什么不同?
    dotnet 为大型应用接入 ApplicationStartupManager 启动流程框架
  • 原文地址:https://www.cnblogs.com/dyccyber/p/17798282.html