我們知道神經網路是由很多神經元組成的多層網路結構,我們的最終目標是找到各層合適的權重引數w使得最終的輸出結果能夠與實際結果更加接近。**那神經網路的這些權重引數是如何的得到的呢?**其實主要就是靠「損失函式」這個指標來進行一步步訓練優化的。下面一起來了解一下神經網路的驅動核心—損失函式吧。
神經網路的「學習」是指從訓練資料中自動獲取最優權重引數的過程,即神經網路自我訓練的過程。為了使神經網路能進行學習,將匯入損失函式這一指標。通過使損失函式最小,來尋找最優權重引數。
學習的目的就是以該損失函式為基準,找出能使它的值達到最小的權重引數。
神經網路的特徵就是可以從資料中學習。所謂「從資料中學習」,是指可以由資料自動決定權重引數的值。以如何實現數字5的識別為例,下圖給出了三種方式:
1,通過人想的演算法;
2,通過人為的進行特徵量的提取,然後使用機器學習演算法;
3,直接通過神經網路深度學習,此處沒有人的介入,不需要人來進行特徵選擇。
注:深 度 學 習 有 時 也 稱 為端 到 端 機 器 學 習(end-to-end machine learning)。這裡所說的端到端是指從一端到另一端的意思,也就是從原始資料(輸入)中獲得目標結果(輸出)的意思。神經網路的優點是對於所有問題都可以用同樣的流程來進行解決。
機器學習中,一般將資料分為訓練資料和測試資料兩部分來進行學習和實驗等。首先,使用訓練資料進行學習,尋找最優的引數;然後,使用測試資料評價訓練得到的模型的實際能力。為什麼需要將資料分為訓練資料和測試資料呢?因為我們追求的是模型的泛化能力。為了正確評價模型的泛化能力,就必須劃分訓練資料和測試資料。另外,訓練資料也可以稱為監督資料。
泛化能力是指處理未被觀察過的資料(不包含在訓練資料中的資料)的能力。獲得泛化能力是機器學習的最終目標。僅僅用乙個資料集去學習和評價引數,是無法進行正確評價的。這樣會導致可以順利地處理某個資料集,但無法處理其他資料集的情況。只對某個資料集過度擬合的狀態稱為過擬合( over fitting)。
在神經網路的學習中,神經網路需要以某個指標為線索尋找最優引數(權重和偏置),而這個指標就是損失函式( loss function)。更新引數的方向是以損失函式的值盡可能小為參考標準。為了找到使損失函式的值盡可能小的地方,需要計算引數的導數(確切地講是梯度),然後以這個導數為指引,逐步更新引數的值。
假設有乙個神經網路,現在我們來關注這個神經網路中的某乙個權重引數。此時,對該權重引數的損失函式求導,表示的是「如果稍微改變這個權重引數的值,損失函式的值會如何變化」。如果導數的值為負,通過使該權重引數向正方向改變,可以減小損失函式的值;反過來,如果導數的值為正,則通過使該權重引數向負方向改變,可以減小損失函式的值。不過,當導數的值為0時,無論權重引數向哪個方向變化,損失函式的值都不會改變,此時該權重引數的更新會停在此處。
一般用均方誤差和交叉熵誤差等。損失函式是表示神經網路效能的「惡劣程度」的指標。
yk是表示神經網路的輸出, tk表示監督資料, k表示輸出目標資料的維數。
python實現均方誤差:
交叉熵誤差( cross entropy error)的數學公式如下:
如圖所示, x等於1時, y為0;隨著x向0靠近, y逐漸變小。因此,正確解標籤對應的輸出越大,式( 4.2)的值越接近0;當輸出為1時,交叉熵誤差為0。此外,如果正確解標籤對應的輸出較小,則式的值較大。
**實現交叉熵誤差:
min-batch學習損失函式計算
上述僅對單個資料進行了損失函式的計算,而機器學習需要對大批量的資料進行訓練,因此在計算損失函式時必須將所有的訓練資料作為物件。也就是說,如果訓練資料有100個的話,我們就要把這100個損失函式的總和作為學習的指標。
如果有n個資料,則將平均損失函式作為訓練目標,可以獲得和訓練資料的數量無關的統一指標:
假設資料有n個, tnk表示第n個資料的第k個元素的值( ynk是神經網路的輸出, tnk是監督資料)。通過除以n可以將求的單個資料的平均損失函式,與訓練資料的數量無關。
但是如果資料量非常大,比如 mnist資料集的訓練資料有60000個,要是以全部資料為物件求損失函式的和,則計算過程需要花費較長的時間。再者,如果遇到大資料,資料量會有幾百萬、幾千萬之多,這種情況下以全部資料為物件計算損失函式是不現實的。因此,我們從全部資料中選出一部分,作為全部資料的「近似」。神經網路的學習也是從訓練資料中選出一批資料(稱為mini-batch,小批量),然後對每個mini-batch進行學習。比如,從60000個訓練資料中隨機選擇100筆,再用這100筆資料進行學習。這種學習方式稱為mini-batch學習。
注:mini-batch的損失函式是利用一部分樣本資料來近似地計算整體。也就是說,用隨機選擇的小批量資料(mini-batch)作為全體訓練資料的近似值。
min-batch版交叉熵誤差的**實現:
其中,y為神經網路的輸出,t為監督資料,y+1e-7主要是為了防止y為0時,出現負無窮大,導致計算失敗的情況。
1. 了解了神經網路的學習目標–損失函式最小;
2. 學習了兩種常用的損失函式:均方誤差與交叉熵誤差;
3. 如何計算批量資料的交叉熵誤差。
神經網路損失函式
2018,aug 3 顧名思義,從標題就能知道損失函式 loss function 一定就是來計算神經網路在訓練中的損失的。說完了定義那到了舉例時間了 主要拿softmax loss來分析 這裡的k也就是我們分類的類別。然後這個函式是怎麼用的呢,我們可以簡單的舉乙個分類的例子來看下。假設我們輸入一張...
神經網路 損失函式
開始之前我們先進入數字識別這樣乙個場景 以識別數字1為例,神經網路模型的輸出結果越接近 0,1,0,0,0,0,0,0,0,0 越好。神經網路解決多分類的問題,最常見的方法是設定n個輸出節點,其中n類別個數,那麼上述數字判斷就應該有n 10個輸出。那麼如何判斷乙個輸出向量和期望向量的接近程度呢?交叉...
神經網路 損失函式
先上結論 在使用sigmoid作為啟用函式的時候,cross entropy相比於quadratic cost function,具有收斂速度快,更容易獲得全域性最優的特點 使用softmax作為啟用函式,log likelihood作為損失函式,不存在收斂慢的缺點。對於損失函式的收斂特性,我們期望...