赵哲焕 Clock work RNN(CW-RNN)

2024-05-07 15:38
文章标签 rnn work clock cw 赵哲焕

本文主要是介绍赵哲焕 Clock work RNN(CW-RNN),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CW-RNNICML2014上提出的一篇论文,与LSTM模型目的是相同的,就是为了解决经典的SRN对于长距离信息丢失的问题。但是与LSTM(基于三个门进行过滤和调节)的思想完全不同,CW-RNN利用的思想非常简单。下面介绍一下CW-RNN

提出我们要解决的问题:我们要做的事情是序列标注问题,输入时一个序列,输出是对应的标签序列。如下:

Input   =       (X1,  X2,   … ,    Xt-1,          Xt,    …)

Output =       (Y1,  Y2,   …,     Yt-1,          Yt,    …)

首先,介绍一下SRN(就是经典的RNN),因为CW-RNN是在SRN基础上进行的简单改进。

1

1就是SRN的结构图,相对于多层感知,区别在于多了红色连线的边对隐含层节点进行了全连接。就靠这张图可能不容易理解,图2对红色边进行了进一步地展开,以便大家理解SRN模型。

2

我们可以看到,红色边是有时序性的。它们是从上一个时刻(t-1)的隐含层的节点到这一刻(t)的隐含层节点的全连接。

如果我们进一步在时序上进行展开,就会得到图3所示的结构。

3


                                          1


  
 

                                           2

公式1和公式2给出了SRN的前馈计算步骤。

回顾了SRN模型,那CW-RNNSRN的基础上进行了什么样的改进呢?我们可以对比一下图4和图1

4

对比中我们可以发现他们存在区别(也就是CW-RNN的改进):

1,  把隐含层节点分成了若干个模块(在图4中分成了3个模块,是为了方便说明,实际中的模块个数可以自定义),而且每个模块都分配了一个时钟周期(Ti),便于独立管理。

2,  隐含层之间的连接,一个模块内部是全连接,但是模块之间是有方向的。模块之间的连接是从高时钟频率的模块指向低时钟频率的模块。

那么这些改进,具体是如何实现的呢?首先,它把公式一中的两个参数(WxWh)根据模块的个数分成了相应的模块。如公式3和公式4.

                                                                 3

                                                                   4

运算的时候,会选择部分模块参与运算,不参与运算的模块就置0.具体操作通过公式5实现。其中,本文中。这个也可以根据自己的实际情况进行改进。

                       5

这样实现了分块管理,那模块之间连接的方向(高时钟频率模块指向低时钟频率模块)是如何实现的呢?这个也非常简单,利用公式6就可以实现。公式6强制性地把Wh参数矩阵设置成上三角阵。那为什么设置成上三角就可以完成方向的控制了呢?看下面的例子就容易理解了。

                                     6

让我们看一个具体的例子来进一步理解他们运行的过程吧。看图5

5

如图5所示,当我们要处理序列中第6t=6)个元素的时候,通过t与每个模块的时钟周期进行MOD(求余数)计算后可以得到只有前两个模块会参与运算。所以WhWx矩阵除了上面两行之外,其他元素的值都是0。经过计算之后,得到的ht也只有前两个模块有值。所以,我们也可以把CW-RNN过程看成是通过一些人工的干预,选择不同的隐含层节点进行工作。

现在回答上面遗留下的问题,我们如何通过上三角矩阵实现模块之间的单项传播的呢?

我们先不考虑WxXt之间的计算(因为这部分不涉及到隐含层模块之间的传播问题)。我们看看隐含层第二个模块的计算过程,它是通过Wh的第二行和ht-1向量进行内积得到的。现在Wh的第二行第一个模块对应的值是0(上三角嘛),所以它与ht-1内积运算的过程中,ht-1的第一个模块中的值很自然就被忽略掉了(乘以0)。所以ht的第二个模块的值是ht-1的第二个模块之后所有模块的加权和。也可以看成是ht-1的大于等于第二个模块的所有模块传向ht的第二个模块。如果Wh不是上三角阵,那么ht-1的第一个模块就不会被忽略,导致ht-1的所有模块的加权和传到了ht的第二个模块。所以上三角矩阵可以实现上一个时刻的高时钟周期的隐含层模块传向当前时刻的低时钟周期的隐含层模块。

CW-RNN的工作过程基本就解释完了,那为什么这样就可以提升效果呢?我们分析一下这样分模块管理的好处。

先给出每个模块的时钟周期。本文时钟周期计算方法:


  
 

 



1. t为不同的时刻值。当t=16时,表示当前输入为序列中第十六个元素。红色星型符号表示在当前时刻,参与运算的模块。是否参与运算通过公式5得到。

1中给出了每个时刻参与运算的模块。我们可以分析得到如下结论:

1.       第一个模块每次都会参与运算。

2.       随着时间的推移,参与运算的模块数会越来越多。或者说,高时钟频率的模块只有在后面的时刻参会参与到运算中。

这样我们可以推测一下,近距离的信息需要经常更新,所以由低时钟频率的模块主要处理,而那些长距离的信息(t比较大的,这时要考虑前面的信息,距离比较远),就由那些高时钟周期的模块来处理。这样模块就有了明确的分工,长距离的信息也得到了比较好的处理

说了这么多CW-RNN,那它的性能到底如何呢?尤其是与已经成名已久,在各个领域都得到认可的LSTM比较呢?我们从两个方面分析一下吧。从模型的原理和实验结果。

从模型的原理上分析的话,还需要回顾一下LSTM模型

LSTM是由igate(输入门),fgate(忘记门),ogate(输出门)进行调节和过滤得到的结果。这些门都是每个元素的值在01之间的实数构成的向量。它会与对应的向量进行内积进而得到过滤(忘记)的过程。当对应的门值接近零的时候,对应的信息就会大大减弱(忘记),相反如果接近1的话,就会大部分保留。

在这里我们考虑比较极端的情况,假设每个门中元素的值要么是0要么是1。我们首先看一下c~t(通过公式可以看出它计算得到的就是SRN的隐含层值)。我们首先考虑ct中第一部分用红框框起来的部分。用输入门过滤后就会使部分隐含层被过滤掉。做到这里,是不是觉得有些类似CW-RNN。都是通过一些方法使部分隐含层的值为0,或者破坏掉部分隐含层的值。只不过CW-RNN比较多的是人工干预,而LSTM是通过计算自动选择部分隐含层节点。LSTM在过滤部分隐含层节点的基础上,还考虑到了上一层细胞状态(ct-1准隐含层值,经过输出门的调节得到隐含层值),通过忘记门(fgate)选择部分上次细胞状态添加进来,最后用输出门(ogate)再进一步进行调节。

从公式的分析可以得到如下结论:

LSTM的功能要比CW-RNN强大很多,而且实现方法也是优雅很多。CW-RNN只是每次选择部分隐含层进行工作,而这只是LSTM功能(还包括忘记门和输出门的调节)的子集。而且CW-RNN有太多人工成分,分模块和时钟频率等等,而LSTM都是自动学到,比较智能。

再从实验中分析,论文1中说,CW-RNN要比LSTM好,但是它实验设置是两个模型训练的时间是一样的。也就是说迭代次数相同。但是LSTM的模型要比CW-RNN复杂很多,一个复杂的模型想要训练好,那么需要的时间肯定也会更长,所以我觉得这种实验设置得到的结果没有可比性。而且再看论文2中的实验效果,CW–RNN并没有比经典的SRN好多少。而LSTM在业界,很多领域都已经公认要比SRN好很多。

但是有一点需要承认,CW-RNN的时间复杂度要比SRN还要低,因为它每次更行参数都是选择部分更新,而不是全部,相比之下,LSTM在时间上肯定要比CW-RNN慢很多,看它的那些公式,那些需要训练的参数就不难得到这种结论了。

综上,CW-RNN的性能有待进一步的考验,目前看来,并没有论文1中说的那么神奇。

这篇关于赵哲焕 Clock work RNN(CW-RNN)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967772

相关文章

RNN循环卷积神经网络

1.定义 RNN (Recurrent Neural Network,RNN)循环卷积神经网络,用于处理序列数据。 序列数据:按照一定的顺序排列的数据,可以是时间顺序、空间顺序、逻辑顺序。 eg:电影、语言 2.特点 传统神经网络模型无法处理可变长度的输入。 传统神经网络模型 传统神经网络模型无法处理可变长度的输入,但是RNN通过循环的方式对当前输入和历史输入进行处

xamarn.android binding parse sdk for a week to work

Xamarin.Android PackageName 需要设置为项目命名空间且全小写。 http://blog.csdn.net/jameszhou/article/details/41806377

RNN/LSTM/GRU/TRANFORMER/编码器解码器理解

编码器和解码器是一种框架,lstm和gru都是这个框架中对这一框架的不同实现 编码器与解码器是一种架构,一种思想,注意力也是一种思想,相互独立,只是二者可以结合以用来训练模型可以提升模型能力 rnn gru lstm是三种不同的模型 里面并没有注意力机制这回事 RNN中有编码器和解码器实现,为什么要重新使用gru定义解码器和编码器? 编码器和解码器是一种思想,工业界实现目前也仅仅使用一个,但是通过

【机器学习300问】129、RNN如何在情感分析任务中起作用的?

情感分析是自然语言处理(NLP)领域的一个重要分支,它的目标是自动检测和提取出非结构化文本数据中的主观信息(比如:情绪、意见、评价等) 一、情感分析任务案例         分析电商产品评论的情感倾向(三分类),自动分析顾客提交的产品评论,以了解他们对某个商品的整体满意度(积极、消极、中性)。 举例:“我刚收到这款智能手表,外观设计真的很时尚,电池续航能力也超出我的

SharePoint At Work----SharePoint Data View Web Part

添加DVWP(数据视图Web部件) 1. SharePoint Designer中打开页面,光标放置在要添加DVWP的地方。建议使用拆分模式。 2. 插入----数据视图----空白数据视图。         如果你选择了某个列表或库,你将得到一个XLV而不是DVWP。         你将看到页面上你的DVWP。现在你只有DVWP的外壳,它声明其主要特征。典型的外壳可能

动画图解RNN, LSTM 和 GRU,没有比这个更直观的了!

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶” 作者:Raimi Bin Karim 编译:ronghuaiyang 前戏 RNN, LSTM 和 GRU是3个非常常用的循环神经网络,这三个东西里面的内部结构又是什么样的呢,很多人可能并不清楚,不过除了RNN外,其他两个也确实比较复杂,记不住没关系,看总能看明白吧,看不明白也没关系,动画演示给你看! 循环神经网络是一类人工神经网络,

rnn-人名案例实现

模型训练实现: coding: utf-8 导入torch工具 import json import torch 导入nn准备构建模型 import torch.nn as nn import torch.nn.functional as F import torch.optim as optim 导入torch的数据源 数据迭代器工具包 from torch.utils.data

pytorch - RNN参数详解

在使用 PyTorch 训练循环神经网络(RNN)时,需要了解相关类和方法的每个参数及其含义。以下是主要的类和方法,以及它们的参数和作用: 1. torch.nn.RNN 这是 PyTorch 中用于定义简单循环神经网络(RNN)的类。 主要参数: input_size:输入特征的维度。hidden_size:隐藏层特征的维度。num_layers:RNN 层的数量。nonlinearit

基本循环神经网络(RNN)

RNN背景:RNN与FNN 在前馈神经网络中,信息的传递是单向的,这种限制虽然使得网络变得更容易学习,但在一定程度上也减弱了神经网络模型的能力。 在生物神经网络中,神经元之间的连接关系要复杂的多。前馈神经网络可以看着是一个复杂的函数,每次输入都是独立的,即网络的输出只依赖于当前的输入。但是在很多现实任务中,网络的输入不仅和当前时刻的输入相关,也和其过去一段时间的输出相关。比如一个有限状态自动机,

PyTorch -- RNN 快速实践

RNN Layer torch.nn.RNN(input_size,hidden_size,num_layers,batch_first) input_size: 输入的编码维度hidden_size: 隐含层的维数num_layers: 隐含层的层数batch_first: ·True 指定输入的参数顺序为: x:[batch, seq_len, input_size]h0:[batch, n