config.json 逐行说明

这份文件是模型的“结构说明书”。transformers 在加载模型时,会先读它,再决定要建多大的网络、用什么层、输入输出怎么组织。

下面按行解释。

第 1 行

{

这是 JSON 对象的开始。可以把它理解成“下面要开始列配置项了”。

第 2 行

"activation_function": "gelu_new",

这一行说明模型内部默认使用的激活函数是 gelu_new。激活函数的作用,是让神经网络不只是线性叠加,而能学到更复杂的模式。

第 3 行

"add_cross_attention": false,

这表示模型里没有额外加 cross-attention。因为 tiny-GPT2 是一个 decoder-only 语言模型,不是 encoder-decoder 结构,所以这里是 false

第 4-6 行

"architectures": [
  "GPT2LMHeadModel"
],

这告诉 transformers:这个权重文件对应的模型类是 GPT2LMHeadModel

第 7 行

"attn_pdrop": 0.1,

attention 层里的 dropout 比例是 0.1,也就是训练时随机丢掉 10% 的连接,帮助减少过拟合。

第 8 行

"bos_token_id": 50256,

bos 是 beginning of sequence,序列起始 token 的编号。GPT-2 这里使用的是 <|endoftext|> 这个特殊 token 的 id。

第 9 行

"dtype": "float32",

说明模型参数默认的数据类型是 float32。这会影响显存占用和计算精度。

第 10 行

"embd_pdrop": 0.1,

embedding 层后的 dropout 比例也是 0.1

第 11 行

"eos_token_id": 50256,

eos 是 end of sequence,序列结束 token 的编号。这里和 bos_token_id 一样,仍然是 <|endoftext|>

第 12 行

"initializer_range": 0.02,

这是参数初始化时随机值的范围大小。训练开始前,模型参数不会全是 0,而是从某个分布随机生成,这一行就是在规定这个初始化尺度。

第 13 行

"layer_norm_epsilon": 1e-05,

LayerNorm 里的一个很小的常数,用来避免除以 0。虽然看起来不起眼,但它对数值稳定性很重要。

第 14 行

"model_type": "gpt2",

告诉库:这是 GPT-2 类型的模型。很多自动加载逻辑都会依赖这个字段。

第 15 行

"n_ctx": 1024,

上下文窗口长度是 1024。也就是说,这个模型一次最多处理大约 1024 个 token 的上下文。

第 16 行

"n_embd": 2,

embedding 维度只有 2。这非常小,说明它不是拿来做真实任务的强模型,而是为了教学和本地快速实验而准备的极小模型。

第 17 行

"n_head": 2,

注意力头数是 2。说明每层 self-attention 被拆成 2 个 head。

第 18 行

"n_inner": null,

前馈网络隐藏层维度没有显式写死,通常表示使用模型默认规则来推导。

第 19 行

"n_layer": 2,

模型只有 2 层 Transformer block。这再次说明:这是一个“演示用 tiny 模型”,不是正式大模型。

第 20 行

"n_positions": 1024,

可支持的位置编码长度也是 1024,和 n_ctx 对应。

第 21 行

"pad_token_id": null,

没有单独定义 padding token。GPT-2 原始设计里通常不依赖 pad token,所以这里是 null

第 22 行

"reorder_and_upcast_attn": false,

不启用某些额外的 attention 重排和 upcast 优化。对这个 tiny 模型来说,这不是重点。

第 23 行

"resid_pdrop": 0.1,

残差连接部分的 dropout 比例也是 0.1

第 24 行

"scale_attn_by_inverse_layer_idx": false,

不按层号的倒数额外缩放 attention 权重。

第 25 行

"scale_attn_weights": true,

启用 attention 权重缩放。这是标准 attention 计算中的常见做法,帮助训练更稳定。

第 26 行

"summary_activation": null,

模型的 summary 头没有额外指定激活函数。

第 27 行

"summary_first_dropout": 0.1,

summary 模块里的 dropout 比例是 0.1

第 28 行

"summary_proj_to_labels": true,

summary 输出允许投影到标签空间。这是 GPT-2 配置中常见的附加字段。

第 29 行

"summary_type": "cls_index",

summary 的类型是 cls_index,表示按某个位置的表示来取 summary。

第 30 行

"summary_use_proj": true,

summary 模块会使用一个投影层。

第 31-36 行

"task_specific_params": {
  "text-generation": {
    "do_sample": true,
    "max_length": 50
  }
},

这一段是“任务特定参数”。

第 37 行

"tie_word_embeddings": true,

输入词嵌入和输出词表投影共享参数。这样可以减少参数量,也是很多语言模型常见的设计。

第 38 行

"transformers_version": "5.3.0",

说明这个模型配置是按 transformers 5.3.0 这个版本保存出来的。

第 39 行

"use_cache": true,

推理时允许使用 KV cache,加速自回归生成。

第 40 行

"vocab_size": 50257

词表大小是 50257。这意味着 tokenizer 最终可以把文本映射成 50257 种不同的 token 编号。

第 41 行

}

JSON 对象结束。

读完后应该记住什么