名词解释
Embedding 的中文名字
它的标准中文翻译是 “嵌入” 或 “向量嵌入”。
在深度学习语境下,你可以把它理解为 “特征升维映射”。
形象比喻:就像把一个平面上的“点”(低维数据),嵌入到一个巨大的、多维的“果冻”里(高维空间)。在这个果冻里,原本孤立的点有了上下左右、前后等 128 个方向的联系,这让模型能通过计算向量之间的距离和角度,读懂数据背后的“深意”。
num_heads=4 是一个非常合理且平衡的设置,尤其是配合你目前的 EMBED_DIM = 128 和 RTX 3070 显卡。在 Transformer 中,EMBED_DIM 必须能被 num_heads 整除。
$128 / 4 = 32$。
这意味着每个“头”拥有 32 维 的独立空间去寻找变量间的关系。32 维足够承载一个复杂的约束逻辑(比如:变量 $x_1$ 与 $x_5$ 是否属于同一个并集约束组)。
性能上的考量:
RTX 3070 的优势:多头计算在 GPU 上是完全并行的。增加头数通常不会显著增加训练时间,但会消耗更多显存。
对于只有 60 个变量的问题,4 个头已经足够覆盖问题的复杂性,而不会像 16 个头那样产生过多的“冗余信息”。
我们可以把它拆解为三个动作:
1. TSPModel(...):搭建实验室
这就像是根据蓝图(类定义)组装一台精密的机器。
参数传递:你把
embed_dim=128和num_heads=4传进去。内部发生的事:模型开始在内存中创建成千上万个权重矩阵($W_q, W_k, W_v$ 等)。此时,这些矩阵里的数字都是随机生成的。
黑箱初现:这台机器现在空有 4 个头和 128 维的深度,但它还没见过任何数据,处于“无知”状态。
2. .to(device):搬运到 RTX 3070
这是最关键的一步,也是你昨晚死磕环境的原因。
逻辑:默认情况下,模型是创建在 CPU 和 系统内存 里的。
执行:
.to(device)(这里device是"cuda")会将这成千上万个权重矩阵,从你的内存一并搬运到 RTX 3070 的 8GB 显存 中。意义:只有模型在显存里,接下来的矩阵乘法才能调用显卡上的几千个 CUDA 核心。如果没有这一步,你的 3070 只能干看着 CPU 在那里慢吞吞地算。
3. model = ...:挂载控制台
这一步是将这台已经搬进 GPU 的机器,命名为
model。以后你调用
model(input)时,所有的计算流都会直接在显卡内部闭环完成。
评论
发表评论