首页 > 其他分享 >激活函数和GLU

激活函数和GLU

时间:2024-10-29 15:48:43浏览次数:4  
标签:函数 sigmoid up proj 激活 GLU

LLaMA系列用的FFN层现在是SwishGLU,这里Swish是个激活函数,GLU是个线性单元,二者合起来是SwishGLU。

FFN

Transformer中原始的FFN长这样:

\[FFN(x) = ReLU(xW_1+b_1)W_2+b_2 \]

两个线性层中间夹了个relu激活函数
写成模型代码就是:

x = up_proj(x)
x = relu(x)
x = down_proj(x)

或者写成一行:

x = down_proj(relu(up_proj(x)))

Swish

是一个激活函数
原论文是:Searching for Activation Functions

\[Swish(x)=x\cdot\sigma (\beta x) \]

其中\(\sigma(x)=\frac{1}{1+e^{-x}}\),就是sigmoid函数,\(\beta\)是超参数,或者可训练参数。

写成代码就是:

y = x * sigmoid(x)

GLU(Gated Linear Units)

门控线性单元
原论文是:Language Modeling with Gated Convolutional Networks

\[GLU(x) = (xW+b)\odot\sigma(xV+c) \]

其中\(\odot\)是矩阵element-wise乘积,\(\sigma\)在这里是“任意”激活函数。(虽然原论文说是sigmoid,但是必须认为是任意,不然下面没法解释了)

这里应该如此理解:对线性单元施加了一个门控。左边的\(xW+b\)是原本的线性单元,给他加入带门控的线性单元信息:\(\sigma(xV+c)\)。

写成代码就是:

x = up_proj(x) * act(gate_proj(x))

SwishGLU

其实SwishGLU和GLU没区别,也长这样,只要把激活函数换成swish用的sigmoid即可。

吐槽一句,GLU原论文中本来就说了激活函数是sigmoid,Swish原文说的激活函数也是sigmoid,这样GLU本来就是SwishGLU,二者没什么区别,但是大家的讨论似乎都歪了,GLU反而成为了符合上述形式的,任意激活函数的一个模块的统称

写成代码就是(只替换了sigmoid):

x = up_proj(x) * sigmoid(gate_proj(x))

LLaMA MLP

回顾一下transformer的FFN,只要将down_proj里面的部分替换为SwishGLU

down_proj(F.sigmoid(gate_proj(x)) * up_proj(x))

也就是把up_proj(x)变成了:F.sigmoid(gate_proj(x)) * up_proj(x)

标签:函数,sigmoid,up,proj,激活,GLU
From: https://www.cnblogs.com/wangbingbing/p/18513504

相关文章

  • 重要的原函数和导函数
    导数描述了函数变化的速率,而原函数则是已知导数逆过程的结果。本文将详细讨论一些重要的原函数和导函数,并深入分析它们之间的数学关系。导数与原函数的定义导数是表示函数变化率的一个量,通常通过极限的形式定义。假设函数为\(f(x)\),则导数\(f'(x)\)可以定义为:\[f'(x)=\lim......
  • 7.1 在区间[0,10]上等间距取1000个点Xi(i为下标,i=1,2,3,...,1000),并计算在这些点Xi处函
    importnumpyasnpimportscipy.interpolateasspiimportscipy.integrateasspi_integratedefg(x):return((3x**2+4x+6)*np.sin(x))/(x**2+8*x+6)x_values=np.linspace(0,10,1000)y_values=g(x_values)spline=spi.CubicSpline(x_values,y_v......
  • Pytorch学习--神经网络--非线性激活
    一、用法torch.nn.ReLU图像处理中的应用:在图像处理任务中,ReLU激活函数能够增强特征提取的能力,使网络更好地捕捉图像的细节和边缘。这是因为ReLU对大部分负数响应为零,能在一定程度上减少网络计算量,并对特征层起到稀疏化的效果,避免信息的过度平滑。torch.nn.Sigmoid......
  • ORACLE自定义函数
    CREATE[ORREPLACE]FUNCTION函数名称(arg1[{IN|OUT|INOUT}]TYPE1[DEFAULTVALUE1], [arg2[{IN|OUT|INOUT}]TYPE2[DEFAULTVALUE1]],……[argn[{IN|OUT|INOUT}]TYPE[DEFAULTVALUE]])[AUTHIDDEFINER|CURRENT_USER]RETURNreturn_typeIS|A......
  • zblog获取tag列表函数GetTagList参数和使用方法介绍说明
    函数位置:zblogphp.php文件,大约2641行。函数参数:$select:数组,获取指定数据。$where:数组,数据获取限制规则。$order:数组,数据获取排序规则。$limit:数组,获取数据数量限制。$option:数组,附加限制选项,可用来获取指定范围内的数据。函数输出:输出一个数组。示例:{......
  • ja-netfilter无法激活2024.2版本的问题
    内容节选自:@lzskylineJetBrains新版本2024.2在设置里添加了区域选择,具体在:Appearance&Behavior->SystemSettings->LanguageandRegion->Region中设置。如果你选择ChinaMainland将会有一个比较坑的地方:激活许可验证走account.jetbrains.com.cn这个域名,而不是默认......
  • IntelliJ IDEA 2024中文激活安装包 IntelliJ IDEA 2024注册码下载 Mac+win
    IntelliJIDEA2024是由JetBrains公司开发的一款功能强大的Java集成开发环境(IDE)。它支持多种编程语言,如Java、Kotlin、Scala等,并提供智能代码补全、实时错误检查、代码重构等高效开发工具。IntelliJIDEA2024还引入了改进的用户界面和增强的性能,优化了开发者的工作体验,支持多种......
  • 【论文分享】HashGAT-VCA:一种结合哈希函数和图注意力网络的矢量元胞自动机模型,用于城
    本文考虑地块内部异质性,提出一个结合哈希函数和图注意力网络(GAT)的矢量元胞自动机(VCA)方法,用于研究城市土地利用变化;并将该模型应用于模拟深圳市2009年至2012年的城市土地利用变化,结果表明,HashGAT-VCA模型的模拟准确性显著优于其他VCA模型。【论文题目】HashGAT-VCA:Avecto......
  • Go入门指南-6.9应用闭包:将函数作为返回值
    在程序function_return.go中我们将会看到函数Add2和Adder均会返回签名为func(bint)int的函数:funcAdd2()(func(bint)int)funcAdder(aint)(func(bint)int)函数Add2不接受任何参数,但函数Adder接受一个int类型的整数作为参数。我们也可以将Adder......
  • PyTorch 中常用的函数方法
    文章目录一、张量操作二、神经网络构建和训练三、其他常用函数和方法示例代码一、张量操作二、神经网络构建和训练三、其他常用函数和方法PyTorch是一个广泛使用的深度学习框架,它提供了丰富的函数和方法来处理张量、构建和训练神经网络。以下是一些PyTorch中常用的......