Redian新闻
>
RoPE可能是LLM时代的Resnet

RoPE可能是LLM时代的Resnet

公众号新闻

深度学习自然语言处理 分享
知乎:刘俊是

因为和苏神做过一段时间同事,所以2021年就知道RoPE了,当时也没太在意,因为位置编码是在为transformer类模型提供位置信息,在我实际实验中不同位置编码对最终效果差别很小。

2023年LLM大爆发,facebook开源了LLAMA模型,并且采用了RoPE,我也第一时间用上了LLAMA,那会感觉RoPE有点东西,但是还是心理觉得位置编码没那么重要

直到最近fb发了一篇文章《EXTENDING CONTEXT WINDOW OF LARGE LANGUAGE MODELS VIA POSITION INTERPOLATION》通过线性插值+少量微调的方式将LLAMA原始2k的模型轻松拓展到了32k,这时候我感觉到RoPE的强大之处。

进NLP群—>加入NLP交流群

通过线性插值RoPE扩张LLAMA context长度最早其实是在llamacpp项目中被人发现,有人在推理的时候直接通过线性插值将LLAMA由2k拓展到4k,性能没有下降,引起了很多人关注。fb的论文给这个发现提供了理论和实验支撑,进一步发现通过线性插值+微调可以扩展到32k长度。实现非常简单,只需要对位置编码进行线性插值,初始化的时候增加几行代码就行

def RotaryEmbedding(torch.nn.Module):
    def __init__(self, dim, max_position_embeddings=2048, base=10000, device=None):
        super().__init__()
        inv_freq = 1.0 / (base ** (torch.arange(0, dim, 2).float().to(device) / dim))
        self.register_buffer("inv_freq", inv_freq)
        
        max_position_embeddings = 8192

        # Build here to make `torch.jit.trace` work.
        self.max_seq_len_cached = max_position_embeddings
        t = torch.arange(
            self.max_seq_len_cached,
            device=self.inv_freq.device,
            dtype=self.inv_freq.dtype,
        )

        self.scale = 1 / 4
        t *= self.scale

        freqs = torch.einsum("i,j->ij", t, self.inv_freq)
        # Different from paper, but it uses a different permutation in order to obtain the same calculation
        emb = torch.cat((freqs, freqs), dim=-1)
        self.register_buffer(
            "cos_cached", emb.cos()[NoneNone, :, :], persistent=False
        )
        self.register_buffer(
            "sin_cached", emb.sin()[NoneNone, :, :], persistent=False
        )

这两天reddit上又出现了ntk RoPE通过引入新的插值的scale,来扩展context,甚至微调都不需要!让人震撼。实现也是极其简单

import transformers

old_init = transformers.models.llama.modeling_llama.LlamaRotaryEmbedding.__init__
def ntk_scaled_init(self, dim, max_position_embeddings=2048, base=10000, device=None):

    #The method is just these three lines
    max_position_embeddings = 16384
    a = 8 #Alpha value
    base = base * a ** (dim / (dim-2)) #Base change formula

    old_init(self, dim, max_position_embeddings, base, device)


transformers.models.llama.modeling_llama.LlamaRotaryEmbedding.__init__ = ntk_scaled_init

具体解释可以参考苏神自己写的文章[1]

为什么说RoPE会成为LLM时代的Resnet,首先是两者解决的问题有相似性。

Resnet解决了卷积模型变深之后梯度消失的问题,使的深度模型大放光彩。

RoPE类似的也解决了LLM context过长之后引起的上下文无法关联问题。

两者都有结构简单,方法有效的优点,这个在工程上有极大的优势,个人预感RoPE将会被大规模采用。如同当年Resnet一样。

苏剑林在评论中做了回复

原文链接:
https://zhuanlan.zhihu.com/p/641865355



进NLP群—>加入NLP交流群


参考资料

[1]

Transformer升级之路:10、RoPE是一种β进制编码: https://kexue.fm/archives/9675

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
IDM时代,终将过去?观点| 夏璐等:Chinese authorities respond to people's needs用晶界厚度为变量推广多晶的Hall-Petch与反Hall-Petch关系How China’s Greatest Ever Film Was Rescued From Oblivion90后首次现身!何恺明、孙剑团队斩获未来科学大奖,ResNet被引18万ResNet四位作者获得2023未来科学大奖以 LLM 为核心 LLM@Core:程序员的大语言模型技术指南七绝。大峡谷How Korea Quietly Reshaped Chinese Pop Culture【周末好去处】今夏在密西Streetsville可以做的7件有趣的事情!7-9月每周末都有免费新花样!从半导体到汽车电子!后ODM时代,闻泰科技靠什么?我的母亲们周末看片:A man called Otto​财报前瞻丨个人LLM时代即将来临,高通将要起飞?Meta发布首个开源可商用LLM,硬刚OpenAI和谷歌两大巨头GPT-4,Llama2,ChatGLM2,PaLM2共聚一堂 | LLM Day @KDD 2023史无前例!今年是LLM留美最简单的一年LLM 全景图 (The Landscape of LLM)LLM底座模型:LLaMA、Palm、GLM、BLOOM、GPT结构对比As Nolan Arrives, Chinese Fans React to ‘Oppenheimer’ ReleaseGPT-4、ChatGLM2、Llama2、PaLM2在KDD LLM Day上一起开了个会风潮谷歌创始人正式回归,加入LLM大战!指导Gemini研发,与OpenAI、Meta混战一触即发How a Chinese Town Made a Fortune From the World’s Lockdown Pets​下一代Transformer:RetNet结构可视化及Vision RetNet展望ResNet孙剑何恺明团队加冕未来科学大奖!旷视张祥雨成该奖项最年轻获奖人On Douyin, Chinese Companies Sell Coal at Rock-Bottom PricesOpen LLM榜单再次刷新,比Llama 2更强的「鸭嘴兽」来了ResponsibleTA提升LLM可靠性,任务完成更安全、更高效燃烧爱吧2023未来科学大奖公布,ResNet四位作者获数学与计算机科学奖LLM-Pruner: 剪枝+少量数据+少量训练 = 高效的LLM压缩Brokerage Apps Allowing Overseas Trading Pulled From App StoresLLM时代,探索式数据分析的升级之路有哪些新助攻?On Taobao, Someone Can Yell at Your Hopeless Romantic Friend
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。