不同神經(jīng)網(wǎng)絡之間的區(qū)別,僅僅只是網(wǎng)絡結構的不同,明白了這個你才能知道應該怎么學習神經(jīng)網(wǎng)絡
在學習神經(jīng)網(wǎng)絡技術的過程中,會有多種不同的神經(jīng)網(wǎng)絡架構;如常見的RNN,CNN等;因此,我們很多人都會被這些亂七八糟的神經(jīng)網(wǎng)絡架構給迷惑住,即想學習神經(jīng)網(wǎng)絡又不知道應該怎么入手;面對各種各樣的網(wǎng)絡模型,也不知道應該去學習哪種。
但是,我們從問題的最本質出發(fā),不同的神經(jīng)網(wǎng)絡唯一的區(qū)別就是網(wǎng)絡結構的不同;之所以有多種神經(jīng)網(wǎng)絡模型的原因就在于不同的網(wǎng)絡架構能夠完成不同的任務。
比如,RNN適合文本處理,機器翻譯;CNN適合圖像處理等。

神經(jīng)網(wǎng)絡架構
在上一篇文章中——怎么實現(xiàn)一個神經(jīng)網(wǎng)絡?神經(jīng)網(wǎng)絡的組成結構中,實現(xiàn)一個神經(jīng)網(wǎng)絡基本上需要經(jīng)過統(tǒng)一的幾個步驟;數(shù)據(jù)集,模型設計,模型訓練等。
數(shù)據(jù)集根據(jù)不同的任務類型,需要整理和設計不同的數(shù)據(jù);而模型設計就涉及到不同的模型架構,如圖片處理就可以使用CNN架構;文字處理就可以使用RNN或Transformer架構等;或者用戶根據(jù)自己的需求自定義神經(jīng)網(wǎng)絡架構。
所以,從這個角度來看,一個可以使用的神經(jīng)網(wǎng)絡模型,從流程上來看幾乎都是相同的;區(qū)別只是神經(jīng)網(wǎng)絡架構的異同,但具體的架構是由具體的任務類型所決定的;而不是由神經(jīng)網(wǎng)絡模型本身所決定的。
甚至在很多情況下,會把多種神經(jīng)網(wǎng)絡架構結合起來使用。
因此,對我們這些學習神經(jīng)網(wǎng)絡技術的人來說;我們首先需要的并不是去學習哪些復雜的神經(jīng)網(wǎng)絡模型,而是應該從最簡單的模型結構開始;比如說神經(jīng)網(wǎng)絡技術中的Hello World——MINST手寫數(shù)字識別。

為什么很多神經(jīng)網(wǎng)絡的課程中都會把MINST手寫數(shù)字識別作為第一個神經(jīng)網(wǎng)絡教程?以及MINST神經(jīng)網(wǎng)絡模型能成為一個經(jīng)典模型?
原因就在于MINST神經(jīng)網(wǎng)絡模型——麻雀雖小,但五臟俱全。
在文章的開始,就介紹說不同神經(jīng)網(wǎng)絡模型的主要區(qū)別就在于模型結構的不同;而MINST神經(jīng)網(wǎng)絡模型的結構特別簡單;加上輸入輸出層也僅僅只是一個三層模型。
MINST手寫數(shù)字識別模型,由一個輸入層,以及兩個全鏈接層組成(第二個全鏈接層也就是輸出層);因此其模型結構特別簡單,模型結構代碼如下,由P yTorch實現(xiàn):
# 定義神經(jīng)網(wǎng)絡
class MINSTNetwork(nn.Module):
def __init__(self):
super(Network, self).__init__()
# 線性層1 輸入層和隱藏層之間的線性層
self.layer1 = nn.Linear(784, 256)
self.layer2 = nn.Linear(256, 10)
# 前向傳播 forward 函數(shù)中 輸入圖像為x
def forward(self, x):
x = x.view(-1, 28 * 28) # 使用view函數(shù) 將x展平作為輸入層
x = self.layer1(x) # 將x輸入至layer1
x = torch.relu(x) # 使用relu激活
return self.layer2(x) # 輸入至layer2計算結果以上代碼即為MINST神經(jīng)網(wǎng)絡模型的模型結構;layer1和layer2即為兩個全鏈接層;784是手寫數(shù)字識別的圖片——1*28*28,也就是784個神經(jīng)元作為輸入層;而中間的256就屬于用戶自定義神經(jīng)元的個數(shù)。
MINST手寫數(shù)字識別神經(jīng)網(wǎng)絡模型結構圖如下所示,只不過代碼中的中間層神經(jīng)網(wǎng)絡個數(shù)為256。

我想很多對神經(jīng)網(wǎng)絡感興趣或者在學習神經(jīng)網(wǎng)絡的技術人員,都看過和實現(xiàn)過以上圖片和代碼;但網(wǎng)絡上很多教程都只是介紹,這樣就可以實現(xiàn)一個手寫數(shù)字識別的神經(jīng)網(wǎng)絡模型;但從來卻沒有講過這到底是為什么。
而由此這里也帶來了一個問題,即為什么一個神經(jīng)網(wǎng)絡經(jīng)過兩個全鏈接層,以及在兩個全鏈接層經(jīng)過一次激活函數(shù)之后,就可以實現(xiàn)手寫數(shù)字的分類?
下圖是詢問DeepSeek得到的回答:

訓練過程:
- 輸入數(shù)據(jù):28x28 的圖像展平為 784 維向量。
- 第一次全連接層:將 784 維向量映射到 128 維隱藏層。
- 激活函數(shù):使用 ReLU 引入非線性。
- 第二次全連接層:將 128 維隱藏層映射到 10 維輸出層。
- 輸出:通過 Softmax 函數(shù)得到 10 個類別的概率分布。
從DP的回答來看,它也沒完全說明白為什么兩次全鏈接就可以完成手寫數(shù)字識別;雖然它說了兩個全鏈接層就可以學習到輸入數(shù)據(jù)的非線性特征;但具體原因是什么?
而這也是目前學習神經(jīng)網(wǎng)絡模型最疑惑的地方?
為什么經(jīng)過神經(jīng)網(wǎng)絡的變換之后,神經(jīng)網(wǎng)絡就可以學習到數(shù)據(jù)的特征;并以此生成新的內(nèi)容;當然也可能是作者的數(shù)學功底不好,沒有真正去深入研究過神經(jīng)網(wǎng)絡模型的底層數(shù)學原理。
目前來看,在學習神經(jīng)網(wǎng)絡模型的過程中,從零開始大模型開發(fā)與微調(diào)算是一本比較專業(yè),也比較好的書;作者在剛開始學習的過程中,發(fā)現(xiàn)看不太懂這本書,但現(xiàn)在有了一定的基礎之后,再看這本書發(fā)現(xiàn)寫的是真有水平。從簡到難,從理論到實踐都包含在內(nèi)。而現(xiàn)在這本書也是作者經(jīng)??吹囊槐緯?,雖然有些東西還是看不懂,但過段時間再看發(fā)現(xiàn)就能看懂了。
































