什么是神經(jīng)網(wǎng)絡(luò)?神經(jīng)網(wǎng)絡(luò)開發(fā)框架:PyTorch 和架構(gòu) Transformer 的區(qū)別和聯(lián)系
我們都知道大模型的本質(zhì)是一個(gè)神經(jīng)網(wǎng)絡(luò)模型,因此我們學(xué)習(xí)大模型就是在學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)模型;但了解了很多關(guān)于神經(jīng)網(wǎng)絡(luò)的理論,但大部分人對(duì)神經(jīng)網(wǎng)絡(luò)都沒有一個(gè)清晰的認(rèn)識(shí),也就是說神經(jīng)網(wǎng)絡(luò)到底是什么?它長什么樣?
事實(shí)上所謂的神經(jīng)網(wǎng)絡(luò)本質(zhì)上就是一個(gè)數(shù)學(xué)模型,里面涉及大量的數(shù)學(xué)運(yùn)算;只不過其運(yùn)算的主要數(shù)據(jù)類型是——向量,具體表現(xiàn)為多維矩陣。
PyTorch和Transformer
在神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)研究過程中,有兩個(gè)東西是繞不過去的;一個(gè)是PyTorch神經(jīng)網(wǎng)絡(luò)開發(fā)框架,另一個(gè)就是Transformer神經(jīng)網(wǎng)絡(luò)架構(gòu)。它們兩者之間的關(guān)系就類似于編程語言和算法之間的關(guān)系,PyTorch就是編程語言;而Transformer就是算法。
Transformer即可以通過PyTorch框架實(shí)現(xiàn),也可以通過其它框架實(shí)現(xiàn),比如Tensorflow;PyTorch也可以實(shí)現(xiàn)其它的網(wǎng)絡(luò)架構(gòu)模型,比如CNN和RNN等。
因此,PyTorch也被稱為科學(xué)計(jì)算框架,原因就在于神經(jīng)網(wǎng)絡(luò)的本質(zhì)就是數(shù)學(xué)模型,而數(shù)學(xué)模型就是不停地做科學(xué)計(jì)算。
如下就是一個(gè)簡單的使用PyTorch實(shí)現(xiàn)的簡單神經(jīng)網(wǎng)絡(luò)模型,從代碼中可以看出,一個(gè)神經(jīng)網(wǎng)絡(luò)主要由兩部分組成,init初始化方法和forward前向傳播方法。
import torch
import torch.nn as nn
# 定義簡單的神經(jīng)網(wǎng)絡(luò)架構(gòu)
class SimpleNeuralNetwork(nn.Module):
def __init__(self):
super(SimpleNeuralNetwork, self).__init__()
self.layer1 = nn.Linear(10, 5) # 輸入層10維,輸出5維
self.layer2 = nn.Linear(5, 2) # 隱藏層5維,輸出2維
def forward(self, x):
x = torch.relu(self.layer1(x)) # 使用ReLU激活函數(shù)
x = self.layer2(x) # 輸出層不需要激活函數(shù)
return x
# 創(chuàng)建模型實(shí)例并輸出網(wǎng)絡(luò)結(jié)構(gòu)
model = SimpleNeuralNetwork()
print(model)
在init方法中主要用來初始化一些參數(shù),以及神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)層;比如Linear就是一個(gè)線性神經(jīng)網(wǎng)絡(luò)層——也叫做全連接層。
而forward方法就用來做一些科學(xué)計(jì)算,也就是神經(jīng)網(wǎng)絡(luò)模型中的傳播算法等。比如上面代碼中,就是對(duì)目標(biāo)數(shù)據(jù)x先使用layer1網(wǎng)絡(luò)層做一次線性變換,然后再使用relu函數(shù)進(jìn)行激活。之后在使用layer2線性網(wǎng)絡(luò)做一次線性變換,最終返回變換之后x的值。
在神經(jīng)網(wǎng)絡(luò)中,除了輸入層與輸出層之外;任何一層網(wǎng)絡(luò)的輸入都來自上層網(wǎng)絡(luò)的輸出;而任何一層網(wǎng)絡(luò)的輸出就是下層網(wǎng)絡(luò)的輸入。
所以,神經(jīng)網(wǎng)絡(luò)的核心就是:“將現(xiàn)實(shí)問題轉(zhuǎn)化為數(shù)學(xué)問題,通過求解數(shù)學(xué)問題,從而解決現(xiàn)實(shí)問題”。
但是,為什么多維矩陣在經(jīng)過多層神經(jīng)網(wǎng)絡(luò)的多次變換之后,就能夠“理解”自然語言,“看懂”圖片和視頻;這個(gè)就是Transformer等神經(jīng)網(wǎng)絡(luò)架構(gòu)需要解決的問題了。
從外面來看,神經(jīng)網(wǎng)絡(luò)就是一個(gè)黑盒,我們輸入一些數(shù)據(jù),然后神經(jīng)網(wǎng)絡(luò)這個(gè)黑盒就能根據(jù)某種規(guī)則給我們生成一些新的數(shù)據(jù);但我們并不知道神經(jīng)網(wǎng)絡(luò)中到底發(fā)生了什么。
但把這個(gè)黑盒打開之后就可以看到,Transformer這個(gè)黑盒是由Encoder-Decoder編碼器和解碼器組成的;而編碼器和解碼器又由更小的組件組成——比如多頭注意力,殘差層等組成。
如上圖所示就是Transformer論文提供的經(jīng)典架構(gòu)圖;詳細(xì)說明了Transformer的編碼器和解碼器是怎么構(gòu)成的。
因此,PyTorch和Transformer的關(guān)系就是工具和理論的關(guān)系;沒了工具就無法制造出神經(jīng)網(wǎng)絡(luò),而沒有理論神經(jīng)網(wǎng)絡(luò)就無法解決實(shí)際問題;這里PyTorch就是制造神經(jīng)網(wǎng)絡(luò)的工具;而Transformer就是讓神經(jīng)網(wǎng)絡(luò)能夠正常運(yùn)行的理論。