SwiGLU激活函数与GLU门控线性单元原理解析

前言

SwiGLU激活函数在PaLM,LLaMA等大模型中有广泛应用,在大部分测评中相较于Transformer FFN中所使用的ReLU函数都有提升。本篇先介绍LLaMA中SwiGLU的实现形式,再追溯到GLU门控线性单元,以及介绍GLU的变种,Swish激活函数等内容。


内容摘要
  • LLaMA中SwiGLU的实现形式
  • GLU门控线性单元原理简述
  • 通过GLU的变种改进Transformer
  • Swish和SiLU激活函数

LLaMA中SwiGLU的实现形式

SwiGLU本质上是对Transformer的FFN前馈传播层的第一层全连接ReLU进行了替换,在原生的FFN中采用两层全连接,第一层升维,第二层降维回归到输入维度,两层之间使用ReLE激活函数,计算流程图如下(省略LayerNorm模块)

FFN模块计算示意图

SwiGLU也是全连接配合激活函数的形式,不同的是SwiGLU采用两个权重矩阵和输入分别变换,再配合Swish激活函数做哈达马积的操作,因为FFN本身还有第二层全连接,所以带有SwiGLU激活函数的FFN模块一共有三个权重矩阵,用公式表达如下

带有SwiGLU的FFN公式

其中W1,V为SwiGLU模块的两个权重矩阵,W2为原始FFN的第二层全连接权重矩阵,⊗代表哈达玛积逐位相乘,Swish为激活函数,其中β为Swish激活函数的一个参数,一般β=1此时等同于SiLU激活函数,可视化计算流程图如下

带有SwiGLU的FFN示意图

在HuggingFace LLaMA的源码实现中,在Decoder模块LlamaDecoderLayer中的LlamaMLP引入SwiGLU改造了FFN层,实现如下

class LlamaDecoderLayer(nn.Module):def __init__(self, config: LlamaConfig):...# TODO 门控线性单元self.mlp = LlamaMLP(hidden_size=self.hidden_size,intermediate_size=config.intermediate_size,  # 11008hidden_act=config.hidden_act,  # silu)

LlamaMLP的实现了SwiGLU逻辑,代码和公式完全对应

class LlamaMLP(nn.Module):def __init__(self,hidden_size: int,  # 4096intermediate_size: int,  # 11008hidden_act: str,  # silu):super().__init__()self.gate_proj = nn.Linear(hidden_size, intermediate_size, bias=False)self.down_proj = nn.Linear(intermediate_size, hidden_size, bias=False)self.up_proj = nn.Linear(hidden_size, intermediate_size, bias=False)self.act_fn = ACT2FN[hidden_act]def forward(self, x):return self.down_proj(self.act_fn(self.gate_proj(x)) * self.up_proj(x))

在LLaMA2-7B中,FFN的原始输入维度为4096,一般而言中间层是输入维度的4倍等于16384,由于SwiGLU的原因FFN从2个矩阵变成3个矩阵,为了使得模型的参数量大体保持不变,中间层维度做了缩减,缩减为原来的2/3即10922,进一步为了使得中间层是256的整数倍,有做了取模再还原的操作,最终中间层维度为11008,计算公式如下

SwiGLU中间层维度计算公式


GLU门控线性单元原理简述

SwiGLU是GLU门控线性单元的变种,了解SwiGLU必须从GLU入手,GLU提出于2016年发表的论文《nguage modeling with gated convolutional networks》中,GLU是一种类似LSTM带有门机制的网络结构,同时它类似Transformer一样具有可堆叠性残差连接,它的作用是完成对输入文本的表征,通过门机制控制信息通过的比例,来让模型自适应地选择哪些单词和特征对预测下一个词有帮助,通过堆叠来挖掘高阶语义,通过残差连接来缓解堆叠的梯度消失和爆炸。
堆叠的每一层就是门控GLU门控线性单元,通过Sigmoid激活函数和哈达玛积实现门控机制,公式如下

GLU公式

其中W和V两个卷积操作,当卷积patch size=1时等同于两个全连接层,GLU对输入文本的计算流程示意图如下

GLU示意图

相比于LSTM,GLU不需要复杂的门机制,不需要遗忘门,仅有一个输入门,因此计算更加高效,同时作者提出在他的实验中,基于GLU的GCNN门控卷积神经网络和LSTM相比,在相同参数数量和训练环境下,GCNN的预测困惑度更低,表现优于LSTM。


通过GLU的变种改进Transformer

2017年随着Transformer的提出和成功,促进了后续对Transformer结构的改进的研究,比如在2020年发表的论文《GLU Variants Improve Transformer》中,提出使用GLU的变种来改进Transformer的FFN层,作者提出的变种就是将GLU中原始的Sigmoid激活函数替换为其他的激活函数,作者列举了替换为ReLU,GELU和SwiGLU的三种变体,公式如下

GLU变体

本质上就是将Sigmoid激活函数替换为其他激活函数,命名上将激活函数的缩写加在GLU前面作为前缀。进一步作者将这种GLU变体替换FFN中的第一层全连接和激活函数,并且去除了GLU中偏置项bias,以SwiGLU为例,结合FFN它的计算公式为

带有SwiGLU的FFN

由于这种方式使得FFN中的权重矩阵从2变为了3,为了使得模型的参数大体不变,因此中间层的向量维度需要削减为原始维度的三分之二。
在论文的实验模块,作者通过数据证明通过GLU变体改造后的Transformer在大多数NLP任务上都比FFN的评价得分明显更高,其中ReGLU在实验中获得了最高的平均分,其次是SwiGLU。

GLU变体改造的Transformer测评


Swish和SiLU激活函数

Swish激活函数由Google团队在2017年提出,被证明在更深的模型上表现出比ReLU更好的性能,Swish的公式如下

Swish激活函数公式

其中σ为激活函数Sigmoid,β为Swish的一个参数,通常为一个常数或者让模型自适应学习得到。输入x和Sigmoid相乘使得它类似LSTM中的门机制,因此Swish也被成为self-gated激活函数,只需要一个标量输入即可完成门控操作。
当β=0时,Swish退化为一个线性函数,当β趋近于无穷大时,Swish就变成了ReLU,不同β下Swish的图形如下

不同β参数下Swish激活函数图像

Swish函数的曲线是平滑的,并且函数在所有点上都是可微的。这在模型优化过程中很有帮助,被认为是 swish 优于 ReLU 的原因之一。在LLaMA中采用常数β=1,此时Swish也叫SiLU激活函数。

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.2.1 什么是Prompt
    • L2.2.2 Prompt框架应用现状
    • L2.2.3 基于GPTAS的Prompt框架
    • L2.2.4 Prompt框架与Thought
    • L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
    • L2.3.1 流水线工程的概念
    • L2.3.2 流水线工程的优点
    • L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
    • L3.1.1 Agent模型框架的设计理念
    • L3.1.2 Agent模型框架的核心组件
    • L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
    • L3.2.1 MetaGPT的基本概念
    • L3.2.2 MetaGPT的工作原理
    • L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
    • L3.3.1 ChatGLM的特点
    • L3.3.2 ChatGLM的开发环境
    • L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
    • L3.4.1 LLAMA的特点
    • L3.4.2 LLAMA的开发环境
    • L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

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

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

相关文章

分布式技术导论 — 探索分析从起源到现今的巅峰之旅(逻辑架构)

探索分析从起源到现今的巅峰之旅 背景介绍技术系列 逻辑架构连接处理层数据缓存层SQL处理层存储引擎逻辑层次的分工 模块执行连接处理层初始化模块核心API模块网络交互模块Client&Server 交互协议模块用户模块案例 访问控制模块案例 连接管理、连接线程和线程管理连接管理模…

学习资料分析

学习资料分析 速算运算 √截位直除分数比较等比修正其他速算方法基期与现期基本概念求基期求现期增长率与增长量增长相关统计术语求一般增长率比较一般增长率增长量比重比重相关公式求比重平均数倍数间隔增长乘积增长率年增长率混合增长率资料分析:主要测查报考者对文字、数字…

UML与设计模式

1、关联关系 关联关系用于描述不同类的对象之间的结构关系,它在一段时间内将多个类的实例连接在一起。关联关系是一种静态关系,通常与运行状态无关,而是由“常识”、“规则”、“法律”等因素决定的,因此关联关系是一种强关联的关…

层出不穷的大模型产品:使用体验、倾向选择及未来展望

✨作者主页: Mr.Zwq✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询! 您的点赞、关注、收藏、评论,是对我最大…

哪些因素驱动新零售发展?新零售与传统零售、电子商务区别在哪?

零售业正经历着一场前所未有的变革,这场变革由多种因素驱动,涉及技术、消费习惯以及商业模式的全面升级。我们称之为”新零售”,它不仅仅是一个概念,更是零售业未来发展的方向。新零售的兴起,标志着零售行业正在迈向一…

Spring boot 使用AbstractRoutingDataSource实现数据源动态切换

目录 一、AbstractRoutingDataSource 二、具体实现 1、pom.xml 2、新建UserMapper 3、在spring boot 启动类上添加扫描mapper注解 4、在配置文件 application.properties 中添加多个(我这里是两个)数据源的配置信息 5、集成动态数据源模块 5.1、新建注解 CurDataSource…

186.二叉树:二叉搜索树中的插入操作(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

pytest + yaml 框架 -61.jenkins+allure+钉钉通知添加测试结果

前言 上一篇pytest + yaml 框架 -60.git+jenkins+allure+钉钉通知反馈 已经实现测试结果用钉钉通知。 本篇继续在钉钉通知里添加测试的汇总结果,此功能在pytest-yaml-yoyo v1.5.2版本上实现。 Environment Injector 插件 在运行完用例后会生成一个summary.json 文件,汇总…

护眼台灯哪个品牌更好?五款市面主流的护眼台灯款式分享

近年来,护眼台灯的研发和创新不断推进,一些台灯配备了智能化功能,如定时开关机、自动调节光线等,使孩子们能够更好地控制用眼时间和光线环境。护眼台灯哪个品牌更好?一些高端的护眼台灯还采用了纳米光滤镜技术&#xf…

誉天5月红帽战报:恭喜14名学员通过RHCE认证,通过率87.5%!

红帽认证是全球公认的Linux权威认证之一,对于Linux从业者来说具有很高的价值和认可度。旨在评估考生在Linux系统管理和应用方面的专业知识和技能。红帽考试是Linux从业者提升自身技能水平和职业竞争力的重要途径之一。 5月份,誉天14名学员通过了RHCE认证…

Python基础教程(十九):网络编程

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

Midjourney提示词终极指南(完整版)

在这篇博客中,我们深入研究了使用提示的艺术,以利用Midjourney的AI功能的力量。我们将探索各种技术,以创建个性化和迷人的图像,将你的创意想法转变为令人惊叹的视觉杰作。 1. 了解提示词 提示是简短的文字描述或关键词&#xff…

基于Spring+Vue的前后端分离的计算器

麻雀虽小,五脏俱全 需求分析 表达式求值 支持加减乘除四则运算、支持高精度 获取日志 Api文档定义 前后端分离,人不分离 通过Apifox定义接口细节,协调前后端开发工作。 软件架构设计 Spring-MVC 把软件系统分为三个基本部分:模…

跨国大文件传输需要哪些方面?怎么实现数据快速传输?

跨国大文件传输涉及到许多方面,包括网络速度、安全性、可靠性和法律合规性等。 以下是跨国大文件传输时需要考虑的一些重要方面: 高速稳定的网络连接:确保有足够的带宽和稳定的网络连接以支持大文件的快速传输。这可能需要考虑到跨国网络的延…

数字孪生火电厂:传统能源的数字化转型

通过图扑自主研发的产品 HT for Web ,采用可视化与数字孪生技术,打造多样化设计风格和业务视角下的火电厂数字孪生方案。为智慧电厂综合“一张图”管理提供了上层展示技术支撑,助力企业增强对火电厂的信息化和数字化管理水平。

用android如何实现计算机计算功能

一.新建一个项目 步骤&#xff1a; 1.新建项目 2.选择 二.用户界面构建 找到项目的res的下面layout里面的activity.xml文件进行约束布局界面构建。 activity.xml代码如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <androidx.c…

电脑屏幕录制怎么录制?这7个录制屏幕的技巧值得一试!

电脑屏幕录制怎么录制&#xff1f;屏幕录制是什么? 简单地说&#xff0c;电脑屏幕录制就是在你的设备屏幕上录制视频。它可以捕捉屏幕上正在发生的事情&#xff0c;并让你与其他人分享。记录电脑、手机或笔记本电脑屏幕的原因有很多&#xff1a; 1. 一个简单的屏幕录制可以用…

STM32项目分享:智能大棚/智慧农业系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板打样焊接图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.co…

超全Midjourney自学教程,怒码1万3千字!这是我见过最良心的教程啦!

前段时间&#xff0c;后台有网友私信我&#xff0c;说想跟我一起学AI~当时一边开心一边惶恐&#xff0c;满足于被人看到自己的努力、又担心自己是不是教不好别人&#xff0c;毕竟我自己也是业余时间边学边发的那种~ 不过&#xff0c;我还是会继续搬运或整理一些我认为值得记录…

Spark学习——不同模式下执行脚本

举个简单的例子&#xff1a;使用spark官方用例"取pi值" 一、local模式 进入spark目录执行后台命令&#xff1a; bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master local[*] \ ./examples/jars/spark-examples_2.12-3.2.1.jar \ 10运行结…