现有的游戏AI中,越来越多地直接使用游戏画面的RGB像素点(图片)来作为游戏的表示。其中卷积神经网络常被用于进行图片处理,以得到压缩后的表征。当前一些通用的特征提取方法在应用到游戏AI时会有一些问题,比如训练计算量太大、在不同游戏间的泛化性差等。对于前一个问题,目前一般采用在预训练模型上进行微调的方法缓解。本文主要关注如何处理后一个问题,也就是泛化性的问题。

文章目录


  1. 背景介绍
  2. 难点
  3. 泛化性的度量
  4. 数据集
  5. 游戏表征学习
    1. 预处理
    2. 监督学习
    3. 对比学习
      1. 训练编码器
      2. 分类器训练
  6. 实验结果
  7. 引用

本文发表于2021年的IEEE CoG,研究者为Malta大学电子游戏研究学院的教授团队。

背景介绍

视频游戏业近些年发展迅速,从原本的像素级游戏,发展到现在的3A大作。虽然游戏画面不断升级,但游戏的类型、内容等仍然没有太多变化。

那么我们能否使用单个神经网络来给这些风格各异而内容一致的游戏画面来提取一个通用的特征表示呢?本文旨在训练得到一个编码器,此编码器可以提取出游戏内容的表征,而非游戏风格的表征。

难点

我们先从一个例子中观察目前常用的图片编码器 Imagenet-ResNet50 的一些问题。我们使用 ResNet50给一个数据集提取特征,而后使用t-SNE来查看它们的分布。数据集中包含了三种风格的游戏截图:1. 复古风;2. 现代风;3. 写实风。下图展示了三类(足球、第一人称射击、竞速)游戏不同风格的分布情况。

ResNet50 输出编码的一些问题
图 1:ResNet50 输出编码分布的一些问题。

从上图中我们可以看出,不同风格的游戏截图在t-SNE的散点图上各自聚为一组。直觉上这非常合理,但是这并不是我们希望得到的。我们希望同一类游戏的表征可以聚集在一起,而无视游戏画面的风格。

为了解决这个问题,本文提出使用对比学习来处理这个问题。上面的问题,一个非常直观的解决方法是,使用监督学习进行游戏分类,对预训练的ResNet-50进行微调。在本文的实验中,也与此方法进行了对比。

泛化性的度量

AI中对于泛化性的度量见仁见智,此论文中将其定义为:训练好的模型所输出的游戏画面表征刻画游戏内容而非游戏风格的能力。那么此泛化性如何进行度量呢?文中使用Silhouette系数对此进行量化。此系数定义如下。

记数据集为$\mathcal{D}$,它包含一个由一系列图片的集合$\mathcal{X}$,以及其对应的游戏类别$\mathcal{Y} = \{ y_1, y_2, \ldots, y_n \}$。记数据集中第$i$个元素为$(X_i, y_i)$,模型(编码器)使用$X_i$作为输入,输出表征记为$x_i$,$x_i$的维度记为$d$。我们记某一个分类$j$的图片对应的表征的集合为$\{ x_i^j \}$,该集合中某一元素$x_i$与集合中其它所有元素的平均欧几里得距离为$a(x_i)$,元素和其最近的其它类别$k$对应集合${\{ x_i^k \}}$中所有元素的平均距离记为$b(x_i)$。那么某一图片的Silhouette系数$s(X_i)$定义如下:

$$ s(X_i) = \cfrac{b(x_i) - a(x_i)}{\max \{ a(x_i), b(x_i) \}} $$

那么,整个数据集的Silouette系数$S(\mathcal{D})$定义为所有样本的平均值。显然$S(\mathcal{D}) \in [-1, 1]$,系数越大说明不同类别间分隔得越清晰。

数据集

本文推出了一个新的数据集Sports10来进行实验。该数据集中包含了10种类型的175款游戏。每种游戏有三种风格:复古风、现代风、写实风。数据集中共包含了10万张图片,每种风格1万张。不同类型游戏风格分布如下表:

游戏类型 复古风 现代风 写实风 总计
美式足球 2 11 6 19
篮球 3 12 3 18
自行车竞速 8 7 4 19
汽车竞速 5 5 5 15
格斗 3 11 9 23
曲棍球 9 7 1 17
英式足球 7 8 2 17
乒乓球 3 10 5 18
网球 6 4 2 12
排球 6 9 2 17
总计 52 84 39 175

游戏表征学习

预处理

  1. 将所有图片调整到$224 \times 224$像素大小:(1) 文中使用ResNet模型,该模型使用的就是此分辨率;(2) 适配8GB GPU现存限制
  2. 数据集划分为 3:1 的 训练集:验证集。这里的划分是按照不同游戏划分,这样可以保证验证集用的游戏图片是训练集里完全没有的
  3. 使用数据增强,以加强泛化性。方法包括:水平翻转、缩放、亮度调节、高宽比例调节、旋转等

监督学习

监督学习的模型为:ImageNet-50 + 线性层。ImageNet-50用于对图像进行编码,以得到通用的中间表示。线性层输出采用softmax层,损失函数使用交叉熵。

对比学习

对比学习的训练方法与监督学习稍有不同。在监督学习中,编码器和用于分类的输出层联合训练。而在此处的对比学习中,训练分为两个步骤,编码器的训练与分类器是分开的。并且编码器训练完成后不在进行微调,也就是说编码器的训练仅需要图片的嵌入编码即可。

训练编码器

为了进行对比学习训练,文中在ResNet50后接了一个投影层,将编码器输出的嵌入表示进一步降维,以便进行对比学习。记投影层为$p:\mathbb{R}^d \to \mathbb{R}^{128}$(输出为128维),最后的输出的记为:$z_i = p(x_i)$。

编码器的损失函数就是一般的对比损失形式,表示如下:

$$ \mathcal{L} = \begin {cases} \lVert z_i - z_j \rVert_2^2, &y_i = y_j\\ \max(0, m - \lVert z_i - z_j \rVert_2)^2, &y_i \ne y_j \end{cases} $$

上式中$m$为超参数,它表示不同类别的样本间距离期望达到的一个阈值。在不同类别样本间嵌入表示间的距离达到此值之后则不再进行优化。损失函数中的第一行表示,期望同一类别的样本嵌入间距离越小越好。文中给出了对比编码器的示意图,截图如下。

监督对比学习框架
图 2:监督对比学习框架

分类器训练

训练分类器时,投影层$p$被释放,仅需用到训练好的编码器,并且训练时编码器的参数固定。模型结构与之前监督学习的一致。

实验结果

最终监督学习分类器与对比学习分类器得到的结果对比见下表。

方法 训练准确率 验证准确率 Silhouette系数
ImageNet - - -0.03$\pm $0.01
监督学习 99.64$\pm$0.08 90.41$\pm$1.53 0.22$\pm$0.01
对比学习 91.83$\pm$0.39 93.42$\pm$0.70 0.56$\pm$0.01

实验结果中,监督学习的训练貌似过拟合比较严重。对比学习在验证集的准确率高于监督学习(甚至高于其训练集的准确率不少)。

我们再看一下使用 t-SNE 可视化后不同分类的分离情况。)

三种方法t-SNE可视化对比
图 3:三种方法t-SNE可视化对比。图片来自作者博客

从图中可以看出 ImageNet 的表征无法将各个分类明显分开;监督学习可以在一定程度上将不同的类别分开;而对比学习的隔离效果看起来最好。

从实验结果看,我们可以说对比学习框架更适合游戏表征的学习,它可以更好的专注于游戏的内容而非游戏的风格。

引用

[1] Trivedi, Chintan, Antonios Liapis, and Georgios N. Yannakakis. "Contrastive Learning of Generalized Game Representations."arXiv preprint arXiv:2106.10060(2021).

[2] Github 代码:https://github.com/ChintanTrivedi/contrastive-game-representations


[本]通信工程@河海大学 & [硕]CS@清华大学
这个人很懒,他什么也没有写!

1
1798
2

More Recommendations