99 lines
7.1 KiB
TeX
99 lines
7.1 KiB
TeX
\section{模型训练}
|
||
为了训练一个强大的估值决策模型,我们采用蒙特卡洛树搜索(MCTS)生成高质量的训练数据,
|
||
并设计一个轻量级的残差卷积网络(RNCNN)进行初步学习与迭代。
|
||
|
||
\subsection{蒙特卡洛树搜索策略}
|
||
我们采用纯蒙特卡洛树搜索(Pure MCTS)为初始模型生成训练数据。
|
||
MCTS的每次迭代包含四个核心步骤,以当前棋盘状态为根节点,不断扩展搜索树。
|
||
|
||
\begin{itemize}
|
||
\item \textbf{选择 (Selection)}:
|
||
%% 修改点:将UCT公式本身与选择策略分开,表述更严谨
|
||
从根节点开始,根据UCT(Upper Confidence bounds applied to Trees)选择策略递归选择子节点,
|
||
直到达到一个未完全扩展的叶子节点。该策略会选择具有最大UCT值的子节点 $i$。节点 $i$ 的UCT值计算公式为:
|
||
\[ \text{UCT}_i = \bar{v}_i + C \cdot \sqrt{\frac{\ln(N)}{n_i}} \]
|
||
其中,$\bar{v}_i$ 是子节点 $i$ 的平均回报(mean return),$N$ 是其父节点的访问次数,$n_i$ 是子节点 $i$ 的访问次数,
|
||
$C$ 是平衡探索与利用的常数。$i$ 遍历当前节点所有已发现的子节点。
|
||
|
||
\item \textbf{扩展 (Expansion)}: 当选择过程到达一个叶子节点 $L$ 时,若该节点所代表的局面非终局,
|
||
则为其创建一个或多个子节点,对应于从状态 $L$ 出发的所有合法走法。
|
||
|
||
\item \textbf{模拟 (Simulation)}:
|
||
从新扩展的子节点中选择一个,开始进行快速走子(Rollout)。在此阶段,我们采用一个快速的默认策略
|
||
(例如,在所有合法移动中均匀随机选择)进行游戏,直至达到终局状态。终局的收益(如 胜/负/平 对应 +1/-1/0,或游戏得分)
|
||
被记录为本次模拟的回报 $z$。
|
||
|
||
\item \textbf{反向传播 (Backpropagation)}:
|
||
将模拟得到的回报 $z$ 从该叶子节点开始,沿选择路径反向传播至根节点。
|
||
路径上的每个节点 $j$ 都会更新其统计量:访问次数 $n_j \leftarrow n_j + 1$,
|
||
总回报 $V_j \leftarrow V_j + z$。其平均回报也相应更新为 $\bar{v}_j = V_j / n_j$。
|
||
\end{itemize}
|
||
|
||
\subsection{数据结构}
|
||
通过大量的MCTS模拟,我们将每个访问过的状态及其MCTS分析结果转化为神经网络可学习的训练样本。
|
||
|
||
我们为每个经过充分模拟的状态 $S$ 生成一个训练目标。
|
||
该目标是一个动作价值向量 $\mathbf{\pi}(S) \in \mathbb{R}^{|\mathcal{A}|}$,
|
||
其中 $\mathcal{A} = \{\text{上, 下, 左, 右}\}$ 是动作空间。
|
||
向量的每个分量 $\pi_a(S)$ 代表在状态 $S$ 下,
|
||
执行动作 $a$ 后,MCTS估算出的期望回报。
|
||
|
||
\begin{itemize}
|
||
\item 对于不合法的移动或在MCTS中未被探索到的动作 $a$,
|
||
我们将其价值设为一个特殊的掩码值$\pi_a = -1$,并在计算损失函数时忽略这些项。
|
||
\item 所有状态 $S$ 及其对应的动作价值向量 $\mathbf{\pi}(S)$ 被存储在一个持久化的缓存中。
|
||
该缓存结构为 $\text{Cache}: \mathcal{S} \rightarrow \mathbb{R}^{|\mathcal{A}|}$,
|
||
其中 $\mathcal{S}$ 是所有遇到过的状态集合。为了高效检索,我们使用状态的哈希值作为键。
|
||
\end{itemize}
|
||
|
||
缓存的更新策略如下:
|
||
\begin{itemize}
|
||
\item \textbf{初始写入:} 若状态 $S$ 不在缓存中,则在完成对 $S$ 的MCTS模拟后,将映射 $S \mapsto \mathbf{\pi}(S)$ 添加到缓存中。
|
||
\item \textbf{缓存更新:}
|
||
我们定义状态 $S$ 的(估计)价值为其最优动作的价值,即 $v_{\text{state}}(S) = \max_{a \in \mathcal{A}} \pi_a(S)$。
|
||
若状态 $S$ 已在缓存中,但在新一轮MCTS模拟后得到了新的价值向量 $\mathbf{\pi}'(S)$,且其状态价值 $v'_{\text{state}}(S) > v_{\text{state}}(S)$,则我们将缓存中的条目更新为 $S \mapsto \mathbf{\pi}'(S)$。此策略旨在保留能导向更优结果的搜索信息。
|
||
\end{itemize}
|
||
|
||
最终,我们将缓存中的数据转换为一个训练集 $\mathcal{D}$。对于缓存中的每一个 $(S, \mathbf{\pi}(S))$ 对,
|
||
我们将其展开为多个独立的样本,形成训练集 $\mathcal{D} = \{(S, a, \pi_a(S)) \mid \forall S \in \text{Cache}, \forall a \in \text{valid\_actions}(S)\}$。
|
||
|
||
\subsection{残差卷积网络L0}
|
||
RNCNN\_L0 是一个为快速推理和迭代设计的轻量级估值决策模型。其结构如下:
|
||
|
||
\begin{itemize}
|
||
\item \textbf{输入层 (Input Layer)}:
|
||
棋盘状态 $S \in \mathbb{R}^{H \times W}$ 首先经过特征化处理。
|
||
将每个非空格子的值 $V$ 通过对数函数(如 $k = \log_2(V)$)映射为整数索引,
|
||
再进行独热编码,形成 $C$ 个特征平面(channel)。最终的输入张量维度为 $(H, W, C)$,其中 $C$ 是编码后的特征总数。
|
||
|
||
\item \textbf{卷积主干 (Convolutional Body)}:
|
||
输入张量经过以下处理:
|
||
\begin{itemize}
|
||
\item \textbf{初始卷积层}: 一个 $3 \times 3$ 的填充卷积层,保持空间维度不变,后接批量归一化(Batch Normalization)和ReLU激活函数。
|
||
\item \textbf{残差块序列}: 两个连续的残差块,每个残差块包含两个卷积层。输入首先通过一个 $3 \times 3$ 卷积层(BN+ReLU),
|
||
再通过第二个 $3 \times 3$ 卷积层(BN),然后将结果与块的输入进行逐元素相加(残差连接),最后通过一个ReLU激活函数。
|
||
\end{itemize}
|
||
|
||
\item \textbf{输出头 (Output Head)}:
|
||
卷积主干输出的特征图被送入一个专门设计的输出模块:
|
||
\begin{itemize}
|
||
\item 四个并行的 $1 \times 1$ 卷积层,每个对应一个方向(上、下、左、右),将特征图扩展为 $(H, W, 4)$ 的张量。
|
||
\item 对每个方向通道分别应用全局最大池化(Global Max Pooling),得到四个标量值,分别对应四个方向的动作价值。
|
||
\end{itemize}
|
||
\end{itemize}
|
||
模型的损失函数采用均方误差(Mean Squared Error, MSE)。
|
||
对于训练集中的每个样本 $(S, a, \pi_a(S))$,损失函数计算网络对状态 $S$ 预测的动作 $a$ 的价值与MCTS提供的目标价值 $\pi_a(S)$ 之间的差距。
|
||
|
||
\subsection{模型初始化}
|
||
我们在 $3 \times 3$ 的小棋盘上,依靠纯MCTS的快速搜索能力,生成大量的初始训练数据。
|
||
通过约200,000次完整的self-play对局(每局平均约50步),我们累积了约1000万个棋盘状态对作为训练样本。
|
||
由于小棋盘的状态空间有限,MCTS能够更快地收敛到高质量的策略,从而为模型提供优质的初始训练样本。
|
||
|
||
\subsection{L0迭代与迁移}
|
||
RNCNN\_L0模型在纯MCTS生成的初始数据上进行监督学习训练。
|
||
训练完成的L0模型可以反过来指导MCTS的选择与模拟阶段,以替代纯随机的Rollout策略,
|
||
从而形成一个自我对弈(self-play)的强化学习回路,持续迭代并提升模型性能。
|
||
|
||
L0模型的轻量级设计使其能够直接迁移到 $4 \times 4$ 和 $5 \times 5$ 的棋盘上运行,
|
||
为更大规模棋盘上的MCTS提供基础的估值和策略指导。由于其架构中使用了填充卷积和全局池化操作,
|
||
模型可以自然地适应不同尺寸的输入,无需额外的结构调整。 |