學(xué)AI,好工作 就找北大青鳥(niǎo)
關(guān)注小青 聽(tīng)課做題,輕松學(xué)習(xí)
周一至周日
4000-9696-28

神經(jīng)網(wǎng)絡(luò)訓(xùn)練中的調(diào)參“四重奏”

來(lái)源:北大青鳥(niǎo)總部 2023年02月22日 10:55

摘要: 數(shù)據(jù)科學(xué)家經(jīng)常把調(diào)整隱藏層節(jié)點(diǎn)數(shù)、增加隱藏層數(shù)量、調(diào)整激活函數(shù)、調(diào)整模型復(fù)雜度控制這四類(lèi)調(diào)參方法正確有序地組合使用,使它們相互作用、交叉融合,讓神經(jīng)網(wǎng)絡(luò)模型產(chǎn)生了奇妙的效果。

數(shù)據(jù)科學(xué)家是人工智能、算法模型、大數(shù)據(jù)挖掘的專(zhuān)家,也是目前人工智能領(lǐng)域受人羨慕、集萬(wàn)般寵愛(ài)于一身的職業(yè),聽(tīng)起來(lái)怎么樣?高端、大氣、上檔次。作為高大上的數(shù)據(jù)科學(xué)家當(dāng)然要附庸風(fēng)雅一些(數(shù)據(jù)科學(xué)家:你在諷刺我嗎?J),他們?cè)跈C(jī)器學(xué)習(xí)、模型訓(xùn)練的枯燥工作閑暇之余,也要聽(tīng)聽(tīng)優(yōu)美、高雅的音樂(lè)放松下心情。在公認(rèn)的高雅音樂(lè)中,有一種四重奏樂(lè)曲,它由4種樂(lè)器協(xié)奏,樂(lè)器之間有一定類(lèi)似的特質(zhì)和旋律,在四位演奏家的高超技藝、默契良好地協(xié)調(diào)合作下,演奏出來(lái)的樂(lè)曲優(yōu)美動(dòng)聽(tīng)、音色純粹美麗,是廣大音樂(lè)愛(ài)好者和藝術(shù)家們最喜愛(ài)的一種樂(lè)曲形式。



在人工智能領(lǐng)域的深度學(xué)習(xí)過(guò)程中,尤其在數(shù)據(jù)科學(xué)家訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí),經(jīng)常會(huì)對(duì)神經(jīng)網(wǎng)絡(luò)模型進(jìn)行調(diào)參優(yōu)化,以獲得最佳的模型效果。其中有四類(lèi)最基本的調(diào)參方法,它們分別是:調(diào)整隱藏層節(jié)點(diǎn)數(shù)、增加隱藏層數(shù)量、調(diào)整激活函數(shù)、調(diào)整模型復(fù)雜度控制。數(shù)據(jù)科學(xué)家經(jīng)常把這四類(lèi)調(diào)參方法正確有序地組合起來(lái)使用,使它們相互作用、交叉融合,讓神經(jīng)網(wǎng)絡(luò)模型產(chǎn)生了奇妙的效果,此時(shí)數(shù)據(jù)科學(xué)家變身成為模型訓(xùn)練的“藝術(shù)演奏家”,譜寫(xiě)并奏響了神經(jīng)網(wǎng)絡(luò)訓(xùn)練中的調(diào)參“四重奏”。



調(diào)參“四重奏”之“舞臺(tái)”與“樂(lè)器”

首先,我們來(lái)準(zhǔn)備數(shù)據(jù)集和建立訓(xùn)練模型,搭建“四重奏”的“舞臺(tái)”。本文通過(guò)python語(yǔ)言調(diào)用scikit-learn庫(kù)中的紅酒數(shù)據(jù)集,并使用MLP神經(jīng)網(wǎng)絡(luò)來(lái)進(jìn)行分類(lèi)模擬訓(xùn)練。scikit-learn庫(kù)中的紅酒數(shù)據(jù)集共有178個(gè)數(shù)據(jù)樣本,它們被歸入三個(gè)類(lèi)別中,分別是class_0,class_1,和class_2,其中class_0中包含59個(gè)樣本,class_1中包含71個(gè)樣本,class_2中包含48個(gè)樣本。我們開(kāi)始準(zhǔn)備數(shù)據(jù)集,搭建“四重奏舞臺(tái)”,輸入代碼如下:


#導(dǎo)入MLP神經(jīng)網(wǎng)絡(luò)

from sklearn.neural_network import MLPClassifier

#從sklearn的datasets模塊載入紅酒數(shù)據(jù)集

from sklearn.datasets import load_wine

wine_data = load_wine()

#導(dǎo)入數(shù)據(jù)集拆分工具

from sklearn.model_selection import train_test_split

X= wine_data['data']

y= wine_data['target']

#將數(shù)據(jù)集拆分為訓(xùn)練數(shù)據(jù)集和驗(yàn)證數(shù)據(jù)集

X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=42)

#定義MLP分類(lèi)器

mlp = MLPClassifier(solver='lbfgs')

mlp.fit(X_train, y_train)


運(yùn)行結(jié)果如下:


MLPClassifier(activation='relu', alpha=0.0001, batch_size='auto', beta_1=0.9,beta_2=0.999, early_stopping=False, epsilon=1e-08,

hidden_layer_sizes=(100,), learning_rate='constant',

learning_rate_init=0.001, max_iter=200, momentum=0.9,

n_iter_no_change=10, nesterovs_momentum=True, power_t=0.5,

random_state=None, shuffle=True, solver='lbfgs', tol=0.0001,

validation_fraction=0.1, verbose=False, warm_start=False)


其次,我們?cè)偻ㄋ桌斫庀律窠?jīng)網(wǎng)絡(luò)的這四類(lèi)基礎(chǔ)調(diào)參的內(nèi)容,對(duì)于四重奏的重要角色——樂(lè)器我們可以比喻為這幾個(gè)基礎(chǔ)參數(shù):

小提琴、中提琴——隱藏層節(jié)點(diǎn)數(shù)、隱藏層數(shù)量(hidden_layer_sizes)。小提琴、中提琴的音色優(yōu)美柔和,在協(xié)奏中兩者配合起來(lái)非常協(xié)和,在神經(jīng)網(wǎng)絡(luò)調(diào)參中,隱藏層節(jié)點(diǎn)數(shù)與層數(shù)也是緊密配合使用,能充分調(diào)節(jié)神經(jīng)網(wǎng)絡(luò)的效果。在上面的運(yùn)行結(jié)果中,就是指hidden_layer_sizes參數(shù)。該參數(shù)值默認(rèn)情況下為[100,],表示模型中只有一個(gè)隱藏層,而隱藏層中的節(jié)點(diǎn)數(shù)是100。如果hidden_layer_sizes定義為[10,10],那就表示模型中有兩個(gè)隱藏層,每層有10個(gè)節(jié)點(diǎn)。

鋼琴——激活函數(shù)(activation)。鋼琴被人們稱(chēng)作樂(lè)器之王,音色洪亮動(dòng)聽(tīng),在協(xié)奏中能發(fā)揮主要的影響力,在神經(jīng)網(wǎng)絡(luò)調(diào)參中,激活函數(shù)的使用也能起到主要的影響作用。在上面的運(yùn)行結(jié)果中,激活函數(shù)就是activation參數(shù),它是將隱藏單元進(jìn)行非線性化的方法,一共有四種值:“identity”、“l(fā)ogistic”、“tanh”以及“relu”,而在默認(rèn)情況下,參數(shù)值是“relu”。

大提琴——模型復(fù)雜度控制(alpha)。大提琴音色低沉穩(wěn)重,在協(xié)奏中有著深沉的控制力,訓(xùn)練神經(jīng)網(wǎng)絡(luò)的調(diào)參中,對(duì)模型的復(fù)雜度控制也有類(lèi)似的效果。在上面的運(yùn)行結(jié)果中,模型復(fù)雜度控制就是alpha參數(shù)。它是一個(gè)用來(lái)控制正則化的程度,默認(rèn)的數(shù)值是0.0001。



奏響神經(jīng)網(wǎng)絡(luò)的調(diào)參“四重奏”

下面使用上面搭建好的舞臺(tái)(數(shù)據(jù)集和模型),看看調(diào)參四重奏的表演效果。


1、缺省參數(shù)下的模型測(cè)試


print('缺省參數(shù)下MLP模型的測(cè)試數(shù)據(jù)集得分:{:.2f}'.format(mlp.score(X_test, y_test)))


輸出結(jié)果為:


缺省參數(shù)下MLP模型的測(cè)試數(shù)據(jù)集得分:0.96


這個(gè)數(shù)據(jù)集和訓(xùn)練出來(lái)的MLP模型,表現(xiàn)還不錯(cuò)。


2、小提琴獨(dú)奏——隱藏層節(jié)點(diǎn)數(shù)為200的MLP模型

我們嘗試一下修改隱藏層參數(shù)hidden_layer_sizes的節(jié)點(diǎn)數(shù),看看它自己的獨(dú)奏效果(當(dāng)然其他參數(shù)并不是不起作用,而是在幕后充當(dāng)了背景音樂(lè)):


#修改隱藏層參數(shù)hidden_layer_sizes的節(jié)點(diǎn)數(shù)為200

mlp_200=MLPClassifier(solver='lbfgs', hidden_layer_sizes=[200])

mlp_200.fit(X_train, y_train)

print('節(jié)點(diǎn)數(shù)為200的MLP模型測(cè)試數(shù)據(jù)集得分:{:.2f}'.format(mlp_200.score(X_test, y_test)))


輸出結(jié)果為:


節(jié)點(diǎn)數(shù)為200的MLP模型測(cè)試數(shù)據(jù)集得分:0.71


好像效果一般,我們?cè)俳又{(diào)整其他參數(shù),開(kāi)始二重奏。


3、小提琴與中提琴協(xié)奏——隱藏層節(jié)點(diǎn)數(shù)為200、層數(shù)為2的MLP模型


#修改隱藏層參數(shù)hidden_layer_sizes的層數(shù)為2、節(jié)點(diǎn)數(shù)為200

mlp_2L=MLPClassifier(solver='lbfgs', hidden_layer_sizes=[200,200])

mlp_2L.fit(X_train, y_train)

print('隱藏層數(shù)為2、節(jié)點(diǎn)數(shù)為200的MLP模型測(cè)試數(shù)據(jù)集得分:{:.2f}'.format(mlp_2L.score(X_test, y_test)))


輸出結(jié)果為:


隱藏層數(shù)為2、節(jié)點(diǎn)數(shù)為200的MLP模型測(cè)試數(shù)據(jù)集得分:0.93


模型效果得到明顯的改善,繼續(xù)增加參數(shù)看看三重奏的效果。


4、小提琴、中提琴、鋼琴三重奏——隱藏層節(jié)點(diǎn)數(shù)為200、層數(shù)為2、激活函數(shù)值為tanh的MLP模型


#增加修改激活函數(shù)的值為tanh

mlp_tanh=MLPClassifier(solver='lbfgs', hidden_layer_sizes=[200,200],

activation='tanh')

mlp_tanh.fit(X_train, y_train)

print('隱藏層數(shù)為2、節(jié)點(diǎn)數(shù)為200、激活函數(shù)為tanh的MLP模型測(cè)試數(shù)據(jù)集得分:{:.2f}'.format(mlp_tanh.score(X_test, y_test)))


輸出結(jié)果為:


隱藏層數(shù)為2、節(jié)點(diǎn)數(shù)為200、激活函數(shù)為tanh的MLP模型測(cè)試數(shù)據(jù)集得分:0.84


好像有點(diǎn)不和諧了,模型效果反而降低了,也許是這個(gè)數(shù)據(jù)集不能這樣來(lái)調(diào)參吧,繼續(xù)增加參數(shù),嘗試一下四重奏的效果。


5、四重奏——隱藏層節(jié)點(diǎn)數(shù)為200、層數(shù)為2、激活函數(shù)值為tanh、模型復(fù)雜度控制alpha=1的MLP模型


mlp_4cz=MLPClassifier(solver='lbfgs', hidden_layer_sizes=[200,200],

activation='tanh',alpha=1)

mlp_4cz.fit(X_train, y_train)

print('隱藏層數(shù)為2、節(jié)點(diǎn)數(shù)為200、激活函數(shù)為tanh、模型復(fù)雜度控制為1的MLP模型測(cè)試數(shù)據(jù)集得分:{:.2f}'.format(mlp_4cz.score(X_test, y_test)))


輸出結(jié)果為:


隱藏層數(shù)為2、節(jié)點(diǎn)數(shù)為200、激活函數(shù)為tanh、模型復(fù)雜度控制為1的MLP模型測(cè)試數(shù)據(jù)集得分:0.82


好像效果也沒(méi)有提高,四重奏沒(méi)有發(fā)揮更大的效果。難道折騰了好一會(huì)的四重奏演奏會(huì)就這樣結(jié)束了,好像有點(diǎn)不甘心。


6、正確認(rèn)識(shí)調(diào)參

其實(shí),在神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程中(其他模型訓(xùn)練也一樣),參數(shù)調(diào)整是通過(guò)不斷嘗試和磨合的,現(xiàn)實(shí)情況中,不能是只要覺(jué)得調(diào)整了參數(shù)就會(huì)一定有好的效果,就像作曲家譜寫(xiě)的四重奏樂(lè)章,如果一定要把不合適的樂(lè)器、旋律、節(jié)奏搭配在一起,那么再優(yōu)秀的演奏家,做多大的努力進(jìn)行協(xié)同演奏,也奏不出優(yōu)美動(dòng)聽(tīng)的音樂(lè)來(lái)。

注:本文為了幫助讀者朋友方便理解四個(gè)基本調(diào)參方法做的粗淺比喻,并不是指其他參數(shù)就不起作用了,其他參數(shù)都做了背景音樂(lè),在幕后當(dāng)著幕后英雄呢。而且在調(diào)參過(guò)程中,也可以多增加幾個(gè)參數(shù)一起調(diào)節(jié),可以奏響調(diào)參的五重奏、六重奏,甚至是交響樂(lè)團(tuán)演奏,J。



調(diào)參四重奏之結(jié)語(yǔ)

根據(jù)上述對(duì)MLP神經(jīng)網(wǎng)絡(luò)簡(jiǎn)單的訓(xùn)練過(guò)程,我們可以小結(jié)如下:

l 本文對(duì)神經(jīng)網(wǎng)絡(luò)模型中的四種參數(shù)調(diào)節(jié)方法是常用的優(yōu)化手段,這四種調(diào)參需要不斷試驗(yàn)組合,達(dá)到模型最佳。其中隱藏層的數(shù)量和隱藏層中節(jié)點(diǎn)的數(shù)量使用最多,但是神經(jīng)網(wǎng)絡(luò)的隱藏節(jié)點(diǎn)個(gè)數(shù)選取問(wèn)題至今仍是一個(gè) 世界難題,根據(jù)經(jīng)驗(yàn),建議神經(jīng)網(wǎng)絡(luò)中隱藏層的節(jié)點(diǎn)數(shù)與訓(xùn)練數(shù)據(jù)集的特征數(shù)量大致相等,但是一般不要超過(guò)500。

l 神經(jīng)網(wǎng)絡(luò)訓(xùn)練中的調(diào)參還有很多方式,比如loss函數(shù)的選擇、Regularization、dropout、調(diào)節(jié)mini-batch size等等。限于篇幅,這里不再贅述,有興趣的讀者可以在網(wǎng)絡(luò)上查找資料進(jìn)行操作演練。

l 本項(xiàng)目使用的MLP神經(jīng)網(wǎng)絡(luò)是一種多層感知器,在實(shí)際項(xiàng)目中應(yīng)用不是太多,讀者朋友可以再使用卷積神經(jīng)網(wǎng)絡(luò)、遞歸神經(jīng)網(wǎng)絡(luò)等算法模型嘗試一下調(diào)參效果。



熱門(mén)班型時(shí)間
人工智能就業(yè)班 即將爆滿
AI應(yīng)用線上班 即將爆滿
UI設(shè)計(jì)全能班 即將爆滿
數(shù)據(jù)分析綜合班 即將爆滿
軟件開(kāi)發(fā)全能班 爆滿開(kāi)班
網(wǎng)絡(luò)安全運(yùn)營(yíng)班 爆滿開(kāi)班
報(bào)名優(yōu)惠
免費(fèi)試聽(tīng)
課程資料
官方微信
返回頂部
培訓(xùn)課程 熱門(mén)話題 站內(nèi)鏈接