{
  "source_file": "0930",
  "source_platform": "知乎专栏",
  "author": "紫气东来",
  "title_listed": "万字长文梳理 LLM 中的长文本问题",
  "keywords": "长文本,位置编码,LongLoRA,注意力",
  "domain": "大模型算法",
  "content_type": "深度技术解析",
  "is_paid_flag": "否",
  "url": "https://zhuanlan.zhihu.com/p/640641794",
  "publish_date": "2023",
  "corpus_stage": "预训练",
  "notes": "从参数量、显存开销到位置编码与注意力改进，系统梳理长文本技术",
  "id": "c8f2d025fc55",
  "collected_at": "2026-10-02T18:45:22",
  "title": "LLM(23)：LLM 中的长文本问题 - 知乎",
  "body_markdown": "[![](https://zhuanlan.zhihu.com/p/640641794)](javascript:void\\(0\\))\n![ZhiHu logo](../images/body-e1fa91dbdb48b8055184.png)\n[](https://www.zhihu.com)\n[关注](https://www.zhihu.com/signin?next=%2Ffollow)[推荐](https://www.zhihu.com/signin?next=%2F)[热榜](https://www.zhihu.com/signin?next=%2Fhot)[专栏](https://www.zhihu.com/signin?next=%2Fcolumn-square)[圈子](https://www.zhihu.com/signin?next=%2Fring-feeds)[AI WorksBeta ](https://www.zhihu.com/project-square)[故事](https://www.zhihu.com/fiore/h5/vip-web)\n​\n[直答](https://zhida.zhihu.com/)\n切换模式\n登录/注册\nLLM(23)：LLM 中的长文本问题\n首发于[从NLP到LLM](https://www.zhihu.com/column/c_1465775160745324544)\n切换模式\n![LLM\\(23\\)：LLM 中的长文本问题](../images/000.img)\n# LLM(23)：LLM 中的长文本问题\n[![紫气东来](../images/003.jpg)](https://www.zhihu.com/people/zi-qi-dong-lai-1)\n[紫气东来](https://www.zhihu.com/people/zi-qi-dong-lai-1)\n[​![](../images/body-ddf414f04793a667b2c1.png)](https://www.zhihu.com/question/48510028)\n上海交通大学 工学硕士\n[收录于 · 从NLP到LLM](https://www.zhihu.com/column/c_1465775160745324544)\n443 人赞同了该文章\n​\n目录\n近期，随着[大模型技术](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%A4%A7%E6%A8%A1%E5%9E%8B%E6%8A%80%E6%9C%AF&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlpKfmqKHlnovmioDmnK8iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.o45BnP8J948JhIZ0rX9UTMMRQyMieA2YAJoejrWr8ao&zhida_source=entity)的发展，长文本问题逐渐成为热门且关键的问题，不妨简单梳理一下近期出现的典型的[长文本模型](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E9%95%BF%E6%96%87%E6%9C%AC%E6%A8%A1%E5%9E%8B&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLplb_mlofmnKzmqKHlnosiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.enPxWIGiFUOq1qMboEaHpvnBnRueLBoQiXsS4U3VtKg&zhida_source=entity)：\n  * 10 月上旬，Moonshot AI 的 Kimi Chat 问世，这是首个支持 20 万汉字输入的智能助手产品；\n  * 10 月下旬，[百川智能](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%99%BE%E5%B7%9D%E6%99%BA%E8%83%BD&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnmb7lt53mmbrog70iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.C_JQd9_rJa9NnITnAzHJHvURVrv106b4ky9nZmoyNSk&zhida_source=entity)发布 [Baichuan2-192K](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=Baichuan2-192K&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJCYWljaHVhbjItMTkySyIsInpoaWRhX3NvdXJjZSI6ImVudGl0eSIsImNvbnRlbnRfaWQiOjIzMDQ5NTk2OCwiY29udGVudF90eXBlIjoiQXJ0aWNsZSIsIm1hdGNoX29yZGVyIjoxLCJ6ZF90b2tlbiI6bnVsbH0.zfV-6r9Kq22sTrHkn0jAhhRaEcMXIdFY82gxvA_h4ms&zhida_source=entity) 长窗口大模型，相当于一次处理约35 万个汉字；\n  * 11 月上旬，OpenAI 发布支持 128K 上下文窗口的 [GPT-4 Turbo](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=GPT-4+Turbo&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJHUFQtNCBUdXJibyIsInpoaWRhX3NvdXJjZSI6ImVudGl0eSIsImNvbnRlbnRfaWQiOjIzMDQ5NTk2OCwiY29udGVudF90eXBlIjoiQXJ0aWNsZSIsIm1hdGNoX29yZGVyIjoxLCJ6ZF90b2tlbiI6bnVsbH0.zUXmSQ_X2pG8JKStMbW_ltBgCF3-B-gYPcSpLYOq1KE&zhida_source=entity) 模型；\n  * 11 月下旬，Anthropic 发布支持 200K 上下文窗口的 [Claude 2.1](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=Claude+2.1&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJDbGF1ZGUgMi4xIiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjMwNDk1OTY4LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjEsInpkX3Rva2VuIjpudWxsfQ.zi0ID7ZoWDn2MOzlnuvdbRe034UGLZhIVw7h71stxA8&zhida_source=entity) 模型;\n  * 12 月上旬，[零一万物](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E9%9B%B6%E4%B8%80%E4%B8%87%E7%89%A9&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLpm7bkuIDkuIfniakiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.e9_Q511Hhl5PJuZ-SEIMI-_kyBo7jRBNxAvzfqRHWOQ&zhida_source=entity)开源了长文本模型 [Yi-6B-200K](https://link.zhihu.com/?target=https%3A//huggingface.co/01-ai/Yi-6B-200K) 和 [Yi-34B-200K](https://link.zhihu.com/?target=https%3A//huggingface.co/01-ai/Yi-34B-200K)。\n\n\n实际上，随着文本长度的提高，模型能够处理问题的边界也大大提高，因此研究并解决长文本问题就显得非常必要。本文将从长文本问题的本质出发，逐步分析和研究长文本实现的问题及解决办法。\n## 一、长文本的核心问题与解决方向\n### 1.1 文本长度与[显存](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E6%98%BE%E5%AD%98&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLmmL7lrZgiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.Nlio1gSiixW6RNHFbjs91mgpDHnHGwPyoQ-ERu-92ZU&zhida_source=entity)及计算量之关系\n要研究清楚长文本的问题，首先应该搞清楚文本长度在模型中的地位与影响。那么我们便以 [Decoder-base](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=Decoder-base&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJEZWNvZGVyLWJhc2UiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.h_b-l0ApW3jQCSglbaBje0mPLVjEQcO7ZibjykADMto&zhida_source=entity) 的模型为例来进行分析\n**1.1.1 模型参数量**\nDecoder-base 的模型主要包括 3 个部分：embedding, decoder-layer, head。\n其中最主要部分是decoder-layer，其由 l 个层组成，每个层又分为两部分：[self-attention](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=self-attention&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJzZWxmLWF0dGVudGlvbiIsInpoaWRhX3NvdXJjZSI6ImVudGl0eSIsImNvbnRlbnRfaWQiOjIzMDQ5NTk2OCwiY29udGVudF90eXBlIjoiQXJ0aWNsZSIsIm1hdGNoX29yZGVyIjoxLCJ6ZF90b2tlbiI6bnVsbH0.-E1zv2bY3OTPn8vlpdfjrkCMrb19fQexlXL7cuS8cjw&zhida_source=entity) 和 [MLP](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=MLP&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJNTFAiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.yeqpQOnKgEXKIuHNCi0ld7quPq1zrLMKKcv1x4YhG7c&zhida_source=entity)。\n**self-attention** 的模型参数有 Q、K、V 的[权重矩阵](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E6%9D%83%E9%87%8D%E7%9F%A9%E9%98%B5&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLmnYPph43nn6npmLUiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.AtPn9EbT1kHlTUOxsQ2K7n8dLtUxA4gX4A6W-p0PeVw&zhida_source=entity) W_Q、W_K、W_V 及[bias](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=bias&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJiaWFzIiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjMwNDk1OTY4LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjEsInpkX3Rva2VuIjpudWxsfQ.XvVblV-aKEv1jpMus67B-1JdCDEnyCetP8PNCZ7lEsE&zhida_source=entity)，输出矩阵 W_O 及bias，4个权重矩阵的形状为 [h,h] （ h 表示 hidden_size），4个bias的形状为 [h] 。则 self- attention 的参数量为 4h^2+4h 。\n**MLP** 由2个[线性层](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%BA%BF%E6%80%A7%E5%B1%82&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnur_mgKflsYIiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.GP964-QGA5sKcRgjgKl440NZ-avRy-iqPizX5fVpCoM&zhida_source=entity)组成，一般地，第一个线性层是先将维度从 h 映射到 4h ，第二个线性层再将维度从4h映射到h。第一个线性层的权重矩阵 W_1 的形状为 [h,4h] ，[偏置](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%81%8F%E7%BD%AE&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlgY_nva4iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.1VI8zCXXA0DL-1eX8xlMos0Leccr221JA8ktnThfPU0&zhida_source=entity)的形状为 [4h] 。第二个[线性层权重矩阵](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%BA%BF%E6%80%A7%E5%B1%82%E6%9D%83%E9%87%8D%E7%9F%A9%E9%98%B5&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnur_mgKflsYLmnYPph43nn6npmLUiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.UkA_9rF8uTwQ00LrfXwjABbmcEJ-ebaTcO0v-frSFPI&zhida_source=entity) W_2 的形状为 [4h,h] ，偏置形状为 [h] 。则 MLP 的参数量为 8h^2+5h 。\nself-attention 和 MLP 各有一个layer [normalization](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=normalization&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJub3JtYWxpemF0aW9uIiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjMwNDk1OTY4LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjEsInpkX3Rva2VuIjpudWxsfQ.aJWaR5b2sdDAW25SyJekeEZV3vik7dXsMRS5mOWXGfk&zhida_source=entity)，包含了2个可训练模型参数：[缩放参数](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%BC%A9%E6%94%BE%E5%8F%82%E6%95%B0&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnvKnmlL7lj4LmlbAiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.1mIVcIurM8QfQwtyKXYn4fLgaxOpa-Yadza3qeUrgDU&zhida_source=entity) \\gamma 和[平移参数](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%B9%B3%E7%A7%BB%E5%8F%82%E6%95%B0&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlubPnp7vlj4LmlbAiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.muVoVWoVtBEShAq3OjLiRyP4kJB_SDQiguGH9XETsVk&zhida_source=entity) \\beta ，形状都是 [h] 。2个layer normalization的参数量为 4h 。\n由此，每个 Decoder 层的参数量为12h^2+13h。\n此外，**[embedding](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=2&q=embedding&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJlbWJlZGRpbmciLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MiwiemRfdG9rZW4iOm51bGx9._Z-7cakzlKd5rzQqdCE7s9oKoO8oh0vBx3dB-YuzV1U&zhida_source=entity) **和 **head** 的参数量相同，与词表相关，为Vh（如果是 Tied embedding，则二者共用同一个参数）。由于位置编码多样，且参数量小，故忽略此部分。\n综上，l 层模型的可训练模型参数量为 l(12h^2+13h)+2Vh。当 h较大时，可以忽略一次项，模型参数量近似为12lh^2。\n**1.1.2 计算量估计**\n如果说参数量是模型的固有属性，那么计算量便是由模型和输入共同决定，下面分析这一过程。\n假设输入文本经过[分词器](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%88%86%E8%AF%8D%E5%99%A8&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLliIbor43lmagiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.t0E-5_Mnt1dRhEhBYEN6NF8U6kC0l1aXJ6msPr-DhdQ&zhida_source=entity)后的 `input_ids`数据的形状为 [b,s ] （ b 表示 batch_size, s 表示 sequence_length），然后经过 embedding 层后 `x`形状变为 [b,s,h ] ，由于仅仅是查表操作，计算量为 bsh 。\n先分析 Decoder 中 **self-attention** 的计算量，计算公式如下：\nQ=xW_Q,K=xW_K,V=xW_V\\\\\\x_{out}=softmax(\\frac{QK^{T}}{\\sqrt{h}})\\cdot V\\cdot W_o + x\\\\\\\n**1.** 计算 Q,K,V ：[矩阵乘法](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnn6npmLXkuZjms5UiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.VNLI3qJROtsm8CvcPn5PCVO9kCEC01Dsm686wD6o6CA&zhida_source=entity)的输入和输出形状为 [b,s,h] \\times [h,h]\\rightarrow [b,s,h] 。计算量为 3*2bsh^2=6bsh^2 。\n**2.** QK^{T} 矩阵乘法的输入和输出形状为 [b, n\\\\_head, s,head\\\\_dim]\\times [b,n\\\\_head,head\\\\_dim,s]\\rightarrow [b,n\\\\_head,s,s] 。计算量为 2bs^2h 。\n**3.** 计算在 V 上的[加权](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%8A%A0%E6%9D%83&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLliqDmnYMiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.10jpas0f2zrOwM_dD1TF981rCKYIY0kgkhHzK6En5fI&zhida_source=entity) score\\cdot V ，矩阵乘法的输入和输出形状为 [b,n\\\\_head,s,s]\\times[b,n\\\\_head,s,head\\\\_dim]\\rightarrow[b,n\\\\_head,s,head\\\\_dim] 。计算量为 2bs^2h 。\n**4.** attention后的[线性映射](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%BA%BF%E6%80%A7%E6%98%A0%E5%B0%84&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnur_mgKfmmKDlsIQiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.mjjbdGFCBv5Dz6UzNqFe3X6kvv77e8ZQ9KS8q7fZw_Q&zhida_source=entity)，矩阵乘法的输入和输出形状为 [b,s,h]\\times[h,h]\\rightarrow [b,s,h] 。计算量为 2bsh^2 。\n**接下来分析MLP块的计算，计算公式如下** ：\nx=f_{gelu}(x_{out}W_1)W_2+x_{out}\\\\\\\n**1.** 第一个线性层，矩阵乘法的输入和输出形状为 [b,s,h]\\times[h,4h]\\rightarrow[b,s,4h] 。计算量为 8bsh^2 。\n**2.** 第二个线性层，矩阵乘法的输入和输出形状为 [b,s,4h]\\times[4h,h]\\rightarrow[b,s,h] 。计算量为 8bsh^2 。\n将上述计算量相加，得到每个[Decoder层](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=Decoder%E5%B1%82&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJEZWNvZGVy5bGCIiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjMwNDk1OTY4LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjEsInpkX3Rva2VuIjpudWxsfQ.Fthq_FbgXFvSRApVBFyn4vbOWXlTIoj7otPPiadA2k4&zhida_source=entity)的计算量大约为 24bsh^2+4bs^2h 。\n此外，另一个计算量的大头是logits的计算，将[隐藏向量](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E9%9A%90%E8%97%8F%E5%90%91%E9%87%8F&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLpmpDol4_lkJHph48iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.RBgFFlUyoGtqtAYkmLlVvD2JNwXd9ips-Lk91INJJMo&zhida_source=entity)映射为词表大小。矩阵乘法的输入和输出形状为 [b,s,h]\\times[h,V]\\rightarrow [b,s,V] ，计算量为 2bshV 。\n因此，对于一个 l 层的模型，输入数据形状为 [b,s] 的情况下，一次前向计算的计算量为 l*(24bsh^2+4bs^2h)+2bshV 。\n**1.1.3 文本长度与计算量、参数量、显存的关系**\n忽略低次项，一次输入的tokens数为bs， 则计算量与参数量的关系为 \\frac{l*(24bsh^2+4bs^2h)}{bs*12lh^2} = \\frac{6h+s}{3h} ，在实际中通常 s<h (在长文本情况下，可能会出现 s>h 的情况，但影响不是决定性的)，因此该项可近似认为约等于 2。即在一次前向传递中，对于每个token，每个模型参数，需要进行2次浮点数运算(一次[乘法法运算](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E4%B9%98%E6%B3%95%E6%B3%95%E8%BF%90%E7%AE%97&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLkuZjms5Xms5Xov5DnrpciLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.vMpJNU_dcIzD1-E6A7yRUsG90byQSc3PYjlG6fztK8U&zhida_source=entity)和一次加法运算)。考虑到后向传递的计算量是前向传递的2倍。因此一次训练迭代中，对于每个 token，每个模型参数，需要进行2*3=6次浮点数运算。\n通过以上分析，我们可以得到结论：**计算量主要和模型参数和 token 数相关，在 token 总数不变时，文本长度增加并不会显著增加计算量** 。那么这就引出另一个问题：文本长度与显存的关系。\n除了模型参数、[梯度](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E6%A2%AF%E5%BA%A6&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLmoq_luqYiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.gEYvvc_cc1k042YcfwE308CZm5mKCI-xZSdinLX7ZUM&zhida_source=entity)、优化器状态外，占用显存的大头就是前向传递过程中计算得到的中间激活值。这里的**激活（activations）** 指的是：前向传递过程中计算得到的，并在后向传递过程中需要用到的所有[张量](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%BC%A0%E9%87%8F&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlvKDph48iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.iju986EAsSkgFjXz8h_j2DMhELY3yEnRh_nFD-_YjoE&zhida_source=entity)。\n先分析 Decoder layer 中 **self-attention** 的中间激活：\n**1.** 对于 Q,K,V ，需要保存它们共同的输入 x ，这就是中间激活。输入 x 的形状为 [b,s,h] ，元素个数为 bsh ，占用显存大小为 2*bsh=2bsh 。\n**2.** 对于 QK^T 矩阵乘法，需要保存中间激活 Q,K ，两个张量的形状都是 [b,s,h] ，占用显存大小合计为 2*2*bsh=4bsh 。\n**3.** 对于 softmax() 函数，需要保存函数的输入 QK^T ，占用显存大小为 2bs^2a ，这里的 a 表示注意力头数。\n**4.** 计算完 softmax() 函数后，会进行dropout操作。需要保存一个[mask矩阵](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=mask%E7%9F%A9%E9%98%B5&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJtYXNr55-p6Zi1IiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjMwNDk1OTY4LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjEsInpkX3Rva2VuIjpudWxsfQ.TZBHIXFlrIPNoHh0dotbv3gXDeHd8QRhfj_yUFUvWjQ&zhida_source=entity)，mask矩阵的形状与 QK^T 相同，占用显存大小为 bs^2a 。\n**5.** 计算在 V 上的attention，即 score\\cdot V ，需要保存 score ，大小为 2bs^2a ；以及 V ，大小为 2bsh 。二者占用显存大小合计为 2bs^2a+2bsh 。\n**6.** 计算输出[映射](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=5&q=%E6%98%A0%E5%B0%84&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLmmKDlsIQiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6NSwiemRfdG9rZW4iOm51bGx9.bQUK-5ZlzVtK66B9X5OW4Qn8Ie9gZ_I421R8WmChsyw&zhida_source=entity)以及一个dropout操作。输入映射需要保存其输入，大小为 2bsh ；dropout需要保存mask矩阵，大小为 bsh 。二者占用显存大小合计为 3bsh 。\n因此，将上述中间激活相加得到，self-attention 的中间激活占用显存大小为 11bsh+5bs^2a 。\n接下来分析分析 Decoder layer 中 **MLP** 的中间激活：\n**1.** 第一个线性层需要保存其输入，占用显存大小为 2bsh 。\n**2.** 激活函数需要保存其输入，占用显存大小为 8bsh 。\n**3.** 第二个线性层需要保存其输入，占用显存大小为 8bsh 。\n**4.** 最后有一个dropout操作，需要保存mask矩阵，占用显存大小为 bsh 。\n对于MLP块，需要保存的中间激活值为 19bsh 。\n另外，[self-attention块](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=self-attention%E5%9D%97&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJzZWxmLWF0dGVudGlvbuWdlyIsInpoaWRhX3NvdXJjZSI6ImVudGl0eSIsImNvbnRlbnRfaWQiOjIzMDQ5NTk2OCwiY29udGVudF90eXBlIjoiQXJ0aWNsZSIsIm1hdGNoX29yZGVyIjoxLCJ6ZF90b2tlbiI6bnVsbH0.PkIBOjns7YsgCNQvR_qq0T1QdI62RL4TMml_0d2ZzM8&zhida_source=entity)和MLP块分别对应了一个layer normalization。每个layer norm需要保存其输入，大小为 2bsh 。2个layer norm需要保存的中间激活为 4bsh 。\n综上，每个层需要保存的中间激活占用显存大小为 34bsh+5bs^2a 。对于 l 层transformer模型，还有embedding层、最后的输出层。embedding层不需要中间激活。总的而言，当隐藏维度 h 比较大，层数 l 较深时，这部分的中间激活是很少的，可以忽略。因此，对于 l 层模型，中间激活占用的显存大小可以近似为 (34bsh+5bs^2a)*l ，这个结果与文本长度关系密切。\n下面以GPT3-175B为例，对比下文本长度对模型参数与中间激活的显存大小的影响。假设数据类型为 FP16 。  \n| 模型名  | 参数量  | 层数  | [隐藏维度](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=2&q=%E9%9A%90%E8%97%8F%E7%BB%B4%E5%BA%A6&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLpmpDol4_nu7TluqYiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MiwiemRfdG9rZW4iOm51bGx9.HRoX1ehrXfLObSNPWZEGX1kbtfOHOkXIX3VI9J7S7uY&zhida_source=entity)  | 注意力头数  |  \n| --- | --- | --- | --- | --- |  \n| GPT3  | 175B  | 96  | 12288  | 96  |  \nGPT3的模型参数量为175B，占用的显存大小为 2\\times 175\\times 10^9bytes=350GB 。GPT3 模型需要占用350GB的显存。\n假设 GPT3 输入的 b=1 。对比不同的文本长度下占用的中间激活：\n当 s=2048 时，中间激活占用显存为 (34bsh+5bs^2a)*l=275,414,777,856bytes\\approx275GB ，大约是模型参数显存的0.79倍;\n当 s=4096 时，中间激活占用显存为 (34bsh+5bs^2a)*l=937,376,612,352 bytes \\approx 937GB ，大约是模型参数显存的2.68倍。\n可以看到长度仅仅到 4K，显存占用就出现了剧烈增加，同时 GPU 的 onchip memory 就显得更加捉襟见肘(因此也就出现了 FlashAttention 这类[算法](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%AE%97%E6%B3%95&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnrpfms5UiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.ck-bhdzh2sirTARusXnKehIkg1BE7o1hwKweDvIov8E&zhida_source=entity))。因此如何解决长文本带来的巨量显存开销成为关键及核心问题。\n### 1.2 长文本问题的解决思路\n当前，为了实现更长文本的支持，解决思路主要可以分为两个阶段：\n  * **阶段一：在预训练阶段尽可能支持更长的文本长度**\n\n\n为实现这一阶段目标，通常采用[并行化](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%B9%B6%E8%A1%8C%E5%8C%96&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlubbooYzljJYiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.mD0RcDsoHsZiSVMFNjyNUG_8tFC59q_CC0OaKf0nTlg&zhida_source=entity) (parallelism) 方法将显存占用分摊到多个 device，或者改造 attention 结构，避免显存占用与文本长度成二次关系。\n  * **阶段二：在 SFT 或推理阶段尽可能外推到更大长度**\n\n\n为实现这一阶段目标，通常也是需要在两个方面进行考虑：\n    * 对位置编码进行外推\n    * 优化 Attention 机制\n\n\n本文接下来的部分将尽可能详细深入地进行这些问题的研究。为了便于理解和接受，下文将从易到难，先介绍第二阶段的技术，然后再介绍第一阶段（同时也是考虑到直接使用[开源模型](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%BC%80%E6%BA%90%E6%A8%A1%E5%9E%8B&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlvIDmupDmqKHlnosiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.s6lgvc8-oK3nCPe1RobIRzT746cO-CMswh5EF-NHIrY&zhida_source=entity)者，不需要第一阶段的情况）。\n## 二、长文本与位置编码\n在 Transformer 结构的模型中，Attention模块的值与顺序无关，因此需要加入位置编码以确定不同位置的 token。典型的位置编码方式有两类：\n  * **[绝对位置](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%BB%9D%E5%AF%B9%E4%BD%8D%E7%BD%AE&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnu53lr7nkvY3nva4iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.pykrgdqXn9_rLhQ42ODs18USgdIeyLcob-lDO_IqX6A&zhida_source=entity) 编码：**即将位置信息融入到输入中\n  * **[相对位置编码](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%9B%B8%E5%AF%B9%E4%BD%8D%E7%BD%AE%E7%BC%96%E7%A0%81&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnm7jlr7nkvY3nva7nvJbnoIEiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.WSqnHA849jkt5XIMHxJ2k3u2_2AwGTQpmkMKpiArazc&zhida_source=entity) ：**微调Attention结构，使其能够分辨不同位置的Token\n\n\n随着文本长度的增加，位置编码也会发生相应的变化，因此处理好位置编码问题是解决长文本问题的重要环节。\n### 2.1 绝对位置编码及其外推\n一般来说，绝对位置编码会加到输入中：在输入的第 k 个输入向量 x_k 中加入[位置向量](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E4%BD%8D%E7%BD%AE%E5%90%91%E9%87%8F&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLkvY3nva7lkJHph48iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.s2FHneJ3AHc0cRXR20rAme2Ck77HxhoKBhCaObTj8TE&zhida_source=entity) p_k 得到 x_k+p_k ，其中 p_k 仅依赖于位置 k 。\n如下图所示，以二维向量为例来形象说明，图左中黑色剪头为输入向量 x_k ，蓝色箭头为位置向量 p_k（不同方法的长度与角度不同），其相加的结果为绿色箭头。在 Attention 结构中， q=(x_k+p_k)W_q, k=(x_k+p_k)W_k 即相当于同时对输入向量 x_k 和位置向量 p_k 进行线性变换，那么 attention 值则是 q 和 k 的[点积](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%82%B9%E7%A7%AF&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLngrnnp68iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.3I3_ebgq0a20mCDelK3Xh1m_rK-kpzDoW3TeVVBd6S8&zhida_source=entity)，如下图右中 q_{u+k} 和 k_{u+2k} 的注意力即黄色夹角区域。\n![](../images/004.jpg)\n由于绝对位置编码由两部分组成，且两部分相互独立，因此无法计算[相对距离](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%9B%B8%E5%AF%B9%E8%B7%9D%E7%A6%BB&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnm7jlr7not53nprsiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.OyinNlVH_JiE9FBQJlqw3I0wHKkIsrRPc-sCRIuft14&zhida_source=entity)。下面介绍几种典型的绝对位置编码：\n**2.1.1 训练式编码**\n这种方式最为简单直接，即把位置当做词表一样，训练一个 [max\\\\_length, hidden\\\\_size] 位置向量矩阵。这种训练式的绝对位置编码，一般的认为它没有[外推性](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%A4%96%E6%8E%A8%E6%80%A7&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlpJbmjqjmgKciLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.RLQndZIuUsxlos3wqSnKhuapmzOk5D8eFI-Ny__OsM0&zhida_source=entity)，但是苏剑林大神提出过一个层次分解的拓展方法。\n![](../images/005.jpg)\n假设已经训练好的绝对位置编码向量为 p_1, p_2, \\dots, p_n ，希望能在此基础上构造一套新的编码向量p_1, p_2, \\dots, p_m ，其中 m>n 。为此，设\n\\boldsymbol{q}_{(\\mathrm{i}-1) \\times n+j}=\\alpha\\boldsymbol{u}_{\\mathrm{i}}+(1-\\alpha) \\boldsymbol{u}_{\\mathrm{j}} \\\\\\\n其中超参 \\alpha \\in (0,0.5)\\cup (0.5,1)  ， \\boldsymbol{u}_{\\mathrm{1}}, \\boldsymbol{u}_{\\mathrm{2}}, \\dots , \\boldsymbol{u}_{\\mathrm{n}} 是该套位置编码的“基底”。为了保障 \\boldsymbol{q}_1=\\boldsymbol{p}_1, \\boldsymbol{q}_2=\\boldsymbol{p}_2, \\cdots, \\boldsymbol{q}_{\\mathrm{n}}=\\boldsymbol{p}_{\\mathrm{n}} ，这样就能反推出各个 \\boldsymbol{u}_{\\mathrm{i}} :\n\\boldsymbol{u}_{\\mathrm{i}}=\\frac{\\boldsymbol{p}_{\\mathrm{i}}-\\alpha \\boldsymbol{p}_1}{1-\\alpha}, \\quad \\mathrm{i}=1,2, \\cdots, \\mathrm{n} \\\\\\ 这样就最大可以表示出 n^2 个位置的编码，并且前 n 个位置编码跟原来模型是相容的。下图反映了经过finetune其准确率在延长的位置编码在MLM任务上是行之有效的。\n![](../images/006.jpg)\n不同alpha下BERT MLM的训练准确率\n需要说明的是，这种矩阵式的位置编码方式在当前的大模型中已经比较少采用了，仅有 GPT2 等早期模型中采用了这种方式。\n**2.1.2[Sinusoidal 位置编码](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=Sinusoidal+%E4%BD%8D%E7%BD%AE%E7%BC%96%E7%A0%81&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJTaW51c29pZGFsIOS9jee9rue8lueggSIsInpoaWRhX3NvdXJjZSI6ImVudGl0eSIsImNvbnRlbnRfaWQiOjIzMDQ5NTk2OCwiY29udGVudF90eXBlIjoiQXJ0aWNsZSIsIm1hdGNoX29yZGVyIjoxLCJ6ZF90b2tlbiI6bnVsbH0.aeHYQ5c8oj5UaHCox1RLjrhosyK45Ucpj6-a49edH38&zhida_source=entity)**\n这种方案也是[Attention Is All You Need](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1706.03762) 中提出的方法 \\left\\\\{\\begin{array}{l} \\boldsymbol{p}_{\\mathrm{k}, 2 \\mathrm{i}}=\\sin \\left(\\mathrm{k} / 10000^{2 \\mathrm{i} / \\mathrm{d}}\\right) \\\\\\ \\boldsymbol{p}_{\\mathrm{k}, 2 \\mathrm{i}+1}=\\cos \\left(\\mathrm{k} / 10000^{2 \\mathrm{i} / \\mathrm{d}}\\right) \\end{array}\\right. \\\\\\其中 \\boldsymbol{p}_{\\mathrm{k}, 2 \\mathrm{i}}, \\boldsymbol{p}_{\\mathrm{k}, 2 \\mathrm{i+1}} 分别是位置 k 的编码向量的第 2i,2i+1 个分量， d 是位置向量的维度。\n根据以上定义，我们可以非常简单计算得到Sinusoidal位置编码的值，并绘制图像研究其规律。整体位置编码如下图所示：\n![](../images/007.jpg)\n首先研究 Sinusoidal **位置编码与位置** 之间的关系，绘制不同维度下，函数值与位置的关系。其曲线如下图所示， 可以从图中得到几点结论：\n  * 位置越远，频率越大\n  * 随着维度增大，函数逐渐收敛到 0 （cos 函数收敛到 1 ）\n\n\n![](../images/008.jpg)\n位置编码值在维度偶分量下与位置的关系\n![](../images/009.jpg)\n位置编码值在维度奇分量与位置的关系\n研究 Sinusoidal **位置编码与维度分量** 之间的关系，绘制不同维度分量 i 下，函数值与位置的的关系。Sinusoidal位置编码与维度分量的关系如下图所示，可以发现结论如下：\n  * 每个分量都具有周期性，是正弦或余弦函数\n  * 越靠后的分量(i 越大)，波长越长，频率越低\n\n\n![](../images/010.jpg)\n了解了这些基本的特性后，接下来就需要讨论更加深层次的问题：\n**问题一：为什么用包含各频率的正弦和余弦对？**\n位置编码存储的是一个包含各频率的正弦和余弦对，这样做有两个好处：\n  * 可以使得不同位置的编码向量之间有一定的规律性，比如相邻位置之间的差异较小，而距离较远的位置之间的差异较大。这是由正弦和余弦[函数的连续性](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%87%BD%E6%95%B0%E7%9A%84%E8%BF%9E%E7%BB%AD%E6%80%A7&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlh73mlbDnmoTov57nu63mgKciLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.OPmznu_EH4BLFvREYyhX6Juj6jfdOq0bL-IqT-OtaG4&zhida_source=entity)和单调性保证的，即对于任意两个相邻的位置，它们对应的编码向量在每一个维度上都只有微小的变化，而对于任意两个距离较远的位置，它们对应的编码向量在每一个维度上都有较大的差异。\n  * 可以使得编码向量在任意维度上都能保持唯一性，即不同位置在同一个维度上不会有相同的值。这是由正弦和余弦函数的周期性和相位差保证的，即对于任意两个不同的位置，它们对应的编码向量在每一个维度上都不相等。\n\n\n![](../images/011.jpg)\n00:11\n**问题二：底数对结果的影响是什么？**\n底数越大，位置向量能表示的序列就越长，这是大底数的好处。但是，底数大，意味着在-1到+1的范围内向量的取值越密集，造成两个位置的向量距离越近，这对后续的Self-Attention模块来说是不利的，因为它需要经历更多的训练次数才能准确地找到每个位置的信息，或者说，才能准确地区分不同的位置。长序列需要长编码。但这样又会增加计算量，特别是长编码会影响模型的训练时间。所以，那个底数并非是越大越好。\n**问题三：Sinusoidal 位置编码如何外推**\n三角函数式位置编码的特点是有显式的生成规律，因此可以期望于它有一定的外推性。另外一个使用它的理由是：由于 \\sin (\\alpha+\\beta)=\\sin \\alpha \\cos \\beta+\\cos \\alpha \\sin \\beta \\\\\\ \\cos (\\alpha+\\beta)=\\cos \\alpha \\cos \\beta-\\sin \\alpha \\sin \\beta \\\\\\ 这表明位置 \\alpha + \\beta 的向量可以表示成位置 \\alpha 和位置 \\beta 的向量组合，这提供了位置拓展的可能性。\n**2.1.3 其他的绝对位置编码**\n如递归式（如 FLOATER）和相乘式（如[PENG Bo：中文语言模型研究：(1) 乘性位置编码](https://zhuanlan.zhihu.com/p/183234823)），因使用较少，在此不予赘述。\n### 2.2 相对位置编码及其外推\n相对位置并没有完整建模每个输入的位置信息，而是在算Attention的时候考虑当前位置与被Attention的位置的相对距离，由于自然语言一般更依赖于相对位置，所以相对位置编码通常也有着更好的表现，灵活性也更大。\n**2.2.1 旋转位置编码 RoPE**\n实际上 RoPE 的诸多思想来源于 Sinusoidal 位置编码，区别在于 Sinusoidal 位置编码采用和 word embedding 相加的形式，RoPE 则采用了矩阵相乘的形式。\n在正式介绍之前，我们需要回顾一下经典的欧拉公式\ne^{i \\theta}=\\cos \\theta+i \\sin \\theta \\\\\\\n其矩阵形式为 \\left[\\begin{array}{cc} \\cos \\theta & -\\sin \\theta \\\\\\ \\sin \\theta & \\cos \\theta \\end{array}\\right] 即旋转矩阵 R(\\theta) ，这三种表现形式表达了同样的信息，即将二维向量逆时针旋转角度 \\theta 。\n![](../images/012.jpg)\n接下来我们直接看 RoPE 的表达式，对于位置为 m 的 q 向量，其表达式为\nf(q, m)=R_m q=\\left(\\begin{array}{cc} \\cos m \\theta & -\\sin m \\theta \\\\\\ \\sin m \\theta & \\cos m \\theta \\end{array}\\right)\\left(\\begin{array}{l} q_0 \\\\\\ q_1 \\end{array}\\right) \\\\\\即逆时针旋转了 m \\theta 度，如上图右所示。同理，位置为 n 的 k 向量的表达式为\nf(k, n)=R_n k=\\left(\\begin{array}{cc} \\cos n \\theta & -\\sin n \\theta \\\\\\ \\sin n \\theta & \\cos n \\theta \\end{array}\\right)\\left(\\begin{array}{l} k_0 \\\\\\ k_1 \\end{array}\\right) \\\\\\\n那么便可以通过点积，计算二者的 attention 值\n\\begin{aligned} & q_m \\cdot k_n=f(q, m) \\cdot f(k, n)=\\left(R_m q\\right)^T *\\left(R_n k\\right)=q^T R_m^T * R_n k \\\\\\ & =q^T\\left[\\begin{array}{cc} \\cos m \\theta & -\\sin m \\theta \\\\\\ \\sin m \\theta & \\cos m \\theta \\end{array}\\right]^T *\\left[\\begin{array}{cc} \\cos n \\theta & -\\sin n \\theta \\\\\\ \\sin n \\theta & \\cos n \\theta \\end{array}\\right] k \\\\\\ & =q^T\\left[\\begin{array}{cc} \\cos m \\theta & \\sin m \\theta \\\\\\ -\\sin m \\theta & \\cos m \\theta \\end{array}\\right] *\\left[\\begin{array}{cc} \\cos n \\theta & -\\sin n \\theta \\\\\\ \\sin n \\theta & \\cos n \\theta \\end{array}\\right] k \\\\\\ & =q^T\\left[\\begin{array}{cc} \\cos n \\theta \\cos m \\theta+\\sin n \\theta \\sin m \\theta & \\sin m \\theta \\cos n \\theta-\\sin n \\theta \\cos m \\theta \\\\\\ \\sin n \\theta \\cos m \\theta-\\sin m \\theta \\cos n \\theta & \\cos n \\theta \\cos m \\theta+\\sin n \\theta \\sin m \\theta \\end{array}\\right] k \\\\\\ & =q^T\\left[\\begin{array}{cc} \\cos (n-m) \\theta & -\\sin (n-m) \\theta \\\\\\ \\sin (n-m) \\theta & \\cos (n-m) \\theta \\end{array}\\right] k \\\\\\ & =q^T R_{n-m} k \\end{aligned}\\\\\\ 在极坐标表示下，可以更简单推导出以上结果，即 \\begin{aligned} q_m \\cdot k_n &=f(q, m) \\cdot f(k, n)=\\left(R_m q\\right)^T *\\left(R_n k\\right) \\\\\\ &=q^T R_m^T * R_n k \\\\\\ &= q^T e^{-im\\theta_d} * e^{in\\theta_d}R_n k\\\\\\ &=q^T e^{i(n-m)\\theta_d}R_n k\\\\\\ & =q^T R_{n-m} k \\end{aligned}\\\\\\ 即证明了相对位置关系，即旋转前的 attention 值与旋转后的 attention 值的差值仅与相对位置有关。这一点也可以从上图右中看出来，即旋转前 q_{u+k}, k_{u+2k} 的夹角(橙色区域) 与旋转后 q_{u+k}e^{i(u+k)\\theta _d}, k_{u+2k}e^{i(u+2k)\\theta _d} 的夹角(黄色区域) 相同，即内积也相同。\n这时我们就可以写出位置为 m 的 q 的完整的变换矩阵，即\n\\left(\\begin{array}{ccccccc} \\cos m \\theta_0 & -\\sin m \\theta_0 & 0 & 0 & \\cdots & 0 & 0 \\\\\\ \\sin m \\theta_0 & \\cos m \\theta_0 & 0 & 0 & \\cdots & 0 & 0 \\\\\\ 0 & 0 & \\cos m \\theta_1 & -\\sin m \\theta_1 & \\cdots & 0 & 0 \\\\\\ 0 & 0 & \\sin m \\theta_1 & \\cos m \\theta_1 & \\cdots & 0 & 0 \\\\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\ddots & \\vdots & \\vdots \\\\\\ 0 & 0 & 0 & 0 & \\cdots & \\cos m \\theta_{d / 2-1} & -\\sin m \\theta_{d / 2-1} \\\\\\ 0 & 0 & 0 & 0 & \\cdots & \\sin m \\theta_{d / 2-1} & \\cos m \\theta_{d / 2-1 }\\end{array}\\right)\\left(\\begin{array}{c} q_0 \\\\\\ q_1 \\\\\\ q_2 \\\\\\ q_3 \\\\\\ \\vdots \\\\\\ q_{d-2} \\\\\\ q_{d-1} \\end{array}\\right)\n从改变换矩阵也能看出，随着维度增加，旋转角度也在指数级减小，如下图所示。RoPE 的这一功能使模型可以通过从低维度到更高维度，将嵌入中编码的信息类型从低频（close）转变为高频（far）。\n![](../images/013.jpg)\n旋转角度随维度的变化\n**2.2.2 远程衰减问题**\n由于 RoPE 中的 attention 值除了 q,k 本身外，仅和 R_{n-m} 因子相关，那么下面考察 R_{n-m} 因子的特点\n\\begin{aligned} \\left\\langle\\boldsymbol{p}_{\\mathrm{m}}, \\boldsymbol{p}_{\\mathrm{n}}\\right\\rangle & =\\operatorname{Re}\\left[\\mathrm{e}^{\\mathrm{i}(\\mathrm{m}-\\mathrm{n}) \\theta_0}+\\mathrm{e}^{\\mathrm{i}(\\mathrm{m}-\\mathrm{n}) \\theta_1}+\\cdots+\\mathrm{e}^{\\mathrm{i}(\\mathrm{m}-\\mathrm{n}) \\theta_{\\mathrm{d} / 2-1}}\\right] \\\\\\ & =\\frac{\\mathrm{d}}{2} \\cdot \\operatorname{Re}\\left[\\sum_{\\mathrm{i}=0}^{\\mathrm{d} / 2-1} \\mathrm{e}^{\\mathrm{i}(\\mathrm{m}-\\mathrm{n}) 10000^{-\\mathrm{i} / \\mathrm{d} / 2)}} \\frac{1}{\\mathrm{~d} / 2}\\right] \\\\\\ & \\approx \\frac{\\mathrm{d}}{2} \\cdot \\operatorname{Re}\\left[\\int_0^1 \\mathrm{e}^{\\mathrm{i}(\\mathrm{m}-\\mathrm{n}) \\cdot 10000^{-\\mathrm{t}} \\mathrm{dt}}\\right] \\end{aligned} \\\\\\ 那么问题就变成了积分 \\int_0^1 \\mathrm{e}^{\\mathrm{i}(\\mathrm{m}-\\mathrm{n}) \\cdot 10000^{-\\mathrm{t}} }\\mathrm{dt} 的渐进估计问题，通过一下函数计算积分值与位置距离的关系，并分析不同 base 值的影响。\n下图展示了不同距离尺度上不同 base 值的积分结果，可以得到以下结论：\n  * 除了 base=1 外，均有明显的远程衰减特性\n  * base 越小，衰减得越快且幅度也更大\n  * base 越大，衰减得越慢且幅度也越小\n\n\n![](../images/014.jpg)\n不同距离尺度上的积分结果\n**2.2.3 RoPE 长度的内插与外推**\n长度外推性是一个训练和预测的长度不一致的问题。提现有两点：\n  * 预测的时候用到了没训练过的位置编码（不管绝对还是相对）；\n  * 预测的时候注意力机制所处理的token数量远超训练时的数量。\n\n\n一旦我们在模型中有效地整合了相对位置信息，增加 LLM 上下文窗口的最直接方法就是通过位置插值 (position interpolation，PI) 进行微调。\n这种方法实现很简单，如果希望将预训练阶段的位置向量范围[0,2048] 外推到[0,4096]，只需要将对应位置缩放到原先支持的区间([0,2048])内：计算公式如下，L为原先支持的长度(如2048)，L^{'}为需要扩展的长度(如4096)：\nf^{'}(x,m)=f(x, \\frac{mL}{L^{'}}) \\\\\\\n其过程如下图所示：\n![](../images/015.jpg)\n下面分析一下以上操作的本质，经过这种放缩操作后，位置为 m 的 维度为 i 的旋转角变为 \\frac{mL}{L^{'}}* base^{-2 \\mathrm{i} / \\mathrm{d}} ，即线性减小了旋转弧度，如下图第一列的上图所示（横轴为位置编码，纵轴为旋转弧度）。通过这种方式插值后，向量旋转速度变慢，周期变大，频率变慢。\n除了上述的这种差值方式外，还有以下改进方式可以实现外推：\n  * **NTK-aware (Neural Tangent Kernel)**\n\n\n这种方式把旋转角修改为 m* (base*\\alpha)^{-2 \\mathrm{i} / \\mathrm{d}} ，其中 \\alpha 表示 base 的缩放因子，在 codellama 中取值为 100 。其修改的方式如下图第二列下图所示（横轴为维度，纵轴为旋转角），在不同维度上修改的程度不同。这种方式保留了高频信息，即\n  * 高频分量旋转速度降幅低，低频分量旋转速度降幅高；\n  * 在高频部分进行外推，低频部分进行内插。\n\n\n这是因为靠前的维度，在训练中见过非常多完整的旋转周期，位置信息得到了充分的训练，所以具有较强的外推能力。靠后的维度，在训练中无法见到完整的旋转周期，或者见到的旋转周期非常少，训练不够充分，外推性能弱，需要进行位置插值。\n  * **NTK-by-parts**\n\n\n该方法是基于 NTK-Aware 的优化，其核心思想是：**不改变高频部分，仅缩小低频部分的旋转弧度** 。即不改变小维度的旋转弧度，仅减小大维度的旋转弧度，这就是by-patrs的含义。\n第 i 个维度的旋转周期为： \\lambda_i=\\frac{2 \\pi}{\\theta_i}=2 \\pi * {ba s e} ^{2 i / d}\n其在训练长度内旋转的周期个数如下： r_i=\\frac{L}{\\lambda_i}\n引入超参数 \\alpha,\\beta ，表示旋转周期个数的约束条件，定义[斜坡函数](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E6%96%9C%E5%9D%A1%E5%87%BD%E6%95%B0&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLmlpzlnaHlh73mlbAiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.xXBiMckmfVzTCx2QvRNf790ziqMOss43rErzGOdOxi8&zhida_source=entity)\n\\gamma(r_i)= \\begin{cases}0, & \\text { if } r_i<\\alpha \\\\\\ 1, & \\text { if } r_i>\\beta \\\\\\ \\frac{r_i-\\alpha}{\\beta-\\alpha}, & \\text { otherwise }\\end{cases} \\\\\\\n当 r_i < \\alpha ，旋转周期数量少，则为低频分组，仅进行线性插值。\n当 \\alpha \\leq r_i \\leq \\beta , 选择周期介于二者之间，类似于“NTK-aware”插值\n当 r_i > \\beta ，旋转周期数量足够多，则认为该维度为高频部分，无需改变。\n综合以上条件，调整后的旋转角可以表示为 h\\left(\\theta_i\\right)=(1-\\gamma(r_i)) \\frac{\\theta_i}{s}+\\gamma(r_i) \\theta_i\n其中 s=\\frac{L'}{L} , 超参数的经验取值为 \\alpha=1,\\beta=32\n  * **Dynamic NTK**\n\n\n这是是一种动态插值的方法：当推理长度小于等于训练长度时，不进行插值；推理长度大于训练长度时，每一步都通过NTK-Aware Interpolation动态放大base。\nl 表示当前的序列长度， L 表示模型训练长度，\n当 l\\leq L 时，不调整旋转角\n当 l> L 时，旋转角调整为 m* (base*\\alpha)^{-2 \\mathrm{i} / \\mathrm{d}} ，其中 \\alpha = (\\frac{l}{L})^{d/(d-2)}\n需要说明的是下图最后一列下图的粗线表示一个范围，未体现出与长度的动态联动。\n![](../images/016.jpg)\nPI 及其改进方案\n  * **[YaRN](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2309.00071.pdf)**\n\n\n无论是PI还是NTK类方法，本质都是通过减小旋转弧度，降低旋转速度，来达到长度扩展的目的。**这将导致位置之间的旋转弧度差距变小，[词向量](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E8%AF%8D%E5%90%91%E9%87%8F&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLor43lkJHph48iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.Q9N1j9ISZpkXt_cpyrMdOYBWOz5rUS_Ri7SudeNALdg&zhida_source=entity)之间的距离变得比原来更近，词向量之间的点乘变大，破坏模型原始的注意力分布**。所以经过插值之后，模型在原来的训练长度内的困惑度均有所提升，性能受损。\nYaRN本质上是NTK-by-parts Interpolation与注意力分布修正策略的结合，仅缩小低频部分的旋转弧度，且通过温度系数修正注意力分布。只需将原来的注意力分数除以温度 t 即可。\\frac{\\mathbf{q}_m^T \\mathbf{k}_n}{\\sqrt{|d|}} \\rightarrow \\frac{\\mathbf{q}_m^T \\mathbf{k}_n}{t \\sqrt{|d|}}，~~~~~where ~~\\sqrt{\\frac{1}{t}}=0.1*\\mathrm{ln}\\left(\\frac{L^{'}}{L}\\right)+1 \\\\\\\n以LLaMA为例，当长度从2048扩展至16384时，长度扩展为原来的8倍，代入公式，计算得到t=0.6853。回顾温度系数对注意力分布的影响，当t变大，注意力分布更加平滑，方差更小；当t变小，注意力分布更加尖锐，区分度变大，方差变大。**t=0.6853** 意味着缓解注意力分布过于平滑的问题，让注意力分布方差更大。\n需要说明的是，论文 [Scaling Laws of RoPE-based Extrapolation](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/2310.05209) 中深入研究了 RoPE 位置编码的特性，其结论就是：RoPE 中 base 的放大和缩小都能获得很好的外推效果(base=10K 效果最差)。原因在于：\n  * 当 base 较小时(如 500)，RoPE 的三角函数周期变短，训练时就可以见过完整的 cos/sin 值域；\n  * 当 base 较大时(如 1000000)，RoPE 的三角函数周期变长，训练时虽然不能见过完整的 cos/sin 值域，但是外推时仍处于单调区间。\n\n\n**2.2.4 其他形式的编码方式及其外推**\n在苏神的文章[Transformer升级之路：12、无限外推的ReRoPE？](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/9708)中指出：RoPE 形式上是一种绝对位置编码，但实际上给 Attention 带来的是相对位置信息，即如下的[Toeplitz矩阵](https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Toeplitz_matrix)：\n\\left(\\begin{array}{ccccccccc} 0 & & & & & & & & \\\\\\ 1 & 0 & & & & & & & \\\\\\ 2 & 1 & 0 & & & & & & \\\\\\ 3 & 2 & 1 & 0 & & & & & \\\\\\ \\ddots & 3 & 2 & 1 & 0 & & & & \\\\\\ \\ddots & \\ddots & 3 & 2 & 1 & 0 & & & \\\\\\ \\ddots & \\ddots & \\ddots & \\ddots & \\ddots & \\ddots & \\ddots & & \\\\\\ L-2 & \\ddots & \\ddots & \\ddots & \\ddots & \\ddots & \\ddots & \\ddots & \\\\\\ L-1 & L-2 & \\ddots & \\ddots & \\ddots & 3 & 2 & 1 & 0 \\end{array}\\right) \\\\\\ 这么这种形式的 bias 似乎有种似曾相识的感觉，没错，就是 [ALiBi](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2108.12409.pdf) 编码。严格来说，ALiBi 并不算位置编码，因为它并没有作用在 embedding 上，而是直接作用在了 Attention 上，通过这种构造方式既实现了远程衰减，又实现了位置的相对关系。\n![](../images/017.jpg)\nALiBi 的作用原理\n对于外推特性，ALiBi 与前文所述的方法也是不同的，体现在：\n  * **事后修改** ，比如[NTK-RoPE](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/9675)、[YaRN](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/2309.00071)、[ReRoPE](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/9708)等，这类方法的特点是直接修改推理模型，无需微调就能达到一定的长度外推效果，但缺点是它们都无法保持模型在训练长度内的恒等性\n  * **事前修改** ，如[ALIBI](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/9431%23ALIBI)、[KERPLE](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/9431%23KERPLE)、[XPOS](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/9431%23XPOS)以及[HWFA](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/9603)等，它们可以不加改动地实现一定的长度外推，但相应的改动需要在训练之前就引入，因此无法不微调地用于现成模型\n\n\n## 三、长文本与 Attention 机制\nAttention 机制也是制约长文本实现的重要因素，以下是几种典型的 Attention 的 方式：\n![](../images/018.jpg)\n关于 Attention 机制改进的更多类型和细节，笔者在之前的文章中已经有所讨论，可参考：\n[](https://zhuanlan.zhihu.com/p/659770503)\n在此主要想介绍一个方案 —— [LongLora](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2309.12307.pdf) 。\n回顾第一节中研究的结论，长文本影响最大的就是 self-attention 中的，随长度二次变化的显存占用和计算复杂度。为解决这个问题，LongLora 的原则是，虽然在推理过程中需要密集的全局注意力，但通过稀疏的局部注意力可以有效且高效地微调模型。\nLongLora 在微调期间延长上下文长度，同时使用 Lora 方法保持高性能和低复杂性。其中最关键的是提出了**转移短注意力（S2-Attn）** 方案。下面简要介绍这一方案：\nS2-Attn 在微调阶段使用局部注意力而不是全局注意力。即将输入文档分解为几个不同的组，并在每个组中分别应用注意力机制（Pattern 1）。尽管这种方式能够在资源占用不多的情况下拓展长度，由于不同组之间缺乏信息交换，随着上下文长度的增加，会导致混乱增加。\n为了解决上述问题，S2-Attn 引入了组大小一半的移位操作，确保相邻组之间顺利的信息交换（Pattern 2）。这种做法有助于模型在文本开头和结尾之间顺利交换信息，从而提高模型稳定性。\n![](../images/019.jpg)\nLongLora 整体框架\n而本文提出的 shift short attention 有一半的 head 会被做 shift，如下图所示，然后每个 group 内作 self-attention，从而使信息可以在不同 group 间传递。这种做法实际上将 Pattern 1 和 Pattern 2 结合起来，而没有引入额外的计算开销，使其非常适合高效处理长序列文本。\n![](../images/020.jpg)\nshift short attention 原理\n此外，LongLoRA相比于Lora还可以微调embedding层和normalization层。尽管这两项内容占的参数量很小（以Llama 2-7B为例，embedding层只占1.94%，normalization层更是不到十万分之四），对结果也起到了重要作用。\n## 四、长文本的预训练方法\n上两节主要介绍了如何在位置编码和 attention 机制方面进行文本长度的有效拓展，这两个方面都是“经济适用性”的，即只需要简单微调或者直接外推即可，接下来将是最困难，也是成本最高的部分，即讨论如何在预训练阶段提高文本长度。\n为解决预训练过程中的长文本问题，思路主要有以下几个方面：\n  * 并行化计算，典型方法如 [sequence parallelism](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2105.13120.pdf)\n  * 优化 attention 机制，典型方法如 [Transformer-XL](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1901.02860), [Longformer](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2004.05150.pdf)\n  * 引入 memory 机制，典型方法如 [Focused Transformer](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2307.03170.pdf), [Memorizing Transformer](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2203.08913.pdf)\n  * 引入采样机制，典型方法如 [Hierarchical transformers](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/2110.13711), [Dynamic-Pooling Transformer](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2211.09761.pdf)\n\n\n由于笔者精力有限，下面仅选取其中部分方法加以介绍。\n### 4.1 序列并行(sequence parallel)\n在并行化算法大行其道的今天，使用改思想来解决长文本问题变得自然而言，实际上 SP 已逐渐成为 3D(DP, PP, TP)并行之外的第 4 个维度了。关于序列并行，笔者在以下文中进行过详细讨论\n[](https://zhuanlan.zhihu.com/p/14665512019)\n在此仅介绍最简单的一种做法，SP 就是将一段完整的文本拆分到多个设备上进行计算，设备在适当的时候进行通信和信息交互，如下图(c) 所示。\n![](../images/021.jpg)\n在实现层面，借鉴了 Ring-Allreduce 的思想，将输入序列分割成多个块，并将每个块输入到其相应的设备中。为了计算注意力输出，将环状通信与自注意力计算相结合，实现了环自注意力（RSA），如下图所示。\n![](../images/022.jpg)\n下面我们来深度理解一下这个过程，论文中的符号表示为\n  * B: batch size\n  * L: sequence length\n  * H: hidden size of linear layers\n  * A: attention head size\n  * Z: number of attention heads\n  * N: number of GPUs\n\n\n对于 Ring-Q K^\\top **：[B,Z,\\frac{L}{N},A] \\times [B,Z,A,\\frac{L}{N}] \\rightarrow (all-gather)[B,Z,\\frac{L}{N},L]** **，**\n切分后的每一个小块 \\frac{L}{N} ，在和 k^{T} 矩阵乘后得到 [\\frac{L}{N}, \\frac{L}{N}] 需要在切分维度做补全才可以得到每一个小块  \\frac{L}{N} 的完整结果，在后续进行 softmax 操作。故需要做 ring 操作达到一个 concat 的操作。\n对于 Ring-AV **：** [B,Z,\\frac{L}{N},L](reduce-scatter) \\times [B,Z,\\frac{L}{N},A] \\rightarrow [B,Z,\\frac{L}{N},A] ，\n需要完整对 softmax 结果进行 value 查询，需要对 [B,Z,\\frac{L}{N},L] 根据序列并行度进行分块，用对应的块在对应的 value 上查询并求和，故也需要做 ring 操作。\n![](../images/023.jpg)\nMLP 部分的计算就更简单了，如下所示：\n![](../images/024.jpg)\n### 4.2 LongLLaMA (Focused Transformer)\nLongLLaMA 通过引入 Focused Transformer（FOT）方法，在保持性能的同时，将 LLaMA 的上下文长度扩展到100k！在长文本的情况下，除了第一节所研究的显存和计算量的问题外，这篇论文还提出了一个分心问题（Distraction Issue），即随着文本长度的增加，其中相关的 tokens 对不相关 tokens 的比例会减少，从而导致与不相关 value 相关的 key 和与相关 value 相关的 key 发生重叠，致使模型需要额外区分不同语义的 key 。\n为此文章提出了 **Focused Transformer** （FOT）解决方案，其中主要使用了 Memory Attention Layers 以及 CrossBatch 技术，在 Inference 的过程中，绿色的 Memory Attention Layers 使用 kNN 对外部的 Memory 进行查询，从而有效延长了上下文长度，而 Memory Attention Layers 则主要使用 CrossBatch 进行训练。\n![](../images/025.jpg)\n具体而言，Memory Attention Layers 中的每个 query 在  \\in  中会关注局部的上下文以及 Memory 中使用 kNN 计算出的最匹配的 k 个key，而整个 Memory 则根据 之前处理的 key，value 进行填充。而 CrossBatch 则期望使得 Memory Attention Layers 更加关注长文本之中的“相关 value 的 key” ，CrossBatch 的处理借鉴了对比学习的思想，以相关文档之中的 d-1 个上下文作为正样本，以不相关文档之中的 d-1 个上下文作为负样本，通过对比学习的方式使得 Memory Attention Layers 可以更好的分辨相关与无关的 key-value。\n与标准的 Transformer 相比，一般的 Transformer 的训练过程中，相关与不相关文档没有被得到有效区分（正负样本分散均匀），当文档数量扩展时，注意力变得越来越分散，而 Focused Transformer 则通过 CrossBatch 的训练目标使得模型有效的关注与区分的长文本下的相关与无关的 key-value 的空间结构，从而解决了分心的问题。\n## 五、长文本的效果评估\n### 5.1 PPL\n对于 LLM 来说，其效果通常是通过生成连贯且上下文相关的文本的能力来衡量的。为了量化和衡量这一指标，困惑度 (Perplexity, PPL) 便成了最常见的指标。\nPPL 是一种衡量标准，反映模型根据前面的上下文预测下一个单词的能力。PPL 分数越低，模型准确预测下一个单词的能力就越好。\nPPL 是使用平均[交叉熵](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E4%BA%A4%E5%8F%89%E7%86%B5&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLkuqTlj4nnhrUiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.S2J4UpTHfweTBTYpU6f5iXbzdL0WMLEMxXcs_9n-a64&zhida_source=entity)计算的，而平均交叉熵又是使用数据集中的单词数量和根据前面的上下文预测的单词（目标单词）的概率来计算的。前面的上下文通常由目标单词之前的固定长度单词序列表示。其公式如下：\nPPL = e^H 其中H是平均交叉熵， H=-\\frac{1}{N} \\sum_{i=1}^N \\log _2\\left(P\\left(w_i \\mid w_1, w_2, \\ldots, w_{i-1}\\right)\\right)\nPPL 作为一种客观的评估指标被广泛用来进行 LLM 的评估。但是其也存在一些问题和不足：\n  * 模型词汇量可能会不公平地影响PPL：PPL 在很大程度上依赖于模型的词汇量及其概括未见过的单词的能力。如果模型遇到训练数据中不存在的单词或短语，即使生成的文本有意义，其 PPL 分数也较高。\n  * 缺乏主观性考虑：PPL 是一种客观指标，不考虑主观因素，例如风格、创造力或特定环境下的适当性。\n  * 上下文理解：PPL 主要关注于根据前面的上下文预测下一个单词。然而，它可能无法捕捉模型对更广泛背景的整体理解。\n  * 语言歧义和创造力：PPL 并不能体现模型处理语言歧义或生成创造性和新颖输出的能力。\n  * 领域特异性：PPL 对训练数据的领域和分布很敏感。在特定领域训练的模型可能会在其领域内实现较低的复杂性，但可能需要帮助在其训练环境之外生成文本。\n  * [过度拟合](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E8%BF%87%E5%BA%A6%E6%8B%9F%E5%90%88&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLov4fluqbmi5_lkIgiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.spqpQ9vf1a1LlC-h4Hx2FJ6881FOVmVIroQ4UEt_PZA&zhida_source=entity)和泛化：PPL可能会受到过度拟合的影响，其中模型在训练数据上表现得非常好，但很难泛化到看不见的或现实世界的例子。\n\n\n实际上，StreamingLLM 就很好地证明了 PPL 的局限性，因为尽管 StreamingLLM 的 PPL 值较低，但是由于其损失了大量中间信息，因此无法在“大海捞针”等测试方法中有较好的表现。\n### 5.2 “大海捞针”\n“大海捞针” 由 Greg Kamradt 提出的大模型长文本性能测试方法，其做法是在文本语料中藏入一个与文本语料不相关的句子，然后看大模型能不能通过自然语言提问的方式（Prompt）把这句话准确地提取出来。Greg Kamradt 的“大海捞针”实验简述：\n> “大海”：Paul Graham 的文章合集作为语料  \n> “针”：“The best thing to do in San Francisco is eat a sandwich and sit in [Dolores](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=Dolores&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJEb2xvcmVzIiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjMwNDk1OTY4LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjEsInpkX3Rva2VuIjpudWxsfQ.RE4qLFi_makziPOlLxYyrJHXTptBKc0Li24bb7GyJ1A&zhida_source=entity) Park on a sunny day.”  \n> 提问：\"What is the most fun thing to do in San Francisco based on my context? Don't give information outside the document\"  \n> 期待模型输出的正确答案：  \n> The best thing to do in San Francisco is eat a sandwich and sit in Dolores Park on a sunny day.\nGreg Kamradt 公布了他对 GPT-4 Turbo（128K）和 Claude 2.1 的测试结果：\n  * GPT-4 Turbo（128K）在语料长度超过 72K 且句子（“针”）藏在文本头部的时候，准确率不佳。\n\n\n![](../images/026.jpg)\n  * Claude 2.1似乎在语料长度超过20K之后就开始准确率不佳，而且句子（“针”）藏在语料靠前的位置时，准确率尤其差。\n\n\n![](../images/027.jpg)\n  * 进一步的，Anthropic发现可以**通过简单的prompt提示就可以提高模型不愿意回答不相关内容的效果** ，即让模型回答问题之前，加上一句“**Here is the most relevant sentence in the context:** ”即可大幅提升模型回答效果，改进模型不愿意回答不相关内容的水平。\n\n\n![](../images/028.jpg)\n  * 此外国内的 Moonshot AI 的长文本模型 Kimi Chat 也在“大海捞针”实验中发挥了令人惊艳的表现，原始报道见[这里](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/IC5-FGLVHzHHYqH6x-aNng) 。\n\n\n![](../images/029.jpg)\n  * Qwen-72B-Chat 也进行了“大海捞针”实验，测试模型在不同长度的输入下，是否能检索到文章不同位置的信息，结果同样表现良好，如下：\n\n\n![](../images/030.jpg)\n## 参考资料\n[1] [Kimi Chat 公布“大海捞针”长文本压测结果，也搞清楚了这项测试的精髓 (qq.com)](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/IC5-FGLVHzHHYqH6x-aNng)\n[2] [分析transformer模型的参数量、计算量、中间激活、KV cache - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/624740065)\n[3] [https://medium.com/@ddxzzx/why-and-how-to-achieve-longer-context-windows-for-llms-5f76f8656ea9](https://link.zhihu.com/?target=https%3A//medium.com/%40ddxzzx/why-and-how-to-achieve-longer-context-windows-for-llms-5f76f8656ea9)\n[4] [图解RoPE旋转位置编码及其特性](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/-1xVXjoM0imXMC7DKqo-Gw)\n[5] [RoPE外推的缩放法则 —— 尝试外推RoPE至1M上下文 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/660073229)\n[6] [Transformer升级之路：1、Sinusoidal位置编码追根溯源 - 科学空间|Scientific Spaces](https://link.zhihu.com/?target=https%3A//spaces.ac.cn/archives/8231)\n[7] [让研究人员绞尽脑汁的Transformer位置编码 - 科学空间|Scientific Spaces](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/8130)\n[8] [层次分解位置编码，让BERT可以处理超长文本](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/7947)\n[9] [理解Transformer的位置编码_51CTO博客_transformer的位置编码](https://link.zhihu.com/?target=https%3A//blog.51cto.com/u_15588078/6531187)\n[10] [NTK-Aware Scaled RoPE allows LLaMA models to have extended (8k+) context size without any fine-tuning and minimal perplexity degradation. : r/LocalLLaMA (reddit.com)](https://link.zhihu.com/?target=https%3A//www.reddit.com/r/LocalLLaMA/comments/14lz7j5/ntkaware_scaled_rope_allows_llama_models_to_have/%3Frdt%3D44479)\n[11] [EXTENDING CONTEXT WINDOW OF LARGE LANGUAGE MODELS VIA POSITION INTERPOLATION](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2306.15595.pdf)\n[12] [详解基于调整RoPE旋转角度的大模型长度外推方法 (qq.com)](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/RtI95hu-ZLxGkdGuNIkERQ)\n[13] [Transformer升级之路：15、Key归一化助力长度外推 - 科学空间|Scientific Spaces](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/9859)\n[14] [2309.12307.pdf (arxiv.org)](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2309.12307.pdf)\n[15] [GitHub - dvlab-research/LongLoRA: Code and documents of LongLoRA and LongAlpaca](https://link.zhihu.com/?target=https%3A//github.com/dvlab-research/LongLoRA)\n[16] [大模型分布式训练并行技术（五）-序列并行 (qq.com)](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/_SB5saeszza1Dmzs7n8iGQ)\n[17] [羊驼再度进化，“长颈鹿版”LongLLaMA 来啦，上下文长度冲向 100K ，性能不减](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/OysnthTQXPG_AqogQtnIcw)\n[18] [https://twitter.com/GregKamradt/status/1727018183608193393](https://link.zhihu.com/?target=https%3A//twitter.com/GregKamradt/status/1727018183608193393)\n[19] [LLaMA长度外推高性价比trick：线性插值法及相关改进源码阅读及相关记录](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/zyUDKc8VgeDvK4AQTCmfGg)\n[20] [Length Extrapolation of Transformers: A Survey from the Perspective of Position Encoding](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2312.17044.pdf)\n> 况属高风晚，山山黄叶飞。 —— 王勃《山中》\n编辑于 2025-06-22 06:08・上海\n[LLM](https://www.zhihu.com/topic/20660508)\n[GPT-4](https://www.zhihu.com/topic/26658420)\n[Llama 2](https://www.zhihu.com/topic/28100718)\n​赞同 443​​28 条评论​715 ​63 \n​分享\n​申请转载​\n​\n![](../images/body-7e064b35ba4350074989.jpeg)\n未登录用户\n  \n\n28 条评论\n默认\n最新\n[![余沾](../images/037.jpg)](https://www.zhihu.com/people/6848c0d08604c418ea3c32025b729e76)\n[余沾](https://www.zhihu.com/people/6848c0d08604c418ea3c32025b729e76)\n计算量跟token数相关，不就等于跟文本长度相关吗，为什么说跟文本长度不相关呢\n2024-04-04 · 广东\n​回复​5\n[![紫气东来](../images/032.jpg)](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n[紫气东来](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n作者​![](../images/body-ce088339e12c259915b9.png)\n这个非决定性影响是针对计算预算而言的哈\n2024-04-04 · 上海\n​回复​喜欢\n展开其他 1 条回复​\n[![WhatABurger](../images/033.jpg)](https://www.zhihu.com/people/e475711e6dbf51046ce3e16e41fe1775)\n[WhatABurger](https://www.zhihu.com/people/e475711e6dbf51046ce3e16e41fe1775)\n你好 想请教一下：统计计算量的部分 第一步计算QKV为什么不用考虑词表大小呢？ 第二、三步的矩阵维度变换可以再稍微解释下吗？ 另外后向计算量是前向的两倍，是因为adam引入两个额外参数的原因吗？感谢🙏\n2023-12-29 · 北京\n​回复​2\n[![紫气东来](../images/038.jpg)](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n[紫气东来](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n作者​![](../images/body-ce088339e12c259915b9.png)\n1.词表大小与QKV 的计算无关，相关的只是 hidden_size  \n2.关于反向和前向的计算量的关系可参考[回旋托马斯x：浅谈后向传递的计算量大约是前向传递的两倍](https://zhuanlan.zhihu.com/p/675517271)\n2024-01-10 · 上海\n​回复​2\n[![可爱啊](../images/035.jpg)](https://www.zhihu.com/people/c5ad9a855dda9b5d0e79bd9c3e19bcea)\n[可爱啊](https://www.zhihu.com/people/c5ad9a855dda9b5d0e79bd9c3e19bcea)\n算QKV激活值时，显存怎么还*2了\n2025-06-02 · 北京\n​回复​喜欢\n展开其他 1 条回复​\n[![深度眸](../images/036.jpg)](https://www.zhihu.com/people/87daebf1f29667deb2b47591b3b5df94)\n[深度眸](https://www.zhihu.com/people/87daebf1f29667deb2b47591b3b5df94)\n​![](../images/body-613b2e271fc60f74249e.png)\n写的很好\n2024-11-02 · 上海\n​回复​喜欢\n[![jack](../images/037.jpg)](https://www.zhihu.com/people/0b93b9e6a57e0d815e8dd86875b5565b)\n[jack](https://www.zhihu.com/people/0b93b9e6a57e0d815e8dd86875b5565b)\n问题二：底数对结果的影响是什么？ 这里的底数是指哪个？\n2024-07-26 · 北京\n​回复​喜欢\n[![紫气东来](../images/038.jpg)](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n[紫气东来](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n作者​![](../images/body-ce088339e12c259915b9.png)\nbase\n2024-07-26 · 上海\n​回复​喜欢\n[![jack](../images/039.jpg)](https://www.zhihu.com/people/0b93b9e6a57e0d815e8dd86875b5565b)\n[jack](https://www.zhihu.com/people/0b93b9e6a57e0d815e8dd86875b5565b)\n如下图第一列的上图所示....这是个什么图？\n2024-07-25 · 辽宁\n​回复​喜欢\n[![HERODING23](../images/body-639c3c6819287d6afb5b.jpg)](https://www.zhihu.com/people/c565825935f41fca1cab6a370cb96722)\n[HERODING23](https://www.zhihu.com/people/c565825935f41fca1cab6a370cb96722)\n“高频分量旋转速度降幅低，低频分量旋转速度降幅高”是不是写反了？\n2024-05-21 · 上海\n​回复​喜欢\n[![紫气东来](../images/038.jpg)](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n[紫气东来](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n作者​![](../images/body-ce088339e12c259915b9.png)\n没写反哈，你可以结合 NTK-by-part 再理解一下\n2024-05-21 · 上海\n​回复​喜欢\n展开其他 2 条回复​\n[![Xi Wang](../images/body-baae6c3be1cfb7a93616.jpg)](https://www.zhihu.com/people/de354f38a9fbc2e37c056e8e5ceeaf8d)\n[Xi Wang](https://www.zhihu.com/people/de354f38a9fbc2e37c056e8e5ceeaf8d)\n1.1.2里面为啥都要乘2\n2024-05-11 · 广东\n​回复​喜欢\n[![紫气东来](../images/038.jpg)](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n[紫气东来](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n作者​![](../images/body-ce088339e12c259915b9.png)\n矩阵运算包含乘、加两部分哈，更多可参考 [紫气东来：CUDA（三）：通用矩阵乘法：从入门到熟练](https://zhuanlan.zhihu.com/p/657632577)\n2024-05-21 · 上海\n​回复​1\n展开其他 1 条回复​\n[![易二三](../images/body-eb677e2f1983c5fe8a21.jpg)](https://www.zhihu.com/people/c8953183cee3c9a2f1008b4360d61f34)\n[易二三](https://www.zhihu.com/people/c8953183cee3c9a2f1008b4360d61f34)\n请问2.2.3节的f'(x, m)公式体现在代码中是如何改呢，比如LlamaRotaryEmbedding，原始max_position_embeddings=2048，我想扩展到16k，只把这个参数改成16k然后准备相应的数据进行微调就算是通过位置插值(PI)在增加 LLM 上下文窗口吗？\n2024-01-08 · 北京\n​回复​喜欢\n[![紫气东来](../images/body-5419f6fd0627c681f976.jpg)](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n[紫气东来](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n作者​![](../images/body-ce088339e12c259915b9.png)\n线性插值的代码实现可以参考以下代码哈：  \nclass LlamaLinearScaledRotaryEmbedding(torch.nn.Module):  \ndef __init__(self, dim, max_position_embeddings=2048, base=10000, scale=1, device=None):  \nsuper().__init__()  \n# 相比RoPE增加scale参数  \nself.scale = scale  \n# inv_freq为基值向量  \ninv_freq = 1.0 / (base ** (torch.arange(0, dim, 2).float().to(device) / dim))  \nself.register_buffer(\"inv_freq\", inv_freq)  \n  \n# Build here to make `torch.jit.trace` work.  \nself.max_seq_len_cached = max_position_embeddings  \n# 构建max_seq_len_cached大小的张量t  \nt = torch.arange(self.max_seq_len_cached, device=self.inv_freq.device, dtype=self.inv_freq.dtype)  \n# 张量t归一化，RoPE没有这一步  \nt /= self.scale  \n# einsum计算频率矩阵  \n# 'i, j->i j’表示分别输入尺寸为[i]、[j]的向量，做笛卡尔运算得到尺寸为[i, j]的矩阵。  \nfreqs = torch.einsum(\"i,j->ij\", t, self.inv_freq)  \n# Different from paper, but it uses a different permutation in order to obtain the same calculation  \n# 在-1维做一次拷贝、拼接  \nemb = torch.cat((freqs, freqs), dim=-1)  \ndtype = torch.get_default_dtype()  \n# 注册为模型的缓冲区cos_cached和sin_cached  \nself.register_buffer(\"cos_cached\", emb.cos()[None, None, :, :].to(dtype), persistent=False)  \nself.register_buffer(\"sin_cached\", emb.sin()[None, None, :, :].to(dtype), persistent=False)  \n  \ndef forward(self, x, seq_len=None):  \n# x: [bs, num_attention_heads, seq_len, head_size]  \n# This `if` block is unlikely to be run after we build sin/cos in `__init__`. Keep the logic here just in case.  \n# seq_len为序列长度，seq_len大于max_seq_len_cached，则重新计算频率矩阵，并更新cos_cached和sin_cached的缓冲区  \nif seq_len > self.max_seq_len_cached:  \nself.max_seq_len_cached = seq_len  \nt = torch.arange(self.max_seq_len_cached, device=x.device, dtype=self.inv_freq.dtype)  \nt /= self.scale  \nfreqs = torch.einsum(\"i,j->ij\", t, self.inv_freq)  \n# Different from paper, but it uses a different permutation in order to obtain the same calculation  \nemb = torch.cat((freqs, freqs), dim=-1).to(x.device)  \nself.register_buffer(\"cos_cached\", emb.cos()[None, None, :, :].to(x.dtype), persistent=False)  \nself.register_buffer(\"sin_cached\", emb.sin()[None, None, :, :].to(x.dtype), persistent=False)  \n# 长度裁剪：返回cos_cached和sin_cached中与seq_len（序列长度）  \nreturn (  \nself.cos_cached[:, :, :seq_len, ...].to(dtype=x.dtype),  \nself.sin_cached[:, :, :seq_len, ...].to(dtype=x.dtype),  \n)\n2024-01-08 · 上海\n​回复​1\n展开其他 1 条回复​\n[![藏鸿涧](../images/body-fabdf678753520e26894.jpg)](https://www.zhihu.com/people/0c8731d3cd69a51cd1a71a3c1ad29584)\n[藏鸿涧](https://www.zhihu.com/people/0c8731d3cd69a51cd1a71a3c1ad29584)\n很棒![\\[爱\\]](https://pic1.zhimg.com/v2-0942128ebfe78f000e84339fbb745611.png)不过2.1里三角函数关于位置和维度的图像是不是反了？\n2023-12-21 · 北京\n​回复​喜欢\n[![紫气东来](../images/032.jpg)](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n[紫气东来](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n作者​![](../images/body-ce088339e12c259915b9.png)\n没有反哈，绘图具体实现在[https://github.com/ifromeast/AI_analysis/blob/main/sinusoidal_position.ipynb](http://link.zhihu.com/?target=https%3A//github.com/ifromeast/AI_analysis/blob/main/sinusoidal_position.ipynb)\n2024-05-21 · 上海\n​回复​喜欢\n点击查看全部评论\n![](../images/body-7e064b35ba4350074989.jpeg)\n未登录用户\n  \n\n关于作者\n[![紫气东来](../images/003.jpg)](https://www.zhihu.com/people/zi-qi-dong-lai-1)\n[紫气东来](https://www.zhihu.com/people/zi-qi-dong-lai-1)\n吾生也有涯，而知也无涯～\n[​](https://zhuanlan.zhihu.com/p/96956163)\n上海交通大学 工学硕士\n[ 回答 **32** ](https://www.zhihu.com/people/zi-qi-dong-lai-1/answers)[ 文章 **114** ](https://www.zhihu.com/people/zi-qi-dong-lai-1/posts)[ 关注者 **24,445** ](https://www.zhihu.com/people/zi-qi-dong-lai-1/followers)\n​关注他​发私信\n大家都在搜\n换一换\n[江歌妈妈发长文尘埃终将落定704 万](https://www.zhihu.com/search?q=%E6%B1%9F%E6%AD%8C%E5%A6%88%E5%A6%88%E5%8F%91%E9%95%BF%E6%96%87%E5%B0%98%E5%9F%83%E7%BB%88%E5%B0%86%E8%90%BD%E5%AE%9A&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)热\n[中国男足 0-5 巴勒斯坦562 万](https://www.zhihu.com/search?q=%E4%B8%AD%E5%9B%BD%E7%94%B7%E8%B6%B3+0-5+%E5%B7%B4%E5%8B%92%E6%96%AF%E5%9D%A6&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)热\n[原央视主持人阿丘回应被通报419 万](https://www.zhihu.com/search?q=%E5%8E%9F%E5%A4%AE%E8%A7%86%E4%B8%BB%E6%8C%81%E4%BA%BA%E9%98%BF%E4%B8%98%E5%9B%9E%E5%BA%94%E8%A2%AB%E9%80%9A%E6%8A%A5&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)热\n[华为与赛力斯达成新五年合作409 万](https://www.zhihu.com/search?q=%E5%8D%8E%E4%B8%BA%E4%B8%8E%E8%B5%9B%E5%8A%9B%E6%96%AF%E8%BE%BE%E6%88%90%E6%96%B0%E4%BA%94%E5%B9%B4%E5%90%88%E4%BD%9C&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)热\n[迪拜航空确认航班发生事故398 万](https://www.zhihu.com/search?q=%E8%BF%AA%E6%8B%9C%E8%88%AA%E7%A9%BA%E7%A1%AE%E8%AE%A4%E8%88%AA%E7%8F%AD%E5%8F%91%E7%94%9F%E4%BA%8B%E6%95%85&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)热\n[东航回应网传空姐跪地道歉326 万](https://www.zhihu.com/search?q=%E4%B8%9C%E8%88%AA%E5%9B%9E%E5%BA%94%E7%BD%91%E4%BC%A0%E7%A9%BA%E5%A7%90%E8%B7%AA%E5%9C%B0%E9%81%93%E6%AD%89&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)\n[王楚钦：不知道为什么就是感觉累320 万](https://www.zhihu.com/search?q=%E7%8E%8B%E6%A5%9A%E9%92%A6%EF%BC%9A%E4%B8%8D%E7%9F%A5%E9%81%93%E4%B8%BA%E4%BB%80%E4%B9%88%E5%B0%B1%E6%98%AF%E6%84%9F%E8%A7%89%E7%B4%AF&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)热\n[江苏高考作文《衬衫的价格为 9 磅 15 便士》爆火268 万](https://www.zhihu.com/search?q=%E6%B1%9F%E8%8B%8F%E9%AB%98%E8%80%83%E4%BD%9C%E6%96%87%E3%80%8A%E8%A1%AC%E8%A1%AB%E7%9A%84%E4%BB%B7%E6%A0%BC%E4%B8%BA+9+%E7%A3%85+15+%E4%BE%BF%E5%A3%AB%E3%80%8B%E7%88%86%E7%81%AB&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)\n[女装网店开始用防拆带了265 万](https://www.zhihu.com/search?q=%E5%A5%B3%E8%A3%85%E7%BD%91%E5%BA%97%E5%BC%80%E5%A7%8B%E7%94%A8%E9%98%B2%E6%8B%86%E5%B8%A6%E4%BA%86&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)\n[孕妇骑车别车被司机踹翻257 万](https://www.zhihu.com/search?q=%E5%AD%95%E5%A6%87%E9%AA%91%E8%BD%A6%E5%88%AB%E8%BD%A6%E8%A2%AB%E5%8F%B8%E6%9C%BA%E8%B8%B9%E7%BF%BB&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)\n### 推荐阅读\n# [百面LLM-70 提问：在longcontext的继续训练中，短文本能力会损失，为什么？以及该怎么做，能补回模型的短文能力？ 回答：1）只训练长文本的时候，短文本的能力会被遗忘。但由于长文本一般数据量不多，… swthe...发表于百面LLM ](https://zhuanlan.zhihu.com/p/718823663)# [LLM系列-如何做好长文本大模型训练？ 长文本能力是当前大模型领域的前沿热点。我们可以观察到市面上常见大模型的支持长度，如GPT-4支持32K tokens，Llama 3.1支持128K tokens，而ProLong甚至能支持到512K tokens。这些技术的背… Whisper ](https://zhuanlan.zhihu.com/p/11467583463)[ ![可控细节的长文档摘要，探索开源LLM工具与实践](../images/body-2d7015e0a6b71e0c7171.jpg)可控细节的长文档摘要，探索开源LLM工具与实践 魔搭社区 ](https://zhuanlan.zhihu.com/p/706955058)# [集成LLM构建一个PDF长文本解读应用 PDF长文档解读，特别是论文解读，由于的确能够辅助读者有效提高文章阅读速度，可以使读者在较短时间内掌握要点，各大LLM厂商在推出在线聊天应用的同时基本都包含PDF长文档解读这一应用。 这… 智永 ](https://zhuanlan.zhihu.com/p/686091499) \n\n_想来知乎工作？请发送邮件到 jobs@zhihu.com_\n打开知乎App\n在「我的页」右上角打开扫一扫\n![](../images/body-0f9788d006ab0f4da762.png)\n其他扫码方式：微信\n下载知乎App\n无障碍模式\n验证码登录\n密码登录\n[开通机构号](https://zhuanlan.zhihu.com/org/signup)\n中国 +86\n获取短信验证码\n忘记密码\n登录/注册\n其他方式登录\n未注册手机验证后自动登录，注册即代表同意[《知乎协议》](https://www.zhihu.com/term/zhihu-terms)[《隐私保护指引》](https://www.zhihu.com/term/privacy)\n扫码下载知乎 App\n关闭二维码\n",
  "metadata": {
    "title": "LLM(23)：LLM 中的长文本问题 - 知乎",
    "description": "近期，随着大模型技术的发展，长文本问题逐渐成为热门且关键的问题，不妨简单梳理一下近期出现的典型的长文本模型： 10 月上旬，Moonshot AI 的 Kimi Chat 问世，这是首个支持 20 万汉字输入的智能助手产品；10 月…",
    "keywords": "LLM,GPT-4,Llama 2",
    "author": null,
    "og:title": "LLM(23)：LLM 中的长文本问题",
    "og:url": "https://zhuanlan.zhihu.com/p/640641794",
    "og:description": "近期，随着大模型技术的发展，长文本问题逐渐成为热门且关键的问题，不妨简单梳理一下近期出现的典型的长文本模型： 10 月上旬，Moonshot AI 的 Kimi Chat 问世，这是首个支持 20 万汉字输入的智能助手产品；10 月…",
    "og:image": "https://pic1.zhimg.com/v2-79e202bf0327456e43cf75540c05f11a_720w.jpg?source=172ae18b",
    "og:type": "article",
    "og:site_name": "知乎专栏"
  },
  "paywall": {
    "listed_paid": false,
    "detected": false,
    "marker": "",
    "public_only": false,
    "policy": "付费/会员内容只保留页面公开可见部分，不绕过付费墙"
  },
  "crawl": {
    "success": true,
    "status_code": 200,
    "error": ""
  },
  "code_blocks": [],
  "images": [
    {
      "status": "http_403",
      "url": "https://zhuanlan.zhihu.com/p/640641794",
      "src": "https://zhuanlan.zhihu.com/p/640641794",
      "alt": "",
      "downloaded": false,
      "discovery": "saved_markdown",
      "retried_at": "2026-10-20T18:03:23Z"
    }
  ],
  "audio": [],
  "videos": [
    {
      "url": "https://vdn3.vzuu.com/HD/77626c50-4f2d-11f0-860b-0e2ef4b37b0b-v8_f2_t1_jTs377Hg.mp4?auth_key=1790970326-0-0-d27d004946d218cdc6a3729872ef6013&bu=09fd86c2&c=avc.8.0&disable_local_cache=1&expiration=1790970326&f=mp4&pu=e59e796c&v=tx&pp=ChMxNDAxNjIzODY1NzM5NTc5MzkyGGMiC2ZlZWRfY2hvaWNlMhMxMzY5MDA1NjA4NTk5OTA0MjU3PXu830Q%3D&pf=Web&pt=zhihu",
      "kind": "direct_video",
      "status": "http_403",
      "title": "",
      "retried_at": "2026-10-20T18:03:23Z"
    }
  ],
  "links": [
    {
      "type": "internal",
      "href": "https://www.zhihu.com"
    },
    {
      "type": "internal",
      "href": "https://www.zhihu.com/signin?next=%2Ffollow"
    },
    {
      "type": "internal",
      "href": "https://www.zhihu.com/signin?next=%2F"
    },
    {
      "type": "internal",
      "href": "https://www.zhihu.com/signin?next=%2Fhot"
    },
    {
      "type": "internal",
      "href": "https://www.zhihu.com/signin?next=%2Fcolumn-square"
    },
    {
      "type": "internal",
      "href": "https://www.zhihu.com/signin?next=%2Fring-feeds"
    },
    {
      "type": "internal",
      "href": "https://www.zhihu.com/project-square"
    },
    {
      "type": "internal",
      "href": "https://www.zhihu.com/fiore/h5/vip-web"
    },
    {
      "type": "internal",
      "href": "https://zhida.zhihu.com/"
    },
    {
      "type": "internal",
      "href": "https://www.zhihu.com/column/c_1465775160745324544"
    },
    {
      "type": "internal",
      "href": "https://www.zhihu.com/people/zi-qi-dong-lai-1"
    },
    {
      "type": "internal",
      "href": "https://www.zhihu.com/question/48510028"
    },
    {
      "type": "internal",
      "href": "https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%A4%A7%E6%A8%A1%E5%9E%8B%E6%8A%80%E6%9C%AF&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlpKfmqKHlnovmioDmnK8iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.o45BnP8J948JhIZ0rX9UTMMRQyMieA2YAJoejrWr8ao&zhida_source=entity"
    },
    {
      "type": "internal",
      "href": "https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E9%95%BF%E6%96%87%E6%9C%AC%E6%A8%A1%E5%9E%8B&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLplb_mlofmnKzmqKHlnosiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.enPxWIGiFUOq1qMboEaHpvnBnRueLBoQiXsS4U3VtKg&zhida_source=entity"
    },
    {
      "type": "internal",
      "href": "https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%99%BE%E5%B7%9D%E6%99%BA%E8%83%BD&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnmb7lt53mmbrog70iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.C_JQd9_rJa9NnITnAzHJHvURVrv106b4ky9nZmoyNSk&zhida_source=entity"
    },
    {
      "type": "internal",
      "href": "https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=Baichuan2-192K&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJCYWljaHVhbjItMTkySyIsInpoaWRhX3NvdXJjZSI6ImVudGl0eSIsImNvbnRlbnRfaWQiOjIzMDQ5NTk2OCwiY29udGVudF90eXBlIjoiQXJ0aWNsZSIsIm1hdGNoX29yZGVyIjoxLCJ6ZF90b2tlbiI6bnVsbH0.zfV-6r9Kq22sTrHkn0jAhhRaEcMXIdFY82gxvA_h4ms&zhida_source=entity"
    },
    {
      "type": "internal",
      "href": "https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=GPT-4+Turbo&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJHUFQtNCBUdXJibyIsInpoaWRhX3NvdXJjZSI6ImVudGl0eSIsImNvbnRlbnRfaWQiOjIzMDQ5NTk2OCwiY29udGVudF90eXBlIjoiQXJ0aWNsZSIsIm1hdGNoX29yZGVyIjoxLCJ6ZF90b2tlbiI6bnVsbH0.zUXmSQ_X2pG8JKStMbW_ltBgCF3-B-gYPcSpLYOq1KE&zhida_source=entity"
    },
    {
      "type": "internal",
      "href": "https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=Claude+2.1&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJDbGF1ZGUgMi4xIiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjMwNDk1OTY4LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjEsInpkX3Rva2VuIjpudWxsfQ.zi0ID7ZoWDn2MOzlnuvdbRe034UGLZhIVw7h71stxA8&zhida_source=entity"
    },
    {
      "type": "internal",
      "href": "https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E9%9B%B6%E4%B8%80%E4%B8%87%E7%89%A9&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLpm7bkuIDkuIfniakiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.e9_Q511Hhl5PJuZ-SEIMI-_kyBo7jRBNxAvzfqRHWOQ&zhida_source=entity"
    },
    {
      "type": "internal",
      "href": "https://link.zhihu.com/?target=https%3A%2F%2Fhuggingface.co%2F01-ai%2FYi-6B-200K"
    },
    {
      "type": "external",
      "href": "javascript:void(0)"
    }
  ],
  "repair_version": 2,
  "repaired_at": "2026-10-20T17:31:05Z",
  "source_url": "https://zhuanlan.zhihu.com/p/640641794",
  "delivery_status": "unverified",
  "discovery_status": "http_403",
  "missing_reason": "源页面未重新核验:http_403；已按保留正文补采图片",
  "repair_error": "",
  "actual_video_files": [],
  "expected_saved_body_images": 1,
  "image_discovery": "saved_markdown",
  "source_body_markdown": "[![](https://zhuanlan.zhihu.com/p/640641794)](javascript:void\\(0\\))\n![ZhiHu logo](https://static.zhihu.com/heifetz/assets/wechat-share-logo.39ea9ecd.png)\n[](https://www.zhihu.com)\n[关注](https://www.zhihu.com/signin?next=%2Ffollow)[推荐](https://www.zhihu.com/signin?next=%2F)[热榜](https://www.zhihu.com/signin?next=%2Fhot)[专栏](https://www.zhihu.com/signin?next=%2Fcolumn-square)[圈子](https://www.zhihu.com/signin?next=%2Fring-feeds)[AI WorksBeta ](https://www.zhihu.com/project-square)[故事](https://www.zhihu.com/fiore/h5/vip-web)\n​\n[直答](https://zhida.zhihu.com/)\n切换模式\n登录/注册\nLLM(23)：LLM 中的长文本问题\n首发于[从NLP到LLM](https://www.zhihu.com/column/c_1465775160745324544)\n切换模式\n![LLM\\(23\\)：LLM 中的长文本问题](https://pic1.zhimg.com/70/v2-79e202bf0327456e43cf75540c05f11a_1440w.image?source=172ae18b&biz_tag=Post)\n# LLM(23)：LLM 中的长文本问题\n[![紫气东来](https://picx.zhimg.com/v2-af1c72506a7ac445b11f3b518e47bbd1_l.jpg?source=32738c0c&needBackground=1)](https://www.zhihu.com/people/zi-qi-dong-lai-1)\n[紫气东来](https://www.zhihu.com/people/zi-qi-dong-lai-1)\n[​![](https://picx.zhimg.com/v2-2ddc5cc683982648f6f123616fb4ec09_l.png?source=32738c0c)](https://www.zhihu.com/question/48510028)\n上海交通大学 工学硕士\n[收录于 · 从NLP到LLM](https://www.zhihu.com/column/c_1465775160745324544)\n443 人赞同了该文章\n​\n目录\n近期，随着[大模型技术](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%A4%A7%E6%A8%A1%E5%9E%8B%E6%8A%80%E6%9C%AF&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlpKfmqKHlnovmioDmnK8iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.o45BnP8J948JhIZ0rX9UTMMRQyMieA2YAJoejrWr8ao&zhida_source=entity)的发展，长文本问题逐渐成为热门且关键的问题，不妨简单梳理一下近期出现的典型的[长文本模型](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E9%95%BF%E6%96%87%E6%9C%AC%E6%A8%A1%E5%9E%8B&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLplb_mlofmnKzmqKHlnosiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.enPxWIGiFUOq1qMboEaHpvnBnRueLBoQiXsS4U3VtKg&zhida_source=entity)：\n  * 10 月上旬，Moonshot AI 的 Kimi Chat 问世，这是首个支持 20 万汉字输入的智能助手产品；\n  * 10 月下旬，[百川智能](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%99%BE%E5%B7%9D%E6%99%BA%E8%83%BD&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnmb7lt53mmbrog70iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.C_JQd9_rJa9NnITnAzHJHvURVrv106b4ky9nZmoyNSk&zhida_source=entity)发布 [Baichuan2-192K](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=Baichuan2-192K&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJCYWljaHVhbjItMTkySyIsInpoaWRhX3NvdXJjZSI6ImVudGl0eSIsImNvbnRlbnRfaWQiOjIzMDQ5NTk2OCwiY29udGVudF90eXBlIjoiQXJ0aWNsZSIsIm1hdGNoX29yZGVyIjoxLCJ6ZF90b2tlbiI6bnVsbH0.zfV-6r9Kq22sTrHkn0jAhhRaEcMXIdFY82gxvA_h4ms&zhida_source=entity) 长窗口大模型，相当于一次处理约35 万个汉字；\n  * 11 月上旬，OpenAI 发布支持 128K 上下文窗口的 [GPT-4 Turbo](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=GPT-4+Turbo&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJHUFQtNCBUdXJibyIsInpoaWRhX3NvdXJjZSI6ImVudGl0eSIsImNvbnRlbnRfaWQiOjIzMDQ5NTk2OCwiY29udGVudF90eXBlIjoiQXJ0aWNsZSIsIm1hdGNoX29yZGVyIjoxLCJ6ZF90b2tlbiI6bnVsbH0.zUXmSQ_X2pG8JKStMbW_ltBgCF3-B-gYPcSpLYOq1KE&zhida_source=entity) 模型；\n  * 11 月下旬，Anthropic 发布支持 200K 上下文窗口的 [Claude 2.1](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=Claude+2.1&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJDbGF1ZGUgMi4xIiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjMwNDk1OTY4LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjEsInpkX3Rva2VuIjpudWxsfQ.zi0ID7ZoWDn2MOzlnuvdbRe034UGLZhIVw7h71stxA8&zhida_source=entity) 模型;\n  * 12 月上旬，[零一万物](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E9%9B%B6%E4%B8%80%E4%B8%87%E7%89%A9&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLpm7bkuIDkuIfniakiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.e9_Q511Hhl5PJuZ-SEIMI-_kyBo7jRBNxAvzfqRHWOQ&zhida_source=entity)开源了长文本模型 [Yi-6B-200K](https://link.zhihu.com/?target=https%3A//huggingface.co/01-ai/Yi-6B-200K) 和 [Yi-34B-200K](https://link.zhihu.com/?target=https%3A//huggingface.co/01-ai/Yi-34B-200K)。\n\n\n实际上，随着文本长度的提高，模型能够处理问题的边界也大大提高，因此研究并解决长文本问题就显得非常必要。本文将从长文本问题的本质出发，逐步分析和研究长文本实现的问题及解决办法。\n## 一、长文本的核心问题与解决方向\n### 1.1 文本长度与[显存](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E6%98%BE%E5%AD%98&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLmmL7lrZgiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.Nlio1gSiixW6RNHFbjs91mgpDHnHGwPyoQ-ERu-92ZU&zhida_source=entity)及计算量之关系\n要研究清楚长文本的问题，首先应该搞清楚文本长度在模型中的地位与影响。那么我们便以 [Decoder-base](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=Decoder-base&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJEZWNvZGVyLWJhc2UiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.h_b-l0ApW3jQCSglbaBje0mPLVjEQcO7ZibjykADMto&zhida_source=entity) 的模型为例来进行分析\n**1.1.1 模型参数量**\nDecoder-base 的模型主要包括 3 个部分：embedding, decoder-layer, head。\n其中最主要部分是decoder-layer，其由 l 个层组成，每个层又分为两部分：[self-attention](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=self-attention&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJzZWxmLWF0dGVudGlvbiIsInpoaWRhX3NvdXJjZSI6ImVudGl0eSIsImNvbnRlbnRfaWQiOjIzMDQ5NTk2OCwiY29udGVudF90eXBlIjoiQXJ0aWNsZSIsIm1hdGNoX29yZGVyIjoxLCJ6ZF90b2tlbiI6bnVsbH0.-E1zv2bY3OTPn8vlpdfjrkCMrb19fQexlXL7cuS8cjw&zhida_source=entity) 和 [MLP](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=MLP&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJNTFAiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.yeqpQOnKgEXKIuHNCi0ld7quPq1zrLMKKcv1x4YhG7c&zhida_source=entity)。\n**self-attention** 的模型参数有 Q、K、V 的[权重矩阵](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E6%9D%83%E9%87%8D%E7%9F%A9%E9%98%B5&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLmnYPph43nn6npmLUiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.AtPn9EbT1kHlTUOxsQ2K7n8dLtUxA4gX4A6W-p0PeVw&zhida_source=entity) W_Q、W_K、W_V 及[bias](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=bias&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJiaWFzIiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjMwNDk1OTY4LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjEsInpkX3Rva2VuIjpudWxsfQ.XvVblV-aKEv1jpMus67B-1JdCDEnyCetP8PNCZ7lEsE&zhida_source=entity)，输出矩阵 W_O 及bias，4个权重矩阵的形状为 [h,h] （ h 表示 hidden_size），4个bias的形状为 [h] 。则 self- attention 的参数量为 4h^2+4h 。\n**MLP** 由2个[线性层](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%BA%BF%E6%80%A7%E5%B1%82&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnur_mgKflsYIiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.GP964-QGA5sKcRgjgKl440NZ-avRy-iqPizX5fVpCoM&zhida_source=entity)组成，一般地，第一个线性层是先将维度从 h 映射到 4h ，第二个线性层再将维度从4h映射到h。第一个线性层的权重矩阵 W_1 的形状为 [h,4h] ，[偏置](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%81%8F%E7%BD%AE&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlgY_nva4iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.1VI8zCXXA0DL-1eX8xlMos0Leccr221JA8ktnThfPU0&zhida_source=entity)的形状为 [4h] 。第二个[线性层权重矩阵](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%BA%BF%E6%80%A7%E5%B1%82%E6%9D%83%E9%87%8D%E7%9F%A9%E9%98%B5&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnur_mgKflsYLmnYPph43nn6npmLUiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.UkA_9rF8uTwQ00LrfXwjABbmcEJ-ebaTcO0v-frSFPI&zhida_source=entity) W_2 的形状为 [4h,h] ，偏置形状为 [h] 。则 MLP 的参数量为 8h^2+5h 。\nself-attention 和 MLP 各有一个layer [normalization](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=normalization&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJub3JtYWxpemF0aW9uIiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjMwNDk1OTY4LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjEsInpkX3Rva2VuIjpudWxsfQ.aJWaR5b2sdDAW25SyJekeEZV3vik7dXsMRS5mOWXGfk&zhida_source=entity)，包含了2个可训练模型参数：[缩放参数](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%BC%A9%E6%94%BE%E5%8F%82%E6%95%B0&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnvKnmlL7lj4LmlbAiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.1mIVcIurM8QfQwtyKXYn4fLgaxOpa-Yadza3qeUrgDU&zhida_source=entity) \\gamma 和[平移参数](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%B9%B3%E7%A7%BB%E5%8F%82%E6%95%B0&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlubPnp7vlj4LmlbAiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.muVoVWoVtBEShAq3OjLiRyP4kJB_SDQiguGH9XETsVk&zhida_source=entity) \\beta ，形状都是 [h] 。2个layer normalization的参数量为 4h 。\n由此，每个 Decoder 层的参数量为12h^2+13h。\n此外，**[embedding](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=2&q=embedding&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJlbWJlZGRpbmciLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MiwiemRfdG9rZW4iOm51bGx9._Z-7cakzlKd5rzQqdCE7s9oKoO8oh0vBx3dB-YuzV1U&zhida_source=entity) **和 **head** 的参数量相同，与词表相关，为Vh（如果是 Tied embedding，则二者共用同一个参数）。由于位置编码多样，且参数量小，故忽略此部分。\n综上，l 层模型的可训练模型参数量为 l(12h^2+13h)+2Vh。当 h较大时，可以忽略一次项，模型参数量近似为12lh^2。\n**1.1.2 计算量估计**\n如果说参数量是模型的固有属性，那么计算量便是由模型和输入共同决定，下面分析这一过程。\n假设输入文本经过[分词器](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%88%86%E8%AF%8D%E5%99%A8&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLliIbor43lmagiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.t0E-5_Mnt1dRhEhBYEN6NF8U6kC0l1aXJ6msPr-DhdQ&zhida_source=entity)后的 `input_ids`数据的形状为 [b,s ] （ b 表示 batch_size, s 表示 sequence_length），然后经过 embedding 层后 `x`形状变为 [b,s,h ] ，由于仅仅是查表操作，计算量为 bsh 。\n先分析 Decoder 中 **self-attention** 的计算量，计算公式如下：\nQ=xW_Q,K=xW_K,V=xW_V\\\\\\x_{out}=softmax(\\frac{QK^{T}}{\\sqrt{h}})\\cdot V\\cdot W_o + x\\\\\\\n**1.** 计算 Q,K,V ：[矩阵乘法](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnn6npmLXkuZjms5UiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.VNLI3qJROtsm8CvcPn5PCVO9kCEC01Dsm686wD6o6CA&zhida_source=entity)的输入和输出形状为 [b,s,h] \\times [h,h]\\rightarrow [b,s,h] 。计算量为 3*2bsh^2=6bsh^2 。\n**2.** QK^{T} 矩阵乘法的输入和输出形状为 [b, n\\\\_head, s,head\\\\_dim]\\times [b,n\\\\_head,head\\\\_dim,s]\\rightarrow [b,n\\\\_head,s,s] 。计算量为 2bs^2h 。\n**3.** 计算在 V 上的[加权](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%8A%A0%E6%9D%83&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLliqDmnYMiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.10jpas0f2zrOwM_dD1TF981rCKYIY0kgkhHzK6En5fI&zhida_source=entity) score\\cdot V ，矩阵乘法的输入和输出形状为 [b,n\\\\_head,s,s]\\times[b,n\\\\_head,s,head\\\\_dim]\\rightarrow[b,n\\\\_head,s,head\\\\_dim] 。计算量为 2bs^2h 。\n**4.** attention后的[线性映射](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%BA%BF%E6%80%A7%E6%98%A0%E5%B0%84&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnur_mgKfmmKDlsIQiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.mjjbdGFCBv5Dz6UzNqFe3X6kvv77e8ZQ9KS8q7fZw_Q&zhida_source=entity)，矩阵乘法的输入和输出形状为 [b,s,h]\\times[h,h]\\rightarrow [b,s,h] 。计算量为 2bsh^2 。\n**接下来分析MLP块的计算，计算公式如下** ：\nx=f_{gelu}(x_{out}W_1)W_2+x_{out}\\\\\\\n**1.** 第一个线性层，矩阵乘法的输入和输出形状为 [b,s,h]\\times[h,4h]\\rightarrow[b,s,4h] 。计算量为 8bsh^2 。\n**2.** 第二个线性层，矩阵乘法的输入和输出形状为 [b,s,4h]\\times[4h,h]\\rightarrow[b,s,h] 。计算量为 8bsh^2 。\n将上述计算量相加，得到每个[Decoder层](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=Decoder%E5%B1%82&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJEZWNvZGVy5bGCIiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjMwNDk1OTY4LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjEsInpkX3Rva2VuIjpudWxsfQ.Fthq_FbgXFvSRApVBFyn4vbOWXlTIoj7otPPiadA2k4&zhida_source=entity)的计算量大约为 24bsh^2+4bs^2h 。\n此外，另一个计算量的大头是logits的计算，将[隐藏向量](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E9%9A%90%E8%97%8F%E5%90%91%E9%87%8F&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLpmpDol4_lkJHph48iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.RBgFFlUyoGtqtAYkmLlVvD2JNwXd9ips-Lk91INJJMo&zhida_source=entity)映射为词表大小。矩阵乘法的输入和输出形状为 [b,s,h]\\times[h,V]\\rightarrow [b,s,V] ，计算量为 2bshV 。\n因此，对于一个 l 层的模型，输入数据形状为 [b,s] 的情况下，一次前向计算的计算量为 l*(24bsh^2+4bs^2h)+2bshV 。\n**1.1.3 文本长度与计算量、参数量、显存的关系**\n忽略低次项，一次输入的tokens数为bs， 则计算量与参数量的关系为 \\frac{l*(24bsh^2+4bs^2h)}{bs*12lh^2} = \\frac{6h+s}{3h} ，在实际中通常 s<h (在长文本情况下，可能会出现 s>h 的情况，但影响不是决定性的)，因此该项可近似认为约等于 2。即在一次前向传递中，对于每个token，每个模型参数，需要进行2次浮点数运算(一次[乘法法运算](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E4%B9%98%E6%B3%95%E6%B3%95%E8%BF%90%E7%AE%97&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLkuZjms5Xms5Xov5DnrpciLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.vMpJNU_dcIzD1-E6A7yRUsG90byQSc3PYjlG6fztK8U&zhida_source=entity)和一次加法运算)。考虑到后向传递的计算量是前向传递的2倍。因此一次训练迭代中，对于每个 token，每个模型参数，需要进行2*3=6次浮点数运算。\n通过以上分析，我们可以得到结论：**计算量主要和模型参数和 token 数相关，在 token 总数不变时，文本长度增加并不会显著增加计算量** 。那么这就引出另一个问题：文本长度与显存的关系。\n除了模型参数、[梯度](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E6%A2%AF%E5%BA%A6&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLmoq_luqYiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.gEYvvc_cc1k042YcfwE308CZm5mKCI-xZSdinLX7ZUM&zhida_source=entity)、优化器状态外，占用显存的大头就是前向传递过程中计算得到的中间激活值。这里的**激活（activations）** 指的是：前向传递过程中计算得到的，并在后向传递过程中需要用到的所有[张量](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%BC%A0%E9%87%8F&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlvKDph48iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.iju986EAsSkgFjXz8h_j2DMhELY3yEnRh_nFD-_YjoE&zhida_source=entity)。\n先分析 Decoder layer 中 **self-attention** 的中间激活：\n**1.** 对于 Q,K,V ，需要保存它们共同的输入 x ，这就是中间激活。输入 x 的形状为 [b,s,h] ，元素个数为 bsh ，占用显存大小为 2*bsh=2bsh 。\n**2.** 对于 QK^T 矩阵乘法，需要保存中间激活 Q,K ，两个张量的形状都是 [b,s,h] ，占用显存大小合计为 2*2*bsh=4bsh 。\n**3.** 对于 softmax() 函数，需要保存函数的输入 QK^T ，占用显存大小为 2bs^2a ，这里的 a 表示注意力头数。\n**4.** 计算完 softmax() 函数后，会进行dropout操作。需要保存一个[mask矩阵](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=mask%E7%9F%A9%E9%98%B5&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJtYXNr55-p6Zi1IiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjMwNDk1OTY4LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjEsInpkX3Rva2VuIjpudWxsfQ.TZBHIXFlrIPNoHh0dotbv3gXDeHd8QRhfj_yUFUvWjQ&zhida_source=entity)，mask矩阵的形状与 QK^T 相同，占用显存大小为 bs^2a 。\n**5.** 计算在 V 上的attention，即 score\\cdot V ，需要保存 score ，大小为 2bs^2a ；以及 V ，大小为 2bsh 。二者占用显存大小合计为 2bs^2a+2bsh 。\n**6.** 计算输出[映射](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=5&q=%E6%98%A0%E5%B0%84&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLmmKDlsIQiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6NSwiemRfdG9rZW4iOm51bGx9.bQUK-5ZlzVtK66B9X5OW4Qn8Ie9gZ_I421R8WmChsyw&zhida_source=entity)以及一个dropout操作。输入映射需要保存其输入，大小为 2bsh ；dropout需要保存mask矩阵，大小为 bsh 。二者占用显存大小合计为 3bsh 。\n因此，将上述中间激活相加得到，self-attention 的中间激活占用显存大小为 11bsh+5bs^2a 。\n接下来分析分析 Decoder layer 中 **MLP** 的中间激活：\n**1.** 第一个线性层需要保存其输入，占用显存大小为 2bsh 。\n**2.** 激活函数需要保存其输入，占用显存大小为 8bsh 。\n**3.** 第二个线性层需要保存其输入，占用显存大小为 8bsh 。\n**4.** 最后有一个dropout操作，需要保存mask矩阵，占用显存大小为 bsh 。\n对于MLP块，需要保存的中间激活值为 19bsh 。\n另外，[self-attention块](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=self-attention%E5%9D%97&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJzZWxmLWF0dGVudGlvbuWdlyIsInpoaWRhX3NvdXJjZSI6ImVudGl0eSIsImNvbnRlbnRfaWQiOjIzMDQ5NTk2OCwiY29udGVudF90eXBlIjoiQXJ0aWNsZSIsIm1hdGNoX29yZGVyIjoxLCJ6ZF90b2tlbiI6bnVsbH0.PkIBOjns7YsgCNQvR_qq0T1QdI62RL4TMml_0d2ZzM8&zhida_source=entity)和MLP块分别对应了一个layer normalization。每个layer norm需要保存其输入，大小为 2bsh 。2个layer norm需要保存的中间激活为 4bsh 。\n综上，每个层需要保存的中间激活占用显存大小为 34bsh+5bs^2a 。对于 l 层transformer模型，还有embedding层、最后的输出层。embedding层不需要中间激活。总的而言，当隐藏维度 h 比较大，层数 l 较深时，这部分的中间激活是很少的，可以忽略。因此，对于 l 层模型，中间激活占用的显存大小可以近似为 (34bsh+5bs^2a)*l ，这个结果与文本长度关系密切。\n下面以GPT3-175B为例，对比下文本长度对模型参数与中间激活的显存大小的影响。假设数据类型为 FP16 。  \n| 模型名  | 参数量  | 层数  | [隐藏维度](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=2&q=%E9%9A%90%E8%97%8F%E7%BB%B4%E5%BA%A6&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLpmpDol4_nu7TluqYiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MiwiemRfdG9rZW4iOm51bGx9.HRoX1ehrXfLObSNPWZEGX1kbtfOHOkXIX3VI9J7S7uY&zhida_source=entity)  | 注意力头数  |  \n| --- | --- | --- | --- | --- |  \n| GPT3  | 175B  | 96  | 12288  | 96  |  \nGPT3的模型参数量为175B，占用的显存大小为 2\\times 175\\times 10^9bytes=350GB 。GPT3 模型需要占用350GB的显存。\n假设 GPT3 输入的 b=1 。对比不同的文本长度下占用的中间激活：\n当 s=2048 时，中间激活占用显存为 (34bsh+5bs^2a)*l=275,414,777,856bytes\\approx275GB ，大约是模型参数显存的0.79倍;\n当 s=4096 时，中间激活占用显存为 (34bsh+5bs^2a)*l=937,376,612,352 bytes \\approx 937GB ，大约是模型参数显存的2.68倍。\n可以看到长度仅仅到 4K，显存占用就出现了剧烈增加，同时 GPU 的 onchip memory 就显得更加捉襟见肘(因此也就出现了 FlashAttention 这类[算法](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%AE%97%E6%B3%95&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnrpfms5UiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.ck-bhdzh2sirTARusXnKehIkg1BE7o1hwKweDvIov8E&zhida_source=entity))。因此如何解决长文本带来的巨量显存开销成为关键及核心问题。\n### 1.2 长文本问题的解决思路\n当前，为了实现更长文本的支持，解决思路主要可以分为两个阶段：\n  * **阶段一：在预训练阶段尽可能支持更长的文本长度**\n\n\n为实现这一阶段目标，通常采用[并行化](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%B9%B6%E8%A1%8C%E5%8C%96&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlubbooYzljJYiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.mD0RcDsoHsZiSVMFNjyNUG_8tFC59q_CC0OaKf0nTlg&zhida_source=entity) (parallelism) 方法将显存占用分摊到多个 device，或者改造 attention 结构，避免显存占用与文本长度成二次关系。\n  * **阶段二：在 SFT 或推理阶段尽可能外推到更大长度**\n\n\n为实现这一阶段目标，通常也是需要在两个方面进行考虑：\n    * 对位置编码进行外推\n    * 优化 Attention 机制\n\n\n本文接下来的部分将尽可能详细深入地进行这些问题的研究。为了便于理解和接受，下文将从易到难，先介绍第二阶段的技术，然后再介绍第一阶段（同时也是考虑到直接使用[开源模型](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%BC%80%E6%BA%90%E6%A8%A1%E5%9E%8B&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlvIDmupDmqKHlnosiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.s6lgvc8-oK3nCPe1RobIRzT746cO-CMswh5EF-NHIrY&zhida_source=entity)者，不需要第一阶段的情况）。\n## 二、长文本与位置编码\n在 Transformer 结构的模型中，Attention模块的值与顺序无关，因此需要加入位置编码以确定不同位置的 token。典型的位置编码方式有两类：\n  * **[绝对位置](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%BB%9D%E5%AF%B9%E4%BD%8D%E7%BD%AE&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnu53lr7nkvY3nva4iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.pykrgdqXn9_rLhQ42ODs18USgdIeyLcob-lDO_IqX6A&zhida_source=entity) 编码：**即将位置信息融入到输入中\n  * **[相对位置编码](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%9B%B8%E5%AF%B9%E4%BD%8D%E7%BD%AE%E7%BC%96%E7%A0%81&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnm7jlr7nkvY3nva7nvJbnoIEiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.WSqnHA849jkt5XIMHxJ2k3u2_2AwGTQpmkMKpiArazc&zhida_source=entity) ：**微调Attention结构，使其能够分辨不同位置的Token\n\n\n随着文本长度的增加，位置编码也会发生相应的变化，因此处理好位置编码问题是解决长文本问题的重要环节。\n### 2.1 绝对位置编码及其外推\n一般来说，绝对位置编码会加到输入中：在输入的第 k 个输入向量 x_k 中加入[位置向量](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E4%BD%8D%E7%BD%AE%E5%90%91%E9%87%8F&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLkvY3nva7lkJHph48iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.s2FHneJ3AHc0cRXR20rAme2Ck77HxhoKBhCaObTj8TE&zhida_source=entity) p_k 得到 x_k+p_k ，其中 p_k 仅依赖于位置 k 。\n如下图所示，以二维向量为例来形象说明，图左中黑色剪头为输入向量 x_k ，蓝色箭头为位置向量 p_k（不同方法的长度与角度不同），其相加的结果为绿色箭头。在 Attention 结构中， q=(x_k+p_k)W_q, k=(x_k+p_k)W_k 即相当于同时对输入向量 x_k 和位置向量 p_k 进行线性变换，那么 attention 值则是 q 和 k 的[点积](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%82%B9%E7%A7%AF&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLngrnnp68iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.3I3_ebgq0a20mCDelK3Xh1m_rK-kpzDoW3TeVVBd6S8&zhida_source=entity)，如下图右中 q_{u+k} 和 k_{u+2k} 的注意力即黄色夹角区域。\n![](https://picx.zhimg.com/v2-e5d84f302d8b1b72081be3244c24349f_1440w.jpg)\n由于绝对位置编码由两部分组成，且两部分相互独立，因此无法计算[相对距离](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E7%9B%B8%E5%AF%B9%E8%B7%9D%E7%A6%BB&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLnm7jlr7not53nprsiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.OyinNlVH_JiE9FBQJlqw3I0wHKkIsrRPc-sCRIuft14&zhida_source=entity)。下面介绍几种典型的绝对位置编码：\n**2.1.1 训练式编码**\n这种方式最为简单直接，即把位置当做词表一样，训练一个 [max\\\\_length, hidden\\\\_size] 位置向量矩阵。这种训练式的绝对位置编码，一般的认为它没有[外推性](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%A4%96%E6%8E%A8%E6%80%A7&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlpJbmjqjmgKciLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.RLQndZIuUsxlos3wqSnKhuapmzOk5D8eFI-Ny__OsM0&zhida_source=entity)，但是苏剑林大神提出过一个层次分解的拓展方法。\n![](https://pic4.zhimg.com/v2-3e37d858ff16c22c8da90238b3129f37_1440w.jpg)\n假设已经训练好的绝对位置编码向量为 p_1, p_2, \\dots, p_n ，希望能在此基础上构造一套新的编码向量p_1, p_2, \\dots, p_m ，其中 m>n 。为此，设\n\\boldsymbol{q}_{(\\mathrm{i}-1) \\times n+j}=\\alpha\\boldsymbol{u}_{\\mathrm{i}}+(1-\\alpha) \\boldsymbol{u}_{\\mathrm{j}} \\\\\\\n其中超参 \\alpha \\in (0,0.5)\\cup (0.5,1)  ， \\boldsymbol{u}_{\\mathrm{1}}, \\boldsymbol{u}_{\\mathrm{2}}, \\dots , \\boldsymbol{u}_{\\mathrm{n}} 是该套位置编码的“基底”。为了保障 \\boldsymbol{q}_1=\\boldsymbol{p}_1, \\boldsymbol{q}_2=\\boldsymbol{p}_2, \\cdots, \\boldsymbol{q}_{\\mathrm{n}}=\\boldsymbol{p}_{\\mathrm{n}} ，这样就能反推出各个 \\boldsymbol{u}_{\\mathrm{i}} :\n\\boldsymbol{u}_{\\mathrm{i}}=\\frac{\\boldsymbol{p}_{\\mathrm{i}}-\\alpha \\boldsymbol{p}_1}{1-\\alpha}, \\quad \\mathrm{i}=1,2, \\cdots, \\mathrm{n} \\\\\\ 这样就最大可以表示出 n^2 个位置的编码，并且前 n 个位置编码跟原来模型是相容的。下图反映了经过finetune其准确率在延长的位置编码在MLM任务上是行之有效的。\n![](https://pic3.zhimg.com/v2-ca44ffedb63648c5dcad448b8707be8a_1440w.jpg)\n不同alpha下BERT MLM的训练准确率\n需要说明的是，这种矩阵式的位置编码方式在当前的大模型中已经比较少采用了，仅有 GPT2 等早期模型中采用了这种方式。\n**2.1.2[Sinusoidal 位置编码](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=Sinusoidal+%E4%BD%8D%E7%BD%AE%E7%BC%96%E7%A0%81&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJTaW51c29pZGFsIOS9jee9rue8lueggSIsInpoaWRhX3NvdXJjZSI6ImVudGl0eSIsImNvbnRlbnRfaWQiOjIzMDQ5NTk2OCwiY29udGVudF90eXBlIjoiQXJ0aWNsZSIsIm1hdGNoX29yZGVyIjoxLCJ6ZF90b2tlbiI6bnVsbH0.aeHYQ5c8oj5UaHCox1RLjrhosyK45Ucpj6-a49edH38&zhida_source=entity)**\n这种方案也是[Attention Is All You Need](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1706.03762) 中提出的方法 \\left\\\\{\\begin{array}{l} \\boldsymbol{p}_{\\mathrm{k}, 2 \\mathrm{i}}=\\sin \\left(\\mathrm{k} / 10000^{2 \\mathrm{i} / \\mathrm{d}}\\right) \\\\\\ \\boldsymbol{p}_{\\mathrm{k}, 2 \\mathrm{i}+1}=\\cos \\left(\\mathrm{k} / 10000^{2 \\mathrm{i} / \\mathrm{d}}\\right) \\end{array}\\right. \\\\\\其中 \\boldsymbol{p}_{\\mathrm{k}, 2 \\mathrm{i}}, \\boldsymbol{p}_{\\mathrm{k}, 2 \\mathrm{i+1}} 分别是位置 k 的编码向量的第 2i,2i+1 个分量， d 是位置向量的维度。\n根据以上定义，我们可以非常简单计算得到Sinusoidal位置编码的值，并绘制图像研究其规律。整体位置编码如下图所示：\n![](https://pic3.zhimg.com/v2-04b2d5d2e2ee1cc3c7a27e594329dd6c_1440w.jpg)\n首先研究 Sinusoidal **位置编码与位置** 之间的关系，绘制不同维度下，函数值与位置的关系。其曲线如下图所示， 可以从图中得到几点结论：\n  * 位置越远，频率越大\n  * 随着维度增大，函数逐渐收敛到 0 （cos 函数收敛到 1 ）\n\n\n![](https://pic1.zhimg.com/v2-dd70eafc68ce0ac63f87d9cdcdeea05a_1440w.jpg)\n位置编码值在维度偶分量下与位置的关系\n![](https://pic1.zhimg.com/v2-519fd230f2da18c42e06dcf0ec524438_1440w.jpg)\n位置编码值在维度奇分量与位置的关系\n研究 Sinusoidal **位置编码与维度分量** 之间的关系，绘制不同维度分量 i 下，函数值与位置的的关系。Sinusoidal位置编码与维度分量的关系如下图所示，可以发现结论如下：\n  * 每个分量都具有周期性，是正弦或余弦函数\n  * 越靠后的分量(i 越大)，波长越长，频率越低\n\n\n![](https://pic1.zhimg.com/v2-08f63298cb75be1e5f2d54a933f76128_1440w.jpg)\n了解了这些基本的特性后，接下来就需要讨论更加深层次的问题：\n**问题一：为什么用包含各频率的正弦和余弦对？**\n位置编码存储的是一个包含各频率的正弦和余弦对，这样做有两个好处：\n  * 可以使得不同位置的编码向量之间有一定的规律性，比如相邻位置之间的差异较小，而距离较远的位置之间的差异较大。这是由正弦和余弦[函数的连续性](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E5%87%BD%E6%95%B0%E7%9A%84%E8%BF%9E%E7%BB%AD%E6%80%A7&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLlh73mlbDnmoTov57nu63mgKciLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.OPmznu_EH4BLFvREYyhX6Juj6jfdOq0bL-IqT-OtaG4&zhida_source=entity)和单调性保证的，即对于任意两个相邻的位置，它们对应的编码向量在每一个维度上都只有微小的变化，而对于任意两个距离较远的位置，它们对应的编码向量在每一个维度上都有较大的差异。\n  * 可以使得编码向量在任意维度上都能保持唯一性，即不同位置在同一个维度上不会有相同的值。这是由正弦和余弦函数的周期性和相位差保证的，即对于任意两个不同的位置，它们对应的编码向量在每一个维度上都不相等。\n\n\n![](https://picx.zhimg.com/v2-bff9d41c72781c6842cdb9ca2fcb06f2.jpg?source=25ab7b06)\n00:11\n**问题二：底数对结果的影响是什么？**\n底数越大，位置向量能表示的序列就越长，这是大底数的好处。但是，底数大，意味着在-1到+1的范围内向量的取值越密集，造成两个位置的向量距离越近，这对后续的Self-Attention模块来说是不利的，因为它需要经历更多的训练次数才能准确地找到每个位置的信息，或者说，才能准确地区分不同的位置。长序列需要长编码。但这样又会增加计算量，特别是长编码会影响模型的训练时间。所以，那个底数并非是越大越好。\n**问题三：Sinusoidal 位置编码如何外推**\n三角函数式位置编码的特点是有显式的生成规律，因此可以期望于它有一定的外推性。另外一个使用它的理由是：由于 \\sin (\\alpha+\\beta)=\\sin \\alpha \\cos \\beta+\\cos \\alpha \\sin \\beta \\\\\\ \\cos (\\alpha+\\beta)=\\cos \\alpha \\cos \\beta-\\sin \\alpha \\sin \\beta \\\\\\ 这表明位置 \\alpha + \\beta 的向量可以表示成位置 \\alpha 和位置 \\beta 的向量组合，这提供了位置拓展的可能性。\n**2.1.3 其他的绝对位置编码**\n如递归式（如 FLOATER）和相乘式（如[PENG Bo：中文语言模型研究：(1) 乘性位置编码](https://zhuanlan.zhihu.com/p/183234823)），因使用较少，在此不予赘述。\n### 2.2 相对位置编码及其外推\n相对位置并没有完整建模每个输入的位置信息，而是在算Attention的时候考虑当前位置与被Attention的位置的相对距离，由于自然语言一般更依赖于相对位置，所以相对位置编码通常也有着更好的表现，灵活性也更大。\n**2.2.1 旋转位置编码 RoPE**\n实际上 RoPE 的诸多思想来源于 Sinusoidal 位置编码，区别在于 Sinusoidal 位置编码采用和 word embedding 相加的形式，RoPE 则采用了矩阵相乘的形式。\n在正式介绍之前，我们需要回顾一下经典的欧拉公式\ne^{i \\theta}=\\cos \\theta+i \\sin \\theta \\\\\\\n其矩阵形式为 \\left[\\begin{array}{cc} \\cos \\theta & -\\sin \\theta \\\\\\ \\sin \\theta & \\cos \\theta \\end{array}\\right] 即旋转矩阵 R(\\theta) ，这三种表现形式表达了同样的信息，即将二维向量逆时针旋转角度 \\theta 。\n![](https://pic4.zhimg.com/v2-df06063c5b9ea3e10d14d6a8d2030777_1440w.jpg)\n接下来我们直接看 RoPE 的表达式，对于位置为 m 的 q 向量，其表达式为\nf(q, m)=R_m q=\\left(\\begin{array}{cc} \\cos m \\theta & -\\sin m \\theta \\\\\\ \\sin m \\theta & \\cos m \\theta \\end{array}\\right)\\left(\\begin{array}{l} q_0 \\\\\\ q_1 \\end{array}\\right) \\\\\\即逆时针旋转了 m \\theta 度，如上图右所示。同理，位置为 n 的 k 向量的表达式为\nf(k, n)=R_n k=\\left(\\begin{array}{cc} \\cos n \\theta & -\\sin n \\theta \\\\\\ \\sin n \\theta & \\cos n \\theta \\end{array}\\right)\\left(\\begin{array}{l} k_0 \\\\\\ k_1 \\end{array}\\right) \\\\\\\n那么便可以通过点积，计算二者的 attention 值\n\\begin{aligned} & q_m \\cdot k_n=f(q, m) \\cdot f(k, n)=\\left(R_m q\\right)^T *\\left(R_n k\\right)=q^T R_m^T * R_n k \\\\\\ & =q^T\\left[\\begin{array}{cc} \\cos m \\theta & -\\sin m \\theta \\\\\\ \\sin m \\theta & \\cos m \\theta \\end{array}\\right]^T *\\left[\\begin{array}{cc} \\cos n \\theta & -\\sin n \\theta \\\\\\ \\sin n \\theta & \\cos n \\theta \\end{array}\\right] k \\\\\\ & =q^T\\left[\\begin{array}{cc} \\cos m \\theta & \\sin m \\theta \\\\\\ -\\sin m \\theta & \\cos m \\theta \\end{array}\\right] *\\left[\\begin{array}{cc} \\cos n \\theta & -\\sin n \\theta \\\\\\ \\sin n \\theta & \\cos n \\theta \\end{array}\\right] k \\\\\\ & =q^T\\left[\\begin{array}{cc} \\cos n \\theta \\cos m \\theta+\\sin n \\theta \\sin m \\theta & \\sin m \\theta \\cos n \\theta-\\sin n \\theta \\cos m \\theta \\\\\\ \\sin n \\theta \\cos m \\theta-\\sin m \\theta \\cos n \\theta & \\cos n \\theta \\cos m \\theta+\\sin n \\theta \\sin m \\theta \\end{array}\\right] k \\\\\\ & =q^T\\left[\\begin{array}{cc} \\cos (n-m) \\theta & -\\sin (n-m) \\theta \\\\\\ \\sin (n-m) \\theta & \\cos (n-m) \\theta \\end{array}\\right] k \\\\\\ & =q^T R_{n-m} k \\end{aligned}\\\\\\ 在极坐标表示下，可以更简单推导出以上结果，即 \\begin{aligned} q_m \\cdot k_n &=f(q, m) \\cdot f(k, n)=\\left(R_m q\\right)^T *\\left(R_n k\\right) \\\\\\ &=q^T R_m^T * R_n k \\\\\\ &= q^T e^{-im\\theta_d} * e^{in\\theta_d}R_n k\\\\\\ &=q^T e^{i(n-m)\\theta_d}R_n k\\\\\\ & =q^T R_{n-m} k \\end{aligned}\\\\\\ 即证明了相对位置关系，即旋转前的 attention 值与旋转后的 attention 值的差值仅与相对位置有关。这一点也可以从上图右中看出来，即旋转前 q_{u+k}, k_{u+2k} 的夹角(橙色区域) 与旋转后 q_{u+k}e^{i(u+k)\\theta _d}, k_{u+2k}e^{i(u+2k)\\theta _d} 的夹角(黄色区域) 相同，即内积也相同。\n这时我们就可以写出位置为 m 的 q 的完整的变换矩阵，即\n\\left(\\begin{array}{ccccccc} \\cos m \\theta_0 & -\\sin m \\theta_0 & 0 & 0 & \\cdots & 0 & 0 \\\\\\ \\sin m \\theta_0 & \\cos m \\theta_0 & 0 & 0 & \\cdots & 0 & 0 \\\\\\ 0 & 0 & \\cos m \\theta_1 & -\\sin m \\theta_1 & \\cdots & 0 & 0 \\\\\\ 0 & 0 & \\sin m \\theta_1 & \\cos m \\theta_1 & \\cdots & 0 & 0 \\\\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\ddots & \\vdots & \\vdots \\\\\\ 0 & 0 & 0 & 0 & \\cdots & \\cos m \\theta_{d / 2-1} & -\\sin m \\theta_{d / 2-1} \\\\\\ 0 & 0 & 0 & 0 & \\cdots & \\sin m \\theta_{d / 2-1} & \\cos m \\theta_{d / 2-1 }\\end{array}\\right)\\left(\\begin{array}{c} q_0 \\\\\\ q_1 \\\\\\ q_2 \\\\\\ q_3 \\\\\\ \\vdots \\\\\\ q_{d-2} \\\\\\ q_{d-1} \\end{array}\\right)\n从改变换矩阵也能看出，随着维度增加，旋转角度也在指数级减小，如下图所示。RoPE 的这一功能使模型可以通过从低维度到更高维度，将嵌入中编码的信息类型从低频（close）转变为高频（far）。\n![](https://pic1.zhimg.com/v2-ff10402d7be5915bb7de62f0e73d63aa_1440w.jpg)\n旋转角度随维度的变化\n**2.2.2 远程衰减问题**\n由于 RoPE 中的 attention 值除了 q,k 本身外，仅和 R_{n-m} 因子相关，那么下面考察 R_{n-m} 因子的特点\n\\begin{aligned} \\left\\langle\\boldsymbol{p}_{\\mathrm{m}}, \\boldsymbol{p}_{\\mathrm{n}}\\right\\rangle & =\\operatorname{Re}\\left[\\mathrm{e}^{\\mathrm{i}(\\mathrm{m}-\\mathrm{n}) \\theta_0}+\\mathrm{e}^{\\mathrm{i}(\\mathrm{m}-\\mathrm{n}) \\theta_1}+\\cdots+\\mathrm{e}^{\\mathrm{i}(\\mathrm{m}-\\mathrm{n}) \\theta_{\\mathrm{d} / 2-1}}\\right] \\\\\\ & =\\frac{\\mathrm{d}}{2} \\cdot \\operatorname{Re}\\left[\\sum_{\\mathrm{i}=0}^{\\mathrm{d} / 2-1} \\mathrm{e}^{\\mathrm{i}(\\mathrm{m}-\\mathrm{n}) 10000^{-\\mathrm{i} / \\mathrm{d} / 2)}} \\frac{1}{\\mathrm{~d} / 2}\\right] \\\\\\ & \\approx \\frac{\\mathrm{d}}{2} \\cdot \\operatorname{Re}\\left[\\int_0^1 \\mathrm{e}^{\\mathrm{i}(\\mathrm{m}-\\mathrm{n}) \\cdot 10000^{-\\mathrm{t}} \\mathrm{dt}}\\right] \\end{aligned} \\\\\\ 那么问题就变成了积分 \\int_0^1 \\mathrm{e}^{\\mathrm{i}(\\mathrm{m}-\\mathrm{n}) \\cdot 10000^{-\\mathrm{t}} }\\mathrm{dt} 的渐进估计问题，通过一下函数计算积分值与位置距离的关系，并分析不同 base 值的影响。\n下图展示了不同距离尺度上不同 base 值的积分结果，可以得到以下结论：\n  * 除了 base=1 外，均有明显的远程衰减特性\n  * base 越小，衰减得越快且幅度也更大\n  * base 越大，衰减得越慢且幅度也越小\n\n\n![](https://pic4.zhimg.com/v2-b1780f318f1fe2741cb44f020e730297_1440w.jpg)\n不同距离尺度上的积分结果\n**2.2.3 RoPE 长度的内插与外推**\n长度外推性是一个训练和预测的长度不一致的问题。提现有两点：\n  * 预测的时候用到了没训练过的位置编码（不管绝对还是相对）；\n  * 预测的时候注意力机制所处理的token数量远超训练时的数量。\n\n\n一旦我们在模型中有效地整合了相对位置信息，增加 LLM 上下文窗口的最直接方法就是通过位置插值 (position interpolation，PI) 进行微调。\n这种方法实现很简单，如果希望将预训练阶段的位置向量范围[0,2048] 外推到[0,4096]，只需要将对应位置缩放到原先支持的区间([0,2048])内：计算公式如下，L为原先支持的长度(如2048)，L^{'}为需要扩展的长度(如4096)：\nf^{'}(x,m)=f(x, \\frac{mL}{L^{'}}) \\\\\\\n其过程如下图所示：\n![](https://pic3.zhimg.com/v2-bc7946dd6c33b6c0046f2b839793f45e_1440w.jpg)\n下面分析一下以上操作的本质，经过这种放缩操作后，位置为 m 的 维度为 i 的旋转角变为 \\frac{mL}{L^{'}}* base^{-2 \\mathrm{i} / \\mathrm{d}} ，即线性减小了旋转弧度，如下图第一列的上图所示（横轴为位置编码，纵轴为旋转弧度）。通过这种方式插值后，向量旋转速度变慢，周期变大，频率变慢。\n除了上述的这种差值方式外，还有以下改进方式可以实现外推：\n  * **NTK-aware (Neural Tangent Kernel)**\n\n\n这种方式把旋转角修改为 m* (base*\\alpha)^{-2 \\mathrm{i} / \\mathrm{d}} ，其中 \\alpha 表示 base 的缩放因子，在 codellama 中取值为 100 。其修改的方式如下图第二列下图所示（横轴为维度，纵轴为旋转角），在不同维度上修改的程度不同。这种方式保留了高频信息，即\n  * 高频分量旋转速度降幅低，低频分量旋转速度降幅高；\n  * 在高频部分进行外推，低频部分进行内插。\n\n\n这是因为靠前的维度，在训练中见过非常多完整的旋转周期，位置信息得到了充分的训练，所以具有较强的外推能力。靠后的维度，在训练中无法见到完整的旋转周期，或者见到的旋转周期非常少，训练不够充分，外推性能弱，需要进行位置插值。\n  * **NTK-by-parts**\n\n\n该方法是基于 NTK-Aware 的优化，其核心思想是：**不改变高频部分，仅缩小低频部分的旋转弧度** 。即不改变小维度的旋转弧度，仅减小大维度的旋转弧度，这就是by-patrs的含义。\n第 i 个维度的旋转周期为： \\lambda_i=\\frac{2 \\pi}{\\theta_i}=2 \\pi * {ba s e} ^{2 i / d}\n其在训练长度内旋转的周期个数如下： r_i=\\frac{L}{\\lambda_i}\n引入超参数 \\alpha,\\beta ，表示旋转周期个数的约束条件，定义[斜坡函数](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E6%96%9C%E5%9D%A1%E5%87%BD%E6%95%B0&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLmlpzlnaHlh73mlbAiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.xXBiMckmfVzTCx2QvRNf790ziqMOss43rErzGOdOxi8&zhida_source=entity)\n\\gamma(r_i)= \\begin{cases}0, & \\text { if } r_i<\\alpha \\\\\\ 1, & \\text { if } r_i>\\beta \\\\\\ \\frac{r_i-\\alpha}{\\beta-\\alpha}, & \\text { otherwise }\\end{cases} \\\\\\\n当 r_i < \\alpha ，旋转周期数量少，则为低频分组，仅进行线性插值。\n当 \\alpha \\leq r_i \\leq \\beta , 选择周期介于二者之间，类似于“NTK-aware”插值\n当 r_i > \\beta ，旋转周期数量足够多，则认为该维度为高频部分，无需改变。\n综合以上条件，调整后的旋转角可以表示为 h\\left(\\theta_i\\right)=(1-\\gamma(r_i)) \\frac{\\theta_i}{s}+\\gamma(r_i) \\theta_i\n其中 s=\\frac{L'}{L} , 超参数的经验取值为 \\alpha=1,\\beta=32\n  * **Dynamic NTK**\n\n\n这是是一种动态插值的方法：当推理长度小于等于训练长度时，不进行插值；推理长度大于训练长度时，每一步都通过NTK-Aware Interpolation动态放大base。\nl 表示当前的序列长度， L 表示模型训练长度，\n当 l\\leq L 时，不调整旋转角\n当 l> L 时，旋转角调整为 m* (base*\\alpha)^{-2 \\mathrm{i} / \\mathrm{d}} ，其中 \\alpha = (\\frac{l}{L})^{d/(d-2)}\n需要说明的是下图最后一列下图的粗线表示一个范围，未体现出与长度的动态联动。\n![](https://pic3.zhimg.com/v2-89a833b969a6420e488a7c2e1fb61be0_1440w.jpg)\nPI 及其改进方案\n  * **[YaRN](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2309.00071.pdf)**\n\n\n无论是PI还是NTK类方法，本质都是通过减小旋转弧度，降低旋转速度，来达到长度扩展的目的。**这将导致位置之间的旋转弧度差距变小，[词向量](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E8%AF%8D%E5%90%91%E9%87%8F&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLor43lkJHph48iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.Q9N1j9ISZpkXt_cpyrMdOYBWOz5rUS_Ri7SudeNALdg&zhida_source=entity)之间的距离变得比原来更近，词向量之间的点乘变大，破坏模型原始的注意力分布**。所以经过插值之后，模型在原来的训练长度内的困惑度均有所提升，性能受损。\nYaRN本质上是NTK-by-parts Interpolation与注意力分布修正策略的结合，仅缩小低频部分的旋转弧度，且通过温度系数修正注意力分布。只需将原来的注意力分数除以温度 t 即可。\\frac{\\mathbf{q}_m^T \\mathbf{k}_n}{\\sqrt{|d|}} \\rightarrow \\frac{\\mathbf{q}_m^T \\mathbf{k}_n}{t \\sqrt{|d|}}，~~~~~where ~~\\sqrt{\\frac{1}{t}}=0.1*\\mathrm{ln}\\left(\\frac{L^{'}}{L}\\right)+1 \\\\\\\n以LLaMA为例，当长度从2048扩展至16384时，长度扩展为原来的8倍，代入公式，计算得到t=0.6853。回顾温度系数对注意力分布的影响，当t变大，注意力分布更加平滑，方差更小；当t变小，注意力分布更加尖锐，区分度变大，方差变大。**t=0.6853** 意味着缓解注意力分布过于平滑的问题，让注意力分布方差更大。\n需要说明的是，论文 [Scaling Laws of RoPE-based Extrapolation](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/2310.05209) 中深入研究了 RoPE 位置编码的特性，其结论就是：RoPE 中 base 的放大和缩小都能获得很好的外推效果(base=10K 效果最差)。原因在于：\n  * 当 base 较小时(如 500)，RoPE 的三角函数周期变短，训练时就可以见过完整的 cos/sin 值域；\n  * 当 base 较大时(如 1000000)，RoPE 的三角函数周期变长，训练时虽然不能见过完整的 cos/sin 值域，但是外推时仍处于单调区间。\n\n\n**2.2.4 其他形式的编码方式及其外推**\n在苏神的文章[Transformer升级之路：12、无限外推的ReRoPE？](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/9708)中指出：RoPE 形式上是一种绝对位置编码，但实际上给 Attention 带来的是相对位置信息，即如下的[Toeplitz矩阵](https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Toeplitz_matrix)：\n\\left(\\begin{array}{ccccccccc} 0 & & & & & & & & \\\\\\ 1 & 0 & & & & & & & \\\\\\ 2 & 1 & 0 & & & & & & \\\\\\ 3 & 2 & 1 & 0 & & & & & \\\\\\ \\ddots & 3 & 2 & 1 & 0 & & & & \\\\\\ \\ddots & \\ddots & 3 & 2 & 1 & 0 & & & \\\\\\ \\ddots & \\ddots & \\ddots & \\ddots & \\ddots & \\ddots & \\ddots & & \\\\\\ L-2 & \\ddots & \\ddots & \\ddots & \\ddots & \\ddots & \\ddots & \\ddots & \\\\\\ L-1 & L-2 & \\ddots & \\ddots & \\ddots & 3 & 2 & 1 & 0 \\end{array}\\right) \\\\\\ 这么这种形式的 bias 似乎有种似曾相识的感觉，没错，就是 [ALiBi](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2108.12409.pdf) 编码。严格来说，ALiBi 并不算位置编码，因为它并没有作用在 embedding 上，而是直接作用在了 Attention 上，通过这种构造方式既实现了远程衰减，又实现了位置的相对关系。\n![](https://pic2.zhimg.com/v2-e8ab794912ba4ff504c708e4acfc25b7_1440w.jpg)\nALiBi 的作用原理\n对于外推特性，ALiBi 与前文所述的方法也是不同的，体现在：\n  * **事后修改** ，比如[NTK-RoPE](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/9675)、[YaRN](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/2309.00071)、[ReRoPE](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/9708)等，这类方法的特点是直接修改推理模型，无需微调就能达到一定的长度外推效果，但缺点是它们都无法保持模型在训练长度内的恒等性\n  * **事前修改** ，如[ALIBI](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/9431%23ALIBI)、[KERPLE](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/9431%23KERPLE)、[XPOS](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/9431%23XPOS)以及[HWFA](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/9603)等，它们可以不加改动地实现一定的长度外推，但相应的改动需要在训练之前就引入，因此无法不微调地用于现成模型\n\n\n## 三、长文本与 Attention 机制\nAttention 机制也是制约长文本实现的重要因素，以下是几种典型的 Attention 的 方式：\n![](https://pic3.zhimg.com/v2-adcbc90282d8925b28f906a83c6b4da0_1440w.jpg)\n关于 Attention 机制改进的更多类型和细节，笔者在之前的文章中已经有所讨论，可参考：\n[](https://zhuanlan.zhihu.com/p/659770503)\n在此主要想介绍一个方案 —— [LongLora](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2309.12307.pdf) 。\n回顾第一节中研究的结论，长文本影响最大的就是 self-attention 中的，随长度二次变化的显存占用和计算复杂度。为解决这个问题，LongLora 的原则是，虽然在推理过程中需要密集的全局注意力，但通过稀疏的局部注意力可以有效且高效地微调模型。\nLongLora 在微调期间延长上下文长度，同时使用 Lora 方法保持高性能和低复杂性。其中最关键的是提出了**转移短注意力（S2-Attn）** 方案。下面简要介绍这一方案：\nS2-Attn 在微调阶段使用局部注意力而不是全局注意力。即将输入文档分解为几个不同的组，并在每个组中分别应用注意力机制（Pattern 1）。尽管这种方式能够在资源占用不多的情况下拓展长度，由于不同组之间缺乏信息交换，随着上下文长度的增加，会导致混乱增加。\n为了解决上述问题，S2-Attn 引入了组大小一半的移位操作，确保相邻组之间顺利的信息交换（Pattern 2）。这种做法有助于模型在文本开头和结尾之间顺利交换信息，从而提高模型稳定性。\n![](https://pic4.zhimg.com/v2-5a46563023e1957c06df37f6f94adf19_1440w.jpg)\nLongLora 整体框架\n而本文提出的 shift short attention 有一半的 head 会被做 shift，如下图所示，然后每个 group 内作 self-attention，从而使信息可以在不同 group 间传递。这种做法实际上将 Pattern 1 和 Pattern 2 结合起来，而没有引入额外的计算开销，使其非常适合高效处理长序列文本。\n![](https://pic4.zhimg.com/v2-f0ebf7b23f96fb1066a8cc69bc57e573_1440w.jpg)\nshift short attention 原理\n此外，LongLoRA相比于Lora还可以微调embedding层和normalization层。尽管这两项内容占的参数量很小（以Llama 2-7B为例，embedding层只占1.94%，normalization层更是不到十万分之四），对结果也起到了重要作用。\n## 四、长文本的预训练方法\n上两节主要介绍了如何在位置编码和 attention 机制方面进行文本长度的有效拓展，这两个方面都是“经济适用性”的，即只需要简单微调或者直接外推即可，接下来将是最困难，也是成本最高的部分，即讨论如何在预训练阶段提高文本长度。\n为解决预训练过程中的长文本问题，思路主要有以下几个方面：\n  * 并行化计算，典型方法如 [sequence parallelism](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2105.13120.pdf)\n  * 优化 attention 机制，典型方法如 [Transformer-XL](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1901.02860), [Longformer](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2004.05150.pdf)\n  * 引入 memory 机制，典型方法如 [Focused Transformer](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2307.03170.pdf), [Memorizing Transformer](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2203.08913.pdf)\n  * 引入采样机制，典型方法如 [Hierarchical transformers](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/2110.13711), [Dynamic-Pooling Transformer](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2211.09761.pdf)\n\n\n由于笔者精力有限，下面仅选取其中部分方法加以介绍。\n### 4.1 序列并行(sequence parallel)\n在并行化算法大行其道的今天，使用改思想来解决长文本问题变得自然而言，实际上 SP 已逐渐成为 3D(DP, PP, TP)并行之外的第 4 个维度了。关于序列并行，笔者在以下文中进行过详细讨论\n[](https://zhuanlan.zhihu.com/p/14665512019)\n在此仅介绍最简单的一种做法，SP 就是将一段完整的文本拆分到多个设备上进行计算，设备在适当的时候进行通信和信息交互，如下图(c) 所示。\n![](https://pic1.zhimg.com/v2-18df562662aaab801c4704d6a5e97188_1440w.jpg)\n在实现层面，借鉴了 Ring-Allreduce 的思想，将输入序列分割成多个块，并将每个块输入到其相应的设备中。为了计算注意力输出，将环状通信与自注意力计算相结合，实现了环自注意力（RSA），如下图所示。\n![](https://pic4.zhimg.com/v2-e073eaae839cd76bff161be8d92a2489_1440w.jpg)\n下面我们来深度理解一下这个过程，论文中的符号表示为\n  * B: batch size\n  * L: sequence length\n  * H: hidden size of linear layers\n  * A: attention head size\n  * Z: number of attention heads\n  * N: number of GPUs\n\n\n对于 Ring-Q K^\\top **：[B,Z,\\frac{L}{N},A] \\times [B,Z,A,\\frac{L}{N}] \\rightarrow (all-gather)[B,Z,\\frac{L}{N},L]** **，**\n切分后的每一个小块 \\frac{L}{N} ，在和 k^{T} 矩阵乘后得到 [\\frac{L}{N}, \\frac{L}{N}] 需要在切分维度做补全才可以得到每一个小块  \\frac{L}{N} 的完整结果，在后续进行 softmax 操作。故需要做 ring 操作达到一个 concat 的操作。\n对于 Ring-AV **：** [B,Z,\\frac{L}{N},L](reduce-scatter) \\times [B,Z,\\frac{L}{N},A] \\rightarrow [B,Z,\\frac{L}{N},A] ，\n需要完整对 softmax 结果进行 value 查询，需要对 [B,Z,\\frac{L}{N},L] 根据序列并行度进行分块，用对应的块在对应的 value 上查询并求和，故也需要做 ring 操作。\n![](https://picx.zhimg.com/v2-730a59eaf0676f46dd2a65857471efd1_1440w.jpg)\nMLP 部分的计算就更简单了，如下所示：\n![](https://pic1.zhimg.com/v2-62bcfb50cc1c9436c428e877faacbdf0_1440w.jpg)\n### 4.2 LongLLaMA (Focused Transformer)\nLongLLaMA 通过引入 Focused Transformer（FOT）方法，在保持性能的同时，将 LLaMA 的上下文长度扩展到100k！在长文本的情况下，除了第一节所研究的显存和计算量的问题外，这篇论文还提出了一个分心问题（Distraction Issue），即随着文本长度的增加，其中相关的 tokens 对不相关 tokens 的比例会减少，从而导致与不相关 value 相关的 key 和与相关 value 相关的 key 发生重叠，致使模型需要额外区分不同语义的 key 。\n为此文章提出了 **Focused Transformer** （FOT）解决方案，其中主要使用了 Memory Attention Layers 以及 CrossBatch 技术，在 Inference 的过程中，绿色的 Memory Attention Layers 使用 kNN 对外部的 Memory 进行查询，从而有效延长了上下文长度，而 Memory Attention Layers 则主要使用 CrossBatch 进行训练。\n![](https://pica.zhimg.com/v2-c37988cdcbd7814362c6815038c960b8_1440w.jpg)\n具体而言，Memory Attention Layers 中的每个 query 在  \\in  中会关注局部的上下文以及 Memory 中使用 kNN 计算出的最匹配的 k 个key，而整个 Memory 则根据 之前处理的 key，value 进行填充。而 CrossBatch 则期望使得 Memory Attention Layers 更加关注长文本之中的“相关 value 的 key” ，CrossBatch 的处理借鉴了对比学习的思想，以相关文档之中的 d-1 个上下文作为正样本，以不相关文档之中的 d-1 个上下文作为负样本，通过对比学习的方式使得 Memory Attention Layers 可以更好的分辨相关与无关的 key-value。\n与标准的 Transformer 相比，一般的 Transformer 的训练过程中，相关与不相关文档没有被得到有效区分（正负样本分散均匀），当文档数量扩展时，注意力变得越来越分散，而 Focused Transformer 则通过 CrossBatch 的训练目标使得模型有效的关注与区分的长文本下的相关与无关的 key-value 的空间结构，从而解决了分心的问题。\n## 五、长文本的效果评估\n### 5.1 PPL\n对于 LLM 来说，其效果通常是通过生成连贯且上下文相关的文本的能力来衡量的。为了量化和衡量这一指标，困惑度 (Perplexity, PPL) 便成了最常见的指标。\nPPL 是一种衡量标准，反映模型根据前面的上下文预测下一个单词的能力。PPL 分数越低，模型准确预测下一个单词的能力就越好。\nPPL 是使用平均[交叉熵](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E4%BA%A4%E5%8F%89%E7%86%B5&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLkuqTlj4nnhrUiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.S2J4UpTHfweTBTYpU6f5iXbzdL0WMLEMxXcs_9n-a64&zhida_source=entity)计算的，而平均交叉熵又是使用数据集中的单词数量和根据前面的上下文预测的单词（目标单词）的概率来计算的。前面的上下文通常由目标单词之前的固定长度单词序列表示。其公式如下：\nPPL = e^H 其中H是平均交叉熵， H=-\\frac{1}{N} \\sum_{i=1}^N \\log _2\\left(P\\left(w_i \\mid w_1, w_2, \\ldots, w_{i-1}\\right)\\right)\nPPL 作为一种客观的评估指标被广泛用来进行 LLM 的评估。但是其也存在一些问题和不足：\n  * 模型词汇量可能会不公平地影响PPL：PPL 在很大程度上依赖于模型的词汇量及其概括未见过的单词的能力。如果模型遇到训练数据中不存在的单词或短语，即使生成的文本有意义，其 PPL 分数也较高。\n  * 缺乏主观性考虑：PPL 是一种客观指标，不考虑主观因素，例如风格、创造力或特定环境下的适当性。\n  * 上下文理解：PPL 主要关注于根据前面的上下文预测下一个单词。然而，它可能无法捕捉模型对更广泛背景的整体理解。\n  * 语言歧义和创造力：PPL 并不能体现模型处理语言歧义或生成创造性和新颖输出的能力。\n  * 领域特异性：PPL 对训练数据的领域和分布很敏感。在特定领域训练的模型可能会在其领域内实现较低的复杂性，但可能需要帮助在其训练环境之外生成文本。\n  * [过度拟合](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=%E8%BF%87%E5%BA%A6%E6%8B%9F%E5%90%88&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiLov4fluqbmi5_lkIgiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzA0OTU5NjgsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.spqpQ9vf1a1LlC-h4Hx2FJ6881FOVmVIroQ4UEt_PZA&zhida_source=entity)和泛化：PPL可能会受到过度拟合的影响，其中模型在训练数据上表现得非常好，但很难泛化到看不见的或现实世界的例子。\n\n\n实际上，StreamingLLM 就很好地证明了 PPL 的局限性，因为尽管 StreamingLLM 的 PPL 值较低，但是由于其损失了大量中间信息，因此无法在“大海捞针”等测试方法中有较好的表现。\n### 5.2 “大海捞针”\n“大海捞针” 由 Greg Kamradt 提出的大模型长文本性能测试方法，其做法是在文本语料中藏入一个与文本语料不相关的句子，然后看大模型能不能通过自然语言提问的方式（Prompt）把这句话准确地提取出来。Greg Kamradt 的“大海捞针”实验简述：\n> “大海”：Paul Graham 的文章合集作为语料  \n> “针”：“The best thing to do in San Francisco is eat a sandwich and sit in [Dolores](https://zhida.zhihu.com/search?content_id=230495968&content_type=Article&match_order=1&q=Dolores&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzk1MjMsInEiOiJEb2xvcmVzIiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjMwNDk1OTY4LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjEsInpkX3Rva2VuIjpudWxsfQ.RE4qLFi_makziPOlLxYyrJHXTptBKc0Li24bb7GyJ1A&zhida_source=entity) Park on a sunny day.”  \n> 提问：\"What is the most fun thing to do in San Francisco based on my context? Don't give information outside the document\"  \n> 期待模型输出的正确答案：  \n> The best thing to do in San Francisco is eat a sandwich and sit in Dolores Park on a sunny day.\nGreg Kamradt 公布了他对 GPT-4 Turbo（128K）和 Claude 2.1 的测试结果：\n  * GPT-4 Turbo（128K）在语料长度超过 72K 且句子（“针”）藏在文本头部的时候，准确率不佳。\n\n\n![](https://pic1.zhimg.com/v2-91ac7e60a71df5b421629515f879b3b8_1440w.jpg)\n  * Claude 2.1似乎在语料长度超过20K之后就开始准确率不佳，而且句子（“针”）藏在语料靠前的位置时，准确率尤其差。\n\n\n![](https://pic2.zhimg.com/v2-a102439233070863a0c065938a8532b1_1440w.jpg)\n  * 进一步的，Anthropic发现可以**通过简单的prompt提示就可以提高模型不愿意回答不相关内容的效果** ，即让模型回答问题之前，加上一句“**Here is the most relevant sentence in the context:** ”即可大幅提升模型回答效果，改进模型不愿意回答不相关内容的水平。\n\n\n![](https://pic1.zhimg.com/v2-6efcc5fa8e6531851b3ce49dfbe2bcd4_1440w.jpg)\n  * 此外国内的 Moonshot AI 的长文本模型 Kimi Chat 也在“大海捞针”实验中发挥了令人惊艳的表现，原始报道见[这里](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/IC5-FGLVHzHHYqH6x-aNng) 。\n\n\n![](https://pica.zhimg.com/v2-871e34b41acbbbb453ca00f6bd4f25c6_1440w.jpg)\n  * Qwen-72B-Chat 也进行了“大海捞针”实验，测试模型在不同长度的输入下，是否能检索到文章不同位置的信息，结果同样表现良好，如下：\n\n\n![](https://pic2.zhimg.com/v2-0057ea4295f77c3a9ebf4b459b3f6421_1440w.jpg)\n## 参考资料\n[1] [Kimi Chat 公布“大海捞针”长文本压测结果，也搞清楚了这项测试的精髓 (qq.com)](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/IC5-FGLVHzHHYqH6x-aNng)\n[2] [分析transformer模型的参数量、计算量、中间激活、KV cache - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/624740065)\n[3] [https://medium.com/@ddxzzx/why-and-how-to-achieve-longer-context-windows-for-llms-5f76f8656ea9](https://link.zhihu.com/?target=https%3A//medium.com/%40ddxzzx/why-and-how-to-achieve-longer-context-windows-for-llms-5f76f8656ea9)\n[4] [图解RoPE旋转位置编码及其特性](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/-1xVXjoM0imXMC7DKqo-Gw)\n[5] [RoPE外推的缩放法则 —— 尝试外推RoPE至1M上下文 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/660073229)\n[6] [Transformer升级之路：1、Sinusoidal位置编码追根溯源 - 科学空间|Scientific Spaces](https://link.zhihu.com/?target=https%3A//spaces.ac.cn/archives/8231)\n[7] [让研究人员绞尽脑汁的Transformer位置编码 - 科学空间|Scientific Spaces](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/8130)\n[8] [层次分解位置编码，让BERT可以处理超长文本](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/7947)\n[9] [理解Transformer的位置编码_51CTO博客_transformer的位置编码](https://link.zhihu.com/?target=https%3A//blog.51cto.com/u_15588078/6531187)\n[10] [NTK-Aware Scaled RoPE allows LLaMA models to have extended (8k+) context size without any fine-tuning and minimal perplexity degradation. : r/LocalLLaMA (reddit.com)](https://link.zhihu.com/?target=https%3A//www.reddit.com/r/LocalLLaMA/comments/14lz7j5/ntkaware_scaled_rope_allows_llama_models_to_have/%3Frdt%3D44479)\n[11] [EXTENDING CONTEXT WINDOW OF LARGE LANGUAGE MODELS VIA POSITION INTERPOLATION](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2306.15595.pdf)\n[12] [详解基于调整RoPE旋转角度的大模型长度外推方法 (qq.com)](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/RtI95hu-ZLxGkdGuNIkERQ)\n[13] [Transformer升级之路：15、Key归一化助力长度外推 - 科学空间|Scientific Spaces](https://link.zhihu.com/?target=https%3A//kexue.fm/archives/9859)\n[14] [2309.12307.pdf (arxiv.org)](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2309.12307.pdf)\n[15] [GitHub - dvlab-research/LongLoRA: Code and documents of LongLoRA and LongAlpaca](https://link.zhihu.com/?target=https%3A//github.com/dvlab-research/LongLoRA)\n[16] [大模型分布式训练并行技术（五）-序列并行 (qq.com)](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/_SB5saeszza1Dmzs7n8iGQ)\n[17] [羊驼再度进化，“长颈鹿版”LongLLaMA 来啦，上下文长度冲向 100K ，性能不减](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/OysnthTQXPG_AqogQtnIcw)\n[18] [https://twitter.com/GregKamradt/status/1727018183608193393](https://link.zhihu.com/?target=https%3A//twitter.com/GregKamradt/status/1727018183608193393)\n[19] [LLaMA长度外推高性价比trick：线性插值法及相关改进源码阅读及相关记录](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/zyUDKc8VgeDvK4AQTCmfGg)\n[20] [Length Extrapolation of Transformers: A Survey from the Perspective of Position Encoding](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2312.17044.pdf)\n> 况属高风晚，山山黄叶飞。 —— 王勃《山中》\n编辑于 2025-06-22 06:08・上海\n[LLM](https://www.zhihu.com/topic/20660508)\n[GPT-4](https://www.zhihu.com/topic/26658420)\n[Llama 2](https://www.zhihu.com/topic/28100718)\n​赞同 443​​28 条评论​715 ​63 \n​分享\n​申请转载​\n​\n![](https://pic1.zhimg.com/v2-d41c2ceaed8f51999522f903672a521f_l.jpeg)\n未登录用户\n  \n\n28 条评论\n默认\n最新\n[![余沾](https://pic1.zhimg.com/v2-abed1a8c04700ba7d72b45195223e0ff_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/6848c0d08604c418ea3c32025b729e76)\n[余沾](https://www.zhihu.com/people/6848c0d08604c418ea3c32025b729e76)\n计算量跟token数相关，不就等于跟文本长度相关吗，为什么说跟文本长度不相关呢\n2024-04-04 · 广东\n​回复​5\n[![紫气东来](https://picx.zhimg.com/v2-af1c72506a7ac445b11f3b518e47bbd1_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n[紫气东来](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n作者​![](https://pic1.zhimg.com/v2-2ddc5cc683982648f6f123616fb4ec09_l.png?source=32738c0c)\n这个非决定性影响是针对计算预算而言的哈\n2024-04-04 · 上海\n​回复​喜欢\n展开其他 1 条回复​\n[![WhatABurger](https://pica.zhimg.com/v2-c12c285c8ef924eae1dce514921c5b95_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/e475711e6dbf51046ce3e16e41fe1775)\n[WhatABurger](https://www.zhihu.com/people/e475711e6dbf51046ce3e16e41fe1775)\n你好 想请教一下：统计计算量的部分 第一步计算QKV为什么不用考虑词表大小呢？ 第二、三步的矩阵维度变换可以再稍微解释下吗？ 另外后向计算量是前向的两倍，是因为adam引入两个额外参数的原因吗？感谢🙏\n2023-12-29 · 北京\n​回复​2\n[![紫气东来](https://pic1.zhimg.com/v2-af1c72506a7ac445b11f3b518e47bbd1_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n[紫气东来](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n作者​![](https://pic1.zhimg.com/v2-2ddc5cc683982648f6f123616fb4ec09_l.png?source=32738c0c)\n1.词表大小与QKV 的计算无关，相关的只是 hidden_size  \n2.关于反向和前向的计算量的关系可参考[回旋托马斯x：浅谈后向传递的计算量大约是前向传递的两倍](https://zhuanlan.zhihu.com/p/675517271)\n2024-01-10 · 上海\n​回复​2\n[![可爱啊](https://picx.zhimg.com/v2-821a10c36b0e75e8065fa97f50b54048_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/c5ad9a855dda9b5d0e79bd9c3e19bcea)\n[可爱啊](https://www.zhihu.com/people/c5ad9a855dda9b5d0e79bd9c3e19bcea)\n算QKV激活值时，显存怎么还*2了\n2025-06-02 · 北京\n​回复​喜欢\n展开其他 1 条回复​\n[![深度眸](https://picx.zhimg.com/v2-97cf08656c6945500058dd98088c9865_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/87daebf1f29667deb2b47591b3b5df94)\n[深度眸](https://www.zhihu.com/people/87daebf1f29667deb2b47591b3b5df94)\n​![](https://pica.zhimg.com/v2-2ddc5cc683982648f6f123616fb4ec09_l.png?source=32738c0c)\n写的很好\n2024-11-02 · 上海\n​回复​喜欢\n[![jack](https://pic1.zhimg.com/v2-abed1a8c04700ba7d72b45195223e0ff_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/0b93b9e6a57e0d815e8dd86875b5565b)\n[jack](https://www.zhihu.com/people/0b93b9e6a57e0d815e8dd86875b5565b)\n问题二：底数对结果的影响是什么？ 这里的底数是指哪个？\n2024-07-26 · 北京\n​回复​喜欢\n[![紫气东来](https://pic1.zhimg.com/v2-af1c72506a7ac445b11f3b518e47bbd1_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n[紫气东来](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n作者​![](https://pic1.zhimg.com/v2-2ddc5cc683982648f6f123616fb4ec09_l.png?source=32738c0c)\nbase\n2024-07-26 · 上海\n​回复​喜欢\n[![jack](https://picx.zhimg.com/v2-abed1a8c04700ba7d72b45195223e0ff_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/0b93b9e6a57e0d815e8dd86875b5565b)\n[jack](https://www.zhihu.com/people/0b93b9e6a57e0d815e8dd86875b5565b)\n如下图第一列的上图所示....这是个什么图？\n2024-07-25 · 辽宁\n​回复​喜欢\n[![HERODING23](https://pic1.zhimg.com/v2-4d4445b35d140a0561584546bf3f7919_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/c565825935f41fca1cab6a370cb96722)\n[HERODING23](https://www.zhihu.com/people/c565825935f41fca1cab6a370cb96722)\n“高频分量旋转速度降幅低，低频分量旋转速度降幅高”是不是写反了？\n2024-05-21 · 上海\n​回复​喜欢\n[![紫气东来](https://pic1.zhimg.com/v2-af1c72506a7ac445b11f3b518e47bbd1_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n[紫气东来](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n作者​![](https://pic1.zhimg.com/v2-2ddc5cc683982648f6f123616fb4ec09_l.png?source=32738c0c)\n没写反哈，你可以结合 NTK-by-part 再理解一下\n2024-05-21 · 上海\n​回复​喜欢\n展开其他 2 条回复​\n[![Xi Wang](https://picx.zhimg.com/v2-81960f4538303631a08d09901efe92c6_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/de354f38a9fbc2e37c056e8e5ceeaf8d)\n[Xi Wang](https://www.zhihu.com/people/de354f38a9fbc2e37c056e8e5ceeaf8d)\n1.1.2里面为啥都要乘2\n2024-05-11 · 广东\n​回复​喜欢\n[![紫气东来](https://pic1.zhimg.com/v2-af1c72506a7ac445b11f3b518e47bbd1_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n[紫气东来](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n作者​![](https://pic1.zhimg.com/v2-2ddc5cc683982648f6f123616fb4ec09_l.png?source=32738c0c)\n矩阵运算包含乘、加两部分哈，更多可参考 [紫气东来：CUDA（三）：通用矩阵乘法：从入门到熟练](https://zhuanlan.zhihu.com/p/657632577)\n2024-05-21 · 上海\n​回复​1\n展开其他 1 条回复​\n[![易二三](https://picx.zhimg.com/v2-5bbc27d0a3fdf9c372ea88d584681f0e_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/c8953183cee3c9a2f1008b4360d61f34)\n[易二三](https://www.zhihu.com/people/c8953183cee3c9a2f1008b4360d61f34)\n请问2.2.3节的f'(x, m)公式体现在代码中是如何改呢，比如LlamaRotaryEmbedding，原始max_position_embeddings=2048，我想扩展到16k，只把这个参数改成16k然后准备相应的数据进行微调就算是通过位置插值(PI)在增加 LLM 上下文窗口吗？\n2024-01-08 · 北京\n​回复​喜欢\n[![紫气东来](https://pica.zhimg.com/v2-af1c72506a7ac445b11f3b518e47bbd1_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n[紫气东来](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n作者​![](https://pic1.zhimg.com/v2-2ddc5cc683982648f6f123616fb4ec09_l.png?source=32738c0c)\n线性插值的代码实现可以参考以下代码哈：  \nclass LlamaLinearScaledRotaryEmbedding(torch.nn.Module):  \ndef __init__(self, dim, max_position_embeddings=2048, base=10000, scale=1, device=None):  \nsuper().__init__()  \n# 相比RoPE增加scale参数  \nself.scale = scale  \n# inv_freq为基值向量  \ninv_freq = 1.0 / (base ** (torch.arange(0, dim, 2).float().to(device) / dim))  \nself.register_buffer(\"inv_freq\", inv_freq)  \n  \n# Build here to make `torch.jit.trace` work.  \nself.max_seq_len_cached = max_position_embeddings  \n# 构建max_seq_len_cached大小的张量t  \nt = torch.arange(self.max_seq_len_cached, device=self.inv_freq.device, dtype=self.inv_freq.dtype)  \n# 张量t归一化，RoPE没有这一步  \nt /= self.scale  \n# einsum计算频率矩阵  \n# 'i, j->i j’表示分别输入尺寸为[i]、[j]的向量，做笛卡尔运算得到尺寸为[i, j]的矩阵。  \nfreqs = torch.einsum(\"i,j->ij\", t, self.inv_freq)  \n# Different from paper, but it uses a different permutation in order to obtain the same calculation  \n# 在-1维做一次拷贝、拼接  \nemb = torch.cat((freqs, freqs), dim=-1)  \ndtype = torch.get_default_dtype()  \n# 注册为模型的缓冲区cos_cached和sin_cached  \nself.register_buffer(\"cos_cached\", emb.cos()[None, None, :, :].to(dtype), persistent=False)  \nself.register_buffer(\"sin_cached\", emb.sin()[None, None, :, :].to(dtype), persistent=False)  \n  \ndef forward(self, x, seq_len=None):  \n# x: [bs, num_attention_heads, seq_len, head_size]  \n# This `if` block is unlikely to be run after we build sin/cos in `__init__`. Keep the logic here just in case.  \n# seq_len为序列长度，seq_len大于max_seq_len_cached，则重新计算频率矩阵，并更新cos_cached和sin_cached的缓冲区  \nif seq_len > self.max_seq_len_cached:  \nself.max_seq_len_cached = seq_len  \nt = torch.arange(self.max_seq_len_cached, device=x.device, dtype=self.inv_freq.dtype)  \nt /= self.scale  \nfreqs = torch.einsum(\"i,j->ij\", t, self.inv_freq)  \n# Different from paper, but it uses a different permutation in order to obtain the same calculation  \nemb = torch.cat((freqs, freqs), dim=-1).to(x.device)  \nself.register_buffer(\"cos_cached\", emb.cos()[None, None, :, :].to(x.dtype), persistent=False)  \nself.register_buffer(\"sin_cached\", emb.sin()[None, None, :, :].to(x.dtype), persistent=False)  \n# 长度裁剪：返回cos_cached和sin_cached中与seq_len（序列长度）  \nreturn (  \nself.cos_cached[:, :, :seq_len, ...].to(dtype=x.dtype),  \nself.sin_cached[:, :, :seq_len, ...].to(dtype=x.dtype),  \n)\n2024-01-08 · 上海\n​回复​1\n展开其他 1 条回复​\n[![藏鸿涧](https://picx.zhimg.com/v2-488b3312e708e7167976762c4cff57d6_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/0c8731d3cd69a51cd1a71a3c1ad29584)\n[藏鸿涧](https://www.zhihu.com/people/0c8731d3cd69a51cd1a71a3c1ad29584)\n很棒![\\[爱\\]](https://pic1.zhimg.com/v2-0942128ebfe78f000e84339fbb745611.png)不过2.1里三角函数关于位置和维度的图像是不是反了？\n2023-12-21 · 北京\n​回复​喜欢\n[![紫气东来](https://picx.zhimg.com/v2-af1c72506a7ac445b11f3b518e47bbd1_l.jpg?source=06d4cd63)](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n[紫气东来](https://www.zhihu.com/people/530f3ed7d43225fbc458b7c81e657ee4)\n作者​![](https://pic1.zhimg.com/v2-2ddc5cc683982648f6f123616fb4ec09_l.png?source=32738c0c)\n没有反哈，绘图具体实现在[https://github.com/ifromeast/AI_analysis/blob/main/sinusoidal_position.ipynb](http://link.zhihu.com/?target=https%3A//github.com/ifromeast/AI_analysis/blob/main/sinusoidal_position.ipynb)\n2024-05-21 · 上海\n​回复​喜欢\n点击查看全部评论\n![](https://pic1.zhimg.com/v2-d41c2ceaed8f51999522f903672a521f_l.jpeg)\n未登录用户\n  \n\n关于作者\n[![紫气东来](https://picx.zhimg.com/v2-af1c72506a7ac445b11f3b518e47bbd1_l.jpg?source=32738c0c&needBackground=1)](https://www.zhihu.com/people/zi-qi-dong-lai-1)\n[紫气东来](https://www.zhihu.com/people/zi-qi-dong-lai-1)\n吾生也有涯，而知也无涯～\n[​](https://zhuanlan.zhihu.com/p/96956163)\n上海交通大学 工学硕士\n[ 回答 **32** ](https://www.zhihu.com/people/zi-qi-dong-lai-1/answers)[ 文章 **114** ](https://www.zhihu.com/people/zi-qi-dong-lai-1/posts)[ 关注者 **24,445** ](https://www.zhihu.com/people/zi-qi-dong-lai-1/followers)\n​关注他​发私信\n大家都在搜\n换一换\n[江歌妈妈发长文尘埃终将落定704 万](https://www.zhihu.com/search?q=%E6%B1%9F%E6%AD%8C%E5%A6%88%E5%A6%88%E5%8F%91%E9%95%BF%E6%96%87%E5%B0%98%E5%9F%83%E7%BB%88%E5%B0%86%E8%90%BD%E5%AE%9A&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)热\n[中国男足 0-5 巴勒斯坦562 万](https://www.zhihu.com/search?q=%E4%B8%AD%E5%9B%BD%E7%94%B7%E8%B6%B3+0-5+%E5%B7%B4%E5%8B%92%E6%96%AF%E5%9D%A6&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)热\n[原央视主持人阿丘回应被通报419 万](https://www.zhihu.com/search?q=%E5%8E%9F%E5%A4%AE%E8%A7%86%E4%B8%BB%E6%8C%81%E4%BA%BA%E9%98%BF%E4%B8%98%E5%9B%9E%E5%BA%94%E8%A2%AB%E9%80%9A%E6%8A%A5&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)热\n[华为与赛力斯达成新五年合作409 万](https://www.zhihu.com/search?q=%E5%8D%8E%E4%B8%BA%E4%B8%8E%E8%B5%9B%E5%8A%9B%E6%96%AF%E8%BE%BE%E6%88%90%E6%96%B0%E4%BA%94%E5%B9%B4%E5%90%88%E4%BD%9C&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)热\n[迪拜航空确认航班发生事故398 万](https://www.zhihu.com/search?q=%E8%BF%AA%E6%8B%9C%E8%88%AA%E7%A9%BA%E7%A1%AE%E8%AE%A4%E8%88%AA%E7%8F%AD%E5%8F%91%E7%94%9F%E4%BA%8B%E6%95%85&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)热\n[东航回应网传空姐跪地道歉326 万](https://www.zhihu.com/search?q=%E4%B8%9C%E8%88%AA%E5%9B%9E%E5%BA%94%E7%BD%91%E4%BC%A0%E7%A9%BA%E5%A7%90%E8%B7%AA%E5%9C%B0%E9%81%93%E6%AD%89&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)\n[王楚钦：不知道为什么就是感觉累320 万](https://www.zhihu.com/search?q=%E7%8E%8B%E6%A5%9A%E9%92%A6%EF%BC%9A%E4%B8%8D%E7%9F%A5%E9%81%93%E4%B8%BA%E4%BB%80%E4%B9%88%E5%B0%B1%E6%98%AF%E6%84%9F%E8%A7%89%E7%B4%AF&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)热\n[江苏高考作文《衬衫的价格为 9 磅 15 便士》爆火268 万](https://www.zhihu.com/search?q=%E6%B1%9F%E8%8B%8F%E9%AB%98%E8%80%83%E4%BD%9C%E6%96%87%E3%80%8A%E8%A1%AC%E8%A1%AB%E7%9A%84%E4%BB%B7%E6%A0%BC%E4%B8%BA+9+%E7%A3%85+15+%E4%BE%BF%E5%A3%AB%E3%80%8B%E7%88%86%E7%81%AB&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)\n[女装网店开始用防拆带了265 万](https://www.zhihu.com/search?q=%E5%A5%B3%E8%A3%85%E7%BD%91%E5%BA%97%E5%BC%80%E5%A7%8B%E7%94%A8%E9%98%B2%E6%8B%86%E5%B8%A6%E4%BA%86&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)\n[孕妇骑车别车被司机踹翻257 万](https://www.zhihu.com/search?q=%E5%AD%95%E5%A6%87%E9%AA%91%E8%BD%A6%E5%88%AB%E8%BD%A6%E8%A2%AB%E5%8F%B8%E6%9C%BA%E8%B8%B9%E7%BF%BB&search_source=Trending&utm_content=search_hot&utm_medium=organic&utm_source=zhihu&type=content&request_click_id=e2045dc3-231b-4a40-a63b-83fdc908cd8f)\n### 推荐阅读\n# [百面LLM-70 提问：在longcontext的继续训练中，短文本能力会损失，为什么？以及该怎么做，能补回模型的短文能力？ 回答：1）只训练长文本的时候，短文本的能力会被遗忘。但由于长文本一般数据量不多，… swthe...发表于百面LLM ](https://zhuanlan.zhihu.com/p/718823663)# [LLM系列-如何做好长文本大模型训练？ 长文本能力是当前大模型领域的前沿热点。我们可以观察到市面上常见大模型的支持长度，如GPT-4支持32K tokens，Llama 3.1支持128K tokens，而ProLong甚至能支持到512K tokens。这些技术的背… Whisper ](https://zhuanlan.zhihu.com/p/11467583463)[ ![可控细节的长文档摘要，探索开源LLM工具与实践](https://picx.zhimg.com/v2-ef37c3ba86ab99198410064de5a7243d_250x0.jpg?source=172ae18b)可控细节的长文档摘要，探索开源LLM工具与实践 魔搭社区 ](https://zhuanlan.zhihu.com/p/706955058)# [集成LLM构建一个PDF长文本解读应用 PDF长文档解读，特别是论文解读，由于的确能够辅助读者有效提高文章阅读速度，可以使读者在较短时间内掌握要点，各大LLM厂商在推出在线聊天应用的同时基本都包含PDF长文档解读这一应用。 这… 智永 ](https://zhuanlan.zhihu.com/p/686091499) \n\n_想来知乎工作？请发送邮件到 jobs@zhihu.com_\n打开知乎App\n在「我的页」右上角打开扫一扫\n![](https://picx.zhimg.com/v2-9e41ea16bdfbe9cf4896617ecad5b4ca.png)\n其他扫码方式：微信\n下载知乎App\n无障碍模式\n验证码登录\n密码登录\n[开通机构号](https://zhuanlan.zhihu.com/org/signup)\n中国 +86\n获取短信验证码\n忘记密码\n登录/注册\n其他方式登录\n未注册手机验证后自动登录，注册即代表同意[《知乎协议》](https://www.zhihu.com/term/zhihu-terms)[《隐私保护指引》](https://www.zhihu.com/term/privacy)\n扫码下载知乎 App\n关闭二维码\n",
  "body_base_path": "attachments/c8f2d025fc55/pages/",
  "body_markdown_path": "attachments/c8f2d025fc55/pages/archived-body.md",
  "local_html": "attachments/c8f2d025fc55/pages/archived-body.html",
  "body_source": "prior_capture"
}