Transformer中的FFN介绍

news2024/12/24 2:19:28

文章目录

1、Transformer与FFN

2、Activation Function

3、Linear Projections

4、所以FFN真的改不动了吗

5、达到AGI需要什么结构


作者:潘梓正,莫纳什大学博士生
主页:zizhengpan.github.io

(最近看到有些问题[1]说为什么Transformer中的FFN一直没有很大的改进。)


1、Transformer与FFN

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

Attention 作为token-mixer做spatial interation。

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

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

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

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,64x64这种级别的matrix multiplication可以使得网络权重直接放到register,激活值放到shared memory,这样运算极快。

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

但是这对今天的LLM和ViT来讲并不现实,最小的ViT-Tiny中,FFN也是个192 x(4x192)这种级别,更不用说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又对硬件不友好。

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]。

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。。。

https://twitter.com/i/status/1754439023551213845

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

一些个人观点,不代表完全正确,欢迎交流讨论~

引用链接

[1] : https://www.zhihu.com/question/646160485
[2] : https://arxiv.org/abs/2009.06732
[3] : https://www.yitay.net/
[4] : https://github.com/cmhungsteve/Awesome-Transformer-Attention
[5] : https://link.zhihu.com/?target=https%3A//github.com/he-y/Awesome-Pruning
[6] : https://link.zhihu.com/?target=https%3A//arxiv.org/abs/2110.02178
[7] : https://arxiv.org/abs/2002.05202
[8] Transformer Feed-Forward Layers Are Key-Value Memories: https://aclanthology.org/2021.emnlp-main.446/
[9] Knowledge Neurons in Pretrained Transformers: https://aclanthology.org/2022.acl-long.581/
[10] : https://ieeexplore.ieee.org/document/7332968
[11] : https://arxiv.org/abs/2105.08050
[12] : https://arxiv.org/abs/2312.00752
[13] : https://arxiv.org/abs/2402.19427
[14] : https://arxiv.org/abs/2308.00951
[15] : https://arxiv.org/abs/2312.09979
[16] : https://arxiv.org/abs/2401.06066
[17] : https://arxiv.org/abs/2402.01032
[18] : https://commoncrawl.org/
[19] : https://twitter.com/tsarnick/status/1754439023551213845

参考:青稞AI

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1513104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python调用clickhouse

(作者:陈玓玏) 使用clickhouse-driver包,先通过pip install clickhouse-driver安装包,再通过以下代码执行sql。 from clickhouse_driver import Client client Client(host10.43.234.214, port9000, userclickhou…

【C++】—— 代理模式

目录 (一)什么是代理模式 (二)为什么使用代理模式 (三)代理模式实现步奏 (四)代码示例 (五)代理模式优缺点 (一)什么是代理模式 …

为什么选择VR全景进行企业宣传,如何将VR全景运用在企业展示

引言: 随着科技的不断发展,VR全景技术逐渐成为企业宣传的热门选择。那么,为什么越来越多的企业选择使用VR全景技术进行宣传呢? 一.为什么选择VR全景技术进行企业宣传 1. 提升用户体验 VR全景技术可以为用户营造身临…

<Linux> 线程控制

目录 一、线程资源的分配 (一)线程私有资源 (二)线程共享资源 二、原生线程库 三、线程控制接口 (一)线程创建 - pthread_create() 1. 一个线程 2. 一批线程 (二)线程等待 …

从零开始,一步步构建服务网格istio

一、环境情况 环境:Ubuntu20.04 机器数量:单机1台 IP:10.9.2.83 二、准备知识 为什么使用 Istio? Istio提供了一种更高级别的服务网格解决方案,它可以简化和加强 Kubernetes 集群中的服务间通信、流量管理、安全…

泛微E9开发 限制明细表的行数,要求必须填写n行才能提交

通过设置明细表属性实现 关闭“允许新增明细”、“允许删除已有明细”功能开启“新增默认空明细”功能&#xff0c;并设置初始值为n 新增时的流程加载页面 通过代码块实现 <script>jQuery(document).ready(function(){ debugger;//新增行前执行代码WfForm.regist…

软件测试知识面试题:白盒测试、黑盒测试、测试用例

文章目录 白盒测试1、白盒测试分两类2、白盒测试的四个原则3、白盒测试常用的7类测试 黑盒测试1、黑盒测试的优缺点2、黑盒测试的方法3、黑盒测试的原则 测试用例1、测试用例包含2、设计测试用例所需的文档资料3、采用白盒测试技术设计用例的目的4、采用黑盒测试技术设计用例的…

【Java探索之旅】解密Java中的类型转换与类型提升

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、类型转化1.1 自动类型转换&#xff08;隐式类型转换&#xff09;1.2 强制类型转换…

实体店新模式:线下正规实体门店的转型与升级策略

在当今竞争激烈的市场环境下&#xff0c;线下正规实体门店需要不断转型与升级&#xff0c;以适应消费者的需求和市场的变化。 作为一名开鲜奶吧5年的创业者&#xff0c;我见证了无数实体店的成功与失败&#xff0c;下面的文章我将通过具体案例&#xff0c;为大家分享一些实用的…

[WiFi] 802.11w/802.11k/802.11v/802.11r/802.11u/802.11ai/802.11ah简介

802.11w&#xff08;PFM&#xff09; Protected Management Frames,802.11w协议主要基于现有的对数据报文的加密形式&#xff0c;对管理帧进行类似的加密。802.11w需要加密的管理帧包括解关联帧、去认证帧及强壮Action帧。 802.11k&#xff08;RRM&#xff09; Radio Resource …

Transformer家族

在《Transformer原理》中我们介绍了&#xff0c;现在很多大模型都是基于Transformer&#xff0c;其中最出名就是GPT和BERT模型&#xff0c;在GPT和BERT模型被提出来之后&#xff0c;NLP领域也出现了基于Transformer结构的模型&#xff0c;按照模型结构基本可以分为三类&#xf…

ruoyi-vue插件集成websocket

链接&#xff1a;插件集成 | RuoYi WebSocketServer.java&#xff1a;补充代码 /*** 此为广播消息* param message 消息内容*/public void sendAllMessage(String message) {LOGGER.info("【websocket.sendAllMessage】广播消息:"message);try {for(String sessionI…

游戏免费下载平台模板源码

功能介绍 此游戏网站模板源码是专门为游戏下载站而设计的&#xff0c;旨在为网站开发者提供一个高效、易于维护和扩展的解决方案。 特点&#xff1a; 响应式设计&#xff1a;我们的模板可以自适应不同设备屏幕大小&#xff0c;从而为不同平台的用户提供最佳的浏览体验。 …

亲测有效,职场焦虑迷茫的测试人都需要的3大良方!

Hi&#xff0c;大家好&#xff0c;我是小马哥。日常大家聊天时经常提及一个关键词——大环境不好&#xff0c;这种感受像一股暗流&#xff0c;由此带来了很多变化。 有人在这股潮流中感到迷失&#xff0c;选择了躺平&#xff1b;而有的人则积极寻找应对方法&#xff0c;努力在…

Dgraph 入门教程四《开发环境的搭建》

在深入 了解Dgraph 之前&#xff0c;我们先了解下开发环境&#xff0c;毕竟让开发人员真正动起手来才是第一步。 Dgraph 支持很多种语言的开发&#xff0c;包括GO&#xff0c;Python&#xff0c;JS&#xff0c;C#和Java等等。出于项目需要&#xff0c;只了解下JS和Java。 1、…

如何用SSH连接

以gitlab的SSH来举例&#xff0c;包括配置与克隆的过程&#xff1a; Git 是一个分布式版本控制系统&#xff0c;这意味着您可以在本地工作&#xff0c; 然后将您的更改共享或推送到服务器。在这种情况下&#xff0c;您推送到的服务器是 GitLab。 GitLab 使用 SSH 协议与 Git …

DC-DC直流隔离模块电源正负双输出升压变换器HRA系列5V12V24V转±50v±80v±110v±150v±200v±250v±300v

特点 效率高达 80%以上1*1英寸标准封装电源正负双输出稳压输出工作温度: -40℃~85℃阻燃封装&#xff0c;满足UL94-V0 要求温度特性好可直接焊在PCB 上 应用 HRA 0.2~8W 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为&#xff1a;4.5~9V、9~18V、及18~36V、36…

HTML视频笔记

学习arm开发板&#xff0c;涉及到网页HTML PHP什么的&#xff0c;简单看个视频学习下 HTML&#xff5c;超简单HTML入门教程 https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element ​​​​​​vscode需要的libc6等需要的版本高​​​​​​ 为了安装vscode&#xff0c;将…

Github上哪些好用的工具

专注于web漏洞挖掘、内网渗透、免杀和代码审计&#xff0c;感谢各位师傅的关注&#xff01;网安之路漫长&#xff0c;与君共勉&#xff01; Qexo-爱写博客的师傅强烈推荐 漂亮的 Hexo 静态博客编辑器。该项目是基于 Django 的 Hexo 静态博客管理后台&#xff0c;支持文章管理、…

[C语言]——数组练习

目录 练习1&#xff1a;多个字符从两端移动&#xff0c;向中间汇聚 练习2&#xff1a;⼆分查找 练习1&#xff1a;多个字符从两端移动&#xff0c;向中间汇聚 编写代码&#xff0c;演⽰多个字符从两端移动&#xff0c;向中间汇聚 #include <stdio.h> int main() {char a…