1.性能度量
除上述損失函數(shù)之外,分類任務(wù)還有很多其他有用的性能度量旧困。
混淆矩陣醇份、ROC、AUC
2.損失函數(shù)
3.優(yōu)化器(Momentum吼具、NAG僚纷、Adagrad、Adadelta拗盒、RMSprop怖竭、Adam)
4. 特征縮放:
瘦長(zhǎng)的橢圓,會(huì)導(dǎo)致趨向最值時(shí)梯度下降的震蕩陡蝇;所以需要縮放特征值痊臭,使得其取值范圍相近。按經(jīng)驗(yàn)登夫,特征縮放到3倍或1/3是比較可以接受的广匙。
標(biāo)準(zhǔn)化 (standardization):每個(gè)維度的特征減去該特征均值,除以該維度的標(biāo)準(zhǔn)差恼策。
規(guī)范化 (normalization):每個(gè)維度的特征減去該特征最小值艇潭,除以該特征的最大值與最小值之差。
5.學(xué)習(xí)率
α的取值要合適戏蔑,太小太慢,太大震蕩鲁纠。
選取α的經(jīng)驗(yàn)总棵,從……0.001—>0.01—>0.1—>1…
參數(shù)的更新公式為:
指數(shù)衰減學(xué)習(xí)率:
學(xué)習(xí)率隨著訓(xùn)練輪數(shù)變化而動(dòng)態(tài)更新
學(xué)習(xí)率計(jì)算公式如下:
用 Tensorflow 的函數(shù)表示為:
global_step = tf.Variable(0, trainable=False)
learning_rate = tf.train.exponential_decay(LEARNING_RATE_BASE, global_step, decay_steps, decay_rate, staircase=True/False)
(學(xué)習(xí)率初始值。 當(dāng)前訓(xùn)練輪數(shù)為不可訓(xùn)練型參數(shù)改含。完整使用一遍數(shù)據(jù)集所需迭代次數(shù)情龄。學(xué)習(xí)率衰減率。
學(xué)習(xí)率 learning_rate 更新頻率為輸入數(shù)據(jù)集總樣本數(shù)除以每次喂入樣本數(shù)。若 staircase 設(shè)置為 True 時(shí)骤视,表示 global_step/learning rate step 取整數(shù)鞍爱,學(xué)習(xí)率階梯型衰減;若 staircase 設(shè)置為 false 時(shí)专酗,學(xué)習(xí)率會(huì)是一條平滑下降的曲線睹逃。使用指數(shù)衰減的學(xué)習(xí)率,在迭代初期得到較高的下降速度祷肯,可以在較小的訓(xùn)練輪數(shù)下取得不錯(cuò)的收斂程度沉填。
6. 激活函數(shù)
常用的激活函數(shù)有 relu、sigmoid佑笋、tanh 等翼闹。
需要激活函數(shù)來(lái)引入非線性因素蒋纬,使得神經(jīng)網(wǎng)絡(luò)可以任意逼近任何非線性函數(shù)猎荠。
sigmod 函數(shù)
導(dǎo)數(shù) :
其輸出是在(0,1)這個(gè)開區(qū)間,它能夠把輸入的連續(xù)實(shí)值變換為0和1之間的輸出,如果是非常大的負(fù)數(shù)蜀备,那么輸出就是0关摇;如果是非常大的正數(shù)輸出就是1,起到了抑制的作用琼掠。
tanh 函數(shù)
導(dǎo)數(shù):
tanh是雙曲正切函數(shù),輸出區(qū)間是在(-1,1)之間拒垃,而且整個(gè)函數(shù)是以0為中心的
ReLU 函數(shù)
Relu(Rectified Linear Units)修正線性單元
導(dǎo)數(shù)大于0時(shí)1,小于0時(shí)0瓷蛙。
也就是說(shuō):
z>0時(shí)悼瓮,梯度始終為1,從而提高神經(jīng)網(wǎng)絡(luò)基于梯度算法的運(yùn)算速度艰猬。然而當(dāng)z<0時(shí)横堡,梯度一直為0。
ReLU函數(shù)只有線性關(guān)系(只需要判斷輸入是否大于0)不管是前向傳播還是反向傳播冠桃,都比sigmod和tanh要快很多
Leaky Relu 函數(shù)
為了解決relu函數(shù)z<0時(shí)的問(wèn)題出現(xiàn)了 Leaky ReLU函數(shù)命贴,該函數(shù)保證在z<0的時(shí)候,梯度仍然不為0食听。
ReLU的前半段設(shè)為αz而非0胸蛛,通常α=0.01
7.正則化
改善過(guò)擬合
向你的模型加入某些規(guī)則,加入先驗(yàn)樱报,縮小解空間葬项,減小求出錯(cuò)誤解的可能性。你要把你的知識(shí)數(shù)學(xué)化告訴這個(gè)模型迹蛤,對(duì)代價(jià)函數(shù)來(lái)說(shuō)民珍,就是加入對(duì)模型“長(zhǎng)相”的懲罰
在損失函數(shù)中給每個(gè)參數(shù) w 加上權(quán)重襟士,引入模型復(fù)雜度指標(biāo),從而抑制模型噪聲嚷量,減小過(guò)擬合陋桂。
使用正則化后,損失函數(shù) loss 變?yōu)閮身?xiàng)之和:
其中蝶溶,第一項(xiàng)是預(yù)測(cè)結(jié)果與標(biāo)準(zhǔn)答案之間的差距嗜历,如之前講過(guò)的交叉熵、均方誤差等身坐;第二項(xiàng)是正則化計(jì)算結(jié)果秸脱。
正則化計(jì)算方法:
① L1 正則化:
用 Tesnsorflow 函數(shù)表示:loss(w) = tf.contrib.layers.l1_regularizer(REGULARIZER)(w)
② L2 正則化:
用 Tesnsorflow 函數(shù)表示:loss(w) = tf.contrib.layers.l2_regularizer(REGULARIZER)(w)
正規(guī)方程
范數(shù)
numpy.linalg.norm求矩陣的范數(shù)
滑動(dòng)平均:
記錄了一段時(shí)間內(nèi)模型中所有參數(shù) w 和 b 各自的平均值。利用滑動(dòng)平均值可以增強(qiáng)模型的泛化能力部蛇。
用 Tesnsorflow 函數(shù)表示為:
ema=tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY摊唇,global_step)
其中,MOVING_AVERAGE_DECAY 表示滑動(dòng)平均衰減率涯鲁,一般會(huì)賦接近 1 的值巷查,global_step 表示當(dāng)前訓(xùn)練了多少輪。
ema_op = ema.apply(tf.trainable_variables())
實(shí)現(xiàn)對(duì)括號(hào)內(nèi)參數(shù)求滑動(dòng)平均抹腿,tf.trainable_variables()
函數(shù)實(shí)現(xiàn)把所有待訓(xùn)練參數(shù)匯總為列表岛请。
ema.average()
查看模型中參數(shù)的平均值
反向傳播訓(xùn)練方法:
以減小 loss 值為優(yōu)化目標(biāo),有梯度下降警绩、momentum 優(yōu)化器崇败、adam 優(yōu)化器等優(yōu)化方法。
train_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
使用隨機(jī)梯度下降算法肩祥,使參數(shù)沿著梯度的反方向后室,即總損失減小的方向移動(dòng),實(shí)現(xiàn)更新參數(shù)
train_step=tf.train.MomentumOptimizer(learning_rate,momentum).minimize(loss)
在更新參數(shù)時(shí)混狠,利用了超參數(shù)train_step=tf.train.AdamOptimizer(learning_rate).minimize(loss)
是利用自適應(yīng)學(xué)習(xí)率的優(yōu)化算法岸霹,Adam 算法和隨機(jī)梯度下降算法不同。隨機(jī)梯度下降算法保持單一的學(xué)習(xí)率更新所有的參數(shù),學(xué)習(xí)率在訓(xùn)練過(guò)程中并不會(huì)改變。而 Adam 算法通過(guò)計(jì)算梯度的一階矩估計(jì)和二階矩估計(jì)而為不同的參數(shù)設(shè)計(jì)獨(dú)立的自適應(yīng)性學(xué)習(xí)率鸿竖。
交叉熵(Cross Entropy):
表示兩個(gè)概率分布之間的距離。交叉熵越大模捂,兩個(gè)概率分布距離越遠(yuǎn),兩個(gè)概率分布越相異;交叉熵越小,兩個(gè)概率分布距離越近杀捻,兩個(gè)概率分布越相似。
交叉熵計(jì)算公式:
softmax 函數(shù):
把每個(gè)類別的分?jǐn)?shù)轉(zhuǎn)換為概率
將 n 分類的 n 個(gè)輸出(y1,y2…yn)變?yōu)闈M足以下概率分布要求的函數(shù)坠七。
Batch_normalization
隨著網(wǎng)絡(luò)的深度增加水醋,每層特征值分布會(huì)逐漸的向激活函數(shù)的輸出區(qū)間的上下兩端(激活函數(shù)飽和區(qū)間)靠近,這樣繼續(xù)下去就會(huì)導(dǎo)致梯度消失彪置。BN就是通過(guò)方法將該層特征值分布重新拉回標(biāo)準(zhǔn)正態(tài)分布拄踪,特征值將落在激活函數(shù)對(duì)于輸入較為敏感的區(qū)間,輸入的小變化可導(dǎo)致?lián)p失函數(shù)較大的變化拳魁,使得梯度變大惶桐,避免梯度消失,同時(shí)也可加快收斂潘懊。
過(guò)程:input={x1,x2,x3…xn}
1 計(jì)算 x1-xn的均值u
2 計(jì)算x1-xn的方差v
3 每個(gè)x_i = (x_i – u) / (sqrt(v^2)+ e) e是一個(gè)小小偏置姚糊,防止分母趨向于0.
4 在對(duì)結(jié)果進(jìn)行scale于shift操作 x_i = scale*x_i + shift
第四步存在的原因是batch_normal后,數(shù)據(jù)趨向標(biāo)準(zhǔn)正態(tài)授舟,會(huì)導(dǎo)致網(wǎng)絡(luò)表達(dá)能力變差救恨,這里加入后標(biāo)準(zhǔn)正態(tài)分布有些偏移,變得不那么標(biāo)準(zhǔn)了释树。這兩個(gè)參數(shù)時(shí)學(xué)習(xí)而來(lái)肠槽。
減少梯度消失,加快了收斂過(guò)程奢啥。
起到類似dropout一樣的正則化能力秸仙,一定程度上防止過(guò)擬合。
放寬了一定的調(diào)參要求桩盲。
可以替代LRN寂纪。
但是需要計(jì)算均值與方差,不適合動(dòng)態(tài)網(wǎng)絡(luò)或者RNN赌结。計(jì)算均值方差依賴每批次捞蛋,因此數(shù)據(jù)最好足夠打亂。
數(shù)據(jù)集的劃分
按一定比例劃分為訓(xùn)練集和測(cè)試集
這種方法也稱為保留法姑曙。我們通常取8-2襟交、7-3、6-4伤靠、5-5比例切分捣域,直接將數(shù)據(jù)隨機(jī)劃分為訓(xùn)練集和測(cè)試集,然后使用訓(xùn)練集來(lái)生成模型宴合,再用測(cè)試集來(lái)測(cè)試模型的正確率和誤差焕梅,以驗(yàn)證模型的有效性。
交叉驗(yàn)證法
交叉驗(yàn)證一般采用k折交叉驗(yàn)證卦洽,即k-fold cross validation贞言,往往k取為10。在這種數(shù)據(jù)集劃分法中阀蒂,我們將數(shù)據(jù)集劃分為k個(gè)子集该窗,每個(gè)子集均做一次測(cè)試集弟蚀,每次將其余的作為訓(xùn)練集。在交叉驗(yàn)證時(shí)酗失,我們重復(fù)訓(xùn)練k次义钉,每次選擇一個(gè)子集作為測(cè)試集,并將k次的平均交叉驗(yàn)證的正確率作為最終的結(jié)果规肴。
訓(xùn)練集捶闸、驗(yàn)證集、測(cè)試集法
我們首先將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集拖刃,由于模型的構(gòu)建過(guò)程中也需要檢驗(yàn)?zāi)P蜕咀常瑱z驗(yàn)?zāi)P偷呐渲茫约坝?xùn)練程度兑牡,過(guò)擬合還是欠擬合央碟,所以會(huì)將訓(xùn)練數(shù)據(jù)再劃分為兩個(gè)部分,一部分是用于訓(xùn)練的訓(xùn)練集发绢,另一部分是進(jìn)行檢驗(yàn)的驗(yàn)證集硬耍。驗(yàn)證集可以重復(fù)使用,主要是用來(lái)輔助我們構(gòu)建模型的边酒。