1 概念

循环神经网络 (Recurrent Neural Network, RNN) 是一类具有短期记忆能力的神经网络. 它与深层神经网络、卷积神经网络不同的是, 它不仅接收其他神经元的信息, 同时也可以接收自身的信息, 形成了一种具有闭环的网络结构, 这也是它“循环”的来由.
具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中, 即隐藏层之间的节点不再无连接而是有连接的, 并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出.

RNN目前应用领域:

  • 语音识别: 输入的语音数据, 生成相应的语音文本信息. 比如微信的语音转文字功能.
  • 机器翻译: 不同语言之间的相互转换. 像有道翻译、腾讯翻译官等.
  • 音乐生成: 使用RNN网络生成音乐, 一般会用到RNN中的LSTM算法 (该算法可以解决RNN网络中相距较远的节点梯度消失的问题).
  • 文本生成:利用RNN亦可以生成某种风格的文字.
  • 情感分类: 输入文本或者语音的评论数据, 输出相应的打分数据.
  • DNA序列分析: 输入的DNA序列, 输出蛋白质表达的子序列.
  • 视频行为识别: 识别输入的视频帧序列中的人物行为.
  • 实体名字识别: 从文本中识别实体的名字.

2 隐层


给定一个输入序列 X={x1,x2,…,xt}\mathbf{X} =\{x_1, x_2, \dots, x_t\}X={x1​,x2​,…,xt​}, 循环神经网络通过下面公式更新带反馈边的隐藏层的活性值 hth_tht​:
ht=f(ht−1,xt)h_t = f(h_{t-1},x_t)ht​=f(ht−1​,xt​)
其中 h0=0h_0=0h0​=0, 函数 fff 为一个非线性函数, 可以是一个前馈网络.
也可以写成
ht=g(whxxt+bhx+whhht−1+bhh)h_t=g(w_{hx}x_t+b_{hx}+w_{hh}h_{t-1}+b_{hh})ht​=g(whx​xt​+bhx​+whh​ht−1​+bhh​)
激活函数 ggg 通常为 tanh⁡\tanhtanh.
那么输出序列 Y={y1,y2,…,yt}\mathbf{Y} = \{y_1, y_2, \dots, y_t\}Y={y1​,y2​,…,yt​} 中 yty_tyt​ 为
yt=wyhh0+byhy_t = w_{yh}h_0 + b_{yh}yt​=wyh​h0​+byh​
注意, 此处不再有激活函数

3 例子

Train a model to learn (with pytorch):

  • “hello” —> “ohlol”
import torch
import torch.nn.functional as FinputSize = 4
hiddenSize = 4
batchSize = 1word = ['e', 'h', 'l', 'o']
xData = [1, 0, 2, 2, 3]
yData = [3, 1, 2, 3, 2]# onehotLookup = [[1, 0, 0, 0],
#                 [0, 1, 0, 0],
#                 [0, 0, 1, 0],
#                 [0, 0, 0, 1]]
# xOnehot = [onehotLookup[x] for x in xData]xOnehot = F.one_hot(torch.tensor(xData), len(word))
xOnehot = xOnehot.float()
inputs = xOnehot.view(-1, batchSize, inputSize)# print(xOnehot)
# inputs = torch.Tensor(xOnehot).view(-1, batchSize, inputSize)labels = torch.LongTensor(yData)class Net(torch.nn.Module):def __init__(self, inputSize, hiddenSize, batchSize, numLayers=1):super(Net, self).__init__()self.numLayers = numLayersself.inputSize = inputSizeself.hiddenSize = hiddenSizeself.batchSize = batchSizeself.rnn = torch.nn.RNN(self.inputSize, self.hiddenSize, self.numLayers)def forward(self, input):hidden = torch.zeros(self.numLayers, self.batchSize, self.hiddenSize)out, _ = self.rnn(input, hidden)  # _ the last one for outout = out.view(-1, self.hiddenSize)return outmodel = Net(inputSize, hiddenSize, batchSize, numLayers=1)lossFunction = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.05)for epoch in range(15):optimizer.zero_grad()predict = model(inputs)loss = lossFunction(predict, labels)loss.backward()optimizer.step()_, index = predict.max(dim=1)index = index.data.numpy()print("Predicted:", "".join(word[i] for i in index), end='')print(", Epoch[%d/15] lossAll= %.4f" % (epoch + 1, loss.item()))

输出部分

Predicted: ohhhh, Epoch[1/15] lossAll= 1.3558
Predicted: oholo, Epoch[2/15] lossAll= 1.2035
Predicted: oholl, Epoch[3/15] lossAll= 1.1030
Predicted: oooll, Epoch[4/15] lossAll= 1.0328
Predicted: ooool, Epoch[5/15] lossAll= 0.9791
Predicted: ooool, Epoch[6/15] lossAll= 0.9326
Predicted: ohool, Epoch[7/15] lossAll= 0.8878
Predicted: ohool, Epoch[8/15] lossAll= 0.8444
Predicted: ohool, Epoch[9/15] lossAll= 0.8042
Predicted: ohlol, Epoch[10/15] lossAll= 0.7684
Predicted: ohlol, Epoch[11/15] lossAll= 0.7366
Predicted: ohlol, Epoch[12/15] lossAll= 0.7081
Predicted: ohlol, Epoch[13/15] lossAll= 0.6821
Predicted: ohlol, Epoch[14/15] lossAll= 0.6580
Predicted: ohlol, Epoch[15/15] lossAll= 0.6354Process finished with exit code 0

https://blog.csdn.net/qq_32241189/article/details/80461635
https://www.jianshu.com/p/aca535702242
https://www.bilibili.com/video/BV1Y7411d7Ys?p=12

初识循环神经网络(RNN)相关推荐

  1. 深度学习 -- TensorFlow(9)循环神经网络RNN

    目录 一.循环神经网络RNN介绍 二.Elman network && Jordan network 三.RNN的多种架构 1.一对一 2.多对一 3.多对多 4. 一对多 5.Seq ...

  2. 循环神经网络(RNN、LSTM、GRU)

    循环神经网络(RNN.LSTM.GRU) 目录 循环神经网络(RNN.LSTM.GRU) 概述: 计算: LSTM(长短记忆模型): GRU:

  3. 「NLP」 深度学习NLP开篇-循环神经网络(RNN)

    https://www.toutiao.com/a6714260714988503564/ 从这篇文章开始,有三AI-NLP专栏就要进入深度学习了.本文会介绍自然语言处理早期标志性的特征提取工具-循环 ...

  4. 深度学习~循环神经网络RNN, LSTM

    目录 1. 循环神经网络RNN 1.1 RNN出现背景 1.2 RNN概念 2. LSTM 2.1 LSTM出现背景 2.2 LSTM结构 参考 1. 循环神经网络RNN 1.1 RNN出现背景 pr ...

  5. 循环神经网络(RNN, Recurrent Neural Networks)介绍

    循环神经网络(RNN, Recurrent Neural Networks)介绍   循环神经网络(Recurrent Neural Networks,RNNs)已经在众多自然语言处理(Natural ...

  6. DL之RNN:循环神经网络RNN的简介、应用、经典案例之详细攻略

    DL之RNN:循环神经网络RNN的简介.应用.经典案例之详细攻略 目录 循环神经网络RNN的简介 1.RNN的分类 1.RNN的常见算法分类 2.RNN的三种分类

  7. 【NLP】 深度学习NLP开篇-循环神经网络(RNN)

    从这篇文章开始,有三AI-NLP专栏就要进入深度学习了.本文会介绍自然语言处理早期标志性的特征提取工具-循环神经网络(RNN).首先,会介绍RNN提出的由来:然后,详细介绍RNN的模型结构,前向传播和 ...

  8. Pytorch实现基本循环神经网络RNN (3)

    1.47.Pytorch实现基本循环神经网络RNN (3) Recurrent Neural networks(Rumelhart, 1986)主要用来处理序列型数据,具有对以往数据的记忆功能.下图所 ...

  9. [Python人工智能] 十二.循环神经网络RNN和LSTM原理详解及TensorFlow编写RNN分类案例

    从本专栏开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前一篇讲解了TensorFlow如何保存变量和神经网络参数,通过Saver保存神经网络,再通过Restore调用训练好的 ...

  10. 循环神经网络(RNN)相关知识

    文章目录 RNN概述 前向传播公式 通过时间反向传播(BPTT) RNN确定序列长度方式 其他RNN结构 基于RNN的应用 1,序列数据的分析 2,序列数据的转换 3,序列数据的生成 RNN的不足 1 ...

最新文章

  1. 做为前端开发者,你应该要懂的 http协议
  2. 6、Hive的特殊分隔符处理
  3. Win7安装64位CentOS 6.4双系统详细过程
  4. CQRS, Task Based UIs, Event Sourcing agh!
  5. IOS8如何获取当前UIViewController
  6. 浅析C#发送短信的原理
  7. linux文本工具总结,Linux 文本工具
  8. 软件体系架构课下作业07
  9. 传统进销存软件上云势在必行
  10. Java项目文件目录结构介绍
  11. Java密码学原型算法实现——第三部分:双线性对
  12. linux比较两个文件的不同
  13. 我的移植经验之谈,简单的Rom移植教程——附移植JoyOS实例
  14. 华为服务器操作系统筹备开源社区,华为开源服务器操作系统EulerOS 开源社区年内上线...
  15. 金融量化 — 配对交易策略 (Pair Trading)
  16. 【BZOJ4372】烁烁的游戏(点分树)
  17. Ryu 安装过程中的问题
  18. 华为机考108题(c++)(52-61)
  19. BigDecimal 元转分-加减乘除、百分比
  20. Google Authenticator windows client 谷歌身份验证器 windows 电脑端

热门文章

  1. 体验WebEx网络会议
  2. 给浪费时间找种方法?
  3. 注意力机制介绍(attention)
  4. 数据--第25课 - 队列课后练习
  5. openjudge-1664 放苹果
  6. PHP+crontab 完美实现定时任务
  7. webpack多页面构建优化不完全指北
  8. linux 常见基础命令
  9. Brettle.Web.NeatUpload.dll大文件上传控件使用详解
  10. 如何判断某版本的.NET Framework是否安装