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

2023-11-08

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)

可以看到,他就是一个多层的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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

论文阅读 - RNN生成文本《Generating Sequences With Recurrent Neural Networks》 的相关文章

随机推荐