王婧文,張思萌,祁薇
(海軍大連艦艇學(xué)院,遼寧大連 116018)
隨著當(dāng)今社會(huì)上各個(gè)領(lǐng)域?qū)χ悄軝C(jī)器建設(shè)需求的持續(xù)增加,各高校也陸續(xù)開(kāi)設(shè)了人工智能基礎(chǔ)類(lèi)課程,此類(lèi)課程成為計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)的專(zhuān)業(yè)基礎(chǔ)課程之一。課程內(nèi)容涵蓋復(fù)雜算法知識(shí)、統(tǒng)計(jì)學(xué)知識(shí)、概率論知識(shí)和近似理論,是一門(mén)多學(xué)科交叉的課程[1]。該課程的側(cè)重點(diǎn)為各種理論算法,包括邏輯回歸、隨機(jī)森林、神經(jīng)網(wǎng)絡(luò)、支持向量機(jī)(Support Vector Machine)、BP算法等。高校開(kāi)設(shè)此類(lèi)課程的目的其一是要學(xué)生通過(guò)學(xué)習(xí)和實(shí)驗(yàn)掌握基礎(chǔ)的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)算法原理,并通過(guò)技術(shù)解決實(shí)際問(wèn)題;其二是在熟練掌握各類(lèi)算法的基礎(chǔ)上進(jìn)行算法的改進(jìn),為人工智能領(lǐng)域發(fā)展新的技術(shù)。
目前,高校中進(jìn)行人工智能基礎(chǔ)課程教學(xué)主要是通過(guò)理論授課與實(shí)驗(yàn)相結(jié)合的方式進(jìn)行,在前期的基礎(chǔ)實(shí)驗(yàn)過(guò)程中多是依靠Matlab 平臺(tái)對(duì)多維數(shù)據(jù)進(jìn)行分析,該方式完全依靠程序代碼,且要學(xué)習(xí)Matlab 語(yǔ)法,與前期課程所學(xué)編程語(yǔ)言銜接程度不深,而數(shù)據(jù)也是由學(xué)校直接提供,不僅難以激發(fā)學(xué)生的學(xué)習(xí)興趣,且與企業(yè)的需求有一定程度的脫節(jié)。在此值得注意的是,許多知名企業(yè)都先后推出了人工智能深度學(xué)習(xí)框架以及數(shù)據(jù)處理的可視化工具,若能充分利用此類(lèi)工具和平臺(tái),以與時(shí)俱進(jìn)的方式進(jìn)行教學(xué),讓學(xué)生盡早接觸先進(jìn)的深度學(xué)習(xí)平臺(tái),對(duì)培養(yǎng)學(xué)生的學(xué)習(xí)興趣以及知識(shí)的廣度與深度都非常有益。而不同的深度學(xué)習(xí)框架的特點(diǎn)不盡相同,提供的學(xué)習(xí)資源和側(cè)重的方向亦有所差異,與先前所學(xué)知識(shí)的銜接程度也有不同。因此,若能夠根據(jù)課程的難易程度與時(shí)間安排,選擇合適的平臺(tái)設(shè)計(jì)互補(bǔ)合理的實(shí)驗(yàn)內(nèi)容,將引導(dǎo)與探索式教學(xué)相結(jié)合,可以在一定程度上提升學(xué)生的學(xué)習(xí)的效率以及積極性。
為此,本文提出Facebook所開(kāi)發(fā)的人工智能框架——PyTorch與開(kāi)源可視化數(shù)據(jù)挖掘工具WEKA在教學(xué)中的綜合應(yīng)用,其互補(bǔ)教學(xué)方式以及優(yōu)勢(shì)將在本文中做詳細(xì)介紹。
WEKA(Waikato Environment for Knowledge Analysis)是一款開(kāi)源免費(fèi)的機(jī)器學(xué)習(xí)以及數(shù)據(jù)挖掘軟件,該平臺(tái)是可視化平臺(tái),集合了大量基礎(chǔ)和經(jīng)典的機(jī)器學(xué)習(xí)算法,包括對(duì)數(shù)據(jù)進(jìn)行預(yù)處理、分類(lèi)、聚類(lèi)、回歸等功能都可以通過(guò)平臺(tái)的操作實(shí)現(xiàn)[2]。因WEKA已經(jīng)是一個(gè)較為成熟的開(kāi)源軟件,具備完備的學(xué)習(xí)資料以及文獻(xiàn)文檔,綜合其屬于操作應(yīng)用級(jí)平臺(tái)、無(wú)需編程、可視化界面操作的特征,較容易學(xué)習(xí)和掌握使用方法。
因當(dāng)前課程學(xué)科交叉性強(qiáng),需要在學(xué)習(xí)中拓寬思維方式、追求深度和廣度的特點(diǎn),在教學(xué)過(guò)程中,若僅從理論上闡述,學(xué)生的實(shí)際操作能力無(wú)法得到鍛煉,不易于真正理解;若立刻以編程的方式開(kāi)展實(shí)驗(yàn),學(xué)生會(huì)因前期的數(shù)據(jù)分析處理過(guò)程冗長(zhǎng),而自己在技術(shù)上能力有限,從而產(chǎn)生畏難情緒。因此,在課程前期,講述機(jī)器學(xué)習(xí)的訓(xùn)練步驟、訓(xùn)練方法時(shí),可借助WEKA平臺(tái)的可視化操作界面為學(xué)生做具體演示,該方式更容易為初學(xué)者搭建思路框架,令所學(xué)的算法理論有的放矢。而在操作過(guò)程中引入對(duì)不同訓(xùn)練方式(如變換訓(xùn)練集數(shù)量、訓(xùn)練算法以及增加噪聲數(shù)據(jù)等)所構(gòu)建出模型正確率的思考,更能激發(fā)學(xué)生學(xué)習(xí)的興趣,加深學(xué)生對(duì)算法和源數(shù)據(jù)處理的認(rèn)識(shí)。例如,分類(lèi)(Classify)類(lèi)選項(xiàng)卡中提供了各種用于創(chuàng)建訓(xùn)練模型的可選訓(xùn)練方式,包括比例分割(percentage split)、交叉驗(yàn)證(cross-validation)、使用訓(xùn)練集(use training set)等[3],且當(dāng)前選項(xiàng)卡中的分類(lèi)器輸出欄可以顯示結(jié)果的測(cè)試指標(biāo),通過(guò)點(diǎn)擊右鍵可以得到圖形化的結(jié)果界面,學(xué)生在實(shí)驗(yàn)中通過(guò)觀察選取不同的訓(xùn)練方式進(jìn)行訓(xùn)練和建模所導(dǎo)致的不同結(jié)果,可以了解到不同訓(xùn)練形式的適用范圍以及其優(yōu)缺點(diǎn)。而選擇屬性(select attributes)選項(xiàng)卡則利用可視化界面集成了多種用于選擇樣本特征的方法,例如信息增益、信息增益比或選擇部分指定的特征來(lái)進(jìn)行分析等方式,通過(guò)多種特征選擇下的分析結(jié)果進(jìn)行可視化對(duì)比,可以為學(xué)生展示特征的選取對(duì)訓(xùn)練模型構(gòu)建的重要性。
WEKA作為一個(gè)將算法、特征選擇及數(shù)據(jù)預(yù)處理功能集成到可視化界面的開(kāi)源工具,在實(shí)驗(yàn)中令學(xué)生更容易看到更多不同的結(jié)果,在控制變量的實(shí)驗(yàn)方式下易激發(fā)學(xué)生的好奇心和興趣,以此種方式可以培養(yǎng)學(xué)生的實(shí)際動(dòng)手能力,使學(xué)生熟悉數(shù)據(jù)挖掘和處理的流程,為更困難的算法學(xué)習(xí)打下基礎(chǔ)。在一些入門(mén)級(jí)的算法實(shí)踐上,可以考慮用WEKA 平臺(tái)作為實(shí)驗(yàn)環(huán)境。
PyTorch 是2017 年Facebook 人工智能研究院(FAIR)團(tuán)隊(duì)在GitHub 上開(kāi)源的深度學(xué)習(xí)框架[4],其充分考慮到了Python語(yǔ)言的諸多優(yōu)勢(shì),為使用者提供了Python 語(yǔ)言的接口,并且對(duì)Tensor 之上的所有模塊進(jìn)行了重構(gòu),同時(shí)新增了最先進(jìn)的自動(dòng)求導(dǎo)系統(tǒng),是當(dāng)下流行的動(dòng)態(tài)圖框架。
PyTorch 與其他的深度學(xué)習(xí)框架相比有諸多優(yōu)點(diǎn),其一是它支持Python 語(yǔ)言,支持Python 中的各種功能函數(shù),可以直接使用Python 的類(lèi)庫(kù),令數(shù)據(jù)處理的過(guò)程更為簡(jiǎn)單,同時(shí),Python 語(yǔ)言在前置課程的學(xué)習(xí)中已被學(xué)生所熟悉,不需要為本門(mén)課程的實(shí)驗(yàn)重新學(xué)習(xí)一門(mén)語(yǔ)言,學(xué)生更易上手。其二是PyTorch 采用了追求最少的封裝的設(shè)計(jì)方式,簡(jiǎn)潔的設(shè)計(jì)帶來(lái)的另外一個(gè)好處就是代碼易于理解,更少的抽象、更直觀的設(shè)計(jì)使得PyTorch 的源碼更加易于分析、閱讀以及學(xué)習(xí)[5]。其三,支持動(dòng)態(tài)圖的創(chuàng)建也是PyTorch的一大優(yōu)勢(shì),當(dāng)前的深度學(xué)習(xí)平臺(tái)絕大多數(shù)都是采用靜態(tài)圖模型方式,包括TensorFlow、Caffe、Theano 以及Keras等,靜態(tài)圖定義的缺陷是在處理數(shù)據(jù)前必須定義好完整的一套模型,能夠處理所有的邊際情況,而動(dòng)態(tài)圖模型允許用戶先定義好一套基本的框架再根據(jù)數(shù)據(jù)來(lái)實(shí)時(shí)修正模型,在訓(xùn)練模型時(shí)具備極強(qiáng)的靈活性,除了進(jìn)行實(shí)驗(yàn),深入理解深度學(xué)習(xí)算法的思想之外,一定程度上也方便學(xué)生未來(lái)在深度學(xué)習(xí)領(lǐng)域提高研究的深度和廣度。另外,PyTorch 的環(huán)境配置和搭建較TensorFlow 而言也更加簡(jiǎn)單,對(duì)于初學(xué)者而言更加友好。
在教學(xué)實(shí)施之中,考慮將兩個(gè)平臺(tái)結(jié)合起來(lái),發(fā)揮各自的優(yōu)勢(shì)和特色進(jìn)行互補(bǔ)式教學(xué)。在課程的第一階段,學(xué)習(xí)的內(nèi)容是一些基礎(chǔ)的算法,對(duì)于基礎(chǔ)的算法,如決策樹(shù)、線性回歸、支持向量機(jī)(SOM)以及梯度下降損失函數(shù)可以采用WEKA平臺(tái)進(jìn)行課上演示,并布置實(shí)驗(yàn)作業(yè),給出實(shí)驗(yàn)數(shù)據(jù)集。由于在此平臺(tái)上,學(xué)生只需要載入數(shù)據(jù)集,在可視化界面上設(shè)置適合的參數(shù)即可得到實(shí)驗(yàn)結(jié)果,相對(duì)較容易實(shí)現(xiàn),因此在每次實(shí)驗(yàn)中可以布置多個(gè)思考題,要求學(xué)生通過(guò)可視化分析得出結(jié)論,并總結(jié)各個(gè)訓(xùn)練方式的結(jié)果產(chǎn)生差距的原因,思考是什么原因造成了過(guò)擬合現(xiàn)象等。同時(shí),在實(shí)驗(yàn)中要求學(xué)生以不同的特征數(shù)據(jù)作為訓(xùn)練集,觀察其模型表現(xiàn)上的優(yōu)劣,培養(yǎng)學(xué)生對(duì)于特征(feature)以及特征選取(feature selection)的敏感程度,在此基礎(chǔ)上適當(dāng)給出一些降維算法(如經(jīng)典PCA 算法)以及文本挖掘領(lǐng)域的典型特征作為自學(xué)內(nèi)容,培養(yǎng)學(xué)生觸類(lèi)旁通的能力,對(duì)于部分對(duì)文本挖掘領(lǐng)域有興趣的同學(xué),也可以做一個(gè)淺層的了解,為后續(xù)課程鋪墊,提升知識(shí)的廣度。在整個(gè)實(shí)驗(yàn)過(guò)程中學(xué)生通過(guò)對(duì)實(shí)驗(yàn)數(shù)據(jù)的清洗,對(duì)特征的重新處理,以及對(duì)算法和驗(yàn)證方式的選擇,了解機(jī)器學(xué)習(xí)算法從數(shù)據(jù)準(zhǔn)備到構(gòu)建模型全步驟的處理流程,通過(guò)基礎(chǔ)的簡(jiǎn)單的操作,在實(shí)踐中構(gòu)建出宏觀的機(jī)器學(xué)習(xí)思維。
在第二個(gè)階段,可以引入PyTorch框架進(jìn)行實(shí)驗(yàn),在此階段的學(xué)習(xí)之前,學(xué)生需要對(duì)Python語(yǔ)言具備一定的基礎(chǔ)。該部分實(shí)驗(yàn)可以開(kāi)展在正式學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)之前,以最簡(jiǎn)單的神經(jīng)元的方式去描述線性回歸問(wèn)題,提前提出正向傳播(forward)和反向傳播(backward)的概念(如圖1)。通過(guò)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò),可以直觀又不復(fù)雜地理解到神經(jīng)網(wǎng)絡(luò)工作的流程,避免在最初接觸神經(jīng)網(wǎng)絡(luò)就與復(fù)雜的矩陣運(yùn)算相關(guān)聯(lián),使學(xué)生產(chǎn)生畏難情緒。
圖1 神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)線性模型訓(xùn)練流程
該部分實(shí)驗(yàn)使學(xué)生在了解神經(jīng)網(wǎng)絡(luò)原理的同時(shí)也熟悉PyTorch平臺(tái)的使用,了解Tensor的含義,熟悉平臺(tái)的基本語(yǔ)法,為后續(xù)的深度學(xué)習(xí)打下基礎(chǔ)。在實(shí)踐過(guò)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)后,可要求學(xué)生完成卷積神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)等實(shí)驗(yàn)。需要注意的是,在Py-Torch 平臺(tái)的實(shí)驗(yàn)需要編程和調(diào)試程序,難度系數(shù)增大,需要根據(jù)實(shí)際情況給出一些代碼的提示,以填空的模式或者給出一些簡(jiǎn)單場(chǎng)景的實(shí)現(xiàn)代碼。實(shí)驗(yàn)總共安排9次(如表1)。
表1 基于多平臺(tái)融合的人工智能課程實(shí)驗(yàn)設(shè)計(jì)
在實(shí)驗(yàn)過(guò)程中,所有的實(shí)驗(yàn)數(shù)據(jù)集將全部從Kaggle平臺(tái)獲取。Kaggle是主要為開(kāi)發(fā)商和數(shù)據(jù)科學(xué)家提供舉辦機(jī)器學(xué)習(xí)競(jìng)賽、托管數(shù)據(jù)庫(kù)、編寫(xiě)和分享代碼的平臺(tái)[6],其數(shù)據(jù)都是從真正的運(yùn)營(yíng)網(wǎng)站中獲取,具備真實(shí)、全面、準(zhǔn)確的特征,有許多能應(yīng)用于多種場(chǎng)合的數(shù)據(jù)集,或簡(jiǎn)單如藥品銷(xiāo)售、食品銷(xiāo)量及評(píng)價(jià),或龐雜重要如空氣污染數(shù)據(jù)。這些數(shù)據(jù)取自現(xiàn)實(shí)世界,存在真實(shí)的噪聲和冗余,使學(xué)生在真實(shí)的數(shù)據(jù)下進(jìn)行實(shí)驗(yàn),更具實(shí)際意義。
在教學(xué)實(shí)踐中,應(yīng)該著重完善以下環(huán)節(jié):
1)重視對(duì)學(xué)生的實(shí)驗(yàn)輔導(dǎo),每次實(shí)驗(yàn)除了布置實(shí)驗(yàn)內(nèi)容之外,更要有足夠的資料、文獻(xiàn)或案例提前下發(fā)到學(xué)生手中,讓學(xué)生提早預(yù)習(xí)實(shí)驗(yàn)內(nèi)容,或?qū)碚撜n講授的知識(shí)點(diǎn)做適當(dāng)?shù)难a(bǔ)充,完善整個(gè)知識(shí)體系中細(xì)節(jié)的部分,使學(xué)生在實(shí)驗(yàn)的過(guò)程中做到有的放矢。實(shí)驗(yàn)任務(wù)書(shū)中提供的案例要嚴(yán)謹(jǐn),最好是學(xué)生按照步驟一步一步操作即可完成的內(nèi)容,難度上要比實(shí)驗(yàn)內(nèi)容簡(jiǎn)單,在課前讓學(xué)生熟悉整個(gè)流程,也增強(qiáng)學(xué)生實(shí)驗(yàn)的信心和滿足感。
2)在課程簡(jiǎn)介中要標(biāo)注好在選修本門(mén)課程之前應(yīng)當(dāng)具備一定的Python基礎(chǔ),避免選修課程的學(xué)生沒(méi)有編程的基礎(chǔ),不具備計(jì)算思維,花費(fèi)過(guò)多時(shí)間在編程語(yǔ)言的語(yǔ)法和調(diào)試上,忽視課程的主題內(nèi)容。另外,在理論課堂上要抽出一學(xué)時(shí)來(lái)介紹PyTorch平臺(tái),內(nèi)容包括平臺(tái)的下載安裝、環(huán)境配置以及一些基本的功能和操作,這部分內(nèi)容可以安排在神經(jīng)網(wǎng)絡(luò)的理論課之前。
3)對(duì)于基礎(chǔ)的,在WEKA可視化平臺(tái)上就能完成的實(shí)驗(yàn),多設(shè)置思考題對(duì)訓(xùn)練過(guò)程的細(xì)節(jié)知識(shí)點(diǎn)進(jìn)行深度挖掘,如讓學(xué)生實(shí)踐多種交叉驗(yàn)證方法(HoldOut、K-Fold、分層K-Fold 等),比較其結(jié)果差異,自行總結(jié)各種驗(yàn)證方法適合的場(chǎng)景,或比較不同數(shù)據(jù)量、不同的特征訓(xùn)練出的模型表現(xiàn)的優(yōu)劣,讓學(xué)生總結(jié)原因等,使每次實(shí)驗(yàn)的效能達(dá)到最大。
4) 對(duì)于難度較大的編程實(shí)驗(yàn),如卷積神經(jīng)網(wǎng)絡(luò)等,按需要在實(shí)驗(yàn)指導(dǎo)書(shū)上提供程序的部分源代碼,在難點(diǎn)處可采用程序填空的方式,必要時(shí)加以注釋?zhuān)寣W(xué)生的重點(diǎn)放在理解算法核心思想上,而非程序的調(diào)試。
5)課程的分?jǐn)?shù)構(gòu)成設(shè)置為100分滿分,50分實(shí)驗(yàn)分?jǐn)?shù),50 分筆試分?jǐn)?shù)的模式。在期末考試試卷內(nèi),設(shè)置實(shí)驗(yàn)結(jié)果分析的題目,促使學(xué)生思考結(jié)果產(chǎn)生的原因以及改進(jìn)措施,注重對(duì)學(xué)生動(dòng)手能力的培養(yǎng)和考察。
在人工智能的課程中引入WEKA 數(shù)據(jù)挖掘工作平臺(tái)和PyTorch 深度學(xué)習(xí)框架,采取雙平臺(tái)融合教學(xué)的方式進(jìn)行實(shí)驗(yàn)設(shè)計(jì)。通過(guò)實(shí)時(shí)檢測(cè)學(xué)生對(duì)人工智能經(jīng)典算法以及訓(xùn)練方式的掌握程度,發(fā)現(xiàn)大部分學(xué)生不僅能在規(guī)定的時(shí)間內(nèi)完成實(shí)驗(yàn),且觀察、分析和解決問(wèn)題的能力均有所提升,與此同時(shí),部分學(xué)生有意愿在實(shí)驗(yàn)的基礎(chǔ)上做一些更具深度和廣度的拓展研究,較以往具有更強(qiáng)的學(xué)習(xí)積極性和探索能力。另外,學(xué)生在課程實(shí)驗(yàn)中接觸到的PyTorch 深度學(xué)習(xí)平臺(tái)在各大互聯(lián)網(wǎng)企業(yè)中運(yùn)用廣泛,是當(dāng)前一項(xiàng)熱門(mén)的技術(shù),與市場(chǎng)需求緊密貼合,有利于就業(yè)或深造。下一個(gè)階段,在完善教學(xué)模式的基礎(chǔ)上,不斷融入更具社會(huì)討論度、更有趣的案例,探索開(kāi)展更有效的教學(xué),進(jìn)一步提升學(xué)生的滿意度。