Transformer Decoder-Only 参数量计算

Transformer 的 Decoder-Only 架构(如 GPT 系列模型)是当前大语言模型的主流架构,其参数量主要由以下几个部分组成:

  1. 嵌入层(Embedding Layer)
  2. 自注意力层(Self-Attention Layers)
  3. 前馈网络(Feed-Forward Network, FFN)
  4. Layer Normalization 和偏置项
OperationParameters
Embedding( n_vacab + n_ntx ) × d_model 
Attention:QKV3 × n_layer × d_model × d_attn
Attention:Projectn_layer × d_model × d_attn
Feedforward2  × n_layer × d_model × d_ff
Layer Normalization 和偏置项4 × n_layer × d_model
Total(Attention + Feedforward)

2  × n_layer × d_model × ( 2 × d_attn + d_ff )

≈  12  × n_layer  × d_model^2 

假设d_attn = d_model,d_ff = 4 × d_model

参数定义:

d_mdole:模型维度;

n_layer:层数;

d_attn:注意力输出维度;

d_ff:前馈网络维度;

n_ntx:最大上下文长度(token)

n_head:注意力头数

n_vacab:词汇表大小

1. 嵌入层(Embedding Layer)

嵌入层的作用是将输入 token 转换为高维向量表示。参数量为:n_vacab × d_model

此外,绝对位置编码通常由可学习的嵌入矩阵实现,其权重维度为: n_ntx × d_model

此外,在语言模型中,输出层通常与嵌入层共享权重矩阵(Tie Embedding),因此不需要额外计算输出层的参数量。

所以嵌入层总参数数:( n_vacab + n_ntx ) × d_model 

备注:假设输入 x_i =  (w_1, w_2,..., w_n_ntx),长度为n_ntx,batch 大小为b,则原始输入维度为:(b,n_ntx),经过embedding后输出维度为(b, n_ntx, d_model)

2. 自注意力层(Self-Attention Layers)

每个 Transformer 层包含一个多头自注意力机制(Multi-Head Self-Attention, MHSA),其参数量主要来自以下三部分:

  • 线性变换矩阵:生成 Query、Key、Value
  • 输出投影矩阵:将多头结果拼接后进行线性变换

假设:

  • 输入的维度为 d_model
  • 注意力头数为 h
  • 每个头的维度为 d_k(通常满足 d_k = d_attn / h)
  • QKV输出维度d_attn,然后经过投影,输出维度 d_model
(1) 生成 Query、Key、Value 的线性变换矩阵

每个头的 QKV 都需要一个独立的线性变换矩阵,因此总的参数量为:

Attention QKV Parameters = 3 × d_model × d_attn

(2) 输出投影矩阵

多头注意力的结果需要通过一个线性投影矩阵转换回 d_model 维度,因此参数量为:

Attention Project Parameters =  d_attn × d_model 

(3) 总自注意力层参数量

单个自注意力层的参数量为:

Self-Attention Parameters = 3 × d_model × d_attn + d_attn × d_model = 4 × d_model × d_attn

如果有 n_layer 个 Transformer 层,则总的自注意力层参数量为:

Total Self-Attention Parameters = 4 × n_layer × d_model × d_attn

备注:嵌入层输出的 x维度是(b, n_ntx, d_model),W_Q维度是(d_model, d_attn),则Q = x * W_Q维度是(b, n_ntx, d_attn),通过self-attention后,输出维度为(b, n_ntx, d_attn),然后通过attention project后维度是(b, n_ntx, d_model)

3. 前馈网络(Feed-Forward Network, FFN)

每个 Transformer 层包含一个两层的前馈网络(FFN),其参数量主要来自以下两部分:

  • 第一层从 d_model 映射到 d_ff(通常是 d_model 的 4 倍)。
  • 第二层从 d_ff 映射回 d_model
(1) 第一层参数量

第一层将 d_model 映射到 d_ff,因此参数量为:

First Layer Parameters=d_model × d_ff

(2) 第二层参数量

第二层将 d_ff 映射回 d_model,因此参数量为:

Second Layer Parameters=d_ff × d_model

(3) 总前馈网络参数量

单个前馈网络的参数量为:

FFN Parameters=d_model ×d_ff + d_ff × d_model = 2 × d_model × d_ff

如果有 n_layer 个 Transformer 层,则总的前馈网络参数量为:

Total FFN Parameters = 2  × n_layer × d_model × d_ff

备注:(b, n_ntx, d_model)经过FFN后输出维度是(b, n_ntx, d_model)

4. Layer Normalization 和偏置项

每个 Transformer 层包含两个 Layer Normalization 操作(分别在自注意力和前馈网络之后),每个 Layer Normalization 包含两个可学习参数(缩放因子和偏移因子)。

总的 Layer Normalization 参数量为:

LayerNorm Parameters = n_layer × 2 × 2 × d_model = 4 × n_layer × d_model

5. 总参数量

Total Parameters = ( n_vacab + n_ntx ) × d_model   + 4 × n_layer × d_model × d_attn  + 2  × n_layer × d_model × d_ff + 4 × n_layer × d_model 

Total Parameters ≈  4 × n_layer × d_model × d_attn  + 2  × n_layer × d_model × d_ff = 2  × n_layer × d_model × ( 2 × d_attn + d_ff )

假设d_attn = d_model, 以及d_ff = 4 × d_model,则

Total Parameters ≈  12  × n_layer  × d_model^2

6. 实际例子

以 GPT-3 为例:

  • 词汇表大小 n_vacab = 50257 
  • 模型维度 d_model = 12288
  • 前馈网络维度 d_ff=4 × d_model = 49152
  • 层数 n_layer = 96 
  • 最大上下文长度 (token)n_ntx = 2048

代入公式:

Total Parameters = (50257 + 2048) ×12288 + 96×(4×122882+8×122882) + 4×96×12288

计算结果约为 175B 参数,与 GPT-3 的实际参数量一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/80592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(自用)Java学习-5.8(总结,springboot)

一、MySQL 数据库 表关系 一对一、一对多、多对多关系设计外键约束与级联操作 DML 操作 INSERT INTO table VALUES(...) DELETE FROM table WHERE... UPDATE table SET colval WHERE...DQL 查询 基础查询:SELECT * FROM table WHERE...聚合函数:COUNT()…

【日撸 Java 三百行】Day 11(顺序表(一))

目录 Day 11:顺序表(一) 一、关于顺序表 二、关于面向对象 三、代码模块分析 1. 顺序表的属性 2. 顺序表的方法 四、代码及测试 拓展: 小结 Day 11:顺序表(一) Task: 在《数…

Spring Boot动态配置修改全攻略

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 无需重启应用,实时更新配置的终极指南 在微服务架构中,动态配置管理是提高系统灵活性的关键技术。本文将通过4种主流方案&#xff0c…

精益数据分析(55/126):双边市场模式的挑战、策略与创业阶段关联

精益数据分析(55/126):双边市场模式的挑战、策略与创业阶段关联 在创业和数据分析的学习旅程中,我们持续探索不同商业模式的奥秘。今天,依旧怀揣着与大家共同进步的想法,深入研读《精益数据分析》&#xf…

linux内核pinctrl/gpio子系统驱动笔记

目录 一、简单介绍二、主要源码文件和目录gpio子系统pinctrl子系统两个子系统之间的关系设备树例子 三、主要的数据结构gpio子系统pinctrl子系统 四、驱动初始化流程五、难点说明 一、简单介绍 GPIO子系统: Linux GPIO子系统是Linux内核中负责处理GPIO(通用输入输出…

Vue 2 项目中配置 Tailwind CSS、Font Awesome和daisyUI

Vue 2 项目中配置 Tailwind CSS 和 安装 daisyUI 首先重点注意,Vue2中安装Tailwind和daisyui一定要注意版本。 最佳版本 使用 Vue 2 TailwindCSS v2 DaisyUI v1 的兼容版本 "tailwindcss": "npm:tailwindcss/postcss7-compat^2.2.17", &q…

5.11 - 5.12 JDBC+Mybatis+StringBoot项目配置文件

JDBC: 预编译SQL优点:安全,性能更高。 在cmd里面输入java-jar就可以运行jar包。 Mybatis: 持久层框架。用于简化JDBC的开发。 数据库连接池里面放置的是一个一个Connection连接对象。(连接池中的连接可以复用&#…

探索科技的前沿动态:科技爱好者周刊

探索科技的前沿动态:科技爱好者周刊 在信息爆炸的时代,我们每时每刻都被新技术、新理念包围。而如何在这纷繁复杂的信息中找到对自己有价值的内容,成了一大挑战。今天,我们要介绍的是一个宝贵的资源——科技爱好者周刊,它致力于为科技爱好者提供优质的科技资讯,每周五发…

Vue3 官方宣布淘汰 Axios,拥抱Alova.js

过去十年,Axios 凭借其简洁的API设计和浏览器/Node.js双环境支持,成为前端开发者的首选请求库。但随着现代前端框架的演进和工程化需求的升级,Alova.js 以更轻量、更智能、更符合现代开发范式的姿态登场。 一、Axios的痛点 1,冗余的适配逻辑,比如Axios的通用配置(但实际…

Spring AI 与 Groq 的深度集成:解锁高效 AI 推理新体验

Spring AI 与 Groq 的深度集成:解锁高效 AI 推理新体验 前言 在人工智能飞速发展的当下,AI 推理的效率和性能成为开发者关注的焦点。Groq 作为一款基于 LPU™ 的超快速 AI 推理引擎,凭借其强大的性能,能够支持各类 AI 模型&…

风车OVF镜像:解放AI开发限制的Ubuntu精简系统

风车OVF镜像:解放AI开发限制的Ubuntu精简系统 AI白嫖续杯一站式-风车ovf AI白嫖续杯一站式解决-风车ovf 前言 作为一名AI开发者,我经常在Windows和Linux环境之间切换开发。然而,Windows平台上的各种免费版限制逐渐成为我工作效率的瓶颈。在寻…

第十部分:文件与动静态库

目录 1、文件系统 1.1、磁盘 1.2、文件系统 1.3、文件的增删查改 2、软硬链接 2.1、软链接 2.2、硬链接 3、物理内存与文件 4、动静态库 4.1、静态库 4.1.1、静态库的制作 4.1.2、静态库的使用 4.2、动态库 4.2.1、动态库的制作 4.2.2、动态库的使用 4.3、动静…

android14优化ntp时间同步

简介 网络时间协议NTP(Network Time Protocol)是TCP/IP协议族里面的一个应用层协议,用来使客户端和服务器之间进行时钟同步,提供高精准度的时间校正。 当机器的ntp时间同步出现问题时,可以从ntp配置方面进行优化&…

ZYNQ笔记(二十):Clocking Wizard 动态配置

版本:Vivado2020.2(Vitis) 任务:ZYNQ PS端 通过 AXI4Lite 接口配置 Clocking Wizard IP核输出时钟频率 目录 一、介绍 二、寄存器定义 三、配置 四、PS端代码 一、介绍 Xilinx 的 Clock Wizard IP核 用于在 FPGA 中生成和管理…

服务器带宽基础知识

服务器带宽基础知识详解 一、带宽的定义与基本概念 服务器带宽(Bandwidth)是指服务器与互联网之间在单位时间内传输数据的能力,通常以 Mbps(兆比特每秒) 或 Gbps(吉比特每秒) 为单位衡量。它决…

OpenCV CUDA 模块中在 GPU 上对图像或矩阵进行 翻转(镜像)操作的一个函数 flip()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::flip 是 OpenCV 的 CUDA 模块中的一个函数,用于在 GPU 上对图像或矩阵进行 翻转(镜像)操作。它类似…

shell脚本实现docker运行镜像挂载

根据本文脚本展示内容可以实现多种容器挂载 演示nginx挂载 创建挂载目录 mkdir -p /data/nginx/{conf,html,logs} 参数含义: docker run -d --name 给运行的镜像取名 -v /宿主机/目录:/容器内/目录 镜像名 示例: docker启动nginx(当…

WiseAD:基于视觉-语言模型的知识增强型端到端自动驾驶——论文阅读

《WiseAD: Knowledge Augmented End-to-End Autonomous Driving with Vision-Language Model》2024年12月发表,来自新加坡国立和浙大的论文。 在快速发展的视觉语言模型(VLM)中,一般人类知识和令人印象深刻的逻辑推理能力的出现&a…

NestJS 知识框架

一、核心概念 1. 架构基础 基于 Express/Fastify 的 Node.js 框架 采用模块化设计 使用 TypeScript 构建(也支持 JavaScript) 借鉴 Angular 的设计理念 2. 主要组件 模块 (Module): 应用的基本组织单元 控制器 (Controller): 处理 HTTP 请求 服务…

深入理解 Istio v1.25.2

要深入理解 Istio 的最新版本(截至 2025 年 5 月,最新版本为 1.25.2,发布Iweb:1⁊)源码,我们可以通过分析其核心组件和代码结构来加深对 Istio 的理解。以下是对 Istio 源码的解读,结合其架构和功能&#x…