牛客题解 | 实现一个简化版的 GPT-2 风格文本生成函数

部署运行你感兴趣的模型镜像

题目

题目链接

本题在于GPT-2的组件使用大致如下

1. 词嵌入(Embedding)

词嵌入的目的是将离散的词元(token)映射到连续的向量空间中。每个词在嵌入矩阵中都有一个对应的向量,这些向量是通过训练学习到的,能够捕捉词之间的语义关系。
数学公式:
对于输入序列 inputs,其对应的词嵌入表示为:
E = W t e [ i n p u t s ] E = W_{te}[inputs] E=Wte[inputs]
其中, W t e W_{te} Wte 是词嵌入矩阵,inputs 是输入的词索引,E 是对应的词向量表示。

2. 位置嵌入(Positional Encoding)

位置嵌入的目的是为输入的词元添加位置信息,因为 Transformer 模型本身并不处理词序列的顺序。位置嵌入向量是与词嵌入相加的,确保每个词的位置被编码到模型中。
数学公式:
对于位置 i,位置嵌入向量 p_i 可以表示为:
P E ( p o s , 2 i ) = s i n ( p o s / 1000 0 2 i / d m o d e l ) PE_{(pos,2i)} = sin(pos/10000^{2i/d_{model}}) PE(pos,2i)=sin(pos/100002i/dmodel)
P E ( p o s , 2 i + 1 ) = c o s ( p o s / 1000 0 2 i / d m o d e l ) PE_{(pos,2i+1)} = cos(pos/10000^{2i/d_{model}}) PE(pos,2i+1)=cos(pos/100002i/dmodel)
其中,i 是位置索引,d 是嵌入维度,d_max 是最大维度。通常,位置嵌入向量的维度与词嵌入相同,保证两者能够直接相加。

3. 多头注意力(Multi-Head Attention)

多头注意力的目的是通过多个注意力头来同时关注输入序列的不同部分,从而捕捉更多的上下文信息。
在多头注意力中,我们首先通过不同的线性变换得到多个查询(Q)、键(K)和值(V)矩阵,然后对每个头进行注意力计算,最后将多个头的输出拼接起来,通过线性变换得到最终的结果。
数学公式:
多头注意力的计算过程如下:
对每个头,计算注意力权重:
A = softmax ( Q K T d k + M ) A = \text{softmax}(\frac{QK^T}{\sqrt{d_k}} + M) A=softmax(dk QKT+M)
其中 Q 是查询矩阵,K 是键矩阵,d_k 是每个头的维度,M 是掩码矩阵(mask),用于防止注意力泄漏,特别是在生成任务中要使用自回归掩码。 2. 将注意力权重与值矩阵 V 相乘得到输出:
O u t p u t = A ∗ V Output = \text{A}*{V} Output=AV
将所有头的输出拼接起来并通过线性变换得到最终结果:
MultiHeadOutput = Linear ( concat ( head 1 , head 2 , … , head n ) ) \text{MultiHeadOutput} = \text{Linear}(\text{concat}(\text{head}_1, \text{head}_2, \dots, \text{head}_n)) MultiHeadOutput=Linear(concat(head1,head2,,headn))

4. 前馈网络(Feed-Forward Network)

前馈网络包含两个线性变换(全连接层),中间加上激活函数(如 GELU),通常用于对注意力输出进行非线性转换。前馈网络的作用是增加网络的表达能力。
数学公式:
前馈网络的计算可以表示为:
FFN ( x ) = Linear ( GELU ( Linear ( x ) ) ) \text{FFN}(x) = \text{Linear}(\text{GELU}(\text{Linear}(x))) FFN(x)=Linear(GELU(Linear(x)))

5. 层归一化(Layer Normalization)

层归一化的目的是通过对每一层的输出进行标准化,使得输出具有零均值和单位方差,从而稳定训练过程并加速收敛。
数学公式:
对于输入向量 x,层归一化计算为:
LayerNorm ( x ) = γ ( x − μ σ ) + β \text{LayerNorm}(x) = \gamma(\frac{x-\mu}{\sigma}) + \beta LayerNorm(x)=γ(σxμ)+β
其中,μ 是输入的均值,σ 是标准差,γ 和 β 是可学习的缩放和偏移参数。

6. Transformer Block 和整体结构

在 GPT-2 的基础架构中,Transformer Block 是多次堆叠的,每个 Block 都包括:
多头注意力(MHA)
前馈网络(FFN)
层归一化和残差连接
每一层经过层归一化后,首先进行 多头注意力计算,再进行 前馈网络计算,并最终输出。
最终的 GPT-2 架构是通过多个 transformer_block 堆叠而成,并结合词嵌入与位置嵌入进行输入输出映射。

7. 生成过程

生成过程是一个递归过程,逐步生成一个词并将其作为输入传递给下一步,直到生成指定数量的词。
使用采样策略(如温度采样、Top-k 采样等)选择下一个词。 本题使用了选择最大概率的词汇输出

您可能感兴趣的与本文相关的镜像

Qwen3-8B

Qwen3-8B

文本生成
Qwen3

Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值