题目:

Transformers 中的 weight tying 是什么?

答案

Transformers 的输入会从一个词向量矩阵中获取对应 token 的词向量,这个词向量矩阵的大小为 (vocab_size, hidden_size)。

在预测一个词的输出概率时,transformer 有个预测头(prediction head), 这个预测头是 Transformers 的最后一层,大小为 (hidden_size, vocab_size),可能还有一个 bias。

如果预测头没有bias的话,这两个矩阵的大小是一样的,如果这两个矩阵使用同一个矩阵,就被称作 weight typing。

这项技术是由两拨人独立提出的,一波人是Ofir Press, Lior Wolf 发表了《Using the Output Embedding to Improve Language Models》,一波是Hakan Inan, Khashayar Khosravi, Richard Socher 提出的《Using the Output Embedding to Improve Language Models》。

这里面比较出名的是 Richard Socher,创办了you.com

下面简单回顾一下这两篇论文关于 Weight Typing 的部分。

Using the Output Embedding to Improve Language Models

这篇文章的出发点是基于词向量和预测头的功能考虑的。作者认为,词向量最终应该满足这样一个条件,那就是相似词的词向量应该也相似(在向量空间中的距离应该更近)。而预测头需要参与 softmax 去预测某一个词,我们期望两个同义词互相交换位置后,得分应该也差不多,这也就要求相似的词在预测头中对应的向量也应该相似才行。

基于这一点的考虑,作者认为词向量和预测头可以共享权重。然后做了一些实验,证明出了结构极其简单的 word2vec,其他的稍微复杂一点的模型,weight tying 之后效果都变好了。

Tying Word Vectors and Word Classifiers: A Loss Framework for Language Modeling

这篇文章提了个新的loss,在这个loss下,从数学上证明了词向量和预测头这两个矩阵的相似性。具体证明有点繁琐,感兴趣的可以看看原文。

Weight Tying 的好处

最明显的好处就是降低了模型参数。

在词表不大的时候并没有什么感觉,但是词表越大,词向量占参数的比例就越大。

比如 llama2 有 32000 个 token ,参数量为 32000 * 4096 = 131072000 个,整体参数量为 6738415616, 占比 1.95%.

llama3 有 151936 个 to,参数量为 151936 * 4096 = 622329856 个,整体参数量为 8030261248, 占比 7.75%.

然而 llama3 并没有使用 Weight Tying, 如果使用的话,参数量会缩减 7.75%,后面会看到,一些词表更大的模型,都用了 Weight Tying。

加速模型收敛

模型参数变小,自然收敛更快。但是从原理上还有另外一层解释。

如果没有 weight tying, 词向量矩阵只会更新自己见过的 token。但是当使用 weight tying 后,所有的 token 的词向量都会更新,即使没见到的 token,模型也会分配合适的概率。

这个问题在 BERT 之类的 Encoder-only 的模型中更为显著,因为每个样本只会预测15%左右的词汇,而不是像 Decoder 那样所有的 token 都会更新。所以 Encoder-only 的模型更喜欢使用 Weight Tying

Weight Tying 的坏处

Weight Tying 也不只是有好处,也有坏处。从根本上说,预测头和词向量所肩负的任务是完全不一样的,强扭的瓜不一定甜。

在论文《Improving Low Compute Language Modeling with In-Domain Embedding Initialisation》 也提到,在一些领域内的低词频的词汇得到充分的训练后,Weight Tying 并没有像 Press & Wolf 那样改善模型的性能。所以更多的语料会削弱 Weight Tying 的效果。

还有在论文《Representation Degeneration Problem in Training Natural Language Generation Models》中提到,使用 weight tying 会导致各向异性问题

常用模型使用 Weight Tying 的情况

  • Gemma: True

  • qwen: False

  • llama : False

  • deepseek:

  • yi: False

  • glm2/4: false

  • glm1: True

  • command R: True

  • mistral: False

可以看出, Gemma 和 command R 由于词表确实很大(256000 个),使用了 Weight Tying,其他的词表在 100k+ 的搜没有采用 Weight Tying

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

GitHub 加速计划 / tra / transformers
130.24 K
25.88 K
下载
huggingface/transformers: 是一个基于 Python 的自然语言处理库,它使用了 PostgreSQL 数据库存储数据。适合用于自然语言处理任务的开发和实现,特别是对于需要使用 Python 和 PostgreSQL 数据库的场景。特点是自然语言处理库、Python、PostgreSQL 数据库。
最近提交(Master分支:1 个月前 )
617b2127 21 小时前
144852fb * refactor: benchmarks Based on a discussion with @LysandreJik & @ArthurZucker, the goal of this PR is to improve transformers' benchmark system. This is a WIP, for the moment the infrastructure required to make things work is not ready. Will update the PR description when it is the case. * feat: add db init in benchmarks CI * fix: pg_config is missing in runner * fix: add psql to the runner * fix: connect info from env vars + PR comments * refactor: set database as env var * fix: invalid working directory * fix: `commit_msg` -> `commit_message` * fix: git marking checked out repo as unsafe * feat: add logging * fix: invalid device * feat: update grafana dashboard for prod grafana * feat: add `commit_id` to header table * feat: commit latest version of dashboard * feat: move measurements into json field * feat: remove drop table migration queries * fix: `torch.arrange` -> `torch.arange` * fix: add missing `s` to `cache_position` positional argument * fix: change model * revert: `cache_positions` -> `cache_position` * fix: set device for `StaticCache` * fix: set `StaticCache` dtype * feat: limit max cache len * fix script * raise error on failure! * not try catch * try to skip generate compilation * update * update docker image! * update * update again!@ * update * updates * ??? * ?? * use `torch.cuda.synchronize()` * fix json * nits * fix * fixed! * f**k * feat: add TTNT panels * feat: add try except --------- Co-authored-by: Arthur Zucker <arthur.zucker@gmail.com> 23 小时前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐