【大模型】激活函数之SwiGLU详解

news2025/4/1 1:53:44

文章目录

  • 1. Swish
    • 基本定义
    • 主要特点
    • 代码实现
  • 2. GLU (Gated Linear Unit)
    • 基本定义
    • 主要特点
    • 代码实现
  • 3. SwiGLU
    • 基本定义
    • 主要特点
    • 代码实现
  • 参考资料

SWiGLU是大模型常用的激活函数,是2020年谷歌提出的激活函数,它结合了Swish和GLU两者的特点。SwiGLU激活函数因其在多个方面的优势而被广泛应用于大型语言模型中。

1. Swish

基本定义

Swish是由Google Brain提出的一种激活函数,它的数学表达式如下:
在这里插入图片描述

其中 σ ( x ) \sigma(x) σ(x) 是sigmoid函数,β是一个可学习的参数。

  • 当β趋近于0时,Swish函数趋近于线性函数 y = x 2 y = x^2 y=x2
  • 当β取值为1时,Swish函数是光滑且非单调的,等价于SiLU激活函数
  • 当β趋近于无穷大时,Swish函数趋近于ReLU函数。

Swish函数的图如下所示:
在这里插入图片描述

Swish的名称可能来源于其形状与鱼的尾巴相似,给人一种平滑、流畅的联想,这与"swish"这个词的含义相吻合。

补充:SiLU(Sigmoid Linear Unit)激活函数表达式如下:
在这里插入图片描述
SiLU具备无上界有下界、平滑、非单调的特性。SiLU在深层模型上的效果优于 ReLU。可以看做是平滑的ReLU激活函数。

主要特点

Swish函数的特点包括:

  • 非线性:Swish引入了非线性,使得神经网络能够学习和模拟复杂的函数。
  • 平滑性:Swish函数在整个定义域内都是光滑且连续的,这有助于在优化过程中计算梯度。
  • 自适应性:Swish函数的输出取决于输入值,这使得它能够自适应地调整激活函数的形状。

Swish函数在一些实验中表现出了比ReLU更好的性能,尤其是在一些深度神经网络中。Swish函数既有 ReLU(Rectified Linear Unit)激活函数的一些优点(例如,能够缓解梯度消失问题),又能解决 ReLU 函数的一些缺点(例如,ReLU 函数不是零中心的,且在负数部分的梯度为零)。此外,Swish 函数还是平滑函数,这意味着它在整个定义域内都有导数,这有利于优化。然而,Swish函数的计算复杂度较高,因为它涉及到sigmoid函数的计算。因此,在实际应用中,需要根据具体的任务和模型结构来选择合适的激活函数。

代码实现

Swish函数的代码实现如下:

import numpy as np
def swish(x,beta=1.0):
    """Swish 激活函数

    参数:
    x -- 输入值

    返回:
    Swish 激活后的值
    """
    return x * sigmoid(beta*x)

def sigmoid(x):
    """Sigmoid 函数

    参数:
    x -- 输入值

    返回:
    Sigmoid 函数的输出值
    """
    return 1 / (1 + np.exp(-x))

2. GLU (Gated Linear Unit)

基本定义

GLU (Gated Linear Unit) 其实不算是一种激活函数,而是一种神经网络层。它是一个线性变换后面接门控机制的结构。其中门控机制是一个sigmoid函数用来控制信息能够通过多少。GLU结合了线性单元和门控机制,能够有效地学习输入数据的不同特征。

笔者在之前的博客中也介绍过在语言模型的建模方面GLU与RNN相比的差异,具体可以参考:GLU(Gated Linear Unit) 门控线性单元

GLU的数学表达式如下:

在这里插入图片描述

其中 ⊗ 表示逐元素乘法, X X X 是输入, W W W V V V 是权重矩阵, b b b c c c 是偏置项。

主要特点

GLU的特点包括:

  • 门控机制:GLU引入了门控机制,通过sigmoid函数控制输入的线性变换,从而使得神经网络能够学习输入数据的不同特征。
  • 非线性:GLU引入了非线性,使得神经网络能够学习和模拟复杂的函数。
  • 自适应性:GLU函数的输出取决于输入值,这使得它能够自适应地调整激活函数的形状。

代码实现

GLU函数的代码实现如下:

import numpy as np
def glu(x):
    """GLU 激活函数

    参数:
    x -- 输入数组,维度必须是偶数

    返回:
    GLU 激活后的数组
    """
    assert x.shape[-1] % 2 == 0, "输入数组的最后一个维度必须是偶数"
    half_dim = x.shape[-1] // 2
    return x[..., :half_dim] * sigmoid(x[..., half_dim:])

def sigmoid(x):
    """Sigmoid 函数

    参数:
    x -- 输入值

    返回:
    Sigmoid 函数的输出值
    """
    return 1 / (1 + np.exp(-x))

3. SwiGLU

基本定义

终于到了我们今天的主角-SwiGLU。SwiGLU是一种结合了Swish和GLU的激活函数,它结合了Swish的平滑性和GLU的门控机制,能够有效地学习输入数据的不同特征。

SwiGLU的数学表达式如下:

在这里插入图片描述

主要特点

SwiGLU激活结合了Swish和GLU的特点,提供了一种有效的激活机制,具体来说:

  • 非线性能力SwiGLU通过Swish激活函数引入非线性,这使得模型能够学习和表示更复杂的数据模式 。
  • 门控特性GLU的门控机制允许模型动态地调整信息流,使得模型在处理长序列数据时能够更好地捕捉长距离依赖关系 。
  • 梯度稳定性:SwiGLU在负输入区域提供非零的梯度,有助于缓解梯度消失问题,从而提高模型的训练稳定性 。
  • 可学习参数:SwiGLU的参数可以通过训练学习,使得模型可以根据不同任务和数据集动态调整,增强了模型的灵活性和适应性 。
  • 计算效率:相比于一些复杂的激活函数,SwiGLU在保持性能的同时,具有较高的计算效率,这对于大规模语言模型的训练和推理尤为重要 。

由于这些优势,SwiGLU在大型语言模型如LLAMA、OLMO和PALM中得到了应用 。它通过结合Swish的平滑性和GLU的门控机制,提供了一种有效的激活函数,以支持复杂和高效的深度学习模型训练 。

代码实现

SwishGLU函数的代码实现如下:

import numpy as np
def SwiGLU(x):
    """SwiGLU 激活函数

    参数:
    x -- 输入数组,维度必须是偶数

    返回:
    SwiGLU 激活后的数组
    """
    assert x.shape[-1] % 2 == 0, "输入数组的最后一个维度必须是偶数"
    half_dim = x.shape[-1] // 2
    return x[..., :half_dim] * swish(x[..., half_dim:])

def swish(x,beta=1.0):
    """Swish 激活函数

    参数:
    x -- 输入值

    返回:
    Swish 激活后的值
    """
    return x * sigmoid(beta*x)

def sigmoid(x):
    """Sigmoid 函数

    参数:
    x -- 输入值

    返回:
    Sigmoid 函数的输出值
    """
    return 1 / (1 + np.exp(-x))

参考资料

  • 【笔记】SWiGLU激活函数-大模型常用
  • LLMForEverybody / 为什么大型语言模型都在使用SwiGLU作为激活函数?

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

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

相关文章

AOA与TOA混合定位,MATLAB例程,三维空间下的运动轨迹,滤波使用EKF,附下载链接

本文介绍一个MATLAB代码,实现基于 到达角(AOA) 和 到达时间(TOA) 的混合定位算法,结合 扩展卡尔曼滤波(EKF) 对三维运动目标的轨迹进行滤波优化。代码通过模拟动态目标与基站网络&am…

【211】线上教学系统

--基于SSM线上教学平添 主要实现的功能有: 管理员 : 首页、个人中心、学员管理、资料类型管理、学习资料管理、交流论坛、我的收藏管理、试卷管理、留言板管理、试题管理、系统管理、考试管理。 学员 : 首页、个人中心、我的收藏管理、留言板管理、考试管理。 前台…

从混乱思绪到清晰表达:记录想法如何改变你的学习人生

关键要点 • 记录想法似乎是发现自己想法并将其组织成可传播形式的最佳理由,研究表明写作和教学能增强学习和理解。 • 证据倾向于支持写作有助于澄清思想,而教学通过“教授效应”深化知识。 • 教学和分享被认为是最有效的学习方法,这与记录…

电机控制常见面试问题(二十)

文章目录 一.整流电路绕组接法二.电机为什么需要转速器三.电机转矩产生原理四.电机控制中载波频率大小的确定五.开关周期 Tpwm 一.整流电路绕组接法 为了引出直流的输出,一定要在整流变压器的二次侧引出零线,所以二次侧绕组必须接成星形 一次绕组必须要…

小爱控制via电视浏览器搜索图片-Homeassistant重制上一个自动化

制作自动化详情 为了完成图片搜,暂定指令找找{描述} 在执行脚本的adb地方输入以下指令,百度 因安全不让在图片地址直接搜转用bing >- >am start -n mark.via.gp/mark.via.Shell -a android.intent.action.VIEW -d https://cn.bing.com/images/…

unity一个图片的物体,会有透明的效果

如图 想要去掉这个透明效果 选择一个高层级的layer即可。

docker网桥问题导致ldap组件安装失败分析解决

使用pass_install_x86_64_0124版部署k8s底座、kem; 问题:一台kem节点部署ldap组件失败 解决:恢复问题主机的docker0网卡,重新部署kem相关组件 二、问题详情 现象描述 ansible部署kem组件 TASK [kem : start ldap] **********…

【Python】pillow库学习笔记1-Image类

《Python语言程序设计基础 》第3版,嵩天 黄天羽 杨雅婷著,P293 1.pillow库概述 Pillow 库是Python图像处理重要的第三方库。 Pillow库是PIL (Python image library) 库的一个扩展,需要通过pip工具安装。安装PIL库需要注意,安装…

智能网联交通加速落地,光路科技TSN技术助推车路云一体化发展

今日,为期两天的第二十七届高速公路信息化大会在青岛国际会展中心(红岛馆)圆满落幕。本次大会以“数智转型安全”为主题,聚焦高速公路数字化转型、车路云协同以及新一代信息技术的融合应用。会议汇聚了交通行业的专家学者、企业代…

boost.asio

as(async):异步 同步io: reactor (非阻塞)(需要注册一次,在等待消息时可以干别的事) 阻塞io网络模型 接口:read\accept\connect\write 接口返回时,io完成 异步…

当贝AI知识库评测 AI如何让知识检索快人一步

近日,国内领先的人工智能服务商当贝AI正式推出“个人知识库”功能,这一创新性工具迅速引发行业关注。在信息爆炸的时代,如何高效管理个人知识资产、快速获取精准答案成为用户的核心需求。当贝AI通过将“闭卷考试”变为“开卷考试”的独特设计,为用户打造了一个高度个性化的智能…

深度解读:智能体2.0 AI Agent多推演进

AI Agent即AI 代理,长期以来,研究人员一直在追求更完美的AI,可以与人类相当、甚至是超越人类。在1950年代,AIan Turing就将“智能”的概念扩展到了人工实体,并提出了著名的图灵测试。这些人工智能实体就被称为——Agen…

Golang 的 GMP 调度机制常见问题及解答

文章目录 Golang GMP 调度模型详解常见问题基础概念1. GMP 各组件的作用是什么?2. 为什么 Go 需要自己的调度器?3. GOMAXPROCS 的作用是什么? 调度流程4. Goroutine 如何被调度到 M 上执行?5. 系统调用会阻塞整个线程吗&#xff1…

项目-苍穹外卖(十五) Apache ECharts+数据统计

一、介绍 二、营业额统计 需求分析和设计&#xff1a; Controller: Service: /*** 营业额统计* param begindate* param enddate* return* */Overridepublic TurnoverReportVO turnoverStatistics(LocalDate begindate, LocalDate enddate) {//创建时间集合List<LocalDate&…

Spring Data审计利器:@LastModifiedDate详解(依赖关系补充篇)!!!

&#x1f552; Spring Data审计利器&#xff1a;LastModifiedDate详解&#x1f525;&#xff08;依赖关系补充篇&#xff09; &#x1f50c; 核心依赖解析 使用LastModifiedDate必须知道的依赖关系 #mermaid-svg-qm1OUa9Era9ktbeK {font-family:"trebuchet ms",verd…

Tweak Power:全方位电脑系统优化的高效工具

Tweak Power&#xff08;系统&#xff09; Tweak Power是一款功能强大的系统优化工具&#xff0c;专为提升Windows电脑的性能和稳定性而设计。它提供了全面的清理、优化和调整选项&#xff0c;帮助用户轻松管理系统资源、提高运行速度、延长设备寿命。 快速扫描并清理系统垃圾…

CLion下载安装(Windows11)

目录 CLion工具下载安装其他 CLion CLion-2024.1.4.exe 工具 系统&#xff1a;Windows 11 下载 1.通过百度网盘分享的文件&#xff1a;CLion-2024.1.4.exe 链接&#xff1a;https://pan.baidu.com/s/1-zH0rZPCZtQ60IqdHA7Cew?pwdux5a 提取码&#xff1a;ux5a 安装 打开…

如何用 Postman 进行高效的 Mock 测试?

Postman 是一个强大的 API 开发和测试工具&#xff0c;它可以让你轻松地创建和发送各种 HTTP 请求&#xff0c;查看响应结果&#xff0c;并进行调试和优化。但是有时候&#xff0c;你可能还没有开发好后端服务&#xff0c;或者想要模拟不同的响应场景&#xff0c;这时候就可以使…

DeepSeek API集成开发指南——Flask示例实践

DeepSeek API集成开发指南——Flask示例实践 序言&#xff1a;智能化开发新范式 DeepSeek API提供了覆盖自然语言处理、代码生成等多领域的先进AI能力。本文将以一个功能完备的Flask示例系统为载体&#xff0c;详解API的集成方法与最佳实践。通过本案例&#xff0c;开发者可快…

【天梯赛】L2-004 这是二叉搜索树吗(经典问题C++)

解题反思 //镜像树满足&#xff1a;左子树>根节点>右子树 //特殊&#xff1a;独腿二叉树&#xff0c;如pre {2&#xff0c;3&#xff0c;4}&#xff0c;递归函数用if(root tail) return&#xff1b;无法识别这种二叉树 // 用ismirror来将一般二叉树和镜像二叉搜索树的…