大模型激活函数知识

news2025/1/21 16:28:45

FFN块 计算公式

在Transformer模型中,FFN(Feed-Forward Network)块通常指的是在编码器(Encoder)和解码器(Decoder)中的一个全连接前馈网络子结构。FFN块位于自注意力层(Self-Attention Layer)之后,用于对自注意力层的输出进行进一步的加工处理。FFN块的作用是引入非线性,允许模型学习更复杂的特征表示。

一个标准的FFN块通常包含两个全连接层(也称为线性层),中间有一个激活函数。第一个全连接层通常有较大的隐藏层尺寸,用于对输入进行维度扩展;第二个全连接层则将维度还原回与输入相同的尺寸。

GeLU 计算公式

GeLU(Gaussian Error Linear Unit)是一种激活函数,常用于神经网络中的非线性变换。它在Transformer模型中广泛应用于FFN(Feed-Forward Network)块。下面是GeLU的计算公式:

假设输入是一个标量 x,GeLU的计算公式如下:

图片

其中,tanh() 是双曲正切函数,sqrt() 是平方根函数,pi 是圆周率。

GeLU函数的特点是在接近零的区域表现得类似于线性函数,而在远离零的区域则表现出非线性的特性。相比于其他常用的激活函数(如ReLU),GeLU函数在某些情况下能够提供更好的性能和更快的收敛速度。

需要注意的是,GeLU函数的计算复杂度较高,可能会增加模型的计算开销。因此,在实际应用中,也可以根据具体情况选择其他的激活函数来代替GeLU函数。

Swish 计算公式

Swish是一种激活函数,它在深度学习中常用于神经网络的非线性变换。Swish函数的计算公式如下:

图片

其中,sigmoid() 是Sigmoid函数,x 是输入,beta 是一个可调节的超参数。

Swish函数的特点是在接近零的区域表现得类似于线性函数,而在远离零的区域则表现出非线性的特性。相比于其他常用的激活函数(如ReLU、tanh等),Swish函数在某些情况下能够提供更好的性能和更快的收敛速度。

Swish函数的设计灵感来自于自动搜索算法,它通过引入一个可调节的超参数来增加非线性程度。当beta为0时,Swish函数退化为线性函数;当beta趋近于无穷大时,Swish函数趋近于ReLU函数。

需要注意的是,Swish函数相对于其他激活函数来说计算开销较大,因为它需要进行Sigmoid运算。因此,在实际应用中,也可以根据具体情况选择其他的激活函数来代替Swish函数。

使用 GLU 线性门控单元的 FFN 块计算公式

使用GLU(Gated Linear Unit)线性门控单元的FFN(Feed-Forward Network)块是Transformer模型中常用的结构之一。它通过引入门控机制来增强模型的非线性能力。下面是使用GLU线性门控单元的FFN块的计算公式:

假设输入是一个向量 x,GLU线性门控单元的计算公式如下:

图片

  (1)其中,sigmoid() 是Sigmoid函数, 是一个可学习的权重矩阵。

在公式(1)中,首先将输入向量 x 通过一个全连接层(线性变换)得到一个与 x 维度相同的向量,然后将该向量通过Sigmoid函数进行激活。这个Sigmoid函数的输出称为门控向量,用来控制输入向量 x 的元素是否被激活。最后,将门控向量与输入向量 x 逐元素相乘,得到最终的输出向量。

GLU线性门控单元的特点是能够对输入向量进行选择性地激活,从而增强模型的表达能力。它在Transformer模型的编码器和解码器中广泛应用,用于对输入向量进行非线性变换和特征提取。

需要注意的是,GLU线性门控单元的计算复杂度较高,可能会增加模型的计算开销。因此,在实际应用中,也可以根据具体情况选择其他的非线性变换方式来代替GLU线性门控单元。

使用 GeLU 的 GLU 块计算公式

使用GeLU作为激活函数的GLU块的计算公式如下:

图片

其中,GeLU() 是Gaussian Error Linear Unit的激活函数,W_1 是一个可学习的权重矩阵。

在公式(1)中,首先将输入向量 x 通过一个全连接层(线性变换)得到一个与 x 维度相同的向量,然后将该向量作为输入传递给GeLU激活函数进行非线性变换。最后,将GeLU激活函数的输出与输入向量 x 逐元素相乘,得到最终的输出向量。

GeLU激活函数的计算公式如下:

图片

其中,tanh() 是双曲正切函数,sqrt() 是平方根函数,pi 是圆周率。

在公式(2)中,GeLU函数首先对输入向量 x 进行一个非线性变换,然后通过一系列的数学运算得到最终的输出值。

使用GeLU作为GLU块的激活函数可以增强模型的非线性能力,并在某些情况下提供更好的性能和更快的收敛速度。这种结构常用于Transformer模型中的编码器和解码器,用于对输入向量进行非线性变换和特征提取。

需要注意的是,GLU块和GeLU激活函数是两个不同的概念,它们在计算公式和应用场景上有所区别。在实际应用中,可以根据具体情况选择合适的激活函数来代替GeLU或GLU。

使用 Swish 的 GLU 块计算公式

使用Swish作为激活函数的GLU块的计算公式如下:

图片

其中,sigmoid() 是Sigmoid函数,W_1 是一个可学习的权重矩阵。

在公式(1)中,首先将输入向量 x 通过一个全连接层(线性变换)得到一个与 x 维度相同的向量,然后将该向量通过Sigmoid函数进行激活。这个Sigmoid函数的输出称为门控向量,用来控制输入向量 x 的元素是否被激活。最后,将门控向量与输入向量 x 逐元素相乘,得到最终的输出向量。

Swish激活函数的计算公式如下:

图片

其中,sigmoid() 是Sigmoid函数,beta 是一个可学习的参数。

在公式(2)中,Swish函数首先对输入向量 x 进行一个非线性变换,然后通过Sigmoid函数进行激活,并将该激活结果与输入向量 x 逐元素相乘,得到最终的输出值。

使用Swish作为GLU块的激活函数可以增强模型的非线性能力,并在某些情况下提供更好的性能和更快的收敛速度。GLU块常用于Transformer模型中的编码器和解码器,用于对输入向量进行非线性变换和特征提取。

需要注意的是,GLU块和Swish激活函数是两个不同的概念,它们在计算公式和应用场景上有所区别。在实际应用中,可以根据具体情况选择合适的激活函数来代替Swish或GLU。

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

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

相关文章

C语言第二十三弹---指针(七)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 指针 1、sizeof和strlen的对比 1.1、sizeof 1.2、strlen 1.3、sizeof 和 strlen的对比 2、数组和指针笔试题解析 2.1、⼀维数组 2.2、二维数组 总结 1、si…

Java 基于微信小程序的私家车位共享系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

WebSocket原理详解

目录 1.引言 1.1.使用HTTP不断轮询 1.2.长轮询 2.websocket 2.1.概述 2.2.websocket建立过程 2.3.抓包分析 2.4.websocket的消息格式 3.使用场景 4.总结 1.引言 平时我们打开网页,比如购物网站某宝。都是点一下列表商品,跳转一下网页就到了商品…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Marquee组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Marquee组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Marquee组件 跑马灯组件,用于滚动展示一段单行文本,仅当…

【Effective Objective - C 2.0】——读书笔记(三)

文章目录 十五、用前缀避免命名空间冲突十六、提供全能初始化方法十七、实现description方法十八、尽量使用不可变对象十九、使用清晰而协调的命名方式二十、为私有方法名加前缀二十一、理解Objective-C错误模型二十二、理解NSCopying协议 十五、用前缀避免命名空间冲突 OC语言…

WSL外部SSH连接有效方法

前言 wsl作为windows下使用linux平台有效的手段之一,本文可以让win作为工作站,外部系统用来连接win下的wsl系统。 自动启动服务脚本 https://zhuanlan.zhihu.com/p/47733615 开机自启端口转发 wslname "Ubuntu-20.04" 要转发端口的Linux…

不懂编程?节点包来凑——Dynamo常用节点包推荐(上)

由于篇幅有限,本次文章我们分上、下两篇,来分享给大家。 Dynamo作为一款辅助三维设计工具,他可以通过图形化的编程,帮我们解决很多在设计或者建模过程中遇到的小问题;同时他作为一款可视化编程软件,学起来…

Spring Boot 笔记 006 创建接口_注册

1.1 由于返回数据都是以下这种格式,那么久再编写一个result实体类 报错了,原因是没有构造方法 可以使用lombok的注解自动生成,添加无参的构造器和全参的构造器 package com.geji.pojo;import lombok.AllArgsConstructor; import lombok.NoArg…

【C语言】【力扣】7.整数反转和9.回文数

一、整数反转 1.1 个人思考过程 初解:出现ERROR,数据溢出的情况下应该返回0。(错误) int reverse(int x){int y0;while(x!0){yy*10x%10;x/10; }return y; } 再解:加上数据溢出判断条件。(正确&#…

JS逆向进阶篇【去哪儿旅行登录】【上篇】

目标url: aHR0cHM6Ly91c2VyLnF1bmFyLmNvbS9wYXNzcG9ydC9sb2dpbi5qc3A 实现难点: 逆向滑块请求发送短信登录 目录 每篇前言:0、前置技术栈(1)JS实现页面滑动(2)JS实现记录滑动轨迹(3&#xff…

二、ClickHouse简介

ClickHouse简介 前言一、行式存储二、DBMS功能三、多样化引擎四、高吞吐写入能力五、数据分区与线程级并行六、场景七、特定版本 前言 ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS),使用 C 语言编写,主要…

2024年教师资格证认定报名完整流程

💚网上报名流程概览 一、进入教资认定网报入口; 二、进行实名核验; 三、申请网报时间查询; 四、个人信息维护; 五、认定申请报名; 💚认定所需材料 1、 身份证; 2 、户口本/居住证…

【Java程序设计】【C00249】基于Springboot的私人健身与教练预约管理系统(有论文)

基于Springboot的私人健身与教练预约管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的私人健身与教练预约管理系统 本系统分为系统功能模块、管理员功能模块、教练功能模块以及用户功能模块。 系统功能模…

计算机网络——08应用层原理

应用层原理 创建一个新的网络 编程 在不同的端系统上运行通过网络基础设施提供的服务,应用进程批次通信如Web Web服务器软件与浏览器软件通信 网络核心中没有应用层软件 网络核心没有应用层功能网络应用只能在端系统上存在 快速网络应用开发和部署 网络应用…

ChatGPT4 教你如何完成SQL的实践应用

对数据库的各项应用与操作都离不开SQL来对数据进行增删改查。 例如 : 有一张某公司职员信息表如下: 需求1:在公司职员信息表中,请统计各部门,各岗位下的员工人数。 如果这个SQL语句不会写或者不知道怎么操作可以交给…

【C基础刷题】第九讲

本系列博客为个人刷题思路分享,有需要借鉴即可。 1.目录大纲: 2.题目链接: 统计成绩 00:00:00⸺00:09:00题号:BC33 链接:https://www.nowcoder.com/practice/ cad8d94…

【VTKExamples::PolyData】第二十七期 KochanekSpline

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例KochanekSpline & KochanekSplineDemo,并解析接口vtkParametricSpline & vtkParametricFunctionSource,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,…

过河卒(洛谷)

题目 原题 题目描述 棋盘上 A A A 点有一个过河卒,需要走到目标 B B B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C C C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。…

响应式编程三流处理

响应式编程三流处理 组合响应式流concatmergezipcombineLatest flatMap、concatMap、flatMapSequebtial操作符flatMapconcatMapflatMapSequential 元素采样sample 和sampleTimeout 流的批处理bufferwindow操作符group by将响应式流转化为阻塞结构在序列处理时查看元素物化和非物…

使用Python+OpenCV2进行图片中的文字分割(支持竖版)

扣字和分割 把图片中的文字,识别出来,并将每个字的图片抠出来; import cv2 import numpy as npHIOG 50 VIOG 3 Position []水平投影 def getHProjection(image):hProjection np.zeros(image.shape,np.uint8)# 获取图像大小(h,w)image.sh…