[RNN]从零开始学RNN,从入门到入土--part1--什么是RNN

这篇博客适合已了解普通神经网络的读者,主要介绍了RNN的概念、四种类型及其应用场景,如搜索引擎、翻译软件。文章探讨了为什么使用RNN而非普通神经网络,并通过示例解释了RNN的数据集标注和简单的RNN模型的正向传播过程。
摘要由CSDN通过智能技术生成

传送门:

part2–从零开始学RNN,从入门到入土—反向传播,语言模型
part3–从零开始学RNN,从入门到入土—GRU,LSTM

0.前言

当你点进这篇博客就已经默认你已经学习和了解的普通神经网络的构造和运算原理,如果不知道,建议先学习普通神经网络的构造和原理再来学习。这样可以让你更快的上手RNN
食用事项:

  1. 本博客对符号的命名规则为: x:输入,y:输出, g():激活函数,a:输出的激活量,b为偏置,w为权重
  2. 本博客将从理论,概念出发,所以基本没有代码(顶多一些伪代码),这样可以方便不同框架和不同语言的人进行学习
  3. 博主对神经网络了解也不是特别深,这篇博客基本上属于笔记类型,如有错误,请联系我纠正

本博客图片,教程理论来自:deeplearning.ai

1.什么是RNN?

你每天使用的搜索引擎用了RNN,翻译软件使用了RNN,语音助手也是使用RNN
这下子你对RNN在哪些场合使用有了初步的了解
同时你也可能有些疑问

  • 但为什么是RNN?
  • 传统神经网络办不到吗?
  • RNN是怎么办到输出不同长度的输出结果?
  • 什么是RNN

抱着这些疑问来开始RNN的学习吧

首先我们要弄清楚RNN的四个种类
传统神经网络:输入一个,输出一个
在这里插入图片描述
RNN:

  1. sequence-to-sequence(序列到序列):输入n个x就输出n个y在这里插入图片描述
  2. sequence-to-vector(序列到向量):输入很多x但只返回一个y在这里插入图片描述
  3. vector-to-sequence(向量到序列):输入一个x,但返回很多y在这里插入图片描述
  4. Encoder-Decoder(加密到解码):输入一个sequence-to-vector,输出vector-to-sequence,先喂给神经网络n个x,返回一个中间值k,这是sequence-to-vector(也就是encode),再将这个k通过vector-to-sequence将会返回很多y值,这是decode。在这里插入图片描述

事实上Encoder-Decoder这也是个输入一段序列返回一段序列的方法,但和sequence-to-sequence,相比有个中间环节,这个中间环节可以起到会比sequence-to-sequence更灵活的作用。比如我要翻译一段话,但是如果每种语言到另外一种语言,如果使用sequence-to-sequence,那要训练的神经网络可是非常多的,而使用Encoder-Decoder,可以先将输入语句encode成一种语言意思,再通过你想翻译成的语言的decode神经网络翻译出来,开销和运算量会小很多。
Encoder-Decoder和sequence-to-sequence最明显的区别就是:sequence-to-sequence输入输出长度一样,Encoder-Decoder输入和输出可以不一样.

如果对上面的RNN类型的介绍感到有点蒙,可以看下面的例子

在这里插入图片描述

  • 语音识别–Encoder-Decoder,输入一段音频,返回一段文字
  • 音乐生成–vector-to-sequence,输入一个字母,返回一段音乐(之前见到过有个网站可以将你输入的单词转化成音乐,哪天有空找找就放到这里)
  • 打分–sequence-to-vector,输入一段评语,返回评语所代表的评价分数
  • DNA分析–sequence-to-sequence
  • 翻译–Encoder-Decoder
  • 视频动作分析–sequence-to-vector,输入一系列图片,返回图片中的信息
  • 人名提取–sequence-to-sequence

2.RNN的数据集标注是什么样的?

举个例子
这是一段人名识别的数据集标注(等长形式:输入和输出长度相同)
在这里插入图片描述

其中
X为输入单词,Y为输出
Y的标注:
在相同位置上Y将反映出X位置上的单词是否为人名单词,并用1,0标注

在这里插入图片描述
X的标注:
建立一个单词表(可大可小,大单词表可以使识别面向的场景更多,小单词表可以通过多收集一些常用单词来提升面向的识别场景)
再给X做对应建立单词表(大小为10000)的one-hot标注,比如harry在单词表的位置为4075位,则生成一个长度为10000,在4075位上为1,其他位置为0的数组。

3.循环神经网络(recurrent neural network)

为什么不使用普通的神经网络?

在这里插入图片描述
普通的神经网络不能输出不同长度的输出
普通神经网络不能让相同的输入在不同的位置上得到相同的特征学习:
比如一个名字识别的网络,输入一段话,我的数据集只有让神经网络在位置1上学习到了harry这个单词,但如果给神经网络输入harry不在这个位置上,比如100位置上输入harry,则可能神经网络并不能准确返回100位置上是否是个人名,因为神经网络只学习到了1位置上有harry这个人名。

4.一个简单的RNN

在这里插入图片描述
正如其名,RNN是一个反复循环使用的神经网络,正如上图左侧所示,这个神经网络将先a0(一个全为0的向量)和x1,然后返回a1到下一次循环和输出y1,接下来再下一次循环里输入a1,x2返回a2,y2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值