神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí):從訓(xùn)練數(shù)據(jù)中自動(dòng)獲取最優(yōu)權(quán)重的過程,是使損失函數(shù)的值最小的權(quán)重參數(shù)。
機(jī)器學(xué)習(xí)做手寫數(shù)據(jù)識(shí)別:從圖像中提取特征量,再用機(jī)器學(xué)習(xí)技術(shù)學(xué)習(xí)這些特征量的模式。 圖像的特征量通常表示為向量的形式,機(jī)器視覺領(lǐng)域常用的特征量包括SIFT、SURF和HOG等。 對(duì)轉(zhuǎn)換后的向量使用機(jī)器學(xué)習(xí)中的SVM、KNN等分類器進(jìn)行學(xué)習(xí)。
深度學(xué)習(xí)直接學(xué)習(xí)圖像本身,特征量也是由機(jī)器來學(xué)習(xí)的。 它的優(yōu)點(diǎn)是對(duì)所有問題都可以用同樣的流程來解決。
1、訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)
機(jī)器學(xué)習(xí)中,一般將數(shù)據(jù)分為訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)。 首先使用訓(xùn)練數(shù)據(jù)進(jìn)行學(xué)習(xí),尋找最優(yōu)的參數(shù),然后使用測(cè)試數(shù)據(jù)評(píng)價(jià)模型。 為了正確評(píng)價(jià)模型的泛化能力,必須劃分訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)。 泛化能力是指處理未被觀察過的數(shù)據(jù)的能力。 獲得泛化能力是機(jī)器學(xué)習(xí)的最終目標(biāo)。 僅僅使用一個(gè)數(shù)據(jù)集去學(xué)習(xí)和評(píng)價(jià)參數(shù),是無法正確評(píng)價(jià)的。 可能順利處理某個(gè)數(shù)據(jù)集,但無法處理其他數(shù)據(jù)集的情況。 只對(duì)某個(gè)數(shù)據(jù)集過度擬合的狀態(tài)稱為過擬合,避免過擬合也是機(jī)器學(xué)習(xí)的一個(gè)重要課題。
2、損失函數(shù)
神經(jīng)網(wǎng)絡(luò)通過損失函數(shù)尋找最優(yōu)權(quán)重參數(shù)。 損失函數(shù)是表示神經(jīng)網(wǎng)絡(luò)性能的惡劣程度的指標(biāo)。
1)均方誤差
表示輸出與訓(xùn)練數(shù)據(jù)的不匹配程度,希望得到最小的均方誤差。
2)交叉熵誤差
實(shí)際上只計(jì)算對(duì)應(yīng)正確解標(biāo)簽的輸出的自然對(duì)數(shù)。 交叉熵誤差的值是由正確解標(biāo)簽所對(duì)應(yīng)的輸出結(jié)果決定的。 根據(jù)自然對(duì)數(shù)的圖像,正確解標(biāo)簽對(duì)應(yīng)的輸出越大,交叉熵誤差越接近0,當(dāng)輸出為1時(shí),交叉熵誤差為0。 使用代碼實(shí)現(xiàn)時(shí)為了避免負(fù)無窮大需要添加一個(gè)微小值。
以上都是針對(duì)單個(gè)數(shù)據(jù)的損失函數(shù),如果要求所有訓(xùn)練數(shù)據(jù)的損失函數(shù)的總和,需要寫成下式
MNIST數(shù)據(jù)集的訓(xùn)練數(shù)據(jù)有60000個(gè),如果求全部數(shù)據(jù)的損失函數(shù)和不太現(xiàn)實(shí)。 因此,需要從全部數(shù)據(jù)中選出一部分,神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)也是從訓(xùn)練數(shù)據(jù)中選出一部分(mini-batch)然后對(duì)每批數(shù)據(jù)進(jìn)行學(xué)習(xí)。
從訓(xùn)練數(shù)據(jù)中隨機(jī)抽取10筆數(shù)據(jù)的代碼:
train_size=x_train.shape[0]
batch_size=10
batch_mask=np.random.choice(train_size,batch_size)
x_batch=x_train[batch_mask]
t_batch=t_train[batch_mask]
x_train形狀為60000*784,所以train_size=60000。 使用np.random.choice()可以從指定的數(shù)字中隨機(jī)選擇想要的數(shù)字,在60000個(gè)數(shù)據(jù)中隨機(jī)取10個(gè)數(shù)字。 后續(xù)只需要使用這個(gè)mini_batch計(jì)算損失函數(shù)。
3、mini_batch交叉熵誤差的實(shí)現(xiàn)
def cross_entropy_error(y,t):
if y.dim==1:
t=t.reshape(1,t.size)
y=y.reshape(1,y.size)
batch_size=y.shape[0]
return -np.sum(t*np.log(y+1e-7))/batch_size
當(dāng)y的維度為1,即求單個(gè)數(shù)據(jù)的交叉熵誤差時(shí),需要改變數(shù)據(jù)的形狀變?yōu)?*60000,當(dāng)輸入為mini-batch時(shí),需要用batch的個(gè)數(shù)進(jìn)行歸一化,計(jì)算單個(gè)數(shù)據(jù)的平均交叉熵誤差。
return -np.sum(np.log(y[np.arange(batch_size),t]+1e-7))/batch_size
如果訓(xùn)練數(shù)據(jù)是標(biāo)簽形式,改為上述代碼。 np.arange(batch_size)會(huì)生成一個(gè)0到batch_size-1的數(shù)組,因?yàn)閠中的標(biāo)簽是以0-9數(shù)字的方式進(jìn)行存儲(chǔ)的,所以y[np.arange(batch_size),t]生成了一個(gè)二維數(shù)組。
4、為什么要設(shè)定損失函數(shù)
在神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)中,尋找最優(yōu)權(quán)重和偏置時(shí),要尋找使損失函數(shù)的值盡可能小的參數(shù),需要計(jì)算梯度并更新參數(shù)。 如果用識(shí)別精度作為指標(biāo),絕大多數(shù)地方的導(dǎo)數(shù)都會(huì)變?yōu)?導(dǎo)致參數(shù)無法更新。 因?yàn)樽R(shí)別精度的概念是在訓(xùn)練數(shù)據(jù)中正確識(shí)別的數(shù)量,稍微改變權(quán)重的值識(shí)別精度可能無法變化,即使變化也是離散的值。 階躍函數(shù)不能作為激活函數(shù)的原因也是這樣,對(duì)微小變化不敏感,且變化是不連續(xù)的。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4772瀏覽量
100809 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4332瀏覽量
62666 -
SVM
+關(guān)注
關(guān)注
0文章
154瀏覽量
32483 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8420瀏覽量
132687 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5503瀏覽量
121207
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論