神經網路是如何工作的?

京東雲技術團隊發表於2023-12-12

作為一名程式設計師,我們習慣於去了解所使用工具、中介軟體的底層原理,本文則旨在幫助大家瞭解AI模型的底層機制,讓大家在學習或應用各種大模型時更加得心應手,更加適合沒有AI基礎的小夥伴們。

一、GPT與神經網路的關係

GPT想必大家已經耳熟能詳,當我們與它進行對話時,通常只需關注自己問出的問題(輸入)以及GPT給出的答案(輸出),對於輸出內容是如何產生的,我們一無所知,它就像一個神秘的黑盒子。

GPT是一種基於神經網路的自然語言處理(NLP)模型,使用大量資料輸入神經網路對模型進行訓練,直到模型的輸出在一定程度上符合我們的預期,訓練成熟的模型就可以接收使用者的輸入,並針對輸入中的關鍵資訊給出經過“思考”後的答案。想要弄明白GPT究竟是如何“思考”的,或許我們可以從神經網路出發。

二、什麼是神經網路

那麼,神經網路到底是什麼呢?或者說,為什麼是神經網路?

高中的生物學告訴我們,人類的神經系統由數以億計的神經元連線而成,它們是生物學上的細胞,有細胞體、樹突、軸突等主要結構,不同神經元之間的樹突與軸突透過突觸與其他神經元相互連線,形成複雜的人腦神經網路。

人工智慧為了使機器獲得接近人類的智力,嘗試效仿人腦的思考過程,創造出了一種模仿人腦神經元之間相互連線的計算模型——神經網路。它由多層神經元組成,每個神經元接收輸入併產生相應的輸出。根據上述定義,圖1中黑盒子的內部結構已初具輪廓,下圖中的每個圓圈都代表一個神經元,神經元具有計算能力,可以將計算出來的結果傳遞到下一個神經元。

在生物學中,大腦的結構越簡單,智力也就越低;相應地,神經系統越複雜,能處理的問題越多,智力也就越高。人工神經網路也是如此,越複雜的網路結構計算能力越強大,這也是為什麼發展出了深度神經網路。之所以被稱為"深度",是因為它具有多個隱藏層(即上圖中縱向神經元的層數),相對於傳統的淺層神經網路,深度神經網路具有更多的層級結構。

訓練深度神經網路的過程就叫做深度學習。構建好深度神經網路之後,我們只需要將訓練資料輸入到神經網路中,它就會自發地學習資料中的特徵。比如說我們想要訓練一個深度神經網路來識別貓,只需要將大量不同種類、不同姿勢、不同外觀的貓的圖片輸入到神經網路中讓它學習。訓練成功後,我們將一張任意的圖片輸入到神經網路中,它會告訴我們裡面是否有貓。

三、神經網路是如何計算的

現在,我們已經知道了什麼是神經網路以及它的基本結構,那麼神經網路中的神經元是如何對輸入資料進行計算的呢?

在此之前,我們要解決一個問題:資料是如何輸入到神經網路中的?下面以影像和文字型別的資料為例講解。

資料是如何輸入到神經網路中的

1、影像輸入處理

想象一個畫面:當我們把一張圖片放大到一定程度時,可以看到一格一格的小方塊。這個小方塊就稱為畫素點,一張圖片的畫素點越多,說明畫素越高,圖片越清晰。每個畫素點僅由一種顏色構成,光學中的三原色包含紅色、綠色、藍色,透過不同程度地混合這三種顏色可以產生出所有其他顏色。在RGB模型中,每種顏色的強度可以用一個數值來表示,通常在0到255之間。紅色的強度值為0表示沒有紅色光,255表示最大強度的紅色光;綠色和藍色的強度值也是類似的。

為了儲存一張影像,計算機要儲存三個獨立的矩陣,這三個矩陣分別與影像的紅色、綠色和藍色的強度相對應。如果影像的大小是256 * 256 個畫素,那麼在計算機中使用三個256 * 256 的矩陣(二維陣列)就能表示這張影像。可以想象將三個矩陣表示的顏色重疊堆放在一起,便可顯現出影像的原始樣貌。

現在我們得到了影像在計算機中的表示方式,那麼如何將它輸入到神經網路呢?

通常我們會把上述三個矩陣轉化為一個向量,向量可以理解成1 * n(行向量)或n * 1(列向量)的陣列。那麼這個向量的總維數就是256 * 256 * 3,結果是196608。在人工智慧領域中,每一個輸入到神經網路的資料都被叫做一個特徵,那麼上面的這張影像中就有196608個特徵。這個196608維的向量也被叫做特徵向量。神經網路接收這個特徵向量作為輸入,並進行預測,然後給出相應的結果。

2、文字輸入處理

文字是由一系列字元組成的,首先需要將文字劃分成有意義的單詞,這個過程稱為分詞。在分詞後,構建一個由出現的所有單詞或部分高頻單片語成的詞彙表(也可以使用已有的詞彙表)。詞彙表中的每個單詞都會被分配一個唯一索引,這樣可以將文字轉換為離散的符號序列,方便神經網路進行處理。在輸入神經網路之前,通常會將文字的符號序列轉換為密集的向量表示。

以文字“How does neural network works? ”為例:

  • 分詞:["how", "does", "neural", "network", "works"]
  • 構建詞彙表:
  • 序列化文字資料:["how", "does", "neural", "network", "works"] -->[0, 1, 2, 3, 4]
  • 向量化:
#此處以one-hot向量表示法為例:
[[1, 0, 0, 0, 0]
 [0, 1, 0, 0, 0]
 [0, 0, 1, 0, 0]
 [0, 0, 0, 1, 0]
 [0, 0, 0, 0, 1]]


最後,將向量序列作為輸入,給神經網路進行訓練或預測。

至此我們已經知道了資料以怎樣的形式輸入到神經網路中,那麼神經網路是如何根據這些資料進行訓練的呢?

神經網路是如何進行預測的

首先明確模型訓練和預測的區別:訓練是指透過使用已知的資料集來調整模型的引數,使其能夠學習到輸入和輸出之間的關係;預測是指使用訓練好的模型來對新的輸入資料進行預測。

神經網路的預測其實是基於一個很簡單的線性變換公式:

其中,_x_表示特徵向量,_w_是特徵向量的權重,表示每個輸入特徵的重要程度,_b_表示閾值,用於影響預測結果。公式中的dot()函式表示將_w_和_x_進行向量相乘。舉例:如果一個輸入資料有_i_個特徵,代入公式計算結果為:

如何理解這個公式呢?假設你需要決策週末是否去公園划船,你對此猶豫不決,需要神經網路幫你做決定。決定是否去划船有三個因素:天氣是否晴朗溫暖、地點是否遠近適中、同行玩伴是否合心意。實際情況是出行那天天氣為陰且偶有陣風、地點在20km外的偏遠郊區、同行玩伴是心儀已久的大帥哥。這三個因素即為輸入資料的特徵向量x=[x1, x2, x3],我們需要根據特徵對結果的影響來設定特徵值,如“天氣不好”和“地點偏遠”對結果具有負向的影響,我們可以把它設為-1,“同行玩伴是心儀已久的大帥哥”顯然對結果有大大的正向影響,可以把它設為1,即特徵向量x=[-1, -1, 1]。接下來,需要根據你的偏好來設定三個特徵的權重,也就是每個因素對你最終決策的影響程度。如果你不在乎天氣和地點,只要與大帥哥同行便風雨無阻,那麼可以將權重設定為w=[1, 1, 5];如果你是個懶狗,那你可能會設定權重為w=[2, 6, 3];總之,權重是根據對應特徵的重要程度來確定的。

我們選擇第一組權重w=[1, 1, 5],特徵向量為x=[-1, -1, 1], 並設定閾值b=1,假設結果z ≥ 0表示去,z < 0表示不去,計算預測結果z = (x1*w1 + x2*w2 + x3*w3) + b = 4 > 0,因此神經網路給出的預測結果是:去公園划船。

上面使用的公式

本質上是一種邏輯迴歸,用於將輸入資料對映到二分類的機率輸出。邏輯迴歸通常使用一個特定的啟用函式來實現將_z_值到[0, 1]的對映關係,即 Sigmoid函式,它將線性變換的結果透過非線性對映轉化為機率值。通常,大於等於0.5的機率值被視為正類,小於0.5的機率值被視為負類。

Sigmoid函式的公式和影像如下所示:

除了能將結果輸出範圍控制在0到1之間,Sigmoid函式(或其他啟用函式)另外一個重要作用就是將線性變換的結果進行非線性對映,使神經網路可以學習和表示更加複雜的非線性關係。如果沒有啟用函式,神經網路只能解決簡單的線性問題;加入啟用函式之後,只要層數足夠多,神經網路就能解決所有問題,因此啟用函式是必不可少的。

神經網路是如何進行學習的

得到預測結果後,神經網路會透過損失函式判斷預測結果是否準確,如果不夠準確,神經網路會進行自我調整,這就是學習的過程。

損失函式用於衡量模型的預測結果與真實標籤之間的誤差。透過將預測值與真實值進行比較,損失函式提供了一個數值指標,反映了模型當前的預測效能。較小的損失值表示模型的預測結果與真實標籤更接近,而較大的損失值表示預測誤差較大。下面介紹一個常用於二分類問題的損失函式(對數損失):

神經網路學習的目的,就是透過調整模型的引數使損失函式達到最小值,從而改善模型的預測效能,這個過程也稱為模型的訓練。梯度下降演算法可以解決這一問題,透過該演算法找到合適的_w_(特徵的權重)和_b_(閾值),梯度下降演算法會一步一步地改變_w_和_b_的值,使損失函式的結果越來越小,也就是使預測結果更精準。

這裡需要注意的是,如果學習率設定過小,則需要多次梯度下降才能到達最低點,浪費機器執行資源;如果設定過大,則可能錯過最低點直接到了圖中左側的點位,因此需要根據實際情況選擇一個正確的學習率。

神經網路的計算過程主要有兩個步驟:正向傳播和反向傳播。正向傳播用於計算神經元的輸出,也就是上述對輸入特徵進行加權求和、並透過啟用函式進行非線性變換的過程;反向傳播用於更新最佳化模型引數,透過計算損失函式關於模型引數的梯度,從輸出層向輸入層反向傳播梯度的過程(反向傳播涉及大量的數學計算,感興趣的讀者可以深入瞭解)。

四、綜述

綜上所述,神經網路訓練和學習的過程其實就是對模型引數進行不斷調優、減少預測損失值過程。經過充分訓練後,模型能夠從輸入資料中學習到有效的特徵表示和權重分配,從而能夠對未見過的資料進行準確的預測。訓練完成的神經網路模型可以應用於各種實際問題。比如,在影像分類任務中,卷積神經網路可以根據輸入影像的特徵自動識別物體或圖案;在自然語言處理任務中,迴圈神經網路可以理解和生成文字;在推薦系統中,多層感知機神經網路可以根據使用者的歷史行為進行個性化推薦。

這篇文章對神經網路的工作機制做了淺層次的講解,如有不正之處,敬請指教!

五、引用

https://cloud.tencent.com/developer/article/1384762

http://zhangtielei.com/posts/blog-nn-visualization.html

https://blog.csdn.net/pingchangxin_6/article/details/79754384

ps:部分專業名詞釋義來自GPT-3.5-turbo

作者:京東零售 歐陽舟俞

來源:京東雲開發者社群 轉載請註明來源

相關文章