監(jiān)督學習基本概念和深度學習訓練模型基礎

星期六, 01. 六月 2019 03:22下午

  • 注: 博客關于監(jiān)督學習內(nèi)容參考李航《統(tǒng)計學習方法》第一版高氮,目前該書已經(jīng)于5月份已經(jīng)出了第二版卑惜,在原來監(jiān)督學習的基礎上加入了非監(jiān)督學習的內(nèi)容。
  • 深度學習內(nèi)容為筆者實踐中總結出來的些許經(jīng)驗,與大家一起分享。
  • 理解基本概念對以后的學習很重要。

一射亏、監(jiān)督學習基本概念

1 問題的形式化

統(tǒng)計學習包括監(jiān)督學習、半監(jiān)督學習腻脏、非監(jiān)督學習和強化學習鸦泳。
監(jiān)督學習假設輸入與輸出的隨機變量XY遵循聯(lián)合概率分布P(X, Y),但是實際中永品,聯(lián)合概率分布的定義是未知的做鹰。但是,統(tǒng)計學習認為數(shù)據(jù)存在一定的統(tǒng)計規(guī)律---數(shù)據(jù)(訓練數(shù)據(jù)和測試數(shù)據(jù))是由聯(lián)合概率分布P(X, Y)獨立同發(fā)布產(chǎn)生的鼎姐。這是監(jiān)督學習關于數(shù)據(jù)的基本假設钾麸。
監(jiān)督學習的目的在于學習一個由輸入到輸出的映射(模型)更振,這個模型可以是概率模型P(y|x),也可以是非概率模型y=f(x)饭尝,非概率模型也就是決策函數(shù)肯腕。在預測時(假設測試集輸入為x_{n+1},概率模型的輸出為y_{n+1}=argmax(P(y_{n+1}|x_{n+1})), 決策函數(shù)的輸出為y_{n+1}=f(x_{n+1})钥平。

2 損失函數(shù)(結構風險與經(jīng)驗風險)

損失函數(shù)是用來度量預測錯誤的程度实撒,常用的有0-1損失函數(shù),平方損失函數(shù)涉瘾,絕對值損失函數(shù)和對數(shù)損失函數(shù)知态,損失函數(shù)由記號L(Y, f(x))表示。顯然損失函數(shù)越小立叛,模型就越好负敏,由于模型輸入輸出遵循聯(lián)合概率分布,損失函數(shù)的期望為:
R_{exp}(f)=E_p[L(Y,f(x))]=\int_{X×Y} L(y, f(x))P(x,y)dxdy
這是理論上模型關于聯(lián)合分布在平均意義下的損失秘蛇,稱為風險函數(shù)其做。實際中,在給定訓練集T=\lbrace(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\rbrace,模型關于訓練集的平均損失為經(jīng)驗風險:
R_{emp}(f)=\frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i))
按照經(jīng)驗風險模型最小化求最優(yōu)模型就是求解最優(yōu)化問題:
min\ R_{emp}(f)=min\ \frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i))
但是赁还,當樣本容量很小時妖泄,經(jīng)驗風險最小化學習的效果未必好,會產(chǎn)生過擬合秽浇,結構化風險是為了防止過擬合而提出來的策略浮庐。結構化風險等價于正則化,結構化風險的定義為:
R_{srm}(f)=\frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i))+{\lambda} J(f)
其中J(f)為模型復雜度柬焕,\lambda \geq 0是系數(shù),用以權衡經(jīng)驗風險和模型復雜度梭域。結構風險小的模型往往對訓練數(shù)據(jù)以及未知數(shù)據(jù)有較好的預測斑举,它的最優(yōu)化問題為:
min\ R_{srm}(f)=min\ \frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i))+{\lambda} J(f)

3 正則化與S折交叉驗證

{\lambda} J(f)即為正則項,正則項一般是模型復雜度的單調(diào)遞增函數(shù)病涨。例如回歸問題中富玷,損失函數(shù)是平方損失函數(shù),正則項可以是參數(shù)向量的L_2范數(shù):
L(w)=\frac{1}{N}\sum_{i=1}^{N}(f(x_i;w)-y_i)^2+\frac{\lambda}{2}||w||_2^2)
正則項可以是參數(shù)向量的L_1范數(shù):
L(w)=\frac{1}{N}\sum_{i=1}^{N}(f(x_i;w)-y_i)^2+\lambda ||w||_1)
S折交叉驗證為應用最多的交叉驗證方法(主要用于選參數(shù))既穆,方法如下:

  • 首相隨機地將已知數(shù)據(jù)切分為S個互不相交的大小相同的子集赎懦;
  • 然后利用S-1個子集的數(shù)據(jù)訓練模型,利用余下的子集訓練模型幻工;
  • 將這一過程重復S次
  • 最后選擇S次測評中平均測試誤差最小的模型

二励两、深度學習訓練模型基礎

深度學習訓練模型筆者也是剛剛開始,筆者這次用的模型是多層LSTM+FC囊颅,主要用于時間序列(故障信號)的分類当悔,這次講的主要是一些如何控制過擬合和如何提高訓練的速度傅瞻。

1 提高GPU的利用率

GPU的利用率高低對于合理利用GPU很重要,在訓練模型時盲憎,非常有必要將利用率提高到80%以上嗅骄,主要有兩個方法:

(1) 控制GPU內(nèi)存,用如下代碼實現(xiàn)

import os
os.environ["CUDA_VISIBLE_DEVICES"] = '0' # 使用GPU: 0
config = tf.ConfigProto()
# config.gpu_options.per_process_gpu_memory_fraction = 0.5  # 程序最多只能占用指定gpu50%的顯存
config.gpu_options.allow_growth = True # 根據(jù)運行需求分配GPU內(nèi)存
sess = tf.Session(config=config)

(2) 減少數(shù)據(jù)頻繁讀寫

數(shù)據(jù)頻繁讀寫會使得GPU的利用率在0~100%之間快速的變化饼疙,此時GPU平均的利用率就很低溺森,遇到這種情況,需要增加batch_size窑眯,減慢數(shù)據(jù)的頻繁讀寫屏积,增大GPU的利用率。

2 train loss 與 validation loss 結果分析

  • train loss 不斷下降伸但,validation loss不斷下降肾请,說明網(wǎng)絡仍在學習;
  • train loss 不斷下降,validation loss趨于不變更胖,說明網(wǎng)絡過擬合;
  • train loss 趨于不變铛铁,validation loss不斷下降,說明數(shù)據(jù)集100%有問題;
  • train loss 趨于不變却妨,validation loss趨于不變饵逐,說明學習遇到瓶頸,需要減小學習率或批量數(shù)目;
  • train loss 不斷上升彪标,validation loss不斷上升倍权,說明網(wǎng)絡結構設計不當,訓練超參數(shù)設置不當捞烟,數(shù)據(jù)集經(jīng)過清洗等問題薄声。

3 采用early stop 控制過擬合

常用控制過擬合的方式有drop regularization (增加數(shù)據(jù)量),筆者這次主要講early stop中的一種常用的實現(xiàn)方法:即當網(wǎng)絡在連續(xù)多次訓練中题画,validation loss趨于不變默辨,網(wǎng)絡就停止。具體的代碼實現(xiàn)如下:

# previous_loss 前一次的loss
# current_loss 當前的loss
# Max_N 可以允許的n最大值
# Th_loss 可以允許的最大loss差值
# epoch 迭代周期
# best_iteration 最佳迭代次數(shù)
if abs(current_loss - previous_loss) < Th_loss:
    n += 1
    if n > Max_N:
       best_iteration = epoch + 1
       break
else:
    n = 0
previous_loss = current_loss

4 歸一化和shuffle+(repeat)

采用歸一化和shuffle主要目的是為了提高網(wǎng)絡的訓練速度苍息。
采用StandardScaler()歸一化的代碼如下:

from sklearn.preprocessing import StandardScaler
ss = StandardScaler().fit(train_x)
train_x = ss.transform(train_x)
test_x = ss.transform(test_x)

shuffle的代碼實現(xiàn)有很多種方式缩幸,可以是一周期shuffle一次或多次,也可以是每個batch shuffle一次或者多次

5 模型保存與加載

筆者這里只介紹保存全部模型(圖和變量)竞思,加載整個模型的方式表谊。
首先是保存整個模型:

saver = tf.train.Saver()
saver.save(sess, "./my_model_20190528/my_model_20190528")

保存結束后,在文件夾 my_model_20190528下面有4個子文件盖喷,分別為checkpoint my_model_20190528.data-00000-of-00001 my_model_20190528.index my_model_20190528.meta
然后在另一張圖上加載剛剛保存的模型:

# 導入保存的圖
new_saver = tf.train.import_meta_graph('./my_model_20190528/my_model_20190528.meta')

# 加載需要run的變量
graph = tf.get_default_graph()
accuracy = graph.get_tensor_by_name("Mean_1:0")
X = graph.get_tensor_by_name("Placeholder:0")
y = graph.get_tensor_by_name("Placeholder_1:0")
keep_prob = graph.get_tensor_by_name("Placeholder_2:0")

# 加載保存的模型
sess = tf.Session()
new_saver.restore(sess, './my_model/my_model')

keep_prob 在測試的時候應該設置為1.0

下次繼續(xù)分享爆办,歡迎留言

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市传蹈,隨后出現(xiàn)的幾起案子押逼,更是在濱河造成了極大的恐慌步藕,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挑格,死亡現(xiàn)場離奇詭異咙冗,居然都是意外死亡,警方通過查閱死者的電腦和手機漂彤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門雾消,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挫望,你說我怎么就攤上這事立润。” “怎么了媳板?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵桑腮,是天一觀的道長。 經(jīng)常有香客問我蛉幸,道長破讨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任奕纫,我火速辦了婚禮提陶,結果婚禮上,老公的妹妹穿的比我還像新娘匹层。我一直安慰自己隙笆,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布升筏。 她就那樣靜靜地躺著撑柔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪您访。 梳的紋絲不亂的頭發(fā)上乏冀,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機與錄音洋只,去河邊找鬼。 笑死昼捍,一個胖子當著我的面吹牛识虚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妒茬,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼担锤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了乍钻?” 一聲冷哼從身側響起肛循,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤铭腕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后多糠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體累舷,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年夹孔,在試婚紗的時候發(fā)現(xiàn)自己被綠了被盈。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡搭伤,死狀恐怖只怎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怜俐,我是刑警寧澤身堡,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站拍鲤,受9級特大地震影響贴谎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜殿漠,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一赴精、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绞幌,春花似錦蕾哟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至票渠,卻和暖如春逐哈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背问顷。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工昂秃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人杜窄。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓肠骆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親塞耕。 傳聞我的和親對象是個殘疾皇子蚀腿,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

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