导航

理解大模型中的 d_model

Posted on 2024-03-03 13:42  蝈蝈俊  阅读(1220)  评论(0编辑  收藏  举报

在深度学习和Transformer模型的上下文中,d_model中的“d”通常代表“dimension”,即“维度”的简写。因此,d_model指的是模型中向量的维度大小,这是一个关键的参数,影响着模型的性能和计算复杂度。在Transformer架构中,d_model特别指向嵌入向量的维度,以及模型内部传递的数据向量的统一维度。

d_model 定义了每层的大小

Transformer模型的核心是通过自注意力机制来处理序列数据。在这些模型中,d_model是一个关键的超参数,它定义了模型内部每一层的大小。具体来说,它表示了以下几个方面:

嵌入层的大小

在模型的输入端,单词或其他类型的标记会被转换为固定大小的向量。d_model就是这些向量的维度。

在Transformer 模型的上下文中,嵌入层的大小通常与模型中其他部分的大小一致,这是为了保持信息在模型中流动时的维度一致性。

自注意力机制的大小

在自注意力层中,d_model决定了查询(Query)、键(Key)、值(Value)向量的维度。这些向量的大小直接影响了模型处理信息的能力。

然而,自注意力机制内部还涉及到一些其他的维度,如d_kd_v(分别代表键和值的维度),在一些变体中,这些维度可能会与d_model不同,特别是当使用多头注意力时,d_kd_v可能会被设置为d_model除以头数的结果。

前馈网络的输入和输出大小

在Transformer模型的每个编码器和解码器层中,都包含有一个前馈神经网络(Feed Forward Neural Network, FFNN)。这个网络的输入和输出层的维度通常也是d_model。 这是为了保证信息能够顺畅地在模型层之间传递。然而,前馈网络内部的隐藏层的维度(通常表示为d_ff)通常是d_model的几倍,这样做是为了在模型内部提供更多的表示空间,从而捕获更复杂的特征。

总结来说,虽然嵌入层的大小、自注意力机制的大小、以及前馈网络的输入和输出大小在很多情况下都是相同的(即等于d_model),但Transformer模型的设计允许在某些内部维度上进行调整,以优化模型的性能和效率。特别是在多头注意力和前馈网络的内部层次上,模型设计者有一定的灵活性来选择不同的大小。

如何看 d_model 的大小

选择合适的d_model对模型的性能有重大影响。如果d_model太小,模型可能无法捕捉到足够的信息;而如果d_model太大,则会增加计算成本和过拟合的风险。因此,在设计模型时需要仔细考量d_model的大小。

gemma:2b 为例,它的配置文件 https://huggingface.co/google/gemma-2b/blob/main/config.json 中有:

"hidden_size": 2048

这通常意味着模型的d_model等于2048。在Transformer模型的配置文件中,hidden_size参数通常指的就是模型中各个层的隐藏单元数目,也就是嵌入向量的维度或者说是模型中信息传递的维度大小。所以,对于gemma-2b模型,hidden_size为2048表明它的d_model是2048,即模型处理的向量维度为2048。这个维度在模型的嵌入层、自注意力层等多个关键部分中被用作一个基本的维度大小。

常见模型的 d_model

模型 d_model 参看
Gemma:2b 2048 https://huggingface.co/google/gemma-2b
Gemma:7b 3072 https://huggingface.co/google/gemma-7b
Llama2:7b 4096 https://huggingface.co/meta-llama/Llama-2-7b
OLMo:7B 4096 https://huggingface.co/allenai/OLMo-7B