一網打盡!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)# 對詞嵌入應用RNNoutput, 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 = 16if 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)



















