####深度學習

无皈發表於2024-03-16

感知機

2.1感知機是什麼

感知機接收多個輸入訊號,輸出一個訊號。,感知機的訊號只有“流/不流”1/0兩種取值。

輸入訊號被送往神經元時,會被分別乘以固定的權重神經元會計算傳送過來的訊號的總和,只有當這個總和超過了某個界限值時,才會輸出1。這也稱為“神經元被啟用”。這裡將這個界限值稱為閾值,用符號θ表示。

感知機的多個輸入訊號都有各自固有的權重,這些權重發揮著控制各個訊號的重要性的作用。也就是說,權重越大,對應該權重的訊號的重要性就越高。

2.2簡單電路邏輯

1.與門

與門是有兩個輸入和一個輸出的閘電路

![螢幕截圖 2024-02-26 191836](C:\Users\HP\Desktop\螢幕截圖 2024-02-26 191836.png)

與門僅在兩個輸入均為1時輸出1,其他時候則輸出0。

2.與非門和或門

與非門

與非門就是顛倒了與門的輸出,僅當x1和x2同時為1時輸出0,其他時候則輸出1

image-20240226192115985

只要把實現與門的引數值的符號取反,就可以實現與非門

或門

只要有一個輸入訊號是1,輸出就為1

2.3感知機的實現

b稱為偏置,感知機會計算輸入訊號和權重的乘積,然後加上偏置,如果這個值大於0則輸出1,否則輸出0。

偏置和權重w1、w2的作用是不一樣的。具體地說,w1和w2是控制輸入訊號的重要性的引數,而偏置是調整神經元被啟用的容易程度(輸出訊號為1的程度)的引數。

2.4感知機的侷限性

異或門

異或門也被稱為邏輯異或電路僅當x1或x2中的一方為1時,才會輸出1(“異或”是拒絕其他的意思)

線性和非線性

感知機的侷限性就在於它只能表示由一條直線分割的空間,不能表示異或門。

曲線分割而成的空間稱為非線性空間,由直線分割而成的空間稱為線性空間

2.5多層感知機

已有閘電路的組合

單層感知機無法表示異或門”或者“單層感知機無法分離非線性空間

image-20240226193909286

x1和x2表示輸入訊號,y表示輸出訊號。x1和x2是與非門和或門的輸入,而與非門和或門的輸出則是與門的輸入。

異或門的實現

實際上,與門、或門是單層感知機,而異或門是2層感知機。疊加了多層的感知機也稱為多層感知機(multi-layered perceptron)。

神經網路

3.1從感知機到神經網路

image-20240226194443540

中間層有時也稱為隱藏層。

啟用函式

會將輸入訊號的總和轉換為輸出訊號的函式一般稱為啟用函式

3.2啟用函式

以閾值為界,一旦輸入超過閾值,就切換輸出。這樣的函式稱為“階躍函式”。

sigmoid函式

h(x)=1/(1+ecp(-x))的exp(−**x)表示e−**x 的意思。e是納皮爾常2.7182 ...

sigmoid函式與階躍函式的比較

1.sigmoid函式是一條平滑的曲線,輸出隨著輸入發生連續性的變化。而階躍函式以0為界,輸出發生急劇性的變化。sigmoid函式的平滑性對神經網路的學習具有重要意義。

2.相對於階躍函式只能返回0或1,sigmoid函式可以返回0.731 ...、0.880 ...等實數(這一點和剛才的平滑性有關)。也就是說,感知機中神經元之間流動的是0或1的二元訊號,而神經網路中流動的是連續的實數值訊號。

共同性質:具有相似的形狀。兩者的結構均是“輸入小時,輸出接近0(為0);隨著輸入增大,輸出向1靠近(變成1)”。也就是說,當輸入訊號為重要資訊時,階躍函式和sigmoid函式都會輸出較大的值;當輸入訊號為不重要的資訊時,兩者都輸出較小的值。還有一個共同點是,不管輸入訊號有多小,或者有多大,輸出訊號的值都在0到1之間。

非線性函式

階躍函式和sigmoid函式還有其他共同點,就是兩者均為非線性函式。sigmoid函式是一條曲線,階躍函式是一條像階梯一樣的折線,兩者都屬於非線性的函式。

啟用函式不能使用線性函式。

線性函式的問題在於,不管如何加深層數,總是存在與之等效的“無隱藏層的神經網路”。(簡單理解為存在比引入線性函式更高效便捷的方法,即無隱藏層的神經網路。)

ReLU(Rectified Linear Unit)函式

ReLU函式在輸入大於0時,直接輸出該值;在輸入小於等於0時,輸出0

Numpy中的maximum函式會從輸入的數值中選擇較大的那個值進行輸出。

3.3多維陣列的運算

image-20240226200933327

陣列的維數可以透過np.dim()函式獲得,陣列的形狀可以透過例項變數shape獲得

這裡的A.shape的結果是個元組(tuple)。這是因為一維陣列的情況下也要返回和多維陣列的情況下一致的結果。例如,二維陣列時返回的是元組(4,3),三維陣列時返回的是元組(4,3,2),因此一維陣列時也同樣以元組的形式返回結果。下面我們來生成一個二維陣列。

二維陣列也稱為矩陣(matrix)。陣列的橫向排列稱為行(row),縱向排列稱為列(column)。

矩陣乘法:矩陣的乘積是透過左邊矩陣的行(橫向)和右邊矩陣的(縱向)以對應元素的方式相乘後再求和而得到的。

NumPy 的np.dot()函式計算(乘積也稱為點積)。np.dot()接收兩個NumPy陣列作為引數,並返回陣列的乘積。

注:np.dot(A, B)和np.dot(B, A)的值可能不一樣。和一般的運算(+或*等)不同,矩陣的乘積運算中,運算元(A、 B)的順序不同,結果也會不同。

矩陣A的第1維的元素個數(列數)必須和矩陣B的第0維的元素個數(行數)相等。

3.4 3層神經網路的實現

image-20240226201925862

符號確認

image-20240226202112708

權重和隱藏層的神經元的右上角有一個“(1)”,它表示權重和神經元的層號(即第1層的權重、第1層的神經元)。此外,權重的右下角有兩個數字,它們是後一層的神經元和前一層的神經元的索引號。比如,表示前一層的第2個神經元x2到後一層的第1個神經元 的權重。權重右下角按照“後一層的索引號、前一層的索引號”的順序排列。

各層間訊號傳遞的實現

一般地,迴歸問題可以使用恆等函式,二元分類問題可以使用sigmoid函式,多元分類問題可以使用softmax函式

3.5輸出層的設計

恆等函式和softmax函式

image-20240226202851879

softmax函式:exp(x)是表示ex 的指數函式(e是納皮爾常數2.7182 ...)。式(3.10)表示假設輸出層共有n個神經元,計算第k個神經元的輸出y**k。如式(3.10)所示,softmax函式的分子是輸入訊號a**k的指數函式,分母是所有輸入訊號的指數函式的和。

注:softmax函式會出現溢位問題,即資料巨大導致結果出現不確定的情況。

image-20240226203222501

softmax函式的特徵:softmax函式的輸出是0.0到1.0之間的實數。並且,softmax函式的輸出值的總和是1。輸出總和為1是softmax函式的一個重要性質。正因為有了這個性質,我們才可以把softmax函式的輸出解釋為“機率”。

即便使用了softmax函式,各個元素之間的大小關係也不會改變。

3.6 手寫數字識別

我們使用學習到的引數,先實現神經網路的“推理處理”。這個推理處理也稱為神經網路的前向傳播(forward propagation)

MNIST資料集

首先,為了匯入父目錄中的檔案,進行相應的設定A。然後,匯入dataset/mnist.py中的 load_mnist函式。最後,使用 load_mnist函式,讀入MNIST資料集。load_mnist函式以“(訓練影像 ,訓練標籤 ),(測試影像,測試標籤 )”的形式返回讀入的MNIST資料。此外,還可以像load_mnist(normalize=True, flatten=True, one_hot_label=False) 這 樣,設 置 3 個 參 數。第 1 個引數normalize設定是否將輸入影像正規化為0.0~1.0的值。如果將該引數設定為False,則輸入影像的畫素會保持原來的0~255。第2個引數flatten設定是否展開輸入影像(變成一維陣列)。如果將該引數設定為False,則輸入影像為1 × 28 × 28的三維陣列;若設定為True,則輸入影像會儲存為由784個元素構成的一維陣列。第3個引數one_hot_label設定是否將標籤儲存為onehot表示(one-hot representation)。one-hot表示是僅正確解標籤為1,其餘皆為0的陣列,就像[0,0,1,0,0,0,0,0,0,0]這樣。

影像的顯示

使用PIL(Python Image Library)模組。

神經網路的推理處理

像這樣把資料限定到某個範圍內的處理稱為正規化(normalization)。

對神經網路的輸入資料進行某種既定的轉換稱為預處理(pre-processing)。

批處理

輸入資料的形狀為 100 × 784,輸出資料的形狀為100 × 10。這表示輸入的100張影像的結果被一次性輸出了。比如,x[0]和y[0]中儲存了第0張影像及其推理結果,x[1]和y[1]中儲存了第1張影像及其推理結果,等等。這種打包式的輸入資料稱為批(batch)。

神經網路的學習

4.1從資料中學習

深度學習又是也稱為端到端機器學習,這裡說的端到端是指從一端到另一端的意思,也就是從原始資料(輸入)中獲得目標結果(輸出)的意思。

資料是機器學習的核心

image-20240227081402405

機器學習的一般流程:首先,使用訓練資料進行學習,尋找最優引數;然後,使用測試資料評價訓練得到的模型的實際能力。

訓練資料也稱為監督資料。

泛化能力是指處理未被觀察過的資料(不包含在訓練資料中的資料)的能力。

只對某個資料集過度擬合的狀態稱為過擬合(over fitting)

4.2損失函式

神經網路學習中以某個指標來尋找最優權重引數,神經網路的學習中所用的指標稱為損失函式(loss function)。這個損失函式可以使用任意函式,但一般用均方誤差和交叉熵誤差等。

損失函式表示神經網路效能的“惡劣程度”的指標,即當前的神經網路對監督資料在多大程度上不擬合,在多大程度上不一致。

均方誤差:

image-20240227081726200

y**k是表示神經網路的輸出,t**k表示監督資料,k表示資料的維數。

將正確解標籤表示為1,其他標籤表示為0的表示方法稱為one-hot表示

交叉熵誤差:image-20240227082231508

log表示以e為底數的自然對數(log e )。y**k是神經網路的輸出,t**k是正確解標籤。t**k中只有正確解標籤的索引為1,其他均為0(one-hot表示)。

mini-batch學習

要求所有訓練資料的損失函式的總和

image-20240227082706389

神經網路的學習也是從訓練資料中選出一批資料(稱為mini-batch,小批次),然後對每個mini-batch進行學習。這種學習方式稱為mini-batch學習。

損失函式的意義:尋找最優引數(權重與偏置),若以識別精度為指標,引數的導數在絕大多數的地方都會變為0

4.3數值微分

舍入誤差,是指因省略小數的精細部分的數值(比如,小數點第8位以後的數值)而造成最終的計算結果上的誤差。

為了減小這個誤差,我們可以計算函式f在(x + h)和(x h)之間的差分。這種計算方法以x為中心,計算它左右兩邊的差分,所以也稱為中心差分(而(x + h)和x之間的差分稱為前向差分)。

偏導數:我們把有多個變數的導數稱為偏導數

4.4梯度

由全部變數的偏導數彙總而成的向量稱為梯度(gradient)

梯度指示的方向是各點處的函式值減小最多的方向

透過不斷地沿梯度方向前進,逐漸減小函式值的過程就是梯度法(gradient method)。

尋找最小值的梯度法稱為梯度下降法(gradient descent method),尋找最大值的梯度法稱為梯度上升法(gradient ascent method)。

4.5學習演算法的實現

前提:神經網路存在合適的權重和偏置

1.mini-batch:從訓練資料中隨機選出一部分資料,目標為減小mini-batch的損失函式的值

2.計算梯度:求出各個權重引數的梯度,梯度表示損失函式的減小最多的方向

3.更新引數:將權重引數沿梯度方向進行微小更新

4.重複步驟1,2,3

誤差反向傳播法

5.1計算圖

計算圖解題步驟:1.構建計算圖 2.在計算圖上,從左往右計算

從左向右進行計算”是一種正方向上的傳播,簡稱為正向傳播(forward propagation)。正向傳播是從計算圖出發點到結束點的傳播。既然有正向傳播這個名稱,當然也可以考慮反向(從圖上看的話,就是從右向左)的傳播。實際上,這種傳播稱為反向傳播(backward propagation)。

區域性計算

5.2鏈式法則

反向傳播的計算順序是,將訊號E乘以節點的區域性導數( ),然後將結果傳遞給下一個節點。這裡所說的區域性導數是指正向傳播中y = f(x)的導數,也就是y關於x的導數( )。

鏈式法則:如果某個函式由複合函式表示,則該複合函式的導數可以用構成複合函式的各個函式的導數的乘積表示。

5.3反向傳播

5.4簡單層的實現

乘法層的實現:層的實現中有兩個共通的方法(介面)forward()和backward()。forward()對應正向傳播,backward()對應反向傳播。

5.5啟用函式層的實現

ReLU層image-20240229141342394

在神經網路的層的實現中,一般假定forword()和backward()的引數是NumPY陣列。

SIgmoid層

步驟1:”/“節點表示y=1/x,它的導數可以解析性的表示為下式。

dy=-(1/xx)=-yy

步驟2:”+“節點將上游的值原封不動的傳給下游。

步驟3:”ecp"節點表示y=ecp(x),他的導數為dy=ecp(x)。

步驟4:“x”節點將正向傳播是的值翻轉後做乘法運算。英雌這裡要乘以-1.

5.6Affine/Softmax層的實現

Affine的實現:以矩陣為物件的反向傳播,按矩陣的各個元素進行計算時,步驟和以標量為物件的計算圖相同。

image-20240229145104982

Softmax-with-Loss層

image-20240229152139628

與學習相關的技巧

6.1引數的更新

神經網路的學習的目的是找到使損失函式的值儘可能小的引數。這是尋找最優引數的問題,解決這個問題的過程稱為最最佳化(optimization)

使用引數的梯度,沿梯度方向更新引數,並重復這個步驟多次,從而逐漸靠近最優引數,這個過程稱為隨機梯度下降法(stochastic gradient descent),簡稱SGD

image-20240312082532937

這裡把需要更新的權重引數記為W,把損失函式關於W的梯度記為 。 η表示學習率,實際上會取0.01或0.001這些事先決定好的值。式子中的←6.1 表示用右邊的值更新左邊的值。如式(6.1)所示,SGD是朝著梯度方向只前進一定距離的簡單方法

SGD的缺點:,如果函式的形狀非均向(anisotropic),比如呈延伸狀,搜尋的路徑就會非常低效。

Momentum(動量)

image-20240312082754159

W表示要更新的權重引數, 表示損失函式關於W的梯度,η表示學習率。這裡新出現了一個變數v,對應物理上的速度。式(6.3)表示了物體在梯度方向上受力,在這個力的作用下,物體的速度增加這一物理法則

AdaGrad

在神經網路的學習中,學習率(數學式中記為η)的值很重要。學習率過小,會導致學習花費過多時間;反過來,學習率過大,則會導致學習發散而不能正確進行

學習率衰減:隨著學習的進行,使學習率逐漸減小

image-20240312083722808

W表示要更新的權重引數, 表示損失函式關於W的梯度,η表示學習率。這裡新出現了變數h,如式(6.5)所示,它儲存了以前的所有梯度值的平方和(式(6.5)中的表示對應矩陣元素的乘法)。然後,在更新引數時,透過乘以 ,就可以調整學習的尺度。這意味著,引數的元素中變動較大(被大幅更新)的元素的學習率將變小。也就是說,可以按引數的元素進行學習率衰減,使變動大的引數的學習率逐漸減小。

Adam:融合了Momentum和AdaGrad的方法。

6.2權重的初始值

權值衰減:一種以減小權重引數的值為學習目的進行學習的方法。

相關文章