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