从零开始实现大语言模型(九):前馈神经网络与GELU激活函数

1. 前言

OpenAI的GPT系列大语言模型中的前馈神经网络模块共包含两个Linear层以及一个GELU(Gaussian Error Linear Unit)激活函数。第一个Linear层会对每个token对应的维度为 n n n的输入向量做变换,将向量的维度拓展至 4 n 4n 4n。GELU激活函数对第一个Linear层输出向量中的每个元素做变换,并将经过变换后的向量输入第二个Linear层。第二个Linear层会将各个token对应向量的维度压缩回原来的 n n n维,得到前馈神经网络模块的输出。

本文详解GELU激活函数的基本原理,介绍并实现OpenAI的GPT系列大语言模型结构中的前馈神经网络模块FeedForward

2. GELU激活函数

深度神经网络模型中最常用的激活函数是ReLU(Rectified Linear Unit)激活函数。激活函数ReLU是一个分段线性函数, ReLU ( x ) = max ⁡ { x , 0 } \text{ReLU}(x)=\max\{x, 0\} ReLU(x)=max{ x,0}。当输入 x > 0 x\gt0 x>0时,ReLU激活函数的输出值与输入 x x x相同,且导数恒等于1。当输入 x < 0 x\lt0 x<0时,ReLU激活函数的输出值及其导数均恒等于0。

大语言模型一般不会使用ReLU作为激活函数,ReLU的导数值会在输入 x = 0 x=0 x=0时发生突变,这种不平滑特性会降低大语言模型参数的精细化调整能力。当输入 x x x的值小于0时,ReLU的导数值会恒等于0,因此使用ReLU作为激活函数会使部分模型参数在反向传播时的梯度等于0,这些参数在当次模型训练过程中不会被更新。大语言模型中常用的激活函数包括GELU和SwiGLU(Swish-Gated Linear Unit),激活函数GELU和SwiGLU的函数曲线均与ReLU非常相似。深度学习实践已经证明,当深度学习模型层数特别大或模型结构特别复杂时,使用GELU或SwiGLU激活函数能够显著增强模型效果。

OpenAI的GPT系列大语言模型中使用的激活函数是GELU激活函数。激活函数GELU是一个平滑的非线性函数,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RuizhiHe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值