一網打盡!5 大深度學習模型!RNN、CNN、Transformer、BERT、GPT

深度學習,在人工智能領域不斷取得了發展成就。其中,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 = 1
model = 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 = 0        for 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 = 5
for 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)