Tensorflow:實(shí)戰(zhàn)Google深度學(xué)習(xí)框架第四章

一介紹

該章主要是介紹深層網(wǎng)絡(luò), 該章節(jié)主要按照損失函數(shù),優(yōu)化技巧倆部分進(jìn)行展開(kāi)。


二 損失函數(shù)

在損失函數(shù)介紹幾種經(jīng)典損失函數(shù):

1. 交叉熵:刻畫(huà)了倆個(gè)概率分布之間的距離,它是分類(lèi)問(wèn)題中使用比較廣的一種損失函數(shù),計(jì)算公式如下:

? ? ? ? ? ? ? ? ? ?H(p,q) = -\sum_{x}p(x)log(q(x))

注意:H(p,q) != H(q, p)即交叉熵不滿(mǎn)足對(duì)稱(chēng)性,它刻畫(huà)的是通過(guò)概率分布q來(lái)表達(dá)概率分布p的困難程度。因?yàn)檎_答案是希望得到的結(jié)果,所以當(dāng)交叉熵作為損失函數(shù)時(shí),P代表的是正確答案, q代表的是預(yù)測(cè)值。交叉熵刻畫(huà)的是倆個(gè)概率分布的距離,也就是說(shuō)交叉熵值越小,倆個(gè)概率分布越接近。

tips: 因?yàn)閘og x,如果x小于等于0會(huì)報(bào)錯(cuò),所以在損失函數(shù)需要注意這種情況,在tensorlow中tf.clip_by_value可以將一個(gè)張量中的數(shù)值控制在一個(gè)范圍內(nèi)。

clip_by_value

2. 自定義損失函數(shù):根據(jù)需要,需要自己定義損失函數(shù),比如:當(dāng)x>y時(shí):\qquad     \qquad   \qquad    f(x, y)=\left\{\begin{aligned}a(x-y) & & x>y\\b(y-x) & & x\leq  y\end{aligned}\right.

tips:需要用到tf.greater()以及tf.where

 loss = tf.reduce\_sum(tf.where(tf.greater(v1,v2),(v1-v2)*a, (v2-v1)*b))

tf.where 有三個(gè)參數(shù)。第一個(gè)為選擇條件依據(jù),當(dāng)選擇條件為true時(shí),tf.where函數(shù)會(huì)選擇第二個(gè)參數(shù)中的值,否則使用第三個(gè)參數(shù)中的值。

三神經(jīng)網(wǎng)絡(luò)優(yōu)化算法

3.1 學(xué)習(xí)率設(shè)置

學(xué)習(xí)率決定了參數(shù)更新的幅度。如果幅度過(guò)大,那么可能導(dǎo)致參數(shù)在極優(yōu)值的倆側(cè) 來(lái)回移動(dòng)。為了設(shè)置合理的學(xué)習(xí)率,在本書(shū)中提到了指數(shù)衰減法。tf.train.exponential_decay。原理是可以先使用較大的學(xué)習(xí)率來(lái)得到一個(gè)比較優(yōu)的解,然后隨著迭代的繼續(xù)逐步減小學(xué)習(xí)率。主要是事先的是:decayed\_learning\_rate = learning\_rate * decay\_rate^{global\_step / decay\_steps}? ? ? ? ?learning_rate表示學(xué)習(xí)率, decay_rate表示衰減系數(shù),decay_steps為衰減速度? ? ? ? ? ? ? ? ? ? ? ?tips:函數(shù)還有一個(gè)參數(shù)staircase布爾型, 如果為 true表示在一個(gè)數(shù)據(jù)集內(nèi)學(xué)習(xí)率是一樣的,即decay_rate的指數(shù)取整

3.2 過(guò)擬合問(wèn)題

過(guò)擬合問(wèn)題表示在訓(xùn)練集訓(xùn)練的太好,將噪音數(shù)據(jù)都學(xué)出來(lái)了,在驗(yàn)證集上的表現(xiàn)卻太差。為了讓模型的結(jié)構(gòu)不至于負(fù)責(zé)。引入了正則化的概念。

L1:????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????R(w) = \vert \vert w\vert \vert_1  = \sum_{i}\vert x_i \vert

L2:

? ?????????????????????????????????????????????R(w) = ||W||_2^2 = \sum_{i}|W_i^2|

將正則化添加到損失函數(shù),可以有效避免過(guò)擬合的問(wèn)題。tensorflow中正則化的表達(dá)式為tf.contrib.layers.l2_regularizer(lambda),lambda為權(quán)重。

正則化損失函數(shù)的計(jì)算方式

3.3 滑動(dòng)平均模型

在tensorflow提供tf.train.ExponentialMovingAverage來(lái)實(shí)現(xiàn)滑動(dòng)平均模型。 該函數(shù)就是給每一個(gè)變量維護(hù)一個(gè)影子變量。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????????????shadow\_variable = decay * shadow + (1-decay)*variable? ? ? ? ? ? tips: decay衰減率控制模型更新速度。如果函數(shù)參數(shù)中有step參數(shù),即模型迭代次數(shù),衰減率為:????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????min(decay, \frac{1+step}{10+step})? ? ? ? ? ? ??

具體代碼如下:

滑動(dòng)平均模型

四 總結(jié)

該部分主要介紹了一些trick,可以提高模型的穩(wěn)定性,避免過(guò)擬合。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容