当前位置: 首页 > news >正文

BERT 作为Transformer的Encoder 为什么采用可学习的位置编码

摘要

BERT 在位置编码上与原始 Transformer 论文中的 sin/cos 公式不同,选择了可学习(learned)的位置嵌入方案。本文将从 Transformer 原始位置编码选项入手,分析 BERT 选择 learned positional embeddings 的四大核心原因,并通过实验和社区实证对比两者的性能差异,最后对比其他主流模型的做法。全文引用了业界高质量文献和社区讨论,共计 13 条引用,帮助读者全面理解这一设计抉择。


1. Transformer 原始位置编码选项

1.1 Sinusoidal vs. Learned

在《Attention Is All You Need》中,作者同时提出了固定正弦/余弦编码(sinusoidal)可学习查表编码(learned embedding)两种方案,并在实验中发现二者性能相当,无明显优劣

  • Sinusoidal 编码:根据位置和频率预计算,不参与训练;

  • Learned 编码:将位置号作为索引,初始化为随机向量,随模型一同更新。


2. BERT 选择可学习位置编码的主要原因

2.1 实现与推理效率

Sinusoidal 编码需在推理时频繁计算三角函数,而 Learned 编码只需一次向量查表相加,更省时

2.2 固定最大长度

BERT 在预训练阶段就将最大序列长度(如512)固定下来,不需要对超出训练长度的情况做泛化处理,查表方式只要裁剪到最大长度即可,无需 sin/cos 的“无限外推”功能

2.3 领域自适应能力

BERT 后续需针对不同领域或下游任务做多次微调(fine-tune)。Learned 编码能根据下游语料分布动态更新位置表示,比固定公式更具灵活性和表达力

2.4 参数代价微小

即便最大长度设为512,位置嵌入表也仅有 512×HiddenSize(如768)≈40万维参数,在千亿级模型中占比几乎可以忽略,却换来更灵活的表达


3. 实践效果对比

  • 多项实验证明,Learned 和 Sinusoidal 在下游任务(分类、问答、序列标注等)上的性能几乎不分伯仲,甚至略有优势;同时 Learned 方案在训练和推理的整体资源消耗上也更可控【

  • Hugging Face 社区反馈:Learned embeddings 在某些场景下收敛更快,且不需要针对不同任务手动设计位置函数,可实现“一次预训练,多次微调”流程的高效落地


4. 与其他模型对比

  • GPT 系列 同样采用 Learned 位置嵌入,原因与 BERT 类似:固定最大长度,追求生成时的高效与灵活

  • 对超长文本支持(如 Transformer-XL、Longformer)则更倾向使用相对位置编码稀疏注意力等技术,以兼顾泛化和效率,解决 Learned 编码不能外推到新序列长度的问题


小结

尽管 BERT 架构来源于 Transformer 的编码器部分,但在位置编码的实现上,BERT 以“一次预训练、多次微调”“固定最大长度”“极小参数开销”以及“推理高效” 为考量,果断选择了可学习查表(训练的位置编码)的方式,而非 sin/cos 固定公式。此设计既保证了性能,又简化了工程实现,契合 BERT 在工业界广泛落地的需求。


参考文献

  1. Vaswani A. et al., Attention Is All You Need, 2017. 【sinusoidal vs learned】 

  2. Why BERT use learned positional embedding?, Cross Validated, 2019. 

  3. Cheng YQ, 位置编码(positional encoding), CSDN, 2018. 

  4. dzljoy2, 大模型位置编码_bert位置编码, CSDN, 2023. 

  5. Why use learnable positional encoding instead of sinusoids?, AI.StackExchange, 2023. 

  6. Why positional embeddings are implemented as embeddings, Hugging Face Discuss, 2019. 

  7. Tavares G., Sinusoidal Embeddings, Medium, 2024. 

  8. muyuu, Learned Positional Embedding, CSDN, 2019. 

  9. nn.Embedding layer for positional encoding, StackOverflow, 2022. 

  10. Comparing positional encodings, apxml.com, 2023. 

  11. Understanding BERT Embeddings, Tinkerd, 2022. 

  12. On Position Embeddings in BERT, OpenReview, 2019. 

  13. Transformer 通俗笔记, 集智斑图, 2022. 

相关文章:

BERT 作为Transformer的Encoder 为什么采用可学习的位置编码

摘要 BERT 在位置编码上与原始 Transformer 论文中的 sin/cos 公式不同,选择了可学习(learned)的位置嵌入方案。本文将从 Transformer 原始位置编码选项入手,分析 BERT 选择 learned positional embeddings 的四大核心原因&#x…...

Vue百日学习计划Day43-45天详细计划-Gemini版

Day 43: Composable 函数基础与抽取简单逻辑 (~3 小时) 本日目标: 理解 Composable 函数的概念、优势,并学会如何将简单的、无状态的逻辑抽取为 Composable。所需资源: Vue 3 官方文档 (组合式函数): https://cn.vuejs.org/guide/reusability/composables.html 学…...

Kotlin 协程 (二)

Kotlin 协程提供了丰富的功能,能够高效地处理并发和异步任务。以下是对 Kotlin 协程中常见概念和功能的详细讲解,包括它们的定义、作用、使用场景以及最佳实践。 1. 协程核心概念 1.1 CoroutineScope 定义:CoroutineScope 是协程作用域的抽…...

Linux 下 rsync 工具详解与实用指南

Linux 下 rsync 工具详解与实用指南 一、什么是 rsync? rsync(remote sync)是 Linux/Unix 系统下常用的数据同步和备份工具。它可以高效地在本地与远程主机之间同步文件和目录,支持增量同步、断点续传、权限保留等功能&#xff…...

2025年医美行业报告60+份汇总解读 | 附 PDF 下载

原文链接:https://tecdat.cn/?p42122 医美行业在消费升级与技术迭代的双重驱动下,已从边缘市场逐步走向主流。数据显示,2024 年中国医美市场规模突破 3000 亿元,年复合增长率达 15%,但行业仍面临正品率不足、区域发展…...

汉得集星獭1.8.0正式发布,高效集成再赋能!

汉得企业级系统集成平台 (中文名集星獭,英文名JeeStar)1.8.0版本于2025年4月正式发布 。 集星獭是一款一站式多系统集成、多云集成、多端集成、多协议集成、多设备集成、数据集成、页面集成的全域集成解决方案产品。 此次发布主要聚焦于以下…...

一文深度解析:Pump 与 PumpSwap 的协议机制与技术差异

在 Solana 链上,Pump.fun 和其延伸产品 PumpSwap 构成了 meme coin 发行与流通的两大核心场景。从初期的游戏化发行模型,到后续的自动迁移与交易市场,Pump 系列协议正在推动 meme coin 从“爆发性投机”走向“协议化运营”。本文将从底层逻辑…...

数据库实验——备份与恢复

一、目的(本次实验所涉及并要求掌握的知识点) 1.掌握SQL server的备份与恢复 二、实验内容与设计思想(设计思路、主要数据结构、主要代码结构、主要代码段分析) 验证性实验 实验1:在资源管理器中建立备份设备实验 …...

抓包分析工具与流量监控软件

目录 一、抓包分析工具:定位问题的“放大镜” 1.1 工作原理简述 1.2 主流工具盘点 1.3 抓包的实战应用 二、流量监控软件:网络全景的“雷达系统” 2.1 功能特征 2.2 常用工具概览 2.3 实战应用场景 五、结语:深入可见,安…...

Go语言实战:使用 excelize 实现多层复杂Excel表头导出教程

Go 实现支持多层复杂表头的 Excel 导出工具 目录 项目介绍依赖说明核心结构设计如何支持多层表头完整使用示例总结与扩展 项目介绍 在实际业务系统中,Excel 文件导出是一项常见功能,尤其是报表类需求中常见的复杂多级表头,常规表格组件往…...

【算法】定长滑动窗口5.20

定长滑动窗口算法: 算法思路 滑动窗口遍历字符串:窗口大小为 k ,遍历字符串每个字符,维护窗口内元音字母数量。 ​统计窗口内元音:当字符是元音(a/e/i/o/u)时,计数器 vowel 加 1。…...

Java操作Elasticsearch 之 [Java High Level REST Clientedit]

<a name"VbjtD"></a> 1. 简述 Elasticsearch 是基于 Lucene 开发的一个分布式全文检索框架&#xff0c;向 Elasticsearch 中存储和从 Elasticsearch 中查询&#xff0c;格式是json。向 Elasticsearch 中存储数据&#xff0c;其实就是向 es 中的 index 下…...

数据集划分与格式转换:从原始数据到模型训练的关键步骤

在计算机视觉项目中&#xff0c;数据集的合理划分和格式转换是实现高效模型训练的基础。本文将详细介绍如何将图片和标注数据按比例切分为训练集和测试集&#xff0c;以及常见的数据格式转换方法&#xff0c;包括 JSON 转 YOLO 格式和 XML 转 TXT 格式。 一、将图片和标注数据…...

MinerU

简介 MinerU 是一款功能全面的文档处理系统&#xff0c;旨在将 PDF 和其他文档格式转换为机器可读的格式&#xff0c;例如 Markdown 和 JSON。该系统专注于在保留文档结构的同时&#xff0c;准确提取文档内容&#xff0c;处理复杂的布局&#xff0c;并转换公式和表格等特殊元素…...

Vue百日学习计划Day46-48天详细计划-Gemini版

Day 46: <KeepAlive> - 组件缓存与优化 (~3 小时) 本日目标: 理解 <KeepAlive> 的作用&#xff0c;学会如何使用它来缓存组件实例&#xff0c;从而优化应用性能和用户体验。所需资源: Vue 3 官方文档 (<KeepAlive>): https://cn.vuejs.org/guide/built-ins/…...

微软的 Windows Linux 子系统现已开源

微软宣布其 Windows Linux 子系统 (WSL) 开源&#xff0c;开放代码供社区成员贡献。自近九年前推出适用于 Windows 10 的 WSL 以来&#xff0c;微软多年来一直致力于开源这项在 Windows 中启用 Linux 环境的功能。 Windows 首席执行官 Pavan Davuluri 表示&#xff1a;“这是开…...

Axure中使用动态面板实现图标拖动交换位置

要在Axure中实现图标拖动交换位置的功能&#xff0c;可以通过动态面板结合交互事件来实现。 实现步骤 准备图标元素 将每个图标转换为动态面板&#xff08;方便拖动和交互&#xff09;。 设置拖动交互 选中图标动态面板 → 添加“拖动时”交互 → 选择“移动”当前动态面板&am…...

深入浅出:Spring Cloud Gateway 扩展点实践指南

文章目录 前言一、为什么需要扩展 Spring Cloud Gateway&#xff1f;二、Spring Cloud Gateway 核心扩展点三、扩展点实战&#xff1a;代码与配置详解3.1 全局过滤器&#xff08;GlobalFilter&#xff09;3.2 路由过滤器&#xff08;GatewayFilter&#xff09;2.3 自定义路由断…...

SCAU18923--二叉树的直径

18923 二叉树的直径 时间限制:1000MS 代码长度限制:10KB 提交次数:0 通过次数:0 题型: 编程题 语言: G;GCC Description 给定一棵二叉树&#xff0c;你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点…...

理解 RESTful 风格:现代 Web 服务的基石

在当今的互联网时代&#xff0c;Web 服务成为了连接各种应用和系统的关键。而 RESTful 风格&#xff0c;作为一种广泛采用的架构风格&#xff0c;为设计和实现 Web 服务提供了一套简洁而强大的指导原则。本文将深入探讨 RESTful 风格的核心概念、优势以及如何在实际项目中应用它…...

大模型(3)——RAG(Retrieval-Augmented Generation,检索增强生成)

文章目录 1. 核心组成2. 工作流程3. 训练方式4. 优势与局限5. 应用场景6. 典型模型变体总结 RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;是一种结合了信息检索与文本生成的技术&#xff0c;旨在通过引入外部知识库提升生成内容的准确性…...

电子科技大学软件工程实践期末

Java基础 面向对象 Java高级编程 2023&#xff1a; 软件工程基础 ch1软件工程概述 软件的概念和特点 软件危机的概念以及产生的原因 软件工程的定义 三要素 应用软件工程的原因 三要素&#xff1a;工具&#xff0c;方法&#xff0c;过程 ch2 软件过程 软件生命周期 软件过程…...

线上jvm假死问题排查

1.线上告警接口超时 看接口是用户服务&#xff0c;查看nacos服务实例&#xff0c;发现有一个节点已经下线了 3.找到对应节点所在服务器&#xff0c;jps -l 命令发现用户服务还在&#xff0c;初步判断是假死 4.使用 jstat -gc 进程id 1000 每秒打印gc情况&#xff0c;发现频繁…...

Redis中SETNX、Lua 脚本和 Redis事务的对比

在 Redis 中&#xff0c;SETNX、Lua 脚本 和 Redis 事务 都可以用于实现原子性操作&#xff0c;但它们的适用场景和能力范围不同。以下是详细对比和原因分析&#xff1a; 1. SETNX 的原子性与局限性 (1) 原子性保证 SETNX&#xff08;SET if Not eXists&#xff09; 是 Redis…...

Nginx配置记录访问信息

文章目录 方法一&#xff1a;使用Nginx原生配置记录访问信息方法二&#xff1a;使用Nginx_headers_more模块记录更加详细的信息 Nginx被广泛应用于各种场景如&#xff1a;Web服务器、反向代理服务器、负载均衡器、Web应用防火墙(WAF)等 在实际的产品开发中&#xff0c;无论是功…...

基于机载激光雷达数据的森林生物量估测:AI驱动的遥感革新

一、技术背景与意义 森林生物量是生态系统碳循环和碳汇估算的核心参数。传统遥感方法&#xff08;如光学影像&#xff09;在三维结构解析上存在局限&#xff0c;而机载激光雷达&#xff08;LiDAR&#xff09;凭借高精度点云数据&#xff0c;能够捕捉森林的垂直结构信息。结合人…...

Redis中的事务和原子性

在 Redis 中&#xff0c;事务 和 原子性 是两个关键概念&#xff0c;用于保证多个操作的一致性和可靠性。以下是 Redisson 和 Spring Data Redis 在处理原子性操作时的区别与对比&#xff1a; 1. Redis 的原子性机制 Redis 本身通过以下方式保证原子性&#xff1a; 单线程模型…...

SSL证书:谷歌算法排名的安全基石与信任杠杆

一、技术演进&#xff1a;从安全信号到算法基石 谷歌对SSL证书的重视始于2014年&#xff0c;当时HTTPS首次被纳入排名算法信号。经过十年迭代&#xff0c;SSL证书已从“加分项”升级为“基础门槛”。2025年算法更新中&#xff0c;其权重占比达2%&#xff0c;与页面加载速度、移…...

XXX企业云桌面系统建设技术方案书——基于超融合架构的安全高效云办公平台设计与实施

目录 1. 项目背景与目标1.1 背景分析1.2 建设目标2. 需求分析2.1 功能需求用户规模与场景终端兼容性2.2 非功能需求3. 系统架构设计3.1 总体架构图流程图说明3.2 技术选型对比3.3 网络设计带宽规划公式4. 详细实施方案4.1 分阶段部署计划4.2 桌面模板配置4.3 测试方案性能测试工…...

【GESP真题解析】第 18 集 GESP 一级 2024 年 12 月编程题 1:温度转换

大家好&#xff0c;我是莫小特。 这篇文章给大家分享 GESP 一级 2024 年 12 月编程题第 1 题&#xff1a;温度转换。 题目链接 洛谷链接&#xff1a;B4062 温度转换 一、完成输入 根据题意&#xff0c;输入只有一行&#xff0c;为实数&#xff0c;数据范围&#xff1a; 0 &l…...

鸿蒙开发进阶:深入解析ArkTS语言特性与高性能编程实践

一、前言 在鸿蒙生态蓬勃发展的当下&#xff0c;开发者对于高效、优质的应用开发语言需求愈发迫切。ArkTS 作为鸿蒙应用开发的核心语言&#xff0c;在继承 TypeScript 优势的基础上&#xff0c;进行了诸多优化与扩展&#xff0c;为开发者带来了全新的编程体验。本文将深入剖析…...

现代计算机图形学Games101入门笔记(十七)

双向路径追踪 外观建模 散射介质 人的头发不能用在动画的毛发上。 动物的髓质Medulla特别大 双层圆柱模型应用 BSSRDF是BRDF的延伸。 天鹅绒用BRDF不合理&#xff0c;转成散射介质。 法线分布 光追很难处理微表面模型 光在微型细节上&#xff0c;光是一个波&#xff0c;会发生衍…...

工单派单应用:5 大核心功能提升协作效率

一、工单管理&#xff1a;全流程一目了然 快速创建&#xff1a;录入任务内容、优先级&#xff0c;从源头明确目标 状态分类&#xff1a;待处理 / 进行中 / 已完成工单一目了然&#xff0c;个人进度随时掌控 灵活分配&#xff1a;公海池抢单机制&#xff0c;成员按能力自主接…...

maven 多个模块之间互相引入加载配置的偶遇问题

因为子项目添加了:<!-- aliyun sms SDK --> <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.6.3</version> </dependency>导致原本运行良好的构建模块&#xff0c…...

【蓝桥杯嵌入式】【模块】五、ADC相关配置及代码模板

1. 前言 最近在准备16届的蓝桥杯嵌入式赛道的国赛&#xff0c;打算出一个系列的博客&#xff0c;记录STM32G431RBT6这块比赛用板上所有模块可能涉及到的所有考点&#xff0c;如果有错误或者遗漏欢迎各位大佬斧正。 本系列博客会分为以下两大类&#xff1a; 1.1. 单独模块的讲…...

DP2 跳台阶【牛客网】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 DP2 跳台阶 一、题目描述 二、测试用例 三、解题思路 基本思路&#xff1a;   动态规划题目的难点基本在于构造状态转移方程&#xff0c;对应这题&#xff0c;我们可以发现每次跳跃我…...

KC 喝咖啡/书的复制/奶牛晒衣服/ 切绳子

二分的解题思路&#xff1a; 常解决最小值最大化和最大值最小化问题 步骤解析 确定答案范围 设定初始左边界 left 和右边界 right&#xff0c;确保解在此区间内。例如&#xff1a; 求最小最大值时&#xff0c;left 可取单个元素的最大值&#xff0c;right 取所有元素总和。 …...

Jedis快速入门【springboot】

引入依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>6.0.0</version> </dependency> 创立jedis对象&#xff0c;建立连接 private Jedis jedis; BeforeEach void setUp(){//1 …...

SpringBoot 商城系统高并发引起的库存超卖库存问题 乐观锁 悲观锁 抢购 商品秒杀 高并发

介绍 在高并发场景下&#xff0c;特别是商品秒杀、抢购等情况下&#xff0c;库存超卖问题是一个常见且棘手的问题。为了解决这个问题&#xff0c;Spring Boot 常使用乐观锁和悲观锁来保证数据的正确性和一致性。 悲观锁 悲观锁假设在多线程或多进程环境中&#xff0c;资源会被…...

[python] 轻量级定时任务调度库schedule使用指北

schedule是一款专为简化定时任务调度而设计的Python库&#xff0c;它通过直观的语法降低了周期性任务的实现门槛。作为进程内调度器&#xff0c;它无需额外守护进程&#xff0c;轻量且无外部依赖&#xff0c;适合快速搭建自动化任务。不过&#xff0c;该库在功能完整性上有所取…...

MySQL:to many connections连接数过多

当你遇到 MySQL: Too many connections 错误时&#xff0c;意味着当前连接数已达到 MySQL 配置的最大限制。这通常是由于并发连接过多或连接未正确关闭导致的。 一、查看当前连接数 查看 MySQL 当前允许的最大连接数 SHOW VARIABLES LIKE max_connections;查看当前使用的最大…...

uthash是一个非常轻量级的库

如大家所知&#xff0c;uthash是一个非常轻量级的库。该库的使用非常简单&#xff0c;无需格外的静态库或动态库&#xff0c;仅需导入目标的头文件即可。 这种配置方式虽然简单&#xff0c;但是使用操作却需要用到大量的宏函数。在使用宏函数时不像使用普通函数一样自由和遍历…...

大模型的开发应用(三):基于LlaMAFactory的LoRA微调(上)

基于LlaMAFactory的LoRA微调&#xff08;上&#xff09; 0 前言1 LoRA微调1 LoRA微调的原理1.2 通过peft库为指定模块添加旁支1.3 lora前后结构输出结果对比1.4 使用PyTorch复现 LoRA.Linear1.5 使用peft进行LoRA微调案例 2 LLaMA-Factory2.1 LLaMA-Factory简介2.2 LLaMA-Facto…...

跨域_Cross-origin resource sharing

同源是指"协议域名端口"三者相同&#xff0c;即便两个不同的域名指向同一个ip,也非同源 1.什么是CORS? CORS是一个W3C标准&#xff0c;全称是"跨域资源共享"&#xff08;Cross-origin resource sharing&#xff09;。它允许浏览器向跨源服务器&#xff…...

奥威BI:打破AI数据分析伪场景,赋能企业真实决策价值

在当今企业数字化转型的浪潮中&#xff0c;AI数据分析产品如雨后春笋般涌现&#xff0c;但许多看似创新的功能设计实则难以落地&#xff0c;沦为“伪需求场景”。这些伪场景不仅浪费企业资源&#xff0c;还可能误导决策&#xff0c;阻碍企业数字化转型进程。在此背景下&#xf…...

LLaMA-Factory全解析:大模型微调的开源利器与实战指

技术演进背景与核心价值架构设计与关键技术解析环境搭建与工具链配置全流程微调实战指南企业级应用与高级功能性能优化与安全部署未来发展趋势展望1. 技术演进背景与核心价值 1.1 大模型微调的技术痛点 当前开源大模型(如LLaMA、Qwen、Baichuan等)在通用领域表现优异,但垂…...

python-数据可视化(大数据、数据分析、可视化图像、HTML页面)

通过 Python 读取 XLS 、CSV文件中的数据&#xff0c;对数据进行处理&#xff0c;然后生成包含柱状图、扇形图和折线图的 HTML 报告。这个方案使用了 pandas 处理数据&#xff0c;matplotlib 生成图表&#xff0c;并将图表嵌入到 HTML 页面中。 1.XSL文件生成可视化图像、生成h…...

Jmeter(一) - 环境搭建

1.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序&#xff0c;被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能&#xff0c;例如&#xff1a;静态文件&#xff0c;Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器…...

OpenCV CUDA 模块特征检测与描述------在GPU上执行特征描述符匹配的类cv::cuda::DescriptorMatcher

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::DescriptorMatcher 是 OpenCV 的 CUDA 模块中用于在 GPU 上执行特征描述符匹配的类。它允许你利用 NVIDIA GPU 的并行计算能力来加速特…...

idea如何让文件夹分层显示,而不是圆点分割

网上说是点击小齿轮的都是过时了&#xff0c;对于新版idea不适用&#xff0c;直接上图 1、如图 2、如图 注意也是去掉Compact Middle Packages&#xff0c;只不过新版的方式UI和老版本的不一样了...