大模型做奥赛题游刃有余,简单的数数却屡屡翻车的原因找到了。
谷歌的一项新研究,发现大模型不会数数的原因,并不是简单的 tokenizer 所致,而是没有足够的空间来存储用于计数的向量。
数出一段话中某个单词出现的次数,这样简单的任务可以难倒许多大模型,GPT-4o、Claude 3.5 也无法幸免。
如果再进一步,想要找到出现频率最高的一个词,更是难如登天,即便能蒙对给出的具体数量也是错的。
有人认为是词汇的 token 化导致了大模型看到的 " 词 " 和我们的看法不一致,但论文表明,实际情况并不是这么简单。
想数清单词,嵌入维度要够大
Transformer 的计数能力与其嵌入维度 d 和词汇量 m(指词汇表中词的数量,非序列长度)的关系密切相关。
详细的原因,就涉及到了 Transformer 统计词频时的机制。
Transformer 通过一种特殊的嵌入方式,利用嵌入空间的线性结构,巧妙地将计数问题转化为了向量加法。
具体说是将每个词映射到一个独特的正交向量上,在这种表示下,词频可以通过对这些正交向量求和来简单地计算。
然而,这种机制的局限性在于,它要求词汇表中的每个词都有一个独立的正交向量表示,因此嵌入维度必须大于词汇量。
嵌入维度不足时,词向量就无法保持正交性,词频的线性叠加也就无法实现了。
此时 Transformer 要实现计数,可以通过注意力机制(CountAttend)来实现,但需要一个随序列长度 n 线性增长的大型 " 逆转 MLP" 层。
具体来说,模型首先通过注意力赋予被查询词较大的权重,再利用位置编码将注意力权重提取到值向量的最后一个元素,这个元素实际记录了被查询词的出现频率的倒数。
这意味着,模型需要一个大小为 O ( n ) 的 MLP 层来计算 1/x 函数(x 为某个词出现的次数)。
但进一步分析表明,任何常数层 ReLU 网络都无法在 o ( n ) 的神经元数量下逼近 1/x 函数。
因此,对于固定规模的 Transformer,这种方案无法推广到任意长度的序列。当序列长度超出训练集长度时,模型的计数能力会急剧恶化。
长度非主要因素,词汇表中数量是关键
为了验证这一结论,作者一共进行了两个实验。
第一个实验,是在一个从头开始训练的 Transformer 模型上进行的,具体有关参数如下:
使用一个由两个 Transformer 层、四个注意力头组成的标准模型;
嵌入维度 d 的取值范围为 8 到 128;
对每个固定的 d,词汇量 m 从 5 到 150 变化,分别测试 20 个不同的值;
模型使用 Adam 优化器从零开始训练,批量大小为 16,学习率为 10^-4,训练 10 万步。
训练和评测数据通过随机采样生成。首先从大小为 m 的词汇表中均匀采样 n 个词,构成一个长度为 n 的序列。
序列长度 n 设置为 n=10m,平均每个词出现的次数固定为 10 次,一共使用了 1600 个样本进行测试。
作者发现,随着词汇量的增加,模型的计数准确率呈阶梯状下降,临界点恰好出现在词汇量超过嵌入维度的时刻。
为了进一步量化模型的计数能力,作者定义了一个指标 m_thr,表示模型的计数准确率下降到 80% 时的临界词汇量。
直观地说,m_thr 反映了在给定嵌入维度下,模型可以 " 承受 " 的最大词汇量,m_thr 越大说明模型的计数能力越强。
结果显示,对于计数(QC)和找出最高频词(MFC)的任务,m_thr 都随嵌入维度 d 的增大而近似线性增长。
第二个实验则是在预训练的 Gemini 1.5 模型上开展,在这个实验中,作者更关注词汇量对计数能力的影响。
他们设计了一系列计数任务,每个任务使用不同大小的词汇表,并把每个词在序列中出现的平均次数固定。
这意味着,在实验组当中,词汇量越大,序列长度也就越长。
作为对照,作者还设置了一个 "Binary Baseline",词汇表中只有固定为两个词,但序列长度与主实验组相同。
这样一来,就可以判断出带来模型计数误差的究竟是词汇量还是序列长度。
实验结果显示,随着词汇量的增加,Gemini 1.5 在计数任务上的平均绝对误差显著上升,而 "Binary Baseline" 的误差要低得多。
这表明,词汇量的增加,而非序列长度的增长,是导致大模型计数能力下降的主要原因。
不过作者也表示,虽然这项研究一定程度上划定了大模型计数能
力的上下界,但这些界限还不够紧致,距离理想的结果还有一定差距。
同时,作者也没有探究增加 Transformer 的层数是否会改变这一结论,需要未来开发新的技术工具才能进一步验证。
论文地址:
https://arxiv.org/abs/2407.15160
文章推荐更多>
- 1Wordpress中不用的图片怎么删除
- 2phpmyadmin账号密码是什么
- 3夸克怎么免费解压视频 视频解压操作指南
- 4如何把d盘的空间分给c盘 跨分区分配空间的3个步骤
- 5逆向工程基础:IDAPro分析恶意样本
- 6oracle怎么看存储过程执行到哪里了?
- 7wordpress使用的编程语言是什么
- 8Wordpress如何调用搜索框
- 9电脑微信怎么截图 微信内置截图功能使用技巧
- 10oracle怎么看存储过程执行到哪里了
- 11Wordpress不需要的图片怎么删除
- 12uc浏览器官网网址导航入口 uc浏览器官网网址导航页
- 13俄罗斯搜索引擎无需登录入口网页 YandeX俄罗斯引擎入口无需登录
- 14wordpress是免费的吗
- 15uc浏览器极速版赚钱是真的吗 uc极速版赚钱玩法与提现规则解析
- 16电脑截图都保存在哪里了 截图文件存储位置查询
- 17oracle数据库端口号怎么查看
- 18oracle数据库类型有哪些
- 19uc浏览器是哪个公司 uc浏览器所属公司及发展历程揭秘
- 20oracle数据库怎么备份表
- 21mysql数据库是什么语言写的
- 22电脑摄像头改移动侦测监控设备
- 23oracle数据库监听端口怎么查看
- 24phpmyadmin怎么导出
- 25电脑开机了但是一直转圈圈 开机转圈卡死解决方法加速系统启动
- 26mysql环境变量配置好了之后怎么办
- 27谷歌浏览器如何截图 谷歌浏览器页面截图技巧
- 28c盘空间越大越流畅吗 解析c盘容量与速度的3个关系
- 29电脑截屏的快捷方式 快速截屏的快捷键大全
- 30wordpress网站怎么添加分享插件
