当前位置:   article > 正文

论文阅读 - RNN生成文本《Generating Sequences With Recurrent Neural Networks》_rnn论文原文

rnn论文原文

20201101 -

0. 引言

昨天在整理论文的时候,看到了这篇论文《Generating Sequences With Recurrent Neural Networks》,实际上这篇论文我很早就看了,只不过当时没有具体来理解。昨天仔细看了看,发现他的这个网络结构图,跟我之前一致理解的那种形式不太一样,挺奇怪的。

1. 其使用的网络结构图

在这里插入图片描述
这里无法理解的地方,就是为什么他的这个输入和多个隐藏层的都有关系呢?而且看下面的注释,并不是逻辑上的一个演示作用,而是实际的物理连接。该篇论文有一个博客[4]讲解了部分内容,可以从这里作为切入点。

那么基于这部分疑惑,我去搜索了这部分源码,通过[1]上的关联代码,虽然显示的是这个文章,但前面的star比较高的仓库都感觉不是这篇论文的。
在这里插入图片描述
第一个就不看了,是torch版本的,暂时没看,直接看的第二个,他们的实质内容应该是一样的,我来截取部分tensorflow的代码看看。

class Model():
    def __init__(self, args, training=True):
        self.args = args
        if not training:
            args.batch_size = 1
            args.seq_length = 1

        # choose different rnn cell 
        if args.model == 'rnn':
            cell_fn = rnn.RNNCell
        elif args.model == 'gru':
            cell_fn = rnn.GRUCell
        elif args.model == 'lstm':
            cell_fn = rnn.LSTMCell
        elif args.model == 'nas':
            cell_fn = rnn.NASCell
        else:
            raise Exception("model type not supported: {}".format(args.model))

        # warp multi layered rnn cell into one cell with dropout
        cells = []
        for _ in range(args.num_layers):
            cell = cell_fn(args.rnn_size)
            if training and (args.output_keep_prob < 1.0 or args.input_keep_prob < 1.0):
                cell = rnn.DropoutWrapper(cell,
                                          input_keep_prob=args.input_keep_prob,
                                          output_keep_prob=args.output_keep_prob)
            cells.append(cell)
        self.cell = cell = rnn.MultiRNNCell(cells, state_is_tuple=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

可以看到,他就是一个多层的RNN模型,所以这里其实挺尴尬的,也就是说,论文中图中展示的,跟实际上代码的好像不一样,不知道是什么地方我理解错了。上面的代码是我比较熟悉的,之前使用keras就是弄的这种东西。

2. 由代码引出

char-rnn的代码是由博客[3]所引出,只不过他使用的是torch。但是这个博客我之前在学习LSTM的时候看到过,很多文章都引用了他,我也仔细看过,只不过当时没有具体去看他后面生成文本的部分。他所使用的模型,就是我所熟悉的,只不过在这个里面,他是生成的序列,而不是像keras中,默认输出的最后一个状态。这里算是有所不同,但是没什么本质上的区别。

但是这里呢,最关键的是,他后面的文本生成部分的内容,他生成了小说,生成了俚语,甚至最后还有源代码,不过当然他自己也说了,可能这个源代码没有办法编译,而且可能也没有含义,但是毕竟提供了一种思路。我之前也看过利用GAN来生成DGA的文章。

3. 小节

说到底,最初的问题还是没有解决,这篇论文的图中的网络结构,到底是什么意思?这部分可能需要看他所关联的代码中更多的部分。要解决的本质问题就是,这个网络结构到底是真的,还是仅仅是抽象化的描述。

另外,就是需要考虑后续进行RNN实现相关的生成测试了

参考

[1]Generating Sequences With Recurrent Neural Networks
[2]char-rnn-tensorflow
[3]The Unreasonable Effectiveness of Recurrent Neural Networks
[4]Handwriting Generation Demo in TensorFlow

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号