【minGPT】注意力模块

文章介绍了注意力机制的概念,将其比作人类看图时的聚焦过程。自注意力机制用于发现信息内部的关联,而多头自注意力则通过多个角度对信息进行解构和重组。文章还提供了因果自注意力的背景,解释了其在生成模型中的作用。最后,通过一个CausalSelfAttention类的代码示例展示了如何在实践中实现自注意力机制。

1 理论理解

1.1 注意力机制(Attention)

注意力机制很像人类看图片的逻辑,当我们看一张图片的时候,我们并没有看图片的全部内容,而是将注意力集中在了图片的焦点上。用上了注意力机制,信息(如下面的图片)就不在单纯是信息本身,而是附加了焦点。

1.2 注意力机制的实现

运用注意力机制处理信息就是将信息和关注的维度点乘,或者说将信息投影到关注的维度。比如一件商品有质量,价格,颜色,外形,生产商,发货地点等信息,但是你特别关注商品的价格,那么所有商品的所有信息投影到你的需求上,基本只有价格影响你买还是不买。

Mingpt 是一个基于 PyTorch 的 GPT 模型库,可以用于生成文本、文本分类等任务。下面是使用 mingpt 进行文本生成的简单示例: 1. 安装 mingpt:`pip install mingpt` 2. 导入必要的包: ```python import torch import torch.nn as nn from torch.utils.data import Dataset, DataLoader from mingpt.utils import set_seed from mingpt.trainer import Trainer, TrainerConfig from mingpt.model import GPT, GPTConfig ``` 3. 准备数据集,这里以生成一个简单的文本数据集为例: ```python data = "hello world" idx2char = list(set(data)) char2idx = {ch:i for i, ch in enumerate(idx2char)} data = [char2idx[ch] for ch in data] ``` 4. 定义数据集和数据加载器: ```python class CharDataset(Dataset): def __init__(self, data, seq_len): self.data = data self.seq_len = seq_len def __len__(self): return len(self.data) - self.seq_len def __getitem__(self, idx): return torch.tensor(self.data[idx:idx+self.seq_len]) batch_size = 1 seq_len = 3 dataset = CharDataset(data, seq_len) loader = DataLoader(dataset, batch_size=batch_size, shuffle=True) ``` 5. 定义 GPT 模型和训练器: ```python set_seed(42) n_vocab = len(idx2char) config = GPTConfig(n_vocab=n_vocab, n_ctx=seq_len) model = GPT(config) criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters()) trainer_config = TrainerConfig(max_epochs=100) trainer = Trainer(model, criterion, optimizer, loader, loader, trainer_config) ``` 6. 训练模型: ```python trainer.train() ``` 7. 生成新的文本: ```python model.eval() input = torch.tensor([char2idx['h'], char2idx['e'], char2idx['l']]).unsqueeze(0) output = model.generate(input, seq_len) new_text = ''.join([idx2char[idx] for idx in output[0]]) print(new_text) ``` 输出结果可能是:`hello worl`,表示生成了一个新的文本。 以上是 mingpt 的简单用法,更多高级用法可以参考官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值