gpt是如何进行训练的?

原理

gpt就是一个类似于成语接龙的游戏,根据之前的n个字符,预测下一个字符,那么gpt的输入和输出是如何构造的呢?比如给一个句子如下:

sentence:如何理解gpt的原理。

构造gpt输入输入:

input:如何理解gpt的原

output:何理解gpt的原理

是的你没有看错,输入输出就是一个字符的错位。

那么输入时如何经过self-mask-attention来得到输出的呢?

python 复制代码
    def forward(self, x):
        B, T, C = x.size() # batch size, sequence length, embedding dimensionality (n_embd)

        # calculate query, key, values for all heads in batch and move head forward to be the batch dim
        xx = self.c_attn(x)
        q, k, v  = xx.split(self.n_embd, dim=2)
        k = k.view(B, T, self.n_head, C // self.n_head).transpose(1, 2) # (B, nh, T, hs)
        q = q.view(B, T, self.n_head, C // self.n_head).transpose(1, 2) # (B, nh, T, hs)
        v = v.view(B, T, self.n_head, C // self.n_head).transpose(1, 2) # (B, nh, T, hs)

        # causal self-attention; Self-attend: (B, nh, T, hs) x (B, nh, hs, T) -> (B, nh, T, T)
        if self.flash:
            # efficient attention using Flash Attention CUDA kernels
            y = torch.nn.functional.scaled_dot_product_attention(q, k, v, attn_mask=None, dropout_p=self.dropout if self.training else 0, is_causal=True)
        else:
            # manual implementation of attention
            kt = k.transpose(-2, -1)
            att = (q @ kt) * (1.0 / math.sqrt(k.size(-1)))
            bais = self.bias
            bais = bais[:,:,:T,:T]
            att = att.masked_fill(bais == 0, float('-inf'))
            att = F.softmax(att, dim=-1)
            att = self.attn_dropout(att)
            y = att @ v # (B, nh, T, T) x (B, nh, T, hs) -> (B, nh, T, hs)
        y = y.transpose(1, 2).contiguous().view(B, T, C) # re-assemble all head outputs side by side

        # output projection
        y = self.resid_dropout(self.c_proj(y))
        return y

input经过矩阵计算得到权重att后,经过masked_fill掩码处理,得到了掩码的att权重,然后经过softmax归一化处理,最后的v乘积得到了每个output字符用前面input字符权重加权的表示,最后经过矩阵变换成voc_size大小的输出,就是我们要求的output输出,最后把我们计算得到output和target进行交叉熵损失函数计算,得到最终的loss,从而进行梯度下降优化整个模型。

相关推荐
强哥之神5 分钟前
Nexa AI发布OmniAudio-2.6B:一款快速的音频语言模型,专为边缘部署设计
人工智能·深度学习·机器学习·语言模型·自然语言处理·音视频·openai
yusaisai大鱼9 分钟前
tensorflow_probability与tensorflow版本依赖关系
人工智能·python·tensorflow
18号房客9 分钟前
一个简单的深度学习模型例程,使用Keras(基于TensorFlow)构建一个卷积神经网络(CNN)来分类MNIST手写数字数据集。
人工智能·深度学习·机器学习·生成对抗网络·语言模型·自然语言处理·tensorflow
神秘的土鸡17 分钟前
神经网络图像隐写术:用AI隐藏信息的艺术
人工智能·深度学习·神经网络
数据分析能量站18 分钟前
神经网络-LeNet
人工智能·深度学习·神经网络·机器学习
Jaly_W26 分钟前
用于航空发动机故障诊断的深度分层排序网络
人工智能·深度学习·故障诊断·航空发动机
小嗷犬28 分钟前
【论文笔记】Cross-lingual few-shot sign language recognition
论文阅读·人工智能·多模态·少样本·手语翻译
夜幕龙35 分钟前
iDP3复现代码数据预处理全流程(二)——vis_dataset.py
人工智能·python·机器人
吃个糖糖1 小时前
36 Opencv SURF 关键点检测
人工智能·opencv·计算机视觉
AI慧聚堂1 小时前
自动化 + 人工智能:投标行业的未来是什么样的?
运维·人工智能·自动化