社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

一网打尽!5大深度学习模型!RNN、CNN、Transformer、BERT、GPT

数据派THU • 2 周前 • 132 次点击  

图片

本文约3600字,建议阅读5分钟

本文介绍了5大深度学习模型。


深度学习,在人工智能领域不断取得了发展成就。其中,RNN、CNN、Transformer、BERT以及GPT五种深度学习模型,凭借其独特的优势,在计算机视觉、自然语言处理等诸多领域实现了重要突破。


本文将从四大维度——关键技术、数据处理、应用场景以及经典案例,对这五种模型进行简要介绍。首先,在关键技术方面,这五种模型各具特色,它们通过不同的算法和结构来提取数据中的深层信息,实现了高效的特征学习和模式识别。

1、RNN(循环神经网络)

图片

时间:起始于20世纪90年代
关键技术:依托独特的循环结构与记忆单元
处理数据:尤其擅长应对时间序列数据的处理
应用场景:广泛应用于自然语言处理、语音识别、时间序列预测等诸多领域

RNN,作为一种高效的神经网络模型,其核心架构呈现为独特的循环体形式,使之能够有效应对序列数据的处理需求。其最显著的特点在于,RNN在处理当前输入信息的同时,亦能够将之前的信息有效储存于记忆单元之中,进而形成持续性的记忆能力。这种设计赋予了RNN在处理具有时序关系的数据时得天独厚的优势,因此,在自然语言处理、语音识别等任务中,RNN均展现出了卓越的性能与广泛的应用前景。

经典案例:RNN文本分类Python代码示例

import torchimport torch.nn as nnimport torch.optim as optimfrom torchtext.legacy import data, datasetsfrom torchtext.legacy import Field


    
# 定义文本字段和标签字段TEXT = Field(tokenize='spacy', lower=True)LABEL = Field(sequential=False, use_vocab=False)# 定义数据集和迭代器train_data, test_data = datasets.IMDB.splits(TEXT, LABEL)train_iterator, test_iterator = data.BucketIterator.splits(    (train_data, test_data),     batch_size=64,     device=torch.device('cuda' if torch.cuda.is_available() else 'cpu'))# 加载预训练词向量TEXT.build_vocab(train_data, max_size=10000, vectors="glove.6B.100d", unk_init=torch.Tensor.normal_)class RNN(nn.Module):def __init__(self, input_dim, embedding_dim, hidden_dim, output_dim):        super().__init__()        self.embedding = nn.Embedding(input_dim, embedding_dim)        self.rnn = nn.RNN(embedding_dim, hidden_dim)        self.fc = nn.Linear(hidden_dim, output_dim)def forward(self, text):# 将文本转化为词嵌入        embedded = self.embedding(text)# 对词嵌入应用RNN        output, hidden = self.rnn(embedded)# 取RNN的最后一个输出assert torch.equal(output[-1,:,:], hidden.squeeze(0))# 通过全连接层进行分类return self.fc(hidden.squeeze(0))INPUT_DIM = len(TEXT.vocab)EMBEDDING_DIM = 100HIDDEN_DIM = 256OUTPUT_DIM = 1model = RNN(INPUT_DIM, EMBEDDING_DIM, HIDDEN_DIM, OUTPUT_DIM)predictor = model.to(device)optimizer = optim.Adam(predictor.parameters())criterion = nn.BCEWithLogitsLoss()def train(model, iterator, optimizer, criterion):    model.train()    epoch_loss = 0for batch in iterator:        text, labels = batch.text.to(device), batch.label.float().unsqueeze(1).to(device)        optimizer.zero_grad()        predictions = model(text).squeeze(1)        loss = criterion(predictions, labels)        loss.backward()        optimizer.step()        epoch_loss += loss.item()return epoch_loss / len(iterator)N_EPOCHS = 5for epoch in range(N_EPOCHS):    train_loss = train(predictor, train_iterator, optimizer, criterion)    print(f'Epoch: {epoch+1:02}, Train Loss: {train_loss:.3f}')

2、CNN(卷积神经网络)

时间:20世纪90年代末至21世纪初
关键技术:卷积运算与池化操作
处理数据:尤为擅长处理图像数据
应用场景:广泛应用于计算机视觉、图像分类、物体检测等领域

CNN作为一种独特的神经网络模型,其核心结构由多个卷积层与池化层精妙组合而成。卷积层通过精巧的计算方法,能够有效地从图像中提炼出各类局部特征;而池化层则发挥着至关重要的作用,通过降低特征数量,显著提升了计算效率。正是这样的结构特点,使得CNN在处理计算机视觉任务时表现出色,如图像分类、物体检测等任务皆能游刃有余。相较于RNN,CNN在处理图像数据方面更胜一筹,它能够自动学习图像中的局部特征,无需人工设计繁琐的特征提取器,从而实现了更高效、更精准的处理效果。

经典案例:CNN猫狗识别Python代码示例

Python# 导入所需的库import numpy as npfrom keras.preprocessing.image import ImageDataGeneratorfrom keras.models import Sequentialfrom keras.layers import Conv2D, MaxPooling2Dfrom keras.layers import Activation, Dropout, Flatten, Densefrom keras import backend as K
# 图像的尺寸img_width, img_height = 150, 150
# 设定训练数据和验证数据的路径train_data_dir = 'data/train'validation_data_dir = 'data/validation'nb_train_samples = 2000nb_validation_samples = 800epochs = 50batch_size = 16
if K.image_data_format() == 'channels_first': input_shape = (3, img_width, img_height)else: input_shape = (img_width, img_height, 3)
# 构建CNN模型model = Sequential()model.add(Conv2D(32, (3, 3), input_shape=input_shape))model.add(Activation('relu'))model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3)))model.add(Activation('relu'))model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3)))model.add(Activation('relu'))model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten()) # 将3D特征图展平为1D特征向量model.add(Dense(64))model.add(Activation('relu'))model.add(Dropout(0.5))model.add(Dense(1))model.add(Activation('sigmoid')) # 二分类问题使用sigmoid激活函数
# 编译模型model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
# 数据增强,增加模型的泛化能力train_datagen = ImageDataGenerator( rescale=1. / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = train_datagen.flow_from_directory( train_data_dir, target_size=(img_width, img_height), batch_size=batch_size, class_mode='binary')
validation_generator = test_datagen.flow_from_directory( validation_data_dir, target_size=(img_width, img_height), batch_size=batch_size, class_mode='binary')
# 训练模型model.fit_generator( train_generator, steps_per_epoch=nb_train_samples // batch_size, epochs=epochs, validation_data=validation_generator, validation_steps=nb_validation_samples // batch_size)
# 评估模型score = model.evaluate_generator(validation_generator, nb_validation_samples // batch_size)print('Test loss:', score[0])print('Test accuracy:', score[1])

3、Transformer

图片


时间:2017年
关键技术:自注意力机制与多头注意力机制的完美融合
处理数据:针对长序列数据展现卓越处理能力
应用场景:广泛应用于自然语言处理、机器翻译、文本生成等诸多领域

Transformer,作为一种基于自注意力机制的神经网络模型,凭借其独特的架构和机制,成为了深度学习领域的璀璨明星。其精妙之处在于由多个编码器和解码器共同构建的基本结构,编码器负责将输入的序列精妙地转换为向量表示,而解码器则负责将这一向量表示巧妙地还原为输出序列。

Transformer的创新之处在于引入了自注意力机制,这一机制赋予了模型捕捉序列中长距离依赖关系的非凡能力。它不再局限于传统的局部信息处理,而是能够洞察全局,把握整体,从而在处理长序列数据时表现出色。

在自然语言处理领域,Transformer以其卓越的性能赢得了广泛的赞誉和应用。无论是机器翻译中的精确翻译,还是文本生成中的流畅表达,Transformer都展现出了令人瞩目的成果。它的出现,无疑为自然语言处理领域的发展注入了新的活力。

经典案例:Transformer进行文本生成的Python代码示例

Python

from transformers import GPT2LMHeadModel, GPT2Tokenizer
# 加载预训练的模型和分词器model_name = "gpt2-medium"tokenizer = GPT2Tokenizer.from_pretrained(model_name)model = GPT2LMHeadModel.from_pretrained(model_name)
# 输入的文本input_text = "The quick brown fox"
# 对输入文本进行编码input_ids = tokenizer.encode(input_text, return_tensors="pt")
# 生成文本 generated = model.generate(input_ids, max_length=50, num_return_sequences=1)
# 解码生成的文本output_text = tokenizer.decode(generated[0], skip_special_tokens=True)
print(output_text)

4、BERT(Bidirectional Encoder Representations from Transformers)

图片


时间:2018年
关键技术:双向Transformer编码器与预训练微调技术
处理数据:擅长处理双向上下文信息,为语言理解提供了强大的基础
应用场景:自然语言处理、文本分类、情感分析等

BERT是一种基于Transformer的预训练语言模型,其最大的创新在于引入了双向Transformer编码器。这一设计使得模型能够综合考虑输入序列的前后上下文信息,极大地提升了语言理解的准确性。通过在海量文本数据上进行预训练,BERT成功地捕捉并学习了丰富的语言知识。随后,只需针对特定任务进行微调,如文本分类、情感分析等,便可轻松实现高效的应用。

BERT在自然语言处理领域取得了显著的成就,并广泛应用于各类NLP任务,成为当前自然语言处理领域的翘楚。

经典案例:

基于BERT的文本生成Python代码示例:

Python

import torchfrom transformers import BertTokenizer, BertForMaskedLM
# 初始化BERT模型和分词器tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')model = BertForMaskedLM.from_pretrained('bert-base-uncased')
# 待生成文本的句子sentence = "BERT is a powerful NLP model that can be used for a wide range of tasks, including text generation. It is based on the Transformer architecture and has been pre-trained on a large corpus of text."
# 对句子进行分词和编码input_ids = torch.tensor([tokenizer.encode(sentence, add_special_tokens=True)])
# 选择需要生成文本的位置,此处我们假设需要生成一个词替换句子中的"[MASK]"masked_index = torch.where(input_ids == tokenizer.mask_token_id)[1]
# 使用BERT模型进行预测outputs = model(input_ids)predictions = outputs[0]
# 获取预测结果中概率最高的词predicted_token = tokenizer.convert_ids_to_tokens(torch.argmax(predictions[0, masked_index], dim=-1).tolist())
# 输出预测结果
print(f"Predicted token: {predicted_token}")

5、GPT(Generative Pre-trained Transformer)

图片



时间:2018年
关键技术:单向Transformer编码器与预训练微调技术
处理数据:擅长生成连贯且富有逻辑的文本
应用场景:自然语言处理、文本生成、摘要提取等

GPT,作为一种基于Transformer架构的预训练语言模型,其独特的创新之处在于引入了单向Transformer编码器。这一设计使得模型能够更精准地捕捉输入序列的上下文信息,从而生成更为连贯的文本内容。通过在庞大的文本数据集中进行预训练,GPT积累了丰富而深入的语言知识。之后,在针对特定任务进行微调时,GPT能够展现出强大的适应性和灵活性,如文本生成、摘要提取等。

GPT在自然语言处理领域获得了显著的突破和广泛的应用,成为众多NLP任务中的佼佼者。无论是智能对话、内容创作还是信息提取,GPT都展现出了其卓越的性能和潜力。

GPT文本生成的Python代码示例如下:

from transformers import GPT2LMHeadModel, GPT2Tokenizerimport torch
# 初始化tokenizer和modeltokenizer = GPT2Tokenizer.from_pretrained('gpt2-medium')model = GPT2LMHeadModel.from_pretrained('gpt2-medium')
# 定义想要开始文本生成的内容,并转换为token IDscontext = "人工智能的发展给社会带来了巨大变革,"input_ids = tokenizer.encode(context, return_tensors='pt')
# 设置生成文本的长度length = 100
# 设置为评估模式model.eval()
# 生成文本with torch.no_grad(): output = model.generate(input_ids, max_length=length+len(input_ids[0]), pad_token_id=tokenizer.eos_token_id)
# 将生成的token IDs转换回文本generated_text = tokenizer.decode(output[0][len(input_ids[0]):], skip_special_tokens=True)
# 打印生成的文本print(generated_text)

编辑:王菁



关于我们

数据派THU作为数据科学类公众号,背靠清华大学大数据研究中心,分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识,努力建设数据人才聚集平台、打造中国大数据最强集团军。



图片

新浪微博:@数据派THU

微信视频号:数据派THU

今日头条:数据派THU

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/179899
 
132 次点击