白话机器学习-循环神经网络RNN

背景

本章将要介绍一种常用的神经网络结构 – 循环神经网络(recurrent neural network,RNN)。常规的神经网络比如全连接网络只能单独孤立的处理一个个的输入,前一个输入和后一个输入是完全没有关系的。但是,某种情况下,输入是有序列关系的,需要网络能够更好的处理序列的信息。

这种需要处理「序列数据 – 一串相互依赖的数据流」的场景就需要使用 RNN 来解决了。

典型序列数据:

  1. 文章中的文字
  2. 语音中的音频内容
  3. 股票市场的价格变动

2 递归神经网络简介

2.1 深度神经网络

传统机器学习算法严重依赖人工提取特征,在图像识别、语音识别、自然语言处理等领域的特征提取存在瓶颈。但是,基于全连接神经网络的方法也存在参数过多,无法根据数据中的时间序列信息进行特征提取。

循环神经网络在语音识别、语言模型、机器翻译等方面取得了重大突破。

全连接神经网络或卷积神经网络的模型结构特点是从输入层到隐藏层再到输出层。这些层是完全或部分连接的,但每一层之间没有连接。

考虑到这样一个问题,如果要预测一个句子的下一个词是什么,一般需要使用当前词和前一个词,因为句子中前后词之间存在逻辑关系。例如,如果当前词是“very”,如果前一个词是“algorithm”,那么下一个词很可能是“volume”,上下文之间存在逻辑关系。这种情况下,全连接神经网络和卷积神经网络都不适合,而循环神经网络非常适合这种情况,其独特的网络结构——隐藏层的节点是相连的,然后深入描述一个时间序列的当前输出与之前信息的关系。

2.2 循环神经网络

有图片,请看下图

白话机器学习-循环神经网络RNN

通过上图先对RNN的结构有一定的理解,整个RNN的网络结构由输入层、隐藏层与输出层组成,并且在隐藏层之间有相互的连接。

下面我们详细分析下RNN的网络结构中的循环体:

  • 网络结构——循环体:通过对上图左右两边的观察(按时间展开),整个网络结构类似于一个循环体,循环体包含计算等两个全连接层白话机器学习-循环神经网络RNN的。
  • 输入层:X是一个向量,它表示输入层的值,并且与隐藏层之间不是全连接,而是按照时刻进行与隐藏层之间进行对齐连接。
  • 隐藏层:S是一个向量,它表示隐藏层的值(节点数与向量S的维度相同);
  • 输出层:O是一个向量,它表示输出层的值;
  • 模型参数:U是输入层到隐藏层的权重矩阵,V是隐藏层到输出层的权重矩阵,W是隐藏层到隐藏层的权重矩阵,并且各个时刻的U、V、W矩阵共享参数。

下面我们详细分析下RNN的算法流程:

  1. 假设目前的网络处于t时刻,先分析一个循环体的运行过程,多个循环体就是单个的重复。
  2. 循环体的输入不同于普通的全连接网络。它有两个输入,两个输入需要合并。组合之后,就和普通的全连接网络没什么区别了。那么此时的输入为
  3. 输入层时刻t值白话机器学习-循环神经网络RNN
  4. 隐藏层的最后时刻值白话机器学习-循环神经网络RNN
  5. 计算时刻t的隐藏层的值,同时也是下一个时刻的输入值白话机器学习-循环神经网络RNN并且由于进行矩阵的维度拼接,可以简写为白话机器学习-循环神经网络RNN
  6. 计算时刻t的输出层的值

白话机器学习-循环神经网络RNN

  1. 至此,一个循环体的全连接过程计算完成,可以在后续白话机器学习-循环神经网络RNN等时间重复该过程。

三 实战

下面,我们通过示例构造一个RNN的网络来进一步讲解与分析RNN的网络结构。

白话机器学习-循环神经网络RNN

  • 假设隐藏层的状态的维度是2,输入层与输出层的维度都是1,并且循环体中的用于计算隐层状态的全连接层的参数白话机器学习-循环神经网络RNN假设为

白话机器学习-循环神经网络RNN

  • 假设循环体中用于计算隐藏状态的全连接层的偏置项为白话机器学习-循环神经网络RNN
  • 假设用于计算输出层的循环体中全连接层的权重为:

白话机器学习-循环神经网络RNN

  • 假设用于计算输出层的循环体中全连接层的偏置项为白话机器学习-循环神经网络RNN
  • 假设初始状态为[0, 0],在白话机器学习-循环神经网络RNN时刻输入是1,那么进行向量拼接得到[0, 0, 1],则循环体中的用于计算隐层状态的全连接层为如下,同时这个结果也将作为下一个时刻的输入状态。

白话机器学习-循环神经网络RNN

  • 那么用于计算输出层白话机器学习-循环神经网络RNN的全连接层为:

白话机器学习-循环神经网络RNN

  • 类似的推导,我们可以得到白话机器学习-循环神经网络RNN时刻的状态为[0.860, 0.884],输出为2.73。在得到循环神经网络的前向传播的结果之后,可以和其他的神经网络结构一样定义Loss损失函数。

四源代码

通过上面的讲解与分析,相信大家对RNN应该已经有了全面的理解,下面附上代码,大家可以通过代码再进行下加深理解。

#coding=utf-8
#简单的RNN网络前向传播结构实现
import numpy as np

#定义输入以及初始状态,后面的状态都是动态计算
X=[1,2]
state = [0.0,0.0]

#分开定义参数,便于计算
w_cell_state = np.asarray([[0.1,0.2],[0.3,0.4]])
w_cell_input = np.asarray([0.5,0.6])
b_cell = np.asarray([0.1,-0.1])
w_output=np.asarray([[1.0],[2.0]])
b_output = np.asarray([0.1])

for i in range(len(X)):
    before_activation = np.dot(state,w_cell_state)+X[i]*w_cell_input+b_cell
    state = np.tanh(before_activation)
    final_output = np.dot(state,w_output)+b_output
    print("before activation: ",before_activation)
    print("state",state)
    print("output:",final_output)

github地址:https://github.com/dubaokun/code/tree/master/3-Machine-Learning/2-deep-ml/rnn/rnn.py

五个支线故事

个人介绍:杜宝坤,隐私计算行业从业者,从0到1带领团队构建了京东的联邦学习解决方案9N-FL,同时主导了联邦学习框架与联邦开门红业务。
框架层面:实现了电商营销领域支持超大规模的工业化联邦学习解决方案,支持超大规模样本PSI隐私对齐、安全的树模型与神经网络模型等众多模型支持。
业务层面:业务方实现了业务的良好开局,创造了新的业务增长点,产生了显着的业务经济效益。
个人比较喜欢学习新东西,乐于钻研技术。基于从全链路思考与决策技术规划的考量,研究的领域比较多,从工程架构、大数据到机器学习算法与算法框架均有涉及。欢迎喜欢技术的同学和我交流,邮箱:baokun06@163.com

六大公众号指南

很长一段时间以来,我一直在写自己的博客。由于涉及到很多技术领域,所以对高并发高性能、分布式、传统机器学习算法和框架、深度学习算法和框架、密码安全、隐私计算、联邦学习、大数据等非常感兴趣. 参与。他领导了许多重大项目,包括零售联邦学习。博格多次与社区分享。此外,他坚持写原创文章,不少文章阅读量过万。公众号可按主题连续阅读。我已经按照学习路线对章节进行了排序。话题是公众号下方红色标记的话题。可以点击查看该主题下的多篇文章,如下图(主题分为:1、隐私计算2、联邦学习3、机器学习框架4、机器学习算法5、高性能计算6、广告算法7,程序生命),知乎账号同样可以关注专利。

白话机器学习-循环神经网络RNN

一切缘法如梦泡、露、电,应如此观。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年4月6日 下午12:21
下一篇 2022年4月6日 下午12:46

相关推荐