深度學(xué)習(xí)中的多任務(wù)學(xué)習(xí)(Multi-task learning)——keras實(shí)現(xiàn)

多任務(wù)學(xué)習(xí)(Multi-task learning)簡介

多任務(wù)學(xué)習(xí)(Multi-task learning)是遷移學(xué)習(xí)(Transfer Learning)的一種捆探,而遷移學(xué)習(xí)指的是將從源領(lǐng)域的知識(shí)(source domin)學(xué)到的知識(shí)用于目標(biāo)領(lǐng)域(target domin),提升目標(biāo)領(lǐng)域的學(xué)習(xí)效果酸钦。 而多任務(wù)學(xué)習(xí)也是希望模型同時(shí)做多個(gè)任務(wù)時(shí),能將其他任務(wù)學(xué)到的知識(shí),用于目標(biāo)任務(wù)中度液,從而提升目標(biāo)任務(wù)效果。

如果我們換個(gè)角度理解画舌,其實(shí)多任務(wù)學(xué)習(xí)堕担,其實(shí)是對目標(biāo)任務(wù)做了一定的約束,或者叫做regularization曲聂。我們不希望模型只局限于目標(biāo)任務(wù)的學(xué)習(xí)霹购,而是能夠適應(yīng)多個(gè)任務(wù)場景,這樣可以大大的增加模型的泛函能力(generalization)朋腋。

舉個(gè)形象的例子齐疙,單人多任務(wù)學(xué)習(xí)模型就像一個(gè)一門心思只做一樣事情的匠人,在他自己的領(lǐng)域旭咽,他可能可以做一百分贞奋,如果換個(gè)任務(wù)也許他就會(huì)做的不是特別好,而多任務(wù)學(xué)習(xí)模型就像一個(gè)什么任務(wù)都做得還算優(yōu)秀但是不完美的人轻专∫涿可是在實(shí)際深度學(xué)習(xí)任務(wù)中,測試集和訓(xùn)練集的分布還是會(huì)有一定的偏差,那測試集可能就意味給讓模型做一個(gè)目標(biāo)微調(diào)后任務(wù)催训。所以在測試集上洽议,多任務(wù)模型大概率是表現(xiàn)優(yōu)異那一個(gè)。

這里需要強(qiáng)調(diào)一點(diǎn)漫拭,這里的多任務(wù)的各個(gè)任務(wù)之間一定要有強(qiáng)相關(guān)性亚兄,如果任務(wù)之間本身的關(guān)聯(lián)性就不大,多任務(wù)學(xué)習(xí)并不會(huì)對模型的提升并不一定會(huì)有用采驻。

多任務(wù)學(xué)習(xí)(Multi-task learning)的兩種模式

深度學(xué)習(xí)中兩種多任務(wù)學(xué)習(xí)模式:隱層參數(shù)的硬共享與軟共享审胚。

  • 隱層參數(shù)硬共享,指的是多個(gè)任務(wù)之間共享網(wǎng)絡(luò)的同幾層隱藏層礼旅,只不過在網(wǎng)絡(luò)的靠近輸出部分開始分叉去做不同的任務(wù)膳叨。
  • 隱層參數(shù)軟共享,不同的任務(wù)使用不同的網(wǎng)絡(luò)痘系,但是不同任務(wù)的網(wǎng)絡(luò)參數(shù)菲嘴,采用距離(L1,L2)等作為約束,鼓勵(lì)參數(shù)相似化汰翠。

而本次的代碼實(shí)現(xiàn)采用的是隱層參數(shù)硬共享龄坪,也就是兩個(gè)任務(wù)共享網(wǎng)絡(luò)淺層的參數(shù)。

多任務(wù)學(xué)習(xí)keras實(shí)現(xiàn)

這里筆者簡單的介紹一下如何通過keras簡單的搭建一個(gè)多任務(wù)學(xué)習(xí)網(wǎng)絡(luò)复唤。

這里筆者的目標(biāo)任務(wù)是一個(gè)10分類的關(guān)系分類任務(wù)健田,對關(guān)系分類任務(wù)不是很了解的同學(xué)可以移步到筆者之前的文章中去了解一下,而我將訓(xùn)練文本中兩個(gè)存在關(guān)系的實(shí)體(entity)標(biāo)了出來佛纫,在模型中加了一個(gè)命名體識(shí)別(NER)任務(wù)構(gòu)成了多任務(wù)學(xué)習(xí)模型妓局。
筆者的網(wǎng)絡(luò)架構(gòu)如下圖所示:

  • 句子向量和位置向量拼接構(gòu)成模型的輸入,
  • 經(jīng)過一層共享的LSTM編碼層雳旅,后模型開始分叉跟磨,
  • 其中一條路徑是經(jīng)過一層MaxPooling和以及全連接層后輸出文本分類的預(yù)測輸出间聊,
  • 另外一條路徑是經(jīng)過一層CRF層后輸出命名實(shí)體識(shí)別的預(yù)測輸出攒盈。


    model

模型代碼部分

這里模型構(gòu)建不需要注意,筆者這里強(qiáng)調(diào)的是:

  • 各個(gè)任務(wù)的輸出層一定要命名哎榴,比如筆者這個(gè)模型的文本分類任務(wù)的輸出層Dense(10, activation='softmax',name = "out1")(out1)中的name ="out1"型豁,以及NER的輸出層crf = CRF(2, sparse_target=True,name ="crf_output")中的name ="crf_output"不能省略。

  • 第二個(gè)就是model.compile中的loss和loss的權(quán)重需要和任務(wù)輸出層的name進(jìn)行對應(yīng)尚蝌,如下:
    loss={'out1': 'categorical_crossentropy','crf_output': crf.loss_function}
    loss_weights={'out1':1, 'crf_output': 1}

下面是實(shí)現(xiàn)代碼迎变,發(fā)現(xiàn)沒有,Keras搭建多任務(wù)學(xué)習(xí)模型是不是So easy飘言。

from keras.layers import Input,LSTM,Bidirectional,Dense,Dropout,Concatenate,Embedding,GlobalMaxPool1D
from keras.models import Model
from keras_contrib.layers import CRF
import keras.backend as K
from keras.utils import plot_model

K.clear_session()
maxlen = 40
###輸入
inputs = Input(shape=(maxlen,768),name="sen_emb")
pos1_en = Input(shape=(maxlen,),name="pos_en1_id")
pos2_en = Input(shape=(maxlen,),name="pos_en2_id")
pos1_emb = Embedding(maxlen,8,input_length=maxlen,name = "pos_en1_emb")(pos1_en)
pos2_emb = Embedding(maxlen,8,input_length=maxlen,name = "pos_en2_emb")(pos2_en)
x = Concatenate(axis=2)([inputs,pos1_emb,pos2_emb])

###參數(shù)共享部分
x = Bidirectional(LSTM(128,return_sequences=True))(x)

###任務(wù)一衣形,10分類的文本分類任務(wù)
out1 = GlobalMaxPool1D()(x)
out1 = Dense(64, activation='relu')(out1)
out1 = Dropout(0.5)(out1)
out1 = Dense(10, activation='softmax',name = "out1")(out1)

###任務(wù)二,實(shí)體識(shí)別任務(wù)
crf = CRF(2, sparse_target=True,name ="crf_output")
crf_output = crf(x)

###模型有兩個(gè)輸出out1,crf_output
model = Model(inputs=[inputs,pos1_en,pos2_en], outputs=[out1,crf_output])
model.summary()

###模型有兩個(gè)loss,categorical_crossentropy和crf.loss_function
model.compile(optimizer='adam',
              loss={'out1': 'categorical_crossentropy','crf_output': crf.loss_function},
              loss_weights={'out1':1, 'crf_output': 1},
              metrics=["acc"])
plot_model(model,to_file="model.png")

結(jié)語

筆者利用這個(gè)多任務(wù)學(xué)習(xí)的模型和去掉CRF實(shí)體識(shí)別分支的單任務(wù)模型做了對比實(shí)驗(yàn),確實(shí)多任務(wù)學(xué)習(xí)模型比單任務(wù)模型在測試集上的F1得分要好2個(gè)百分點(diǎn)左右谆吴。多任務(wù)訓(xùn)練模型的泛化能力確實(shí)很強(qiáng)倒源。如果你的深度學(xué)習(xí)模型遇到瓶頸了,可以嘗試一下多任務(wù)學(xué)習(xí)模型哦句狼。

參考文獻(xiàn)

https://blog.csdn.net/xuluohongshang/article/details/79044325

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笋熬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子腻菇,更是在濱河造成了極大的恐慌胳螟,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筹吐,死亡現(xiàn)場離奇詭異糖耸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)丘薛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門蔬捷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人榔袋,你說我怎么就攤上這事周拐。” “怎么了凰兑?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵妥粟,是天一觀的道長。 經(jīng)常有香客問我吏够,道長勾给,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任锅知,我火速辦了婚禮播急,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘售睹。我一直安慰自己桩警,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布昌妹。 她就那樣靜靜地躺著捶枢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪飞崖。 梳的紋絲不亂的頭發(fā)上烂叔,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音固歪,去河邊找鬼蒜鸡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的逢防。 我是一名探鬼主播康聂,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胞四!你這毒婦竟也來了恬汁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤辜伟,失蹤者是張志新(化名)和其女友劉穎氓侧,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體导狡,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡约巷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旱捧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片独郎。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖枚赡,靈堂內(nèi)的尸體忽然破棺而出氓癌,到底是詐尸還是另有隱情,我是刑警寧澤贫橙,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布贪婉,位于F島的核電站,受9級(jí)特大地震影響卢肃,放射性物質(zhì)發(fā)生泄漏疲迂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一莫湘、第九天 我趴在偏房一處隱蔽的房頂上張望尤蒿。 院中可真熱鬧,春花似錦幅垮、人聲如沸腰池。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巩螃。三九已至,卻和暖如春匕争,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背爷耀。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工甘桑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓跑杭,卻偏偏與公主長得像铆帽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子德谅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

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