王建花, 朱 凡, 茆 姝
(1.南京理工大學工程訓練中心,南京 210094;2.浙江海洋大學船舶與海運學院,浙江舟山 316000)
目前,人工智能已成為各國新一輪科技和智力領(lǐng)域的必爭之地[1]。人工智能的發(fā)展依托于算力、數(shù)據(jù)和機器學習算法等技術(shù)的發(fā)展,其中機器學習算法是計算機具有智能的直接原因,是促進人工智能發(fā)展的核心。
2018 年4 月,教育部發(fā)布的《高等學校人工智能創(chuàng)新行動計劃》(教技(2018)3 號),提出要圍繞新一代人工智能優(yōu)化學科體系布局,提升人才培養(yǎng)質(zhì)量,為我國躋身創(chuàng)新型國家前列提供科技支撐和人才保障[2]。各高校都積極開展“新工科”研究與實踐[3-4],將人工智能與各學科專業(yè)教育交叉融合,以建設人工智能課程、建設區(qū)域共享型人工智能實踐平臺、建設多主體協(xié)同育人機制等多種形式培養(yǎng)人工智能人才[5]。當前高校人工智能教學中,大多數(shù)本科生缺少了解機器學習解決實際問題的流程途徑,更缺少機器學習項目實踐機會。針對本科生的工程訓練實踐課程,有必要開設配套于機器學習理論知識的基礎(chǔ)實踐課程,幫助學生理解利用機器學習方法解決實際問題的流程。
Tom Mitchell 認為“機器學習這門學科所關(guān)注的問題是:計算機程序如何隨著經(jīng)驗積累自動提高性能[6]”。機器學習的核心價值是通過特定算法分析已知數(shù)據(jù),識別隱藏在數(shù)據(jù)中的可能性,并基于此給出預測或輔助使用者進行決策。機器學習使用企業(yè)提供的研發(fā)、生產(chǎn)、經(jīng)營等各方面數(shù)據(jù)來訓練、修正、完善算法模型,再用模型為企業(yè)解決實際問題,創(chuàng)造價值,這個流程如圖1 所示。
圖1 機器學習解決問題的項目流程
在業(yè)務領(lǐng)域,企業(yè)提出要解決的業(yè)務問題,并根據(jù)業(yè)務知識給出有效的業(yè)務模型、數(shù)據(jù)模型、解決目標等信息。在人工智能領(lǐng)域,用人工智能知識指導進行數(shù)據(jù)收集、數(shù)據(jù)處理、特征工程、模型訓練等步驟以得到合格的機器學習模型。最后,企業(yè)將合格模型用適合業(yè)務生產(chǎn)的方式部署,并在專業(yè)人員指導下對模型進行運維。這個流程中業(yè)務問題能否用機器學習方法解決以及數(shù)據(jù)適用性評估過程由業(yè)務領(lǐng)域和人工智能領(lǐng)域?qū)I(yè)人士共同完成。
目前部分高校已開設機器學習類通識教育課或?qū)I(yè)課,其中不乏國家級精品課程,這些課程大多以知識體系教學為主,注重教授機器學習的理論知識,而基于項目的工程實踐類課程較少[7-8],且多數(shù)實踐案例使用的數(shù)據(jù)、特征等都是已處理好的。機器學習領(lǐng)域有一個共識:數(shù)據(jù)和特征決定了機器學習的上限,而模型和算法只是讓我們逼近這個上限??梢娙斯ぶ悄芙虒W除了注重理論算法之外,也要注重問題模型建立、數(shù)據(jù)收集、數(shù)據(jù)處理、特征選擇、模型部署和運維等過程[9]。
部分高校也認識到有必要將人工智能實踐項目引入到工程訓練課程中,在工程訓練課程使用了特定的人工智能平臺,借助平臺能力完成某個業(yè)務領(lǐng)域具體的工程實踐[10-11],這種工程訓練課程針對業(yè)務領(lǐng)域內(nèi)容較多,分散了學生對機器學習工程知識的注意力,也增加了理解難度。
高校工程訓練教學是銜接學生的理論知識和社會生產(chǎn)的橋梁,有必要在授課過程中盡量完善機器學習工程的完整流程。
為了讓學生能更貼近實際問題,本課程選用學生容易理解的企業(yè)項目案例,老師和學生一起研究企業(yè)業(yè)務和數(shù)據(jù)處理中的各類問題,引導學生經(jīng)歷實際項目全流程,從而達到理論與實踐相結(jié)合,培養(yǎng)學生解決實際問題的能力。教學中讓學生對問題、目標、數(shù)據(jù)適用性評估、數(shù)據(jù)收集、數(shù)據(jù)處理、特征工程、模型訓練等過程有了更全面的了解。對于理論課程很少涉及的數(shù)據(jù)和特征兩個方面,著重引入數(shù)據(jù)整理及特征工程的一些基本方法和手段。
學生除了在課堂學習機器學習知識,也可通過參與各種比賽來提高自己。機器學習競賽是這個領(lǐng)域發(fā)展的有效助推劑和交流平臺,比較著名的競賽有Kaggle、天池等[12]。本課程給學生介紹參加這些競賽的途徑和必須具備的技能,鼓勵學生參加競賽鍛煉自己的創(chuàng)造力和才干。
根據(jù)課程教學目標,教學內(nèi)容以某個企業(yè)項目為案例,完成一次完整的機器學習項目流程,并讓學生重點實踐數(shù)據(jù)處理、特征工程兩個環(huán)節(jié),如圖2 所示。
圖2 項目教學內(nèi)容及流程
(1)問題分析及項目建立。首先向?qū)W生展示一個具體的業(yè)務問題,引導學生分析問題,尋找解決問題的方法,并判斷是否可以用機器學習技術(shù)來解決。明確后將問題、目標、解決方案、團隊組建、過程計劃等以項目的方式運作。
(2)數(shù)據(jù)處理。確立機器學習項目后,學生進行目標問題的數(shù)據(jù)處理。此過程將目標問題用數(shù)據(jù)來表征,可進一步細分為數(shù)據(jù)適用性評估、數(shù)據(jù)收集和數(shù)據(jù)整理三個子過程,如圖3 所示。數(shù)據(jù)適用性分析是對目標問題能否用數(shù)據(jù)表征、數(shù)據(jù)能否獲得、數(shù)據(jù)需要具備的質(zhì)量和規(guī)模等方面進行可行性評估,涉及問題的業(yè)務領(lǐng)域知識較多,需要豐富的專業(yè)知識支撐,這也是數(shù)據(jù)對機器學習項目重要性的一個體現(xiàn)。數(shù)據(jù)收集是從生產(chǎn)現(xiàn)場或其他途徑獲取樣本原始數(shù)據(jù)的過程。數(shù)據(jù)整理在原始數(shù)據(jù)中提取有效數(shù)據(jù)的過程,即根據(jù)數(shù)據(jù)特點和算法要求來整理數(shù)據(jù),得到數(shù)據(jù)集。
圖3 數(shù)據(jù)處理過程
(3)特征工程。特征工程開始于將數(shù)據(jù)集劃分成訓練集、測試集和驗證集。從數(shù)據(jù)集中取出少量樣本作為驗證集,剩余樣本進一步分為訓練集(大部分樣本)和測試集(少量樣本)。特征工程就是對數(shù)據(jù)集的屬性進行取舍,進而訓練模型達到預期性能。取舍方法因機器學習算法、數(shù)據(jù)集特點及項目目標等因素而不同,常見的方法有特征選擇、特征縮放、特征合成以及特征降維等[13]。有時會因為數(shù)據(jù)質(zhì)量、樣本數(shù)量等達不到算法要求而需要再回退到數(shù)據(jù)處理過程繼續(xù)修正數(shù)據(jù)或補充采集數(shù)據(jù)樣本。
(4)模型訓練及評估。模型訓練是學生運用訓練集、測試集和驗證集輸出模型的過程。首先采用經(jīng)過特征工程處理后的訓練集來訓練模型,再采用測試集對訓練出來的模型性能進行測試。如果模型性能未達預期,則需從特征工程或數(shù)據(jù)處理過程開始重新分析和優(yōu)化;如果模型性能達到預期,即可用驗證集進行模型評估,模型識別的準確性符合預期時項目目標可達成,否則要重新討論問題模型是否正確、選擇的算法是否合適、數(shù)據(jù)處理和特征工程過程中哪些步驟要改進等??梢?,訓練過程和驗證過程可能會因為無法達到理想效果而回退到特征工程或數(shù)據(jù)處理過程重新迭代處理。
通過上述過程實踐,學生了解到人工智能項目的處理流程并不是單向流動的,而是對整理數(shù)據(jù)、分析、訓練、測試、評估過程的多次迭代,直到達到項目目標。
本課程主要面向?qū)θ斯ぶ悄芨信d趣的本科生,由于多數(shù)學生在人工智能方面的理論知識較少和實際經(jīng)驗不足,實踐課程必須以學生能理解為基礎(chǔ),故教學案例所需的專業(yè)知識及講解的特征工程的方法都是易于學生理解的。通過簡單易懂的案例實踐,建立學生掌握機器學習的信心。
2.3.1 項目建立的教學實踐過程
本課程引入企業(yè)項目“機器學習識別計算系統(tǒng)故障”作為教學案例。目標問題“計算系統(tǒng)故障”對于電子類本科生不難理解,計算系統(tǒng)由軟件和硬件組成,在計算系統(tǒng)運行期間,系統(tǒng)會隨時對運行狀態(tài)進行記錄,但系統(tǒng)只能片面被動地記錄運行狀態(tài),要分析出故障的原因則需要專業(yè)人員做大量的事后邏輯推理。在此引導學生思考能否用一個機器學習模型,通過系統(tǒng)的運行數(shù)據(jù)直接分析出故障原因,替代人工分析。事實上只要能夠積累足夠的故障數(shù)據(jù)樣本,就可以用這些數(shù)據(jù)樣本訓練出機器學習模型。系統(tǒng)下次有故障時,將故障數(shù)據(jù)輸入此模型,就能快速識別出是什么類型的故障。通過以上分析和引導,組織學生建立“機器學習識別計算系統(tǒng)故障”項目的目標,即訓練出一個機器學習模型來識別系統(tǒng)故障。
2.3.2 數(shù)據(jù)處理的教學實踐過程
確立項目目標后,即可進行數(shù)據(jù)適用性分析、數(shù)據(jù)收集和數(shù)據(jù)整理,這部分涉及目標問題領(lǐng)域知識較多,學生仍然以理解和思考為主。計算系統(tǒng)運行時會記錄日志,日志以文本形式存儲到磁盤,內(nèi)容包括事件發(fā)生的時間、各模塊運行狀態(tài)和描述事件的關(guān)鍵字等。比如系統(tǒng)運行期間,某個硬件不穩(wěn)定,會讓使用此硬件的軟件模塊記錄對應失敗事件日志。圖4 展示了一個硬件故障的日志片段。
圖4 計算系統(tǒng)故障日志片段
系統(tǒng)運行一段時間后可以獲得大量的日志,找出歷史上故障發(fā)生的時間,可為這些日志打上具體故障類型的標簽。本案例將故障類型分為軟件故障、硬件CPU故障和硬件主板故障??梢愿鶕?jù)系統(tǒng)的設計方案將日志中的事件分類為問題相關(guān)的屬性。本案例中計算系統(tǒng)自動輸出日志文件,數(shù)據(jù)收集過程就是獲取每個故障的日志文件。再用python 編寫程序從日志文件中提取故障時間段的各類事件次數(shù),將其作為對應的屬性值記錄下來,同時對本故障打上類別標簽,這樣就完成了一個故障樣本數(shù)據(jù)的整理。從系統(tǒng)運行一段時間保存的數(shù)百萬條數(shù)據(jù)中按上述處理,篩選出2 982 個故障樣本和18 個屬性作為本案例的原始數(shù)據(jù)集,如圖5 所示。圖中數(shù)據(jù)集列標號1 ~18 為屬性,0為樣本序號,19 為每個樣本的故障標簽。
圖5 數(shù)據(jù)集信息概況
2.3.3 特征工程的教學實踐過程
特征工程的目標是構(gòu)建適合算法要求的數(shù)據(jù)和改善機器學習模型的性能。為了便于學生理解,本案例通過直接查看csv文件或使用pandas工具來引導學生實踐常用的特征選擇方法。
(1)異常值和缺失值觀察。在數(shù)據(jù)收集和處理過程中,可能會出現(xiàn)數(shù)據(jù)異?;蛉笔?。pandas 的DataFrame類型數(shù)據(jù)的describe()方法可以呈現(xiàn)每個屬性列的最大值、最小值、均值等數(shù)值分布情況,而isnull().sum()方法可查找出數(shù)據(jù)集中的缺失值。
分析出缺失值和異常值后需進行處理。在樣本足夠多時,可以刪除缺失值或異常值的樣本。在樣本數(shù)量不充裕時,一般用0、此屬性列的中值或均值來填充缺失值或異常值。有時異常值也可以不處理,而選用能容忍異常值的算法。
(2)訓練集、測試集和驗證集劃分。劃分樣本時,先人工隨機從各類樣本中各挑選出10 個留作驗證集,再從剩下的各類樣本中各挑選出大約10% ~20%作為測試集,其余為訓練集。在此提前將樣本進行劃分,還能在后續(xù)機器學習中防止信息泄露,即算法在訓練時不能提前感知到測試集或驗證集中的信息,以保證訓練出的模型有最好的泛化效果。實際生產(chǎn)中依據(jù)樣本情況,可以選用更適合的劃分方法,如K 折交叉驗證法、自助法、留出法等[14-15]。
(3)樣本標簽的類平衡性觀察。查看數(shù)據(jù)集樣本標簽,分析是否存在類不平衡問題。如果數(shù)據(jù)集中某類樣本太少,不滿足訓練和驗證要求,則需要繼續(xù)收集數(shù)據(jù),直至獲取到足夠的樣本為止。如果數(shù)據(jù)集中每類樣本數(shù)量足夠,只是分布比例嚴重不平衡,則只需要對訓練集采用過采樣、欠采樣等方法對樣本類進行平衡。本案例數(shù)據(jù)集中3類故障樣本的數(shù)量比是31.8%∶31%∶37.2%,相對平衡,不用實施類平衡方法。
(4)特征選擇。在處理完缺失值、異常值和類平衡性問題后,需要再觀察訓練集各屬性的有效性以確定哪些屬性作為特征。各屬性的統(tǒng)計數(shù)值含義為:0表示某樣本沒有此屬性;非0 表示有此屬性的樣本個數(shù)。故某屬性的0 數(shù)值占比越大,此屬性作為特征的有效性越低。所有數(shù)值都是0 的屬性對訓練無價值,可刪除。大部分數(shù)值為0 的屬性稱為長尾屬性,為了提高訓練速度,在不降低訓練性能的前提下,可刪除訓練集中的1 個或多個長尾屬性。本案例通過多次嘗試對比,選擇刪除2 個長尾屬性,對應的耗時數(shù)據(jù)如表1所示。在大數(shù)據(jù)集復雜算法的工程中刪除長尾屬性提升訓練速度的效果更明顯。
表1 刪除2 個長尾屬性的訓練耗時
2.3.4 模型訓練和驗證的教學實踐
本案例為多分類問題,特征較多,選擇xGBoost 算法進行訓練。訓練和驗證流程如圖6 所示。模型訓練過程和專業(yè)知識、數(shù)據(jù)處理、特征工程等密切相關(guān),需通過反復迭代以確保達到理想效果。
圖6 模型訓練和驗證流程圖
特別地,在本案例訓練過程中,發(fā)現(xiàn)屬性1 作為特征的模型性能:訓練準確率88.24%,驗證準確率為83.33%。屬性1 不做特征的模型性能:訓練準確率91.18%,驗證準確率為86.67%。分析發(fā)現(xiàn)幾乎每個故障在該屬性上都有表征,此屬性屬于預測能力非常差的特征,也應刪除。需要注意的是,對訓練集數(shù)據(jù)刪除屬性時,在對應的測試集和驗證集中也需同步刪除。
本文探索了機器學習教學在面向本科生的基礎(chǔ)工程訓練課程中的實踐。選用學生容易理解的項目案例,引導學生經(jīng)歷項目全流程,著重實踐了數(shù)據(jù)處理及特征工程的一些基本方法和技術(shù)。通過基礎(chǔ)實踐課程的開設,使得更多的學生能實踐機器學習項目。在后續(xù)教學過程中,可進一步建設機器學習實踐平臺,引入更多與不同專業(yè)相關(guān)的實驗案例,學生可根據(jù)自己專業(yè)選擇合適的案例實踐機器學習工程。