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