热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

神经网络基础循环神经网络

在深度学习的路上,从头开始了解一下各项技术。本人是DL小白,连续记录我自己看的一些东西,大家可以互相交流。

本文参考:本文参考吴恩达老师的Coursera深度学习课程,很棒的课,推荐 

本文默认你已经大致了解深度学习的简单概念,如果需要更简单的例子,可以参考吴恩达老师的入门课程:

http://study.163.com/courses-search?keyword=%E5%90%B4%E6%81%A9%E8%BE%BE#/?ot=5

转载请注明出处,其他的随你便咯

一、前言

循环神经网络(Recurrent Neural Network,RNN)是一类用于处理序列数据的神经网络。我们在深度学习的学习过程中,会碰到很多序列类型的问题,这时候普通的的神经网络在处理这类问题的时候不适用,所以提出了这种特别的神经网络,在自然语言处理情形下,很有优势。

二、序列模型

我们在深度学习的领域,经常能碰到如下的一些问题:

  • 语音识别:将输入的语音信号直接输出相应的语音文本信息。无论是语音信号还是文本信息均是序列数据。
  • 音乐生成:生成音乐乐谱。只有输出的音乐乐谱是序列数据,输入可以是空或者一个整数。
  • 情感分类:将输入的评论句子转换为相应的等级或评分。输入是一个序列,输出则是一个单独的类别。
  • DNA序列分析:找到输入的DNA序列的蛋白质表达的子序列。
  • 机器翻译:两种不同语言之间的想换转换。输入和输出均为序列数据。
  • 视频行为识别:识别输入的视频帧序列中的人物行为。
  • 命名实体识别:从输入的句子中识别实体的名字。

神经网络基础-循环神经网络

在这些问题中,我们的输入值和输出值,并不是固定长度,也可能需要根据的上下文来判断。我们先给出一个普通神经网络模型:

神经网络基础-循环神经网络

首先给出数学符号定义:

  • 输入x:如“Harry Potter and Herminone Granger invented a new spell.”(以序列作为一个输入),x表示输入x中的第t个符号。
  • 输出y:如“1 1 0 1 1 0 0 0 0”(人名识别定位),同样,用y表示输出y中的第t个符号。
  • Tx用来表示输入x的长度;
  • Ty用来表示输出y的长度;
  • x(i)表示第i个样本的第t个符号,其余同理。
  • 利用单词字典编码来表示每一个输入的符号:如one-hot编码等,实现输入x和输出y之间的映射关系。

在上图表示的神经网络中,我们发现主要存在下面俩个问题:

  1. 输入和输出数据在不同的样本中可能有不同的长度;
  2. 在不同文本中每一个位置学习的特征值不能共享,也就是说权重的最优值在每个样本都不固定。

为了改变上述问题,所以提出了循环神经网络(RNN)。

三、循环神经网络

在RNN中,我们通过延迟输出和传递时间步来解决上述两个问题。在每一个时间步中,RNN会传递一个**值到下一个时间步中,用于下一个时间步的计算。下面给出RNN的图示:

神经网络基础-循环神经网络

如上图,每个X都输入进一个NN,同时输出一个Yhat和一个a。Yhat是基于这个输入X对应的输出值,a是目标节点之前需要记忆的数据的集合。RNN是从左到右扫描数据的,同时共享每个时间步的参数。右侧是RNN的简写方式。

这是需要注意的是,在零时刻a<0>,需要初始化一个**值输入。通常输入零向量,也可以用随机数的方法来输入。

在图中红字所示的Wax、Waa和Way是权重,这三个参数在每个时间步***享(参数相同):

Wax是从输入值X到隐层a的连接权重;

Waa是从a隐层到隐层a的连接权重;

Wya是从隐层a到输出层Yhat的连接权重。

PS.上述RNN还有一个问题,每个预测值Yhat只包含了在它之前的信息,而没有使用后面的信息,这个问题可以用BRNN(双向循环神经网络)或SLTM来解决,后文会提到。

RNN的前向传播

我们给出一个RNN的结构图:

神经网络基础-循环神经网络

接下来是前向传播的步骤:

  • 构造初始**向量:a<0> = 0(向量);
  • 神经网络基础-循环神经网络
    • 我们通常用tanh作为**函数,有时也可以用ReLU;
  • 神经网络基础-循环神经网络
    • 如果是二分类问题,可以用sigmoid**函数,如果是多分类问题,可以用softmax**函数;

Note:我们可以利用矩阵的乘法,将Waa和Wax拼为Wa;将a和x拼在一起,这将就可以简化我们的前向传播公式:

神经网络基础-循环神经网络

如上简化之后,RNN的前向传播公式为:

神经网络基础-循环神经网络

RNN的反向传播

我们在进行RNN的反向传播计算时候,也是使用梯度下降法来更新RNN的参数,我们定义其损失函数为:

神经网络基础-循环神经网络

在RNN中,反向传播称为穿越时间的反向传播,因为需要通过时间步来传递。

不同类型的RNN

多对多(Tx = Ty):

在输入和输出的长度相同时,是上面例子的结构,如下图所示:

神经网络基础-循环神经网络

多对多(Tx != Ty):

在输入和输出长度不同时候,会有如下结构:

神经网络基础-循环神经网络

多对一:

比如在情感分类模型中,我们对一段语言文本进行情感判断。输入值是一个序列,而输出值只有一个值:

神经网络基础-循环神经网络

一对多:

比如在音乐生成模型中,我们输入一个音乐的类型,输出为一段音乐序列:

  神经网络基础-循环神经网络

 


推荐阅读
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
  • 本文介绍了如何在使用emacs时去掉ubuntu的alt键默认功能,并提供了相应的操作步骤和注意事项。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • 本文介绍了某点评网的搜索策略,包括名称和地址的匹配策略,模糊匹配的方法以及不同口音和拼音的近似发音。同时提供了一些例子来说明这些策略的应用。 ... [详细]
  • 3年半巨亏242亿!商汤高估了深度学习,下错了棋?
    转自:新智元三年半研发开支近70亿,累计亏损242亿。AI这门生意好像越来越不好做了。近日,商汤科技已向港交所递交IPO申请。招股书显示& ... [详细]
  • 干货 | 携程AI推理性能的自动化优化实践
    作者简介携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本࿰ ... [详细]
  • 「爆干7天7夜」入门AI人工智能学习路线一条龙,真的不能再透彻了
    前言应广大粉丝要求,今天迪迦来和大家讲解一下如何去入门人工智能,也算是迪迦对自己学习人工智能这么多年的一个总结吧,本条学习路线并不会那么 ... [详细]
  • PyTorch框架中有一个非常重要且好用的包:torchvision,该包主要由3个子包组成,分别是:torchvision.datasets、torchvision.models、torchv ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
author-avatar
欧阳火凡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有