个人想法
个人认为关卡生成的本质实际上就是扩充关卡数据集,同时要保证生成的关卡可以被通过。
如果是扩充关卡数据集的话,像马里奥的话,其实就是图像生成图像(迷宫),或者是文本生成文本(因为马里奥的生成都是字符集)。
最后的关卡可通过,其实更多的就凭借A*智能体(马里奥)和一些已经训练好的智能体ACCEL(mini-grid)来测试通关即可。
扩充数据集
从这个角度上讲,扩充数据集的方法包括以下几种:
- VAE:把已有的数据集映射到标准正态分布上,在训练完成后通过在标准正太分布上采样来生成新的关卡数据;
- GAN:通过输入随机噪声(其实就是一种分布,比如正态分布),结合判别器,判别器的主要作用是判断生成的数据集是否是真实的数据集,那么实际上训练完成后得到的是随机噪声(假设是正态分布)到数据集真实分布的映射。
- 遗传算法:通常放在GAN生成后用;通过遗传和变异对已有的样本的隐变量进行进化搜索;
- 强化学习:这里有个问题是动作是怎么设计的?[同时训练两个RL智能体也比较难收敛,MDP的序列决策过程似乎并没有完全体现]
- 大语言模型:利用文本生成文本的技术,需要进一步了解一下
任务相关的生成
依托的环境:迷宫环境
主要围绕课程学习的思想,递进式地训练RL智能体,同时生成关卡。
借助一下Bisimulation的思想,认为序列奖励相同的情况下,他们的状态中存在相同的任务相关特征。
我认为原始的数据集分布可能并不适合当前的智能体来训练,对于刚开始训练的智能体来讲,难度可能比较大。此时,可以通过先学习原始的数据集,然后对原始数据集进行任务相关的扩充。
数据集有限的情况下或者说难的数据比较多时,此时很难让智能体从头开始训练。
比如说刚开始有一个复杂迷宫给智能体,但是可能我先给他一些简单的,然后就可以慢慢学会。