【LLM】深入理解FFN
为什么要:4096 ↓ 11008 ↓ 4096为什么不是:4096 ↓ 4096为什么:GeLU?为什么:SiLU?为什么:SwiGLU?一、如果没有 FFN,会发生什么?假设Transformer 没有 FFN,只有:Token │ Attention │ Attention │ Attention会发生什么?我们知道,Attention 负责每个 Token 从其他 Token 获取信息。例如:The animal didn't cross the street because it was tired.Attention 可以让:it去看:animal获得:“它指的是 animal”但 Attention 没有创造新的特征。假设:animalEmbedding:[0.2,0.5,0.8]Attention 最后大概就是:0.9 × animal + 0.1 × street也就是说,Attention 的输出其实还是:Value 的加权平均。数学就是:Output=∑iαiVi\text{Output}=\sum_i \alpha_iV_iOutput=∑i​αi​Vi​Attention 没有创造新的东西,它只是重新组合已有的信息(输出已有Token的线性组合)。这里有一个数学上的观点(以后会学):多层线性变换的组合,本质上仍然是线性变换;真正提升表达能力的是非线性(这里来自 FFN 中的 GeLU)。当然,由于 Attention 的权重 α 是由输入动态计算出来的,它本身并不是一个固定线性层,所以严格来说 Attention 整体不是线性的。但它输出的形式始终是 Value 的加权组合,这就是为什么仍然需要 FFN 去做更丰富的特征变换。而FFN负责创造新知识。FFN最简单的形式为:Linear ↓ GeLU ↓ Linear公式:FFN(x)=W2(GeLU(W1x))FFN(x)=W_2(\text{GeLU}(W_1x))FFN(x)=W2​(GeLU(W1​x))这其中,GeLU是最重要的,因为如果没有GeLU,W2(W1x)=(W2W1)xW_2(W_1x) = (W_2W_1)xW2​(W1​x)=(W2​W1​)x所以,真正让 FFN 有意义的是 GeLU,因为它引入了非线性。因此,Attention负责【找信息】,FFN负责【加工信息】。Transformer 最重要的一句话:Attention 负责 Token 与 Token 的交互;FFN 负责每个 Token 自身的表示变换。所以,Transformer其实是在交替进行两种计算。第一步:大家:聊天。(Attention)第二步:每个人回去,自己消化。(FFN)然后,再聊天。再消化。…为什么 FFN 参数这么多?为什么FFN要先升维。例如:4096 ↓ 11008 ↓ 4096为什么不是:4096 ↓ 2048 ↓ 4096因为,FFN 真正做的是:把一个 Token 投影到一个更大的特征空间,在那个空间里完成复杂的非线性变换,再投影回来。这一句话非常重要。升维多少合适?答案先说:升维不是一个数学推导出来的数字,而是"理论 + 工程 + GPU硬件"共同权衡的结果。最早的Transformer(2017)论文规定:modeldff=4×dmodelmodeld_{ff}=4\times d_{model}modeldff​=4×dmodel​为什么是 4?其实论文没有证明。就是大量实验发现:2 倍不够,8 倍收益不明显,4 倍是一个很好的折中。注意:这不是数学结论,而是经验规律。为什么不是越大越好?因为升维越大,参数量增长越快,带来的边际收益却可能递减。为什么 Llama 不是 4×?Llama Hidden为4096。如果 4 倍,应该16384。但是实际是11008。为什么?因为Llama已经不用普通 FFN。而是:SwiGLU。SwiGLU 和普通 FFN 有什么区别?普通 FFN:Linear ↓ GeLU ↓ Linear只有两层Linear。SwiGLU 实际上有三个矩阵。可以写成:SwiGLU(x)=(W1x)⊙SiLU(W3x)\text{SwiGLU}(x) = (W_1x) \odot \text{SiLU}(W_3x)SwiGLU(x)=(W1​x)⊙SiLU(W3​x)然后再乘 W2。也就是说,它不是两个矩阵,而是三个。参数天然变多。所以,如果还保持16384。参数是不是比原来大很多?我们算一下普通 FFN:参数大约:2×d×4d=8d22\times d\times4d = 8d^22×d×4d=8d2SwiGLU:参数有三个矩阵。总共:3×d×dff3\times d\times d_{ff}3×d×dff​如果希望参数量和普通 FFN差不多。应该令:3d×dff≈8d23d\times d_{ff} \approx 8d^23d×dff​≈8d2约掉d,得到:dff≈83dd_{ff} \approx \frac{8}{3}ddff​≈38​d注意:83=2.67\frac{8}{3} = 2.6738​

相关新闻

3步掌握Reloaded-II:告别游戏模组冲突的终极解决方案

3步掌握Reloaded-II:告别游戏模组冲突的终极解决方案

3步掌握Reloaded-II:告别游戏模组冲突的终极解决方案 【免费下载链接】Reloaded-II Universal .NET Core Powered Modding Framework for any Native Game X86, X64. 项目地址: https://gitcode.com/gh_mirrors/re/Reloaded-II 还在为游戏模组安装繁琐、频繁…

2026/7/24 20:16:04 阅读更多 →
JavaSE 基础语法 - 方法的使用 - ①

JavaSE 基础语法 - 方法的使用 - ①

在实际开发中,一个完整的程序往往由成千上万个方法组成。 例如,我们每天使用的微信、支付宝、淘宝等应用,每点击一个按钮、发送一条消息、完成一次支付,背后都会调用不同的方法来完成相应的功能。 那么,什么是方法&…

2026/7/24 20:16:04 阅读更多 →
掌握1对1与1对多数据库关系

掌握1对1与1对多数据库关系

1.1对1何为1对1 2个表互相对照对方 没有其他的表 在生活中常见的1对1关系有作者和作者信息 一个作者只有一个信息 这个信息只能是这个作者作者 李白 信息 朝代、年龄、笔名如果将作者删除那么 信息也会跟着一起删除 两个表是关联的关系然后是操作1.查所有的作者 作者下带着资…

2026/7/24 20:16:04 阅读更多 →

最新新闻

通用CI/CD软件平台TeamCity全新发布v2023.11——增强Git托管平台的集成

通用CI/CD软件平台TeamCity全新发布v2023.11——增强Git托管平台的集成

TeamCity是一个通用的 CI/CD 软件平台,可以实现灵活的工作流、协作和开发做法。我们的解决方案将帮助在您的 DevOps 流程中成功实现持续集成、持续交付和持续部署。TeamCity 2023.11 带来了矩阵构建和构建缓存等多项备受期待的功能,这些功能将帮助您更轻…

2026/7/24 20:23:05 阅读更多 →
界面组件DevExpress中文教程 - 如何使用UI本地化客户端工具本地化应用

界面组件DevExpress中文教程 - 如何使用UI本地化客户端工具本地化应用

DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。 在2023年12月(v23.2),DevExpress官方发布了一个新的UI Localization Client&#…

2026/7/24 20:23:05 阅读更多 →
springboot民宿预约管理系统---附源码42075

springboot民宿预约管理系统---附源码42075

源码获取 私信联系我即可~ 大家点赞、收藏、关注、评论啦 精彩专栏推荐订阅:在下方专栏👇🏻 👇🏻 精彩专栏 推荐订阅👇🏻 java精品项目案例【3000套】 java精品项目案例【3000套】https://blog…

2026/7/24 20:23:05 阅读更多 →
「实战应用」如何用DHTMLX Gantt构建类似JIRA式的项目路线图(三)

「实战应用」如何用DHTMLX Gantt构建类似JIRA式的项目路线图(三)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。在web项目中使用DHTMLX Gantt时,开发人员经常需要满足与UI外观相关的各种需求。因此他们必须确定JavaScript甘特图库的自…

2026/7/24 20:23:05 阅读更多 →
【JAVA毕设源码分享】基于springboot高校科研管理系统-纵向项目管理的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot高校科研管理系统-纵向项目管理的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/24 20:23:05 阅读更多 →
Windows驱动清理终极指南:Driver Store Explorer完整使用教程

Windows驱动清理终极指南:Driver Store Explorer完整使用教程

Windows驱动清理终极指南:Driver Store Explorer完整使用教程 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否发现Windows系统盘空间越来越少,即使清理了临…

2026/7/24 20:22:05 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻