ChenChengKuan / SeqGAN_tensorflow

SeqGAN tensorflow implementation
MIT License
107 stars 37 forks source link

关于build_adversarial_network中loss的问题 #9

Closed fastcode3d closed 6 years ago

fastcode3d commented 6 years ago

你好,有个问题想请教一下: self.gen_loss_adv = -tf.reduce_sum( tf.reduce_sum( tf.one_hot(tf.to_int32(tf.reshape(self.input_seqs_adv, [-1])), self.num_emb, 1.0, 0.0) tf.log( tf.clip_by_value(tf.reshape(self.softmax_list_reshape, [-1, self.num_emb]), 1e-20, 1.0) ), 1) tf.reshape(self.rewards, [-1])) 请问下面这一项的作用是什么?对应原论文中的哪部分? tf.clip_by_value(tf.reshape(self.softmax_list_reshape, [-1, self.num_emb]), 1e-20, 1.0) 我大概理解这个self.softmax_list_reshape里存放了input进入lstm+softmax后的输出,所以大概是一个概率值。 我的理解是这个loss对执行了的action动作的reward进行了求和,但好像不需要用到上面一项(虽然进行反向传播的话好像是需要的,我有点混乱),我结合原文看了半天,但还是没找到这部分对应的理解

ChenChengKuan commented 6 years ago

這这一项就是在算paper里的eq (1)

fastcode3d commented 6 years ago

这样理解可以吗? tf.clip_by_value(tf.reshape(self.softmax_list_reshape, [-1, self.num_emb]), 1e-20, 1.0) 对应了eq(1)中G输出的概率值,也就是选择这个动作的概率 tf.one_hot(tf.to_int32(tf.reshape(self.input_seqs_adv, [-1])), self.num_emb, 1.0, 0.0) 对应了G执行动作后的状态转移矩阵,非0即1?含义是只有执行的动作才会算reward tf.reshape(self.rewards, [-1])对应eq(1)中的Q,也就是reward。

ChenChengKuan commented 6 years ago

可以这麽理解

fastcode3d commented 6 years ago

这个实现版本的seqGAN让我加深了不少理解,多谢