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