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

文章目录

  • 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] // 2return 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] // 2return 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.rhkb.cn/news/42515.html

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

相关文章

vs2017开启性能探测器失败

开启性能探测器失败 错误: 无法启用性能探测器服务没有及时响应启动或控制请求。 (HRESULT: 0xe1110002) Microsoft.DiagnosticsHub.Diagnostics.CollectionStartFailedHubException”的异常。 各种原因排查: 1.管理员启动 2.开启各种诊断服务&…

FPGA——分秒计数器设计(DE2-115开发板)

一、项目创建 1.创建工程 点击File->New Project Wizard...或者直接在页面处点击 在第一行选择文件存放地点,第二行为项目名称,第三行为顶级设计实体名称 (下面的步骤可以暂时不做直接点Finish,因为是先写代码先把它跑出来暂…

香蕉成熟度检测和识别1:香蕉成熟度数据集说明(含下载链接)

一. 前言 本篇博客是《香蕉成熟度检测和识别》系列文章之《香蕉成熟度数据集说明(含下载链接)》,网上有很多香蕉成熟度数据集的数据,百度一下,一搜一大堆,但质量参差不齐,很多不能用,即使一个一个的看也会…

⑦(ACG-网络配置)

网络配置是指对计算机网络的各种参数进行设置和调整,以实现网络正常运行和高效通信。网络配置包括多方面的内容,常见的配置包括: 1. IP地址设置:IP地址是设备在网络中的身份标识,设置IP地址是网络配置的基础&#xff…

DeepSeek反作弊技术方案全解析:AI如何重构数字信任体系

一、技术原理:构建智能防御矩阵 1.1 多维度行为分析引擎 DeepSeek 反作弊技术的基石是多维度行为分析引擎,其借助深度学习算法,对用户行为轨迹展开毫秒级的细致剖析。这一引擎能够构建起涵盖操作频率、设备指纹、网络环境等多达 128 个特征维度的精准行为画像。以教育场景为…

盈亏平衡分析

盈亏平衡分析是一种重要的管理分析方法,广泛应用于企业的成本控制、生产决策、定价策略等方面,以下是对它的详细阐述: 一、基本概念 定义:盈亏平衡分析是通过研究企业在一定时期内的成本、收入与利润之间的关系,确定…

Vue2 脚手架 创建工程 测试程序

Vue2 脚手架 创建工程 测试程序 创建一个 目录 H:\g_web_vue\test 打开 vscode H:\g_web_vue\test 新建文件夹 vue2-demo cd .\vue2-demo vue create demo1 键盘 向下箭头 按键,选中 Vue2, 然后 回车 cd demo1 npm run serve http://localhost:808…

Yolo_v8的安装测试

前言 如何安装Python版本的Yolo,有一段时间不用了,Yolo的版本也在不断地发展,所以重新安装了运行了一下,记录了下来,供参考。 一、搭建环境 1.1、创建Pycharm工程 首先创建好一个空白的工程,如下图&…

IP协议的介绍

网络层的主要功能是在复杂的网络环境中确定一个合适的路径.网络层的协议主要是IP协议.IP协议头格式如下: 1.4位版本号:指定IP协议的版本,常用的是IPV4,对于IPV4来说,这里的值就是4. 2.4位头部长度,单位也是4个字节,4bit表示的最大数字是15,因此IP头部的最大长度就是60字节 3.…

Linux环境上传本地文件安装mysql

windows下载本地文件包,找到文件所在目录 scp 文件名 root192.168.xx.xx:/opt输入ssh密码,成功上传到服务器! //docker拉取镜像 cd /opt && docker load -i 文件名docker run -it -d --restartalways --namemysql5 -p 3106:3306 -v …

Java操作RabbitMQ

文章目录 Spring集成RabbitMQ1. AMQP&SpringAMQP2. SpringBoot集成RabbitMQ3. 模型work模型 4.交换机Fanout交换机Direct交换机Topic交换机 5.声明式队列和交换机基于API声明基于注解声明 6.消息转换器 Spring集成RabbitMQ 1. AMQP&SpringAMQP AMQP(高级消…

MySQL的多表查询

我们之前在讲解SQL语句的时候,讲解了DQL语句,也就是数据查询语句,但是之前讲解的查询都是单表查询,而本章节我们要学习的则是多表查询操作,主要从以下几个方面进行讲解。 5.1 多表关系 项目开发中,在进行…

微软Copilot与向量数据库:智能化办公的技术架构与实现路径

作为大禹智库的向量数据库高级研究员王帅旭,我在向量数据库和AI应用领域深耕30余年,亲历了向量数据库从学术概念到产业核心基础设施的演进历程。今天,我将从专业视角剖析微软Copilot背后的向量数据库技术支撑,并分享如何利用Mlivus Cloud等现代向量数据库构建类似的智能办公…

AI-人工智能-实现将静态图片和视频合成为类似iPhone的Live Photo(动态照片)效果

实现将静态图片和视频合成为类似iPhone的Live Photo(动态照片)效果 可以使用Python结合OpenCV和图像处理库来完成 技术说明 Live Photo原理:iPhone的Live Photo实际上是3秒的MOV视频一张高分辨率JPEG格式选择: .mov是最兼容的格…

数据结构之排序

目录 排序的概念及引用 排序的概念 常见的排序算法 常见排序算法的实现 插入排序 1.直接插入排序: 2.希尔排序( 缩小增量排序 ) 选择排序 直接选择排序 堆排序 交换排序 冒泡排序 快速排序 1)Hoare版 2)挖坑法 3)…

从“泛读”到“精读”:合合信息文档解析如何让大模型更懂复杂文档?

从“泛读”到“精读”:合合信息文档解析如何让大模型更懂复杂文档? 一、引言:破解文档“理解力”瓶颈二、核心功能:合合信息的“破局”亮点功能亮点1:复杂图表的高精度解析图表解析:为大模型装上精准“标尺…

NoSQL 数据库的适用场景与局限性分析

NoSQL(Not Only SQL)数据库是一类非关系型数据库,通过灵活的数据模型和分布式架构解决传统关系型数据库在扩展性、性能和数据多样性上的瓶颈。以下从技术特性、适用场景、不适用场景及行业实践展开分析: 一、NoSQL数据库的核心技术特性 四大数据模型 文档型:以JSON/BSON格…

Pycharm(七):几个简单案例

一.剪刀石头布 需求:和电脑玩剪刀石头布游戏 考察点:1.随机数;2.判断语句 import random # numrandom.randint(1,3) # print(num) # print(**30) #1.录入玩家手势 playerint(input(请输入手势:(1.剪刀 2.石头 3&…

Reactive编程:什么是Reactive编程?Reactive编程思想

文章目录 **1. Reactive编程概述****1.1 什么是Reactive编程?****1.1.1 Reactive编程的定义****1.1.2 Reactive编程的历史****1.1.3 Reactive编程的应用场景****1.1.4 Reactive编程的优势** **1.2 Reactive编程的核心思想****1.2.1 响应式(Reactive&…

【数学建模】动态规划算法(Dynamic Programming,简称DP)详解与应用

动态规划算法详解与应用 文章目录 动态规划算法详解与应用引言动态规划的基本概念动态规划的设计步骤经典动态规划问题1. 斐波那契数列2. 背包问题3. 最长公共子序列(LCS) 动态规划的优化技巧动态规划的应用领域总结 引言 动态规划(Dynamic Programming,简称DP)是一…