0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

聊一聊Transformer中的FFN

深度学习自然语言处理 来源:青稞AI 2024-03-13 11:41 次阅读

作者:潘梓正,莫纳什大学博士生

最近看到有些问题[1]说为什么Transformer中的FFN一直没有大的改动。21年刚入学做ViT的时候就想这个问题,现在读博生涯也快结束了,刚好看到这个问题,打算稍微写写, 也算是对这个地方做一个小总结吧。

1. Transformer与FFN

Transformer的基本单位就是一层block这里,一个block包含 MSA + FFN,目前公认的说法是,

Attention作为token-mixer做spatial interaction。

FFN(又称MLP)在后面作为channel-mixer进一步增强representation。

从2017至今,过去绝大部分Transformer优化,尤其是针对NLP tasks的Efficient Transformer都是在Attention上的,因为文本有显著的long sequence问题。安利一个很好的总结Efficient Transformers: A Survey [2], 来自大佬Yi Tay[3]。到了ViT上又有一堆attention[4]改进,这个repo一直在更新,总结的有点多,可以当辅助资料查阅。

而FFN这里,自从Transformer提出基本就是一个 Linear Proj + Activation + Linear Proj的结构,整体改动十分incremental。

94eb8810-e05c-11ee-a297-92fbcf53809c.jpg

Transformer Block示意图 + FFN内部

2. Activation Function

经历了ReLU, GeLU,Swish, SwiGLU等等,基本都是empirical observations,但都是为了给representation加上非线性变换做增强。

ReLU对pruning挺有帮助,尤其是过去对CNN做pruning的工作,激活值为0大致意味着某个channel不重要,可以去掉。相关工作可查这个repo[5]。即便如此,ReLU造成dead neurons,因此在Transformer上逐渐被抛弃。

GeLU在过去一段时间占比相当大,直到现在ViT上使用十分广泛,当然也有用Swish的,如MobileViT[6]。

Gated Linear Units目前在LLM上非常流行,其效果和分析来源于GLU Variants Improve Transformer[7]。如PaLM和LLaMA都采用了SwiGLU, 谷歌的Gemma使用GeGLU。

不过,从个人经验上来看(偏CV),改变FFN中间的activation function,基本不会有极大的性能差距,总体的性能提升会显得incremental。NLP上估计会帮助reduce overfitting, improve generalization,但是与其花时间改这个地方不如好好clean data。。。目前来说

3. Linear Projections

说白了就是一个matrix multiplication, 已经几乎是GPU上的大部分人改model的时候遇到的最小基本单位。dense matrix multiplication的加速很难,目前基本靠GPU更新迭代。

不过有一个例外:小矩阵乘法可以结合软硬件同时加速,比如instant-ngp的tiny cuda nn, 64 x 64这种级别的matrix multiplication可以使得网络权重直接放到register, 激活值放到shared memory, 这样运算极快。

94f66ed8-e05c-11ee-a297-92fbcf53809c.jpg

Source: https://github.com/nvlabs/tiny-cuda-nn

但是这对今天的LLM和ViT来讲不现实,最小的ViT-Tiny中,FFN也是个192 x (4 x 192)这种级别,更不用说LLM这种能> 10000的。

那为什么Linear Projection在Transformer里就需要这么大?

常见的说法是Knowledge Neurons。tokens在前一层attention做global interaction之后,通过FFN的参数中存放着大量training过程中学习到的比较抽象的knowledge来进一步update。目前有些studies是说明这件事的,如

•Transformer Feed-Forward Layers Are Key-Value Memories[8]

•Knowledge Neurons in Pretrained Transformers[9]

•...

问题来了,如果FFN存储着Transformer的knowledge,那么注定了这个地方不好做压缩加速:

FFN变小意味着model capacity也变小,大概率会让整体performance变得很差。我自己也有过一些ViT上的实验 (相信其他人也做过),两个FC中间会有个hidden dimension的expansion ratio,一般设置为4。把这个地方调小会发现怎么都不如大点好。当然太大也不行,因为FFN这里的expansion ratio决定了整个Transformer 在推理时的peak memory consumption,有可能造成out-of-memory (OOM) error,所以大部分我们看到的expansion ration也就在4倍,一个比较合适的performance-memory trade-off.

FFN中的activations非低秩。过去convnet上大家又发现activations有明显的低秩特性,所以可以通过low rank做加速,如Kaiming的这篇文章[10],如下图所示。但是FFN中间的outputs很难看出低秩的特性,实际做网络压缩的时候会发现pruning FFN的trade-off明显不如convnets,而unstructured pruning又对硬件不友好。

94fa9f9e-e05c-11ee-a297-92fbcf53809c.jpg

Source: Zhang et.al, Accelerating Very Deep Convolutional Networks for Classification and Detection

4. 所以FFN真的改不动了吗?

当然不是。

我们想改动一个model or module的时候,无非是两个动机:1)Performance。2)Efficiency。

性能上,目前在NLP上可以做Gated MLP[11], 如Mamba[12]的block中,或者DeepMind的新结构Griffin[13]。

95031dfe-e05c-11ee-a297-92fbcf53809c.jpg

Source: Griffin: Mixing Gated Linear Recurrences with Local Attention for Efficient Language Models

但是难说这个地方的性能提升是不是来自于更多的参数量和模型复杂度。

在CV上,有个心照不宣的trick,那就是加depthwise convolution引入locality,试过的朋友都知道这个地方的提升在CV任务上有多明显,例如CIFAR100上,DeiT-Ti可以涨接近10个点这样子。。。

但是呢,鉴于最原始的FFN依然是目前采用最广泛的,并且conv引入了inductive bias,破坏了原先permutation invariant的sequence(因为卷积要求规整的shape,width x height)。大规模ViT训练依然没有采用depthwise conv,如CLIP, DINOv2, SAM, etc。

效率上,目前最promising是改成 **Mixture-of-Expert (MoE)**,但其实。。。GPT4和Mixtral 8x7B没出来之前基本是Google在solo,没人关注。当然现在时代变了,Mixtral 8x7B让MoE起死回生。最近这个地方的paper相当多,简单列几个自己感兴趣的:

•Soft MoE: From Sparse to Soft Mixtures of Experts[14]

LoRA MoE: Alleviate World Knowledge Forgetting in Large Language Models via MoE-Style Plugin[15]

•DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models[16]

5. 达到AGI需要什么结构?

目前这个阶段,没人知道一周以后会有什么大新闻,就像Sora悄无声息放出来,一夜之间干掉U-Net,我也没法说什么结构是最有效的。

总体上,目前没有任何结构能真的完全beat Transformer,Mamba 目前 也不行,如这篇[17]发现 copy and paste不太行,scaling和in-context能力也有待查看。

考虑到未来扩展,优秀的结构应该满足这么几个东西,个人按重要性排序:

Scaling Law。如果model很难通过scale up提升性能,意义不大(针对AGI来讲)。但是建议大家不要针对这个地方过度攻击学术界paper,学术界很难有资源进行这种实验,路都是一步一步踩出来的,提出一个新architecture需要勇气和信心,给一些宽容。嗯,说的就是Mamba。

In-Context Learning能力。这个能力需要强大的retrieval能力和足够的capacity,而对于Transformer来讲,retrieval靠Attention,capacity靠FFN。scaling带来的是两者协同提升,进而涌现强大的in-context learning能力。

Better Efficiency。说到底这也是为什么我们想换掉Transformer。做过的朋友都知道Transformer训练太耗卡了,无论是NLP还是CV上。部署的时候又不像CNN可以做bn conv融合,inference memory大,low-bit quantization效果上也不如CNN,大概率是attention这个地方low-bit损失大。在满足1,2的情况下,如果一个新结构能在speed, memory上展现出优势那非常有潜力。Mamba能火有很大一部分原因是引入hardware-aware的实现,极大提升了原先SSM的计算效率。

Life-long learning。知识是不断更新的,训练一个LLM需要海量tokens,强如OpenAI也不可能每次Common Crawl[18]放出新data就从头训一遍,目前比较实际的方案是持续训练,但依然很耗资源。未来的结构需要更高效且持久地学习新知识。

Hallucination问题我反倒觉得不是大问题,毕竟人也有幻觉,比如对于不知道的,或自以为是的东西很自信的胡说一通,强推Hinton怼Gary Marcus这个视频[19]。我现在写的东西再过几年回来看,说不定也是个Hallucination。。。

总结: FFN因为结构最简单但是最有效,被大家沿用至今。相比之下,Transformer改进的大部分精力都在Attention这个更明显的bottleneck上,有机会再写个文章聊一聊这里。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • gpu
    gpu
    +关注

    关注

    27

    文章

    4424

    浏览量

    126722
  • Transformer
    +关注

    关注

    0

    文章

    130

    浏览量

    5899
  • nlp
    nlp
    +关注

    关注

    1

    文章

    463

    浏览量

    21824

原文标题:聊一聊Transformer中的FFN

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    我专帮人解决洗衣机程控板的问题?有的话请系我,我QQ649866336

    我专帮人解决洗衣机程控板的问题?有的话请系我,我QQ649866336
    发表于 10-05 19:46

    为什么正在QQ时,系统消息提示“已被迫下线”?

    为什么正在QQ时,系统消息提示“已被迫下线”?如果您正在使用QQ聊天时,QQ突然意外离线,并提示如下信息:则说明您的QQ此时已经在其他计算机上成功登录。如果您本人没有在其他计算机上登录这个QQ帐号
    发表于 02-05 11:24

    电子工程师之家QQ群150628376,线上线下交朋友,谈工作,...

    电子工程师之家150628376,线上线下交朋友,谈工作,人生。。喜欢的顶起。
    发表于 09-27 16:24

    Linux 下用UDP实现群聊单

    Linux 下用UDP实现群聊单,能够实现单和群聊。程序不长,可以作为学习网络的检测。
    发表于 07-19 23:37

    下阻抗匹配

    下阻抗匹配,电路加个阻抗匹配网络,搞成和负载样的阻抗,这样岂不是多了个假负载?不是损耗了效率吗?而事实上刚好相反,哪个坛友分析下缘故
    发表于 10-31 17:55

    tws芯片的问题

    `tws般指真无线耳塞,算是彻底摆脱了线材的束缚其实tws很早就有厂家在做了,但是不如苹果的原因是tws所需要的蓝牙芯片比方说现在的大部分tws塞子,都是左耳或者右耳是蓝牙主机,用来连接手机另
    发表于 12-27 14:52

    AltiumFill,Polygon Pour,Plane的区别和用法

    Fill会造成短路,为什么还用它呢?来AltiumFill,Polygon Pour,Plane的区别和用法
    发表于 04-25 06:29

    你知道的和不知道的电流镜

    这期来点轻松的,你知道的和不知道的电流镜。电流源可算是模拟集成电路中最基础的内容,也是有很多花样的基本单元。电流源是笼统的叫法,具体会根据电流的流向,分别叫做电流源(Current
    发表于 06-24 06:56

    stm32的低功耗调试

    前言:物联网的大部分设备都是电池供电的,设备本身低功耗对延长设备使用至关重要,今天就实际调试总结stm32的低功耗调试。1、stm32在运行状态下的功耗上图截图自stm32l15x手册
    发表于 08-11 08:18

    7系列FPGA的供电部分

    前几篇咱们说了FPGA内部逻辑,本篇咱们再聊7系列FPGA的供电部分。首先咱们说spartan7系列,通常咱们需要使用以下电源轨:1,VCCINTFPGA内部核心电压。其不损坏FPGA器件的范围
    发表于 11-11 09:27

    下GS的波形

    对于咱们电源工程师来讲,我们很多时候都在看波形,看输入波形,MOS开关波形,电流波形,输出二极管波形,芯片波形,MOS管的GS波形,我们拿开关GS波形为例来下GS的波形。我们测试MOS管GS波形
    发表于 11-16 09:15

    平衡小车代码的实现

    前言今天代码,只有直立功能的代码。代码总体思路给定个目标值,单片机通过IIC和mpu6050通信,得知数据后,根据角度环计算出个P
    发表于 01-14 08:29

    下涂鸦智能植物生长机的嵌入式部分

    篇文章我们分享了DIY个涂鸦智能植物生长机需要的硬件以及结构件的物料,接下来我们这篇文章我们主要来下嵌入式部分。1、产品创建进入智能涂鸦IoT平台,点击创建产品。选择小家电-
    发表于 02-17 06:56

    串口环形队列常用的几种方法

    1、串口常用的几种方式查询方式可靠性很高,要考虑下个数据包覆盖上个数据包的问题,小数据量,在10个字节以内,可以这样考虑, 很简单,很方便,很可靠。但是在数据量大的时候,程序阻
    发表于 07-21 15:17

    基于视觉transformer的高效时空特征学习算法

    Transformer block中,包含Self-Attention和FFN,通过堆叠Transformer block的方式达到学习图像特征的目的。
    的头像 发表于 12-12 15:01 1084次阅读