HappyGu0524 / MultiControl

MIT License
43 stars 2 forks source link

About Training PriorControl #2

Open tqzhong opened 8 months ago

tqzhong commented 8 months ago

Hi, I am wondering if the parameter "adv_x_prob_loss" and "adv_z_prob_loss" will be added when conducting "train_prior_only.py" as I found that in "train_prior_only.sh" where there are no parameters mentioned above and the default of these parameters are None.

HappyGu0524 commented 8 months ago

Hi, these loss functions are not used. We tried different loss functions during our early experiments, where we discarded "adv_x_prob_loss" and "adv_z_prob_loss".

tqzhong commented 8 months ago

Thanks for your kind reply. I also have another question, there are three types of generation when generating texts (i.e. generate_combine.sh). I am wondering about the difference between optimization without constraints and optimization with constraints, and which represents the paper's results.

HappyGu0524 commented 8 months ago

The detailed differences between optimization without constraints and optimization with constraints are in Appendix F.2 of our paper PriorControl. The result used for main experiment is optimization with constraints.

tqzhong commented 8 months ago

感谢回复,我现在有个新的疑惑😂 我用一个新的多属性数据集在你们的方法上做实验,其中在multicontrol上取得了非常好的结果,但是在priorcontrol效果却一般,我看了你们的代码,priorcontrol的模型初始化应该是基于multicontrol训练后的模型吧,对然后我是用multicontrol训练的结果作为priorcontrol模型的参数初始化,然后训练了1000轮,生成上使用的是optimization with constraints,但效果比multicontrol差了一大截,不知道问题出在哪,,,超参数都是基于源代码,然后代码中的weight和std我不知道是基于什么方法设定了,所以我都设置成了1,(multicontrol的weight设置成1,priorcontrol的weight和std都设置成1) 不知道有没有我理解错的地方

HappyGu0524 commented 8 months ago

感谢回复,我现在有个新的疑惑😂 我用一个新的多属性数据集在你们的方法上做实验,其中在multicontrol上取得了非常好的结果,但是在priorcontrol效果却一般,我看了你们的代码,priorcontrol的模型初始化应该是基于multicontrol训练后的模型吧,对然后我是用multicontrol训练的结果作为priorcontrol模型的参数初始化,然后训练了1000轮,生成上使用的是optimization with constraints,但效果比multicontrol差了一大截,不知道问题出在哪,,,超参数都是基于源代码,然后代码中的weight和std我不知道是基于什么方法设定了,所以我都设置成了1,(multicontrol的weight设置成1,priorcontrol的weight和std都设置成1) 不知道有没有我理解错的地方

类似的问题我还没遇到过,我尽量给出一些可能可行的解决办法。 首先我们的PriorControl架构是完全基于MultiControl构建好的属性空间的,即PriorControl的编码器和解码器均为冻结的MultiControl,只有用于分布映射的Normalizing Flow模块需要训练。 可以先使用单属性控制生成进行测试,查看属性映射是否实现了有效训练,如果单属性控制效果较好,则表明数据集的属性分布是能够被拟合且有效表示的。 接下来在进行多属性控制时,首先需要确认的是之前训练时不同属性的数据量尽量是均衡的。在生成时可以先使用无优化方法进行测试,这个方法robustness更好。如果没法把学到分布的方差自己打印出来的话,建议多属性控制时的std一开始设置的低一点,这样效果好但多样性差。weight的调整主要是为了平衡不同属性分布的方差量级差距,简单直接的调整办法是:测试时哪个属性控制效果差就增加一点它的权重。如果能获取方差的话也可以直接去计算这个权重,相对会麻烦一点。