神经网络学习笔记-02-循环神经网络

神经网络学习笔记-02-循环神经网络

本文是根据WildML的Recurrent Neural Networks Tutorial写的学习笔记。

循环神经网络

循环神经网络适用于处理序列化信息,比如:语言翻译,语音识别等。

如果,我们要实现一个翻译功能。首先需要理解原句中每个单词的含义。 这就需要根据上下文来理解。 假如:原句中的每个单词,以此对应神经网络中一个隐藏层。 在传统的神经网络框架中,隐藏层直接传递的是一个矢量Out。 这个Out矢量是原句当前每个词的一个输出,比如:含义等等。 那么,如何保存和传递上下文这个信息呢? 循环神经网络提出一个状态(state)的概念,用于传递上下文

循环神经网络框架的一点解释

与传统的神经网络架构有许多不同之处。

  • 输入方式不同 传统的神经网络架构是静态输入,输入数据在开始前已经准备好了,并且一次全部从输入层导入。 循环神经网络是动态输入,每个隐藏层有一个输入,表示在时间t上的输入。
  • 隐藏层,每层的节点数不同 传统的神经网络架构,每个隐藏层有多个节点。 循环神经网络,每个隐藏层有一个节点。
  • 输出不同 循环神经网络,每个隐藏层有两个输出: output和state。
  • 权重 循环神经网络需要计算三个权重(w, b),分别是\(U,V,W\)。 这三个权重是在隐藏层上共享的。

原文的例子

原文中计划实现一个循环神经网络,用于发现自然语言句子中单词出现的模式,最终可以生成一些合理的句子。

  • 数据来源 原文中,从网上下载了很多条句子(英文的)。
  • 数据的前期处理 首先,统计了所有单词(包括标点符号)。 取出最常见的7997单词,并且编号,每个单词有一个token。 设置了3个特殊的token: UNKNOWN_TOKEN:匹配没有在8000列表中的单词。 SENTENCE_START: 表示句子开始。 SENTENCE_END: 表示句子结束。
  • 输入和输出 输入x的维度是8000,意味着可以接受的句子长度最大是8000。 输出y的维度是8000,和x一一对应。 下面是一个句子构造后的实际例子: x: SENTENCE_START what are n't you understanding about this ? ! [0, 51, 27, 16, 10, 856, 53, 25, 34, 69] y: what are n't you understanding about this ? ! SENTENCE_END [51, 27, 16, 10, 856, 53, 25, 34, 69, 1]

理解:y的每n位是x前n位的期望输出。

每个输入\(X_t\)(尽管有8000维),只有一个维度有值且为1,代表第\(t\)的单词的token的维度。 比如:what的token是51。那么\(X_t\)只有第51位为1,其它都是0。 这个叫做one-hot vector。 输出:每个token的可能性。

state的维度是100。

  • 计算公式和维度

s_t = tanh(x_tU + s_{t_1}W) \\ o_t = softmax(s_tV) \\ where \\ x_t.dimension = 8000 \\ o_t.dimension = 8000 \\ s_t.dimension = 100 \\ U.dimension = 100 * 8000 : x_tU \text{ is a 100 dimension vector} \\ W.dimension = 100 * 100 : s_{t-1}W \text{ is a 100 dimension vector} \\ V.dimension = 8000 * 100 : s_tV \text{ is a 8000 dimension vector}

  • 初始化U,V,W 初始化很重要。跟激活函数(这里是tanh)有关。 U,V,W每个元素是一个位于区间\(\left [ -\sqrt{n}, \sqrt{n} \right ]\)的随机数。\(n\)是输入数的长度。

循环神经网络训练流程

长短期记忆网络 - LSTM (Long Short Term Memory) Network

i = \sigma(U^ix_i + W^is_{t-1} + b^i) \\ i \text{: input gate, defines how much of the newly computed state for the current input you want to let through.} \\ f = \sigma(U^fx_i + W^fs_{t-1} + b^f) \\ f \text{: forget gate, defines how much of the previous state you want to let through.} \\ o = \sigma(U^ox_i + W^os_{t-1} + b^o) \\ o \text{: output gate, defines how much of the internal state you want to expose to the external network.} \\ g = tanh(U^gx_i + W^gs_{t-1} + b^g) \\ g \text{: a candidate hidden state.} \\ c_t = c_{t-1} \circ f + g \circ i \\ c_t \text{: the internal memory of the unit.} \\ s_t = tanh(c_t) \circ o

门控循环单元 - GRUs (Gated Recurrent Units)

先看看计算公式: x_e = Ex_t \\ z = \sigma(U^zx_e + W^zs_{t-1} + b^z) \\ r = \sigma(U^rx_e + W^rs_{t-1} + b^r) \\ h = tanh(U^hx_e + W^h(s_{t-1} \circ r) + b^h) \\ s_t = (1 - z) \circ h + z \circ s_{t-1} \\ o_t = Vs_t + c

参照

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习养成记

缺失值处理(r语言,mice包)

对缺失值的处理是数据预处理中的重要环节,造成数据缺失的原因有:数据丢失、存储故障和调查中拒绝透露相关信息。这里我们使用VIM包中的sleep数据集为样本,介绍缺...

74370
来自专栏Spark学习技巧

基于Spark Mllib的文本分类

基于Spark Mllib的文本分类 文本分类是一个典型的机器学习问题,其主要目标是通过对已有语料库文本数据训练得到分类模型,进而对新文本进行类别标签的预测。这...

26380
来自专栏大数据挖掘DT机器学习

机器学习模型的特性

机器学习模型中有许多种不同方法可以用来解决分类和回归问题。对同一个问题来说,这些不同模型都可以被当成解决问题的黑箱来看待。然而,每种模型都源自于不同的...

354110
来自专栏深度学习那些事儿

理解深度学习:与神经网络相似的网络-自编码器(上)

本篇文章可作为<利用变分自编码器实现深度换脸(DeepFake)>(稍后放出)的知识铺垫。

19080
来自专栏专知

【干货】对抗自编码器PyTorch手把手实战系列——PyTorch实现自编码器

即使是非计算机行业, 大家也知道很多有名的神经网络结构, 比如CNN在处理图像上非常厉害, RNN能够建模序列数据. 然而CNN, RNN之类的神经网络结构本身...

68670
来自专栏深度学习与数据挖掘实战

干货|深度学习面试问答集锦

No.19 CNN中,conv layer、ReLu layer、Pooling layer、Fully connected layer的区别?

13240
来自专栏机器学习原理

图像处理和数据增强图片处理数据增强颜色空间转换噪音数据的加入样本不均衡

81640
来自专栏AI科技大本营的专栏

福利 | Keras入门之——网络层构造

《Keras快速上手:基于Python的深度学习实战》系统地讲解了深度学习的基本知识、建模过程和应用,并以深度学习在推荐系统、图像识别、自然语言处理、文字生成和...

51550
来自专栏刘明的小酒馆

图片相似检测:三行代码实现

检查两个图片的相似度,一个简单而快速的算法:感知哈希算法(Perceptual Hash),通过某种提取特征的方式为每个图片计算一个指纹(哈希),这样对比两个图...

63350
来自专栏人工智能LeadAI

线性回归与最小二乘法 | 机器学习笔记

这篇笔记会将几本的线性回归概念和最小二乘法。 在机器学习中,一个重要而且常见的问题就是学习和预测特征变量(自变量)与响应的响应变量(应变量)之间的函数关系 ...

35870

扫码关注云+社区

领取腾讯云代金券