書-Deep Learning 用Python 進行深度學習的基礎理論實作
∞小批次學習
∞損失函數&辨識準確率
∞數值微分
小批次學習
我們講訓練資料讓他學習,就是為了降低損失函數的值,但是如果如果整個資料過於龐大,我們可能從資料裡面先抽出100份來訓練看看成效,就像做民調一樣不可能每個人都有機會被問到,所以就隨機抽樣來代表此區的民意,雖說有時不一定準,但是可以當作是相近值來看。假設我們有60000筆資料,隨機抽100個資料用交叉熵(ㄉ一)誤差來做為損失函數。
下面這個公式,很好懂,n就是資料,ynk是輸出答案(第n個資料的k)、tnk是正確答案,除以100就是這100筆資料總共的損失率。
第7行的one_hot_label的意思是陣列中只有一個1其他都是0就是one hot編碼。
第10行的意思是從60000中隨機挑出10個
損失函數&辨識準確率
為甚麼不用辨識正確率,而用奇怪的損失函數?這又會扯到數學的「微分」,我們要尋找到最佳參數(權重、偏權重),就必須要對參數進行微分(找出斜率),根據微分的數值來做調整,如果微出來是負值,就要往正的方向調整,以此來減少損失函數,微出來是正值,就往負值調整,減少損失函數,如果用辨識率的話,不管怎麼微分都會是0,根本無法調整,所以才不用辨識率當作指標的原因。
看上面圖,階梯函數只有在瞬間出現變化,但是sigmoid輸出連續,曲線的斜率也是連續的,所以不管怎麼微都不會變成0,這個在神經網路的「學習」是很重要的特性。
數值微分
假設我10分鐘跑2km那我的跑步速度就是2/10=0.2[km/分],計算出每分鐘跑200公尺。
上面計算了跑步距離、時間的變化,但是應該計算出10分鐘內的'平均速度',微分代表的是'某個瞬間'變化量。因此要縮小時間單位,某個時間前1秒的跑步距離,每個時間前0.1秒的跑步距離,逐漸縮小就可以得出瞬間的變化量(瞬間速度)。
函數微分的算式,左邊的代表f(x)中x微分(f(x)的變化),h無限接近0,代表f(x)有'細微的改變'。
在python中因為要h無限的接近0給到1e-50,但是結果反而會變成0.0,這是因為值太小,電腦進行運算出問題,因此用到1e-4就可以了。
數值微分含有誤差,計算(x+h)與(x-h)得函數f差分,可以減少誤差,以x來計算前後差分,稱為中央差分(x與x+h的差分稱為前差分)
留言列表