Transformer Block
理解
- 代码层面:可以单独调用一个 Transformer Block。
- 功能层面:一个单独的 Transformer Block 通常不被叫作“一个训练好的模型”,它只是大模型里的一层(或者说一个组件)。
- 数据格式:必须把输入转为向量(Vectors)才能喂给它。
完整的模型,(如 GPT-4): 由 Embedding 层 + 几十层 Transformer Block 堆叠 + 输出层 Head 组成。
Transformer Block 可以理解为“模型的一个切片”。它具备处理数据的能力,但通常不会单独使用,而是排队接力处理数据。
Transformer Block 可以直接调用吗?
在写代码时(比如用 PyTorch):完全可以。
你可以把它看作一个函数或者一个黑盒子。假设你已经加载了训练好的参数,调用它的伪代码逻辑是这样的:
# 1. 实例化一个 Block(假设它已经加载了训练好的参数)
my_block = TransformerBlock(...)
# 2. 准备数据(必须是向量格式!)
# 假设输入形状是:[Batch_Size, 序列长度, 向量维度]
input_vectors = ...
# 3. 直接调用!
output_vectors = my_block(input_vectors)
my_block = TransformerBlock(...)
# 2. 准备数据(必须是向量格式!)
# 假设输入形状是:[Batch_Size, 序列长度, 向量维度]
input_vectors = ...
# 3. 直接调用!
output_vectors = my_block(input_vectors)
- 输入:一组向量(比如形状是 [1, 5, 768],代表 1 句话,5 个词,每个词 768 维)。
- 输出:另一组形状一样的向量([1, 5, 768])。
- 发生了什么?输入的向量经过 Block 内部的“搅拌”(Attention 和 FFN),信息被融合加工了,变成了更深层的特征向量。
结合 Engram 理解
回到 Engram 的内容,现在的流程变成了:
- 输入:
“牛顿” -> 向量化 -> 输入向量 A - Engram 模块:
查外挂小抄 -> 记忆向量 B - 融合:
输入向量 A + 记忆向量 B = 增强向量 C - Transformer Block 调用:
output = TransformerBlock(增强向量 C)- 这时候 Block 里的计算过程,就用到了你查出来的记忆。