書-Deep Learning 用Python 進行深度學習的基礎理論實作

image

∞小批次學習

∞損失函數&辨識準確率

∞數值微分

小批次學習

我們講訓練資料讓他學習,就是為了降低損失函數的值,但是如果如果整個資料過於龐大,我們可能從資料裡面先抽出100份來訓練看看成效,就像做民調一樣不可能每個人都有機會被問到,所以就隨機抽樣來代表此區的民意,雖說有時不一定準,但是可以當作是相近值來看。假設我們有60000筆資料,隨機抽100個資料用交叉熵(ㄉ一)誤差來做為損失函數。

下面這個公式,很好懂,n就是資料,ynk是輸出答案(第n個資料的k)、tnk是正確答案,除以100就是這100筆資料總共的損失率。

image

image

第7行的one_hot_label的意思是陣列中只有一個1其他都是0就是one hot編碼。

第10行的意思是從60000中隨機挑出10個

image

損失函數&辨識準確率

為甚麼不用辨識正確率,而用奇怪的損失函數?這又會扯到數學的「微分」,我們要尋找到最佳參數(權重、偏權重),就必須要對參數進行微分(找出斜率),根據微分的數值來做調整,如果微出來是負值,就要往正的方向調整,以此來減少損失函數,微出來是正值,就往負值調整,減少損失函數,如果用辨識率的話,不管怎麼微分都會是0,根本無法調整,所以才不用辨識率當作指標的原因。

imageimage

看上面圖,階梯函數只有在瞬間出現變化,但是sigmoid輸出連續,曲線的斜率也是連續的,所以不管怎麼微都不會變成0,這個在神經網路的「學習」是很重要的特性。

數值微分

假設我10分鐘跑2km那我的跑步速度就是2/10=0.2[km/分],計算出每分鐘跑200公尺。

上面計算了跑步距離、時間的變化,但是應該計算出10分鐘內的'平均速度',微分代表的是'某個瞬間'變化量。因此要縮小時間單位,某個時間前1秒的跑步距離,每個時間前0.1秒的跑步距離,逐漸縮小就可以得出瞬間的變化量(瞬間速度)。

image

函數微分的算式,左邊的代表f(x)中x微分(f(x)的變化),h無限接近0,代表f(x)有'細微的改變'。

在python中因為要h無限的接近0給到1e-50,但是結果反而會變成0.0,這是因為值太小,電腦進行運算出問題,因此用到1e-4就可以了。

image

image

數值微分含有誤差,計算(x+h)與(x-h)得函數f差分,可以減少誤差,以x來計算前後差分,稱為中央差分(x與x+h的差分稱為前差分)

image

arrow
arrow
    創作者介紹
    創作者 讀書小天地 的頭像
    讀書小天地

    書籍分享天地

    讀書小天地 發表在 痞客邦 留言(0) 人氣()