论文完成蓝图初步定义
This commit is contained in:
23
paper/main.tex
Normal file
23
paper/main.tex
Normal file
@@ -0,0 +1,23 @@
|
||||
\documentclass[12pt, a4paper]{article}
|
||||
|
||||
% 引入导言区设置
|
||||
\input{preamble}
|
||||
|
||||
% --- 文档信息 ---
|
||||
\title{一种2D相对位置编码self-attention估值策略网络在2048游戏中的应用}
|
||||
\author{-}
|
||||
\date{\today}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\maketitle
|
||||
\tableofcontents
|
||||
\newpage
|
||||
|
||||
% 引入各章节内容
|
||||
\input{sections/00_abstract}
|
||||
\input{sections/01_introduction.tex}
|
||||
\input{sections/02_problem_analyze.tex}
|
||||
\input{sections/03_training.tex}
|
||||
|
||||
\end{document}
|
||||
49
paper/preamble.tex
Normal file
49
paper/preamble.tex
Normal file
@@ -0,0 +1,49 @@
|
||||
% 中文支持
|
||||
\usepackage{ctex}
|
||||
|
||||
% 基本包
|
||||
\usepackage{amsmath,amssymb,amsfonts} % 数学公式支持
|
||||
\usepackage{graphicx} % 图片支持
|
||||
\usepackage{booktabs} % 表格美化
|
||||
\usepackage{hyperref} % 超链接支持
|
||||
\usepackage{cite} % 引用支持
|
||||
\usepackage{listings} % 代码块支持
|
||||
\usepackage{algorithm} % 算法环境
|
||||
\usepackage{algpseudocode} % 算法伪代码
|
||||
\usepackage{float} % 控制浮动体
|
||||
\usepackage{caption} % 标题控制
|
||||
\usepackage{subcaption} % 子图标题
|
||||
|
||||
% 页面设置
|
||||
\usepackage{geometry}
|
||||
\geometry{left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm}
|
||||
|
||||
% 超链接设置
|
||||
\hypersetup{
|
||||
colorlinks=true,
|
||||
linkcolor=blue,
|
||||
filecolor=magenta,
|
||||
urlcolor=cyan,
|
||||
citecolor=green
|
||||
}
|
||||
|
||||
% 代码块设置
|
||||
\lstset{
|
||||
basicstyle=\small\ttfamily,
|
||||
keywordstyle=\color{blue},
|
||||
commentstyle=\color{green!60!black},
|
||||
stringstyle=\color{red},
|
||||
numbers=left,
|
||||
numberstyle=\tiny,
|
||||
numbersep=5pt,
|
||||
frame=single,
|
||||
breaklines=true,
|
||||
breakatwhitespace=true
|
||||
}
|
||||
|
||||
% 图表设置
|
||||
\graphicspath{{figures/}} % 图片路径
|
||||
|
||||
% 其他设置
|
||||
\setcounter{tocdepth}{3} % 目录深度
|
||||
\setcounter{secnumdepth}{3} % 章节编号深度
|
||||
10
paper/sections/00_abstract.tex
Normal file
10
paper/sections/00_abstract.tex
Normal file
@@ -0,0 +1,10 @@
|
||||
\begin{abstract}
|
||||
本文拟设计一种新的2048游戏训练流程,最终目的是使用大参数的2D相对位置编码自注意力神经网络,
|
||||
完成对游戏局面的精确估值和决策,并尝试将模型能力由基本的4×4,扩展到3~10之间任意边长、任意长宽比的棋盘尺寸。
|
||||
本文拟设计一种从小参数残差卷积网络(ResNet-style CNN)结合蒙特卡洛树搜索,
|
||||
迁移到中等规模的2D相对位置编码自注意力网络的训练流程,利用CNN+MCTS多次迭代后生成的低噪声高质量数据,
|
||||
指导Transformer模型的高效训练
|
||||
|
||||
\end{abstract}
|
||||
|
||||
\textbf{关键词:} 2048游戏、深度强化学习、相对位置编码、self-attention、估值策略网络
|
||||
29
paper/sections/01_introduction.tex
Normal file
29
paper/sections/01_introduction.tex
Normal file
@@ -0,0 +1,29 @@
|
||||
\section{引言}
|
||||
|
||||
\subsection{研究背景}
|
||||
2048游戏自2014年发布以来,因其简单的规则和复杂的策略性而广受欢迎。
|
||||
作为一个完全信息的确定性游戏(除了新数字的随机生成),2048为研究自监督人工智能算法提供了一个理想的测试平台。
|
||||
|
||||
\subsection{研究动机}
|
||||
传统的卷积神经网络(CNN)在处理2048游戏时存在以下局限性:
|
||||
\begin{itemize}
|
||||
\item 固定的感受野限制了对全局信息的捕获
|
||||
\item 缺乏对位置关系的显式建模
|
||||
\item 难以处理不同位置间的长距离依赖关系
|
||||
\end{itemize}
|
||||
|
||||
Self-attention机制的出现为解决这些问题提供了新的思路。通过引入2D相对位置编码,我们可以:
|
||||
\begin{itemize}
|
||||
\item 显式建模网格中任意两个位置间的关系
|
||||
\item 捕获全局的状态信息
|
||||
\item 学习位置无关的特征表示
|
||||
\end{itemize}
|
||||
|
||||
\subsection{符号定义}
|
||||
\begin{itemize}
|
||||
\item 棋盘矩阵 $K$
|
||||
\item 矩阵元素 $K_{i,j}$
|
||||
\item 方块数字 $N$
|
||||
\item 对数变化后的方块数字 $N' = \log_2(N)$
|
||||
\item 对数变化后的矩阵 $K'$
|
||||
\end{itemize}
|
||||
122
paper/sections/02_problem_analyze.tex
Normal file
122
paper/sections/02_problem_analyze.tex
Normal file
@@ -0,0 +1,122 @@
|
||||
\section{问题分析}
|
||||
|
||||
\subsection{2048游戏特点}
|
||||
2048游戏是一个基于网格的数字合并游戏,具有以下特点:
|
||||
\begin{itemize}
|
||||
\item 4×4的网格状态空间
|
||||
\item 四个基本动作:上、下、左、右
|
||||
\item 确定性的游戏规则和随机的数字生成
|
||||
\item 指数级增长的状态复杂度
|
||||
\item 决策时可以认为全局无状态性
|
||||
\item 对棋盘进行对称变换对游戏无影响
|
||||
\end{itemize}
|
||||
|
||||
\subsection{问题及解决思路}
|
||||
\subsubsection{棋盘上的数字表示}
|
||||
在2048游戏中,方块上的数字呈指数增长($2^1, 2^2, \dots$)。理论上,在一个 $4 \times 4$ 的棋盘上,可能出现的最大数字为 $2^{17}$。
|
||||
这种巨大的范围和稀疏的分布,显然不利于神经网络进行有效学习和泛化。
|
||||
|
||||
为了解决此问题,我们可以对棋盘状态进行对数变换。
|
||||
令棋盘状态为一个矩阵 $K \in \mathbb{N}$,
|
||||
其中 $K_{i,j}$ 表示在 $(i,j)$ 位置的数字,空位记为 $0$。
|
||||
我们定义一个新的状态表示矩阵 $K'$,其元素 $K'_{i,j}$ 通过以下映射获得:
|
||||
\begin{equation}
|
||||
K'_{i,j} =
|
||||
\begin{cases}
|
||||
\log_2(K_{i,j}) & \text{if } K_{i,j} > 0 \\
|
||||
0 & \text{if } K_{i,j} = 0
|
||||
\end{cases}
|
||||
\end{equation}
|
||||
通过这种对数变换,我们可以将指数增长的数值尺度压缩到一个线性、紧凑的整数范围。
|
||||
这种方法同样适用于任意边长的矩形棋盘。
|
||||
|
||||
\subsubsection{棋盘压缩}
|
||||
2048棋盘可以看做是一个平面图像,这个图像的8个旋转和镜像结果,
|
||||
对于游戏而言是完全等价的。我们将每个图像的二面体群$D_4$的所有等价类进行合并,
|
||||
即可显著压缩棋盘表示的空间,避免对等价局面进行重复搜索。
|
||||
我们使用以下步骤,将二面体群的所有等价类压缩到同一哈希桶:
|
||||
\begin{itemize}
|
||||
\item 对于给定的局面输入,获得其8种变换,覆盖$D_4$的所有元素:
|
||||
\begin{itemize}
|
||||
\item 原始图像 (R0): matrix
|
||||
\item 旋转90° (R90): \texttt{rotate\_90(matrix)}
|
||||
\item 旋转180° (R180): \texttt{rotate\_90(rotate\_90(matrix))}
|
||||
\item 旋转270° (R270): \texttt{rotate\_90(rotate\_90(rotate\_90(matrix)))}
|
||||
\item 水平翻转 (F): \texttt{flip\_horizontal(matrix)}
|
||||
\item 翻转后旋转90° (F+R90): \texttt{rotate\_90(flip\_horizontal(matrix))}
|
||||
\item 翻转后旋转180° (F+R180): \texttt{rotate\_90(rotate\_90(flip\_horizontal(matrix)))}
|
||||
\item 翻转后旋转270° (F+R270): \texttt{rotate\_90(rotate\_90(rotate\_90(flip\_horizontal(matrix))))}
|
||||
\end{itemize}
|
||||
\item 采用行优先方式,将矩阵拉平为1D向量
|
||||
\item 比较这些向量的字典序,将字典序最小的向量作为该图的范式
|
||||
\item 计算哈希,存储到哈希表或者搜索缓存
|
||||
\end{itemize}
|
||||
这种方案亦可推广到任意矩形棋盘。
|
||||
|
||||
\subsubsection{棋盘分数计算}
|
||||
对于估值网络而言,一个准确的、有代表性的最终得分,是模型学习的重要依据,也是训练效果的关键因素。
|
||||
然而,由于2048可能随机生成2或者4,这使得某一局面的最终分数存在不确定性。但是这不妨碍我们在计算得分时排除掉随机因素。
|
||||
在计算盘面得分时,我们假设只会随机生成2,但在蒙特卡洛树搜索时,我们考虑2和4随机出现的概率。
|
||||
这样既能够保证模型学习到随机数字情况下的决策,又能显著降低噪声,同时提高缓存命中率。
|
||||
|
||||
2048游戏的计分规则为,当两个较小的数字合并为一个较大数字时,增加等值于较大数字的分数 $\Delta S$。
|
||||
|
||||
合成一个数字,其奖励分数存在以下对应关系:
|
||||
\begin{itemize}
|
||||
\item $\Delta S_4 = 4$
|
||||
\item $\Delta S_8 = 8$
|
||||
\item $\dots$
|
||||
\item $\Delta S_{2^n} = 2^n$
|
||||
\end{itemize}
|
||||
|
||||
假设游戏仅随机生成数字2,则每个数字的累积分数价值为:
|
||||
\begin{itemize}
|
||||
\item $V(2) = 0$ (2不能通过合成得到,其累积分数价值为0)
|
||||
\item $V(4) = 4$
|
||||
\item $V(8) = 4 + 4 + 8 = 16$ (涵盖了合成8用到的2个4的分数价值,以及合成8本身增加的分数价值)
|
||||
\item $V(16) = 16 + 16 + 16 = 48$
|
||||
\item $V(32) = 48 + 48 + 32 = 128$
|
||||
\item $V(64) = 128 + 128 + 64 = 320$
|
||||
\end{itemize}
|
||||
|
||||
显然,对于一个大于2的数字 $N$,其累积分数价值 $V(N)$ 可以递归地表示为:
|
||||
|
||||
\begin{equation}
|
||||
V(N) = V\left(\frac{N}{2}\right) + V\left(\frac{N}{2}\right) + N
|
||||
\end{equation}
|
||||
|
||||
同时,我们有基础情况:
|
||||
\begin{equation}
|
||||
V(2) = 0
|
||||
\end{equation}
|
||||
|
||||
将数值迁移到对数变化后的矩阵,令 $f(N') = V(2^{N'})$,则有:
|
||||
\begin{equation}
|
||||
f(N') = 2 \cdot f(N'-1) + 2^{N'}
|
||||
\end{equation}
|
||||
|
||||
将递推关系式 $f(N') = 2 \cdot f(N'-1) + 2^{N'}$ 展开:
|
||||
\begin{align}
|
||||
f(N') &= 2 \cdot f(N'-1) + 2^{N'} \\
|
||||
&= 2 \cdot [2 \cdot f(N'-2) + 2^{N'-1}] + 2^{N'} \\
|
||||
&= 2^2 \cdot f(N'-2) + 2 \cdot 2^{N'-1} + 2^{N'} \\
|
||||
&= 2^2 \cdot f(N'-2) + 2^{N'} + 2^{N'} \\
|
||||
&= 2^2 \cdot f(N'-2) + 2 \cdot 2^{N'} \\
|
||||
&= \cdots \\
|
||||
&= 2^{N'-1} \cdot f(1) + (N'-1) \cdot 2^{N'} \\
|
||||
&= 2^{N'-1} \cdot 0 + (N'-1) \cdot 2^{N'} \\
|
||||
&= (N'-1) \cdot 2^{N'}
|
||||
\end{align}
|
||||
|
||||
检查,当$N'=1$,即$N=2$时,有:
|
||||
\begin{equation}
|
||||
f(1) = (1-1) \cdot 2^1 = 0
|
||||
\end{equation}
|
||||
|
||||
该结果符合定义 $V(2) = 0$。
|
||||
|
||||
因此上述通项公式涵盖所有情况,数字 $N = 2^{N'}$ 的累积分数价值为:
|
||||
\begin{equation}
|
||||
V(N) = (\log_2(N) - 1) \cdot N
|
||||
\end{equation}
|
||||
|
||||
60
paper/sections/03_training.tex
Normal file
60
paper/sections/03_training.tex
Normal file
@@ -0,0 +1,60 @@
|
||||
\section{模型训练}
|
||||
为了训练一个强大的估值决策模型,我们采用蒙特卡洛树搜索(MCTS)生成高质量的训练数据,并设计一个轻量级的残差卷积网络(RNCNN)进行初步学习与迭代。
|
||||
|
||||
\subsection{蒙特卡洛树搜索策略}
|
||||
采用纯MCTS(Pure MCTS)为初始模型生成训练数据。MCTS的每次迭代包含四个核心步骤,以当前棋盘状态为根节点,不断扩展搜索树。
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{选择 (Selection)}: 从根节点开始,根据UCT(Upper Confidence bounds applied to Trees)公式递归选择子节点,直到达到一个未完全扩展的叶子节点。UCT公式平衡了节点的探索(Exploration)与利用(Exploitation):
|
||||
\[ \text{UCT} = \underset{i}{\arg\max} \left( \bar{v}_i + C \cdot \sqrt{\frac{\ln(N)}{n_i}} \right) \]
|
||||
其中 $\bar{v}_i$ 是子节点 $i$ 的平均价值,$N$ 是父节点访问次数,$n_i$ 是子节点 $i$ 访问次数,$C$ 是探索常数。
|
||||
|
||||
\item \textbf{扩展 (Expansion)}: 当选择过程到达一个叶子节点 $L$ 时,如果该节点代表的局面不是终局,则为其创建一个或多个子节点,对应于从 $L$ 出发所有合法的移动。
|
||||
|
||||
\item \textbf{模拟 (Simulation)}: 从新扩展的子节点中选择一个,开始进行模拟(也称Rollout)。在此阶段,我们采用快速的随机策略(例如,在所有合法移动中随机选择一个)持续进行游戏,直到达到终局状态。终局的分数将作为本次模拟的价值。
|
||||
|
||||
\item \textbf{反向传播 (Backpropagation)}: 将模拟得到的终局分数 $v$ 从该叶子节点开始,沿着选择路径反向传播回根节点。路径上的每一个节点都会更新其访问次数 $n$ 和累积价值 $V$,并重新计算其平均价值 $\bar{v} = V/n$。
|
||||
\end{itemize}
|
||||
|
||||
\subsection{数据结构}
|
||||
通过大量的MCTS模拟,我们将叶子节点的信息转换为神经网络可学习的训练样本。每个样本包含:
|
||||
\begin{itemize}
|
||||
\item 棋盘状态 $S$:一个 $H \times W$ 的矩阵,代表游戏局面。
|
||||
\item 策略-价值对 $(\pi, v)$:其中 $\pi$ 是从状态 $S$ 出发的一个合法移动(例如:上、下、左、右),$v$ 是在该分支下通过后续模拟所能达到的最高分。
|
||||
\end{itemize}
|
||||
我们将 $(S, \pi)$ 作为键(key),当一次完整的MCTS模拟结束后,解析所有扩展出的叶子节点。对于每个叶子节点 $(S, \pi)$,其价值 $v$ 等于它后续所有模拟游戏中的最高分。
|
||||
\begin{itemize}
|
||||
\item 如果一个键 $(S, \pi)$ 没有命中缓存,则写入 $(S, \pi) \rightarrow v$。
|
||||
\item 如果一个叶子节点的新分数大于缓存中的值,则更新 $(S, \pi) \rightarrow v$。
|
||||
\end{itemize}
|
||||
在进行指定次数的MCTS模拟后,导出所有缓存的 $(S, \pi) \rightarrow v$ 对,作为最终的训练数据集。
|
||||
|
||||
\subsection{残差卷积网络L0}
|
||||
RNCNN\_L0 是一个极小的、用于快速推理和迭代的估值决策模型。其设计目标是在有限的计算资源下,学习到基本的局面评估能力。其结构定义如下:
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{输入层 (Input Layer)}:
|
||||
棋盘状态 $S$(一个 $H \times W$ 的矩阵)首先进行特征化处理。我们将每个格子的值 $V$ 转换为 $C$ 个特征平面(channel),每个平面代表一个特定的瓦片值(例如,$V \rightarrow \log_2(V)$,然后进行独热编码)。输入张量的维度为 $(H, W, C)$。
|
||||
|
||||
\item \textbf{卷积主干 (Convolutional Body)}:
|
||||
输入张量首先通过一个卷积层,然后送入一个由 $N$ 个残差块(Residual Block)组成的序列。
|
||||
\begin{itemize}
|
||||
\item \textbf{初始卷积层}: 一个$3 \times 3$的卷积核,输出64个特征图,进行批量归一化(Batch Normalization)和ReLU激活。
|
||||
\item \textbf{残差块}: 每个残差块包含两个卷积层。输入通过第一个 $3 \times 3$ 卷积层(BN+ReLU),再通过第二个 $3 \times 3$ 卷积层(BN),然后将结果与块的输入相加(残差连接),最后通过一个ReLU激活函数。所有卷积层保持64个通道数。
|
||||
\end{itemize}
|
||||
|
||||
\item \textbf{输出头 (Output Head)}:
|
||||
残差主干的输出特征图被送入一个最终的输出模块,该模块直接预测四个动作的价值。
|
||||
\begin{itemize}
|
||||
\item 一个 $1 \times 1$ 的卷积层,将通道数从64降至16,进行BN和ReLU激活。
|
||||
\item 将特征图展平(Flatten)成一维向量。
|
||||
\item 一个全连接层(Fully Connected Layer),将向量映射到4个输出神经元,分别对应四个移动方向(上、下、左、右)的预测价值。
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
模型的损失函数采用均方误差(Mean Squared Error),计算网络预测的四通道价值与MCTS生成数据中对应动作的价值 $v$ 之间的差距。
|
||||
|
||||
\subsection{模型初始化}
|
||||
我们计划在3$\times$3的小棋盘上,依靠纯蒙特卡洛树的快速搜索能力,生成大量的初始数据。小棋盘状态空间较小,MCTS能更快地收敛到有意义的策略,为模型提供高质量的初始训练样本。
|
||||
|
||||
\subsection{L0迭代}
|
||||
在纯蒙特卡洛生成的数据上学习到的大量初始数据,将提供给RNCNN\_L0进行监督学习训练。训练完成的L0模型可以反过来指导MCTS中的选择和模拟阶段,形成一个自我博弈(self-play)的增强回路,不断迭代优化模型性能。
|
||||
Reference in New Issue
Block a user