自学内容网 自学内容网

突破一个强大算法模型,Transformer !!

今儿和大家再来聊聊 Transformer ,以及给一个简单的代码案例让大家更好的理解~

Transformer 是一种深度学习模型架构,最初由 Vaswani 等人在 2017 年提出,它的设计用于解决序列到序列(sequence-to-sequence)任务,主要应用在自然语言处理 (NLP) 领域。与传统的 RNN(递归神经网络)或 CNN(卷积神经网络)不同,Transformer 通过 自注意力机制 处理整个输入序列,而无需依赖序列的时间步,极大提高了模型的并行化效率。

Transformer 主要由两部分组成:

  1. 编码器(Encoder):将输入序列映射到隐藏表示。

  2. 解码器(Decoder):根据隐藏表示生成输出序列。

为了详细解释 Transformer 的工作原理,我将按以下几个主要模块进行拆解,并给出底层推导公式:

1. Transformer 的整体架构

Transformer 的核心组件包括:

  • 输入嵌入 (Input Embedding):将序列中的词或 token 嵌入为固定维度的向量。

  • 位置编码 (Positional Encoding):补充嵌入的信息,使模型能感知输入中 token 的顺序。

  • 自注意力机制 (Self-Attention):通过权重机制对序列中的各个元素进行加权,捕获远程依赖关系。

  • 前馈网络 (Feedforward Network):用于每个 token 的逐点非线性映射。

  • 残差连接与层归一化 (Residual Connection and Layer Normalization):用于梯度流动和模型稳定性。

编码器-解码器结构

  • 编码器是由多个相同结构的层堆叠组成,主要由 多头自注意力机制(Multi-Head Attention)前馈网络(Feedforward Network) 组成。

  • 解码器与编码器类似,但除了自注意力外,解码器还包括一个额外的 交叉注意力层(Cross-Attention Layer),用来关注编码器的输出。

2. 自注意力机制(Self-Attention)

Transformer 中的自注意力机制是其成功的核心。在每一层中,序列中的每个元素(词或 token)都与序列中的其他元素进行交互,从而生成该位置的表示。自注意力机制主要包含以下几个步骤:

在这里插入图片描述

在这里插入图片描述

3. 前馈网络(Feedforward Network)

在每一个自注意力模块之后,Transformer 还包括一个前馈神经网络层,其作用是为每个位置的表示进行进一步的非线性变换。前馈网络对每个位置的向量单独进行操作,公式如下:

这里, 和 是权重矩阵, 和 是偏置项, 是 ReLU 激活函数。

在这里插入图片描述

6. Transformer 的训练

Transformer 模型通常通过 自回归 训练方式来进行序列生成任务。即在训练过程中,解码器会生成序列的前一部分,并使用这些生成的部分预测接下来的词语。模型通过 交叉熵损失 进行优化,损失函数为:

m a t h c a l L = − s u m _ t = 1 T l o g P ( y _ t ∣ y _ < t , x ) = " " \\mathcal{L} = - \\sum\_{t=1}^{T} \\log P(y\_t | y\_{<t}, x)="" mathcalL=sum_t=1TlogP(y_ty_<t,x)=""=“” 是输入序列, 是第 个输出。

Transformer 通过自注意力机制实现了对序列全局依赖的建模,避免了 RNN 中的长程依赖问题。多头注意力机制允许模型从不同的视角进行关注,残差连接和层归一化则加速了模型训练并防止梯度消失。

完整案例

好的,下面我将提供一个关于“Transformer”的完整案例,包括模型训练、数据生成、可视化,以及使用Python生成复杂的图形。我们将使用虚拟数据集来进行模型训练,并展示两个复杂的图形。

案例概述

在这个案例中,我们将构建一个基于Transformer的简单时间序列预测模型。我们将生成一个虚拟的时间序列数据集,使用Transformer进行训练,并绘制预测结果和实际值的对比图,以及模型的损失曲线。

完整Python代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import MinMaxScaler
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, Dataset

# 设置随机种子以确保结果可重现
np.random.seed(42)
torch.manual_seed(42)

# 生成虚拟时间序列数据
def generate_data(seq_length=1000):
    time = np.arange(seq_length)
    series = np.sin(0.1 * time) + np.random.normal(scale=0.5, size=seq_length)  # 加入噪声的正弦波
    return series

data = generate_data()

# 将数据分为训练集和测试集
train_size = int(len(data) * 0.8)
train_data = data[:train_size]
test_data = data[train_size:]

# 数据归一化
scaler = MinMaxScaler()
train_data = train_data.reshape(-1, 1)
test_data = test_data.reshape(-1, 1)
train_data = scaler.fit_transform(train_data)
test_data = scaler.transform(test_data)

# 自定义数据集
class TimeSeriesDataset(Dataset):
    def __init__(self, data, seq_length=20):
        self.data = data
        self.seq_length = seq_length

    def __len__(self):
        return len(self.data) - self.seq_length

    def __getitem__(self, idx):
        x = self.data[idx:idx + self.seq_length]
        y = self.data[idx + self.seq_length]
        return x, y

# 创建数据加载器
seq_length = 20
train_dataset = TimeSeriesDataset(train_data, seq_length)
test_dataset = TimeSeriesDataset(test_data, seq_length)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)

# 定义LSTM模型
class LSTMModel(nn.Module):
    def __init__(self, input_dim=1, hidden_dim=64, output_dim=1):
        super(LSTMModel, self).__init__()
        self.lstm = nn.LSTM(input_dim, hidden_dim, batch_first=True)
        self.fc = nn.Linear(hidden_dim, output_dim)

    def forward(self, x):
        x, _ = self.lstm(x)
        return self.fc(x[:, -1, :])  # 取最后一个时间步的输出

# 训练模型
model = LSTMModel()
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 记录损失
train_losses = []

# 训练循环
for epoch in range(50):
    epoch_loss = 0
    for x_batch, y_batch in train_loader:
        optimizer.zero_grad()
        y_pred = model(x_batch.float())
        loss = criterion(y_pred, y_batch.float())
        loss.backward()
        optimizer.step()
        epoch_loss += loss.item()
    train_losses.append(epoch_loss / len(train_loader))
    print(f'Epoch {epoch+1}, Loss: {epoch_loss / len(train_loader):.4f}')

# 测试模型
model.eval()
predictions = []
with torch.no_grad():
    for x_batch, _ in test_loader:
        y_pred = model(x_batch.float())
        predictions.append(y_pred.numpy())

# 将预测结果转为一维数组
predictions = np.concatenate(predictions).flatten()

# 将数据反归一化
predictions = scaler.inverse_transform(predictions.reshape(-1, 1)).flatten()
test_data_actual = scaler.inverse_transform(test_data[seq_length:].reshape(-1, 1)).flatten()

# 可视化结果
plt.figure(figsize=(14, 6))
plt.subplot(2, 1, 1)
plt.plot(predictions, label='Predictions', color='skyblue', linewidth=2)
plt.plot(test_data_actual, label='Actual', color='coral', linewidth=2)
plt.title('LSTM Time Series Prediction')
plt.xlabel('Time Steps')
plt.ylabel('Value')
plt.legend()
plt.grid()

# 绘制损失曲线
plt.subplot(2, 1, 2)
plt.plot(train_losses, label='Train Loss', color='purple', linewidth=2)
plt.title('Training Loss Over Epochs')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.grid()

plt.tight_layout()
plt.show()
  1. 数据生成:我们生成了一段包含噪声的正弦波数据,作为时间序列数据集。

  2. 数据预处理:使用MinMaxScaler进行归一化处理,并定义了一个TimeSeriesDataset类来处理数据。

  3. 模型定义:构建了一个简单的Transformer模型,包括嵌入层、Transformer层和全连接层。

  4. 训练模型:对模型进行训练,并记录每个epoch的损失。

  1. 时间序列预测图:展示模型预测值与实际值的对比。

  2. 训练损失曲线:展示训练过程中损失的变化趋势。

如何学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

学习路线

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓


原文地址:https://blog.csdn.net/2401_85373396/article/details/142914858

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!