盧忠?guī)r,張偉,金軍輝
(上海威士頓信息技術(shù)股份有限公司,上海 200092)
卷煙廠制絲車間的烘絲工序需要使用烘絲筒將煙絲的水分烘干到設(shè)定的水分。烘絲筒具有PID自動(dòng)控制系統(tǒng),可以自動(dòng)調(diào)節(jié)烘絲參數(shù)使出口水分穩(wěn)定到設(shè)定值,此系統(tǒng)在連續(xù)穩(wěn)定烘絲時(shí)效果良好。但每個(gè)班次剛剛開始進(jìn)行烘絲時(shí)(即干頭階段),由于入料煙絲水分不穩(wěn)定、設(shè)備受外界環(huán)境影響大、烘絲筒內(nèi)環(huán)境變化劇烈,此時(shí)若使用烘絲筒的自動(dòng)控制回路控制烘絲,則需要較長時(shí)間才能使出口煙絲水分穩(wěn)定到目標(biāo)值,從而影響產(chǎn)品質(zhì)量和生產(chǎn)效率。目前卷煙廠的烘絲干頭階段先由工人手動(dòng)控制烘絲筒的筒壁溫度等烘絲參數(shù),待出口水分穩(wěn)定到設(shè)定值后再交由烘絲筒自動(dòng)控制系統(tǒng)進(jìn)行控制。
由于目前的模式依賴于人工經(jīng)驗(yàn),缺少可量化的操作指南,新?lián)踯嚬W(xué)習(xí)干頭操作的難度較高,干頭部分的生產(chǎn)無法標(biāo)準(zhǔn)化、自動(dòng)化,不利于制絲的質(zhì)量控制。卷煙廠希望通過機(jī)器學(xué)習(xí)的方法建立預(yù)測烘絲參數(shù)和烘絲筒出口水分的模型,為操作工調(diào)節(jié)烘絲參數(shù)提供參考,并為實(shí)現(xiàn)烘絲干頭階段的自動(dòng)化控制打下基礎(chǔ)。烘絲筒是一個(gè)大型的滾筒式烘干機(jī),烘絲時(shí)煙絲需要大約5分鐘的時(shí)間才能通過烘絲筒,這段時(shí)間內(nèi)的烘絲參數(shù)都會影響煙絲到達(dá)出口時(shí)的水分。烘絲筒具有較大的熱慣性和濕度慣性,烘絲參數(shù)還會通過改變烘絲筒的環(huán)境影響之后才進(jìn)入烘絲筒的煙絲的出口水分。所以對煙絲出口水分進(jìn)行建模時(shí),不止要考慮當(dāng)時(shí)的烘絲參數(shù),而是要考慮過去一段時(shí)間內(nèi)烘絲參數(shù)的所有變化。
卷煙廠制絲車間有大約35000個(gè)數(shù)采點(diǎn),根據(jù)數(shù)采點(diǎn)的含義人工初步篩選出了可能影響制絲一號線A路烘絲筒出口水分的350個(gè)數(shù)采點(diǎn)。但卷煙廠的時(shí)序數(shù)據(jù)庫中只保留了其中76個(gè)數(shù)采點(diǎn)歷史數(shù)據(jù)。
這76個(gè)烘絲參數(shù)中不止包括烘絲機(jī)上的數(shù)采數(shù)據(jù),還包括烘絲前流量稱、增溫增濕筒上的部分?jǐn)?shù)采數(shù)據(jù),煙絲通過這部分?jǐn)?shù)采設(shè)備后還需要經(jīng)過一段的固定時(shí)間后才能進(jìn)入烘絲筒,為了提高訓(xùn)練數(shù)據(jù)效率,數(shù)據(jù)處理時(shí)將這部分?jǐn)?shù)據(jù)按照數(shù)采點(diǎn)處的煙絲進(jìn)入烘絲筒時(shí)的時(shí)間進(jìn)行行對齊。
從時(shí)序數(shù)據(jù)庫查詢出每個(gè)烘絲干頭烘絲開始前10分鐘到烘絲開始后30分鐘、以6秒鐘為間隔的數(shù)據(jù)。刪除斷料、設(shè)備故障等異常干頭的數(shù)據(jù)后,最終得到了1729個(gè)有效的干頭數(shù)據(jù)。
去除記錄設(shè)備運(yùn)行狀態(tài)的數(shù)采數(shù)據(jù), 然后計(jì)算烘絲參數(shù)彼此之間的相關(guān)系數(shù),對于相關(guān)系數(shù)絕對值大于0.95的兩個(gè)烘絲參數(shù)舍棄其中一個(gè)(部分控制參數(shù)的設(shè)置值和實(shí)際值)。最終得到包含31個(gè)維度的數(shù)據(jù)。
卷煙廠時(shí)序數(shù)據(jù)庫記錄的是操作工進(jìn)行人工調(diào)節(jié)的情況下烘絲過程的數(shù)據(jù),使用這些數(shù)據(jù)進(jìn)行建模訓(xùn)練得到的就是預(yù)測存在人工調(diào)節(jié)筒壁溫度的情況下未來烘絲筒出口水分的模型。
如圖1所示,按照時(shí)間烘絲干頭可以大致分為3個(gè)階段:“烘絲筒從完全空閑到被煙絲完全充滿”“煙絲充滿烘絲筒但烘絲筒內(nèi)環(huán)境還未穩(wěn)定”“烘絲筒內(nèi)環(huán)境基本穩(wěn)定”3個(gè)階段。
圖1 2017年1月1日~2020年7月31日的所有干頭出口水分變化
前兩個(gè)階段隨著時(shí)間的變化烘絲參數(shù)和出口水分的關(guān)系的變化很大,如果使用一個(gè)模型為完整的烘絲干頭建模,需要的模型比較復(fù)雜而且訓(xùn)練時(shí)間將非常長。如果將干頭按時(shí)間切分,對每部分分別建模,則可以大大降低模型的復(fù)雜度和訓(xùn)練時(shí)間。本文將整個(gè)烘絲干頭分為“3~6分鐘”、“6~7分鐘”、“7~8分鐘”、“8~12分鐘”、“12~15分鐘”5個(gè)時(shí)間區(qū)間,并嘗試使用不同的算法、輸入數(shù)據(jù)建立預(yù)測出口水分的模型。
烘絲筒當(dāng)前時(shí)刻的出口水分不但受當(dāng)前時(shí)刻的烘絲參數(shù)的影響,還受過去一段時(shí)間的烘絲參數(shù)的影響,但根據(jù)用戶經(jīng)驗(yàn)這段時(shí)間不會超過10分鐘。
(1)將清洗后的數(shù)據(jù)除出口水分之外的每個(gè)維度的過去10分鐘每隔6秒鐘的數(shù)據(jù)都作為一個(gè)維度構(gòu)造出一份新的數(shù)據(jù)。
(2)使用pca對上面的數(shù)據(jù)進(jìn)行降維,將3000維的數(shù)據(jù)降維到600維,得到模型的輸入數(shù)據(jù)。
(3)分別以未來5分鐘內(nèi)每隔6秒的出口水分作為模型的輸出數(shù)據(jù)。
(4)使用sklearn.ensemble.GradientBoostingRegressor類庫實(shí)現(xiàn)模型。
(5)以卷煙廠2017年1月-2020年7月的數(shù)據(jù),以干頭為粒度拆分為5份,進(jìn)行KFold交叉驗(yàn)證。
(6)在54個(gè)核心主頻2GHz的服務(wù)器上訓(xùn)練所有時(shí)間段模型平均需要2小時(shí)50分鐘。
(7) 經(jīng) 試 驗(yàn) 使 用n_estimators=50,max_depth=4,learning_rate=0.1的參數(shù)可以得到較好的預(yù)測準(zhǔn)確率。
(8)使用模型預(yù)測2020年8月的的烘絲起始階段的出口水分,各時(shí)間區(qū)間的平均均方誤差分別為0.048597164、0.028678239、0.017766282、0.009237、0.0037468。
理論上如果數(shù)據(jù)充分那么使用其他參數(shù)作為輸入建模預(yù)測出口水分應(yīng)該可以比較準(zhǔn)確的預(yù)測出口水分,但實(shí)際上使用出口水分之外30個(gè)維度的數(shù)據(jù)作為輸入出口水分的預(yù)測效果較差,這可能是現(xiàn)有數(shù)據(jù)中缺失廠房的溫濕度、烘絲筒各易損零件的狀態(tài)等數(shù)據(jù)。但這部分因素帶來的影響應(yīng)該已經(jīng)反映在了過去的出口水分之中。通過加入出口水分的過去值作為模型輸入數(shù)據(jù),引入出口水分的自相關(guān)性,也許可以改善出口水分的預(yù)測結(jié)果的準(zhǔn)確性。
本文接下來將口水分過去10分鐘每隔6秒鐘的數(shù)據(jù)也作為一個(gè)維度加入到模型的訓(xùn)練數(shù)據(jù)中,保持其他的做法不變,使用得到模型預(yù)測2020年8月的的烘絲起始階段的出口水分,各時(shí)間區(qū)間的平均均方誤差分別為0.038856522、0.014021483、0.009612475、0.003166596、0.001343053。和沒有將出口水分作為模型輸入相比,各個(gè)階段的誤差分別減少20%、51%、46%、66%、64%,預(yù)測準(zhǔn)確率明顯提升。但3-6分鐘階段提升相對較少,這可能是由于這個(gè)階段烘絲筒出絲不穩(wěn)定,出口水分儀讀數(shù)受隨機(jī)因素影響大,無法完全反應(yīng)設(shè)備的狀態(tài)。
干頭的“烘絲筒從完全空閑到被煙絲完全充滿”階段和“煙絲充滿烘絲筒但烘絲筒內(nèi)環(huán)境還未穩(wěn)定”階段,烘絲參數(shù)和出口水分的關(guān)系隨著時(shí)間的變化而變化,線性模型并不適合。但在“烘絲筒內(nèi)環(huán)境基本穩(wěn)定”的階段(既“8-15分鐘”的時(shí)間段),烘絲參數(shù)和出口水分的關(guān)系基本固定,而且烘絲參數(shù)變化幅度很小,線性模型應(yīng)該也能比較好的預(yù)測未來的出口水分。
(1)將清洗后數(shù)據(jù)每個(gè)維度的過去10分鐘每隔6秒的數(shù)據(jù)均作為一個(gè)維度構(gòu)造出一份新的數(shù)據(jù)。
(2)分別以未來5分鐘內(nèi)每隔6秒的出口水分作為模型的輸出數(shù)據(jù)。
(3)為得到烘絲工藝參數(shù)對各時(shí)間點(diǎn)的出口水分影響系數(shù),不對輸入數(shù)據(jù)進(jìn)行降維。為防止過擬合,使用lasso回歸而非線性回歸。
(4)使用sklearn.linear_model.Lass類庫實(shí)現(xiàn)模型。
(5)以起始階段為粒度,將2017年1月~2020年7月的數(shù)據(jù)拆分為5份,作KFold交叉驗(yàn)證。
(6)經(jīng)試驗(yàn)使用alpha=0.0001的參數(shù)進(jìn)行訓(xùn)練可以得到較好的效果。
(7)使用模型預(yù)測2020年8月的烘絲起始階段的出口水分,各時(shí)間區(qū)間的平均均方誤差分別為0.001910523、0.0009311。
在“烘絲筒內(nèi)環(huán)境基本穩(wěn)定”的階段,lasso回歸可以得到甚至比gbdt稍好的預(yù)測準(zhǔn)確度。根據(jù)訓(xùn)練好的線性模型可以計(jì)算出烘絲參數(shù)對未來各個(gè)時(shí)刻的出口水分的影響系數(shù)。調(diào)節(jié)筒壁溫度是操作工最常調(diào)節(jié)的烘絲參數(shù),計(jì)算出烘絲參數(shù)對出口水分的影響系數(shù),可為操作工調(diào)節(jié)烘絲參數(shù)提供參考。但以下因素可能導(dǎo)致模型的筒壁溫度對未來出口水分的影響系數(shù)不準(zhǔn)確:
(1)由于每個(gè)干頭用戶調(diào)節(jié)筒壁溫度的次數(shù)只有一到兩次,模型對筒壁溫度對未來出口水分的影響的學(xué)習(xí)可能并不充分。
(2)預(yù)測t+n時(shí)刻的筒壁溫度的模型沒有使用t+1~t+n-1時(shí)刻的筒壁溫度作為輸入數(shù)據(jù),但t+n時(shí)刻的筒壁溫度顯然會受它們的影響,由于干頭階段的筒壁溫度變化次數(shù)很少,所以t+1~t+n-1時(shí)刻的筒壁溫度很大概率上和t時(shí)刻的筒壁溫度相同,所以模型會把t+1~t+n-1時(shí)刻筒壁溫度的影響系數(shù)疊加到t時(shí)刻的影響系數(shù)上導(dǎo)致其系數(shù)明顯偏小,而且n越大偏小的程度越大。
(3)烘絲筒筒壁溫度和之后的煙絲出口水分實(shí)際上是負(fù)相關(guān)關(guān)系,在干頭階段一個(gè)操作工根據(jù)自己的經(jīng)驗(yàn)預(yù)測到一分鐘后出口水分會偏高時(shí),他會將筒壁溫度調(diào)高以降低未來的出口水分,那么從數(shù)據(jù)上看此時(shí)的筒壁溫度和一分鐘后的出料水分會具有正相關(guān)關(guān)系(筒壁溫度偏高出料水分也偏高)。如果此操作工一直進(jìn)行這樣的操作,那么直接使用歷史數(shù)據(jù)訓(xùn)練模型將無法得到筒壁溫度和未來出口水分的正確關(guān)系。
為了消除因素2的影響,本文舍棄了每個(gè)模型中最后一個(gè)時(shí)間點(diǎn)上的筒壁溫度的未來出口水分的影響系數(shù)。為了減少因素1、3的影響,本文通過不同模型中筒壁溫度對相同時(shí)間間隔后的出口水分的影響系數(shù)的平均值來減少誤差。最終得到如下圖所示的筒壁溫度對未來各個(gè)時(shí)刻的出口水分影響系數(shù)(如圖2)。
圖2 筒壁溫度對未來各個(gè)時(shí)刻的出口水分影響系數(shù)
筒壁溫度的影響系數(shù)先逐漸變大而后逐漸變小,對8分鐘后基本減少為0,且筒壁溫度調(diào)高1℃并持續(xù)保持不變最終出口水分將會下降0.2%,這和用戶的經(jīng)驗(yàn)基本符合。但由于上面所述的因素1和因素3的影響無法完全消除,上述結(jié)論需要在以后的實(shí)際生產(chǎn)中做進(jìn)一步的修正。
建立如下的長短期記憶神經(jīng)網(wǎng)絡(luò):
(1)輸入的形狀為batch_size *time_step* embedding_size。為提高訓(xùn)練速度,本文在GPU顯存允許的情況盡量增大訓(xùn)練批次數(shù)量,取batch_size=1000。對于預(yù)測m至n分鐘時(shí)間段起始出口水分的模型,需要將m分鐘之前10分鐘的數(shù)據(jù)也輸入模型,而處理后的數(shù)據(jù)中每行數(shù)據(jù)的時(shí)間間隔為6秒,所以網(wǎng)絡(luò)的time_step=(n-m+10)×10。模型使用包括出口水分在內(nèi)的所有工藝參數(shù)作為輸入,所以模型輸入層的embedding_size=31。
(2)模型需預(yù)測未來5分鐘內(nèi)每隔6秒的出口水分,所以其輸出形狀為batch_size*time_step*50。
(3)模型隱藏層包括:節(jié)點(diǎn)數(shù)為[128,128]的2個(gè)加入了dropout的LSTM層、1個(gè)形狀為128×50的全連接層、一個(gè)形狀為time_step*50的截距層。
(4)為了和GBDT算法做對比,預(yù)測m~n分鐘時(shí)間段起始出口水分的模型以m~n分鐘時(shí)間段預(yù)測值和實(shí)際值的均方誤差為損失函數(shù)。
(5)使用tensorflow實(shí)現(xiàn)模型,并進(jìn)行訓(xùn)練。
(6)經(jīng)試驗(yàn)使用RMSPropOptimizer優(yōu)化器,取learning_rate=0.001,經(jīng)40000輪訓(xùn)練可以得到較理想的訓(xùn)練結(jié)果。
(7)在p100顯卡上訓(xùn)練所有時(shí)間段模型平均大約需要196小時(shí)。
(8)使用模型預(yù)測2020年8月的的烘絲起始階段的出口水分,各時(shí)間區(qū)間的平均均方誤差分別為0.04288、0.012926、0.009202、0.002683、0.001145。
GBDT和lasso回歸的預(yù)測精度已經(jīng)可以滿足現(xiàn)階段卷煙廠的需求,而LSTM的精度雖然更高但訓(xùn)練所需的時(shí)間太長而且對訓(xùn)練參數(shù)敏感,當(dāng)烘絲筒設(shè)備狀態(tài)或生產(chǎn)環(huán)境發(fā)生改變需要重新訓(xùn)練模型時(shí),使用GBDT和lasso算法可以更快速的進(jìn)行應(yīng)對。
本文使用機(jī)器學(xué)習(xí)的方法,建立了可以準(zhǔn)確的預(yù)測烘絲干頭出口水分的模型,并計(jì)算出了烘絲參數(shù)對出口水分的影響系數(shù),可為操作工調(diào)節(jié)烘絲參數(shù)提供參考,提高烘絲的質(zhì)量和生產(chǎn)效率,并為實(shí)現(xiàn)烘絲干頭階段的自動(dòng)化控制打下基礎(chǔ)。