錢 豐,梅劍平,潘榮勝
(上汽大眾汽車有限公司 計(jì)劃物流部,上海 201805)
近年來(lái),建立在大數(shù)據(jù)基礎(chǔ)上的人工智能取得了爆發(fā)式的發(fā)展,其影響已經(jīng)迅速滲透到了我們?nèi)粘I钪小6溯啺l(fā)展的核心則是基于神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)在理論和實(shí)踐上的突破,深度學(xué)習(xí)的方法具有較強(qiáng)的通用性。本文將結(jié)合汽車制造業(yè)物流規(guī)劃中的一個(gè)案例,介紹一條將這種方法應(yīng)用于日常工作的路徑。
多倫多大學(xué)教授Hinton于2006年提出深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò),使得神經(jīng)網(wǎng)絡(luò)訓(xùn)練性能取得突破性發(fā)展。2012年Hinton團(tuán)隊(duì)在ImageNet比賽中完勝對(duì)手,基于神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)開始被工業(yè)界重視,結(jié)合工業(yè)界的大數(shù)據(jù),在各領(lǐng)域特別是在視覺和語(yǔ)音識(shí)別上準(zhǔn)確率大幅提高,并以此為基礎(chǔ)應(yīng)用于人類日常生活與工作,顯著提高了效率。
神經(jīng)網(wǎng)絡(luò)的工作原理是模擬人腦神經(jīng)元的活動(dòng)過程,在輸入的大量數(shù)據(jù)中自發(fā)提取特征、總結(jié)規(guī)律,自我訓(xùn)練各神經(jīng)元權(quán)重,調(diào)整神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),最終可以對(duì)未獲取過的信息做出正確判別。其與傳統(tǒng)人工智能的本質(zhì)區(qū)別就在于,自發(fā)提取特征,調(diào)整結(jié)構(gòu),而不需要人工構(gòu)建特征,設(shè)計(jì)算法。
一個(gè)神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)如圖1,最基本有三層結(jié)構(gòu)。輸入層接受數(shù)據(jù),其維度由輸入數(shù)據(jù)的結(jié)構(gòu)決定,一般由x表示。輸出層為輸出結(jié)果,其維度由需要獲得結(jié)果的結(jié)構(gòu)決定,一般由y表示。中間皆為隱藏層,至少有一層隱藏層,當(dāng)有多個(gè)隱藏層時(shí)即為深度神經(jīng)網(wǎng)絡(luò)。
圖1 深度神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)示意
圖2 單個(gè)神經(jīng)元基本結(jié)構(gòu)
單個(gè)神經(jīng)元的基本結(jié)構(gòu)如圖2。一個(gè)神經(jīng)元有多個(gè)輸入,但只有一個(gè)輸出。這與人腦神經(jīng)元有多個(gè)樹突、一個(gè)軸突是一致的。W為各輸入的權(quán)重,加上偏置b,即為一個(gè)神經(jīng)元獲得的總輸入g=再經(jīng)過激活函數(shù)得到輸出yk=Φ(g).激活函數(shù)的意義在于使神經(jīng)元輸出非線性。
所謂深度學(xué)習(xí),即對(duì)深度神經(jīng)輸入大量樣本x,以訓(xùn)練隱藏層的各神經(jīng)元的輸入權(quán)重。最終達(dá)到輸出y與理想輸出y'的誤差最小。這樣訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)即可用于對(duì)未知的樣本x0計(jì)算可靠輸出y0。
工業(yè)實(shí)踐中積累有大量數(shù)據(jù),非常適合神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。如汽車業(yè)的自動(dòng)駕駛技術(shù),就是基于大量司機(jī)實(shí)際的駕駛數(shù)據(jù)訓(xùn)練駕駛模型的神經(jīng)網(wǎng)絡(luò),最終由車載計(jì)算機(jī)輸出在不同場(chǎng)景下的正確駕駛反應(yīng)。
獲取大量規(guī)范化數(shù)據(jù)的成本很大,而且構(gòu)建與訓(xùn)練神經(jīng)網(wǎng)絡(luò)的難度也較高。那么在物流規(guī)劃的日常工作中是否也能利用深度學(xué)習(xí)來(lái)解決問題呢?本文將以一個(gè)實(shí)踐的案例對(duì)此進(jìn)行探討。
在汽車制造業(yè)物流規(guī)劃工作中,最基本的一個(gè)參數(shù)就是流量,而流量是由零件數(shù)量與零件包裝體積構(gòu)成的。規(guī)劃工作始于項(xiàng)目的早期階段,零件的數(shù)量有較成熟的體系進(jìn)行輸出,輸出偏差有良好控制。而零件包裝體積則只能根據(jù)工作人員的經(jīng)驗(yàn)進(jìn)行預(yù)估。一般有以下方法:
(1)參考現(xiàn)有近似零件的包裝。在大多數(shù)情況下,兩個(gè)名稱相同,零件號(hào)差異很小的零件,其外形不會(huì)有較大差異。參照類似零件的現(xiàn)有包裝可以獲得較準(zhǔn)確的包裝數(shù)據(jù)。但其中管狀零件則較特殊,這些零件有較大的外形差異,即使在名稱、零件號(hào)、功能與裝配位置等基本一致的情況下,其包裝體積也存在很大的不同。特別在當(dāng)今從傳動(dòng)燃油車向混合動(dòng)力與純電動(dòng)車轉(zhuǎn)變的大趨勢(shì)下,近似零件號(hào)、零件名稱的零件外形差異很大,經(jīng)常無(wú)法找到可參照的零件。
(2)根據(jù)零件三維圖紙,使用包裝軟件模擬包裝結(jié)果。該方法準(zhǔn)確度通常較高,但是同樣對(duì)于管狀零件模擬誤差很大。主要原因在于模擬時(shí)的限制條件是剛性的,而實(shí)際裝箱與依靠零件外形的模擬有很大差異。
以下列舉用上述方法估計(jì)的幾個(gè)管狀零件的結(jié)果比較,總體偏差很大,見表1。
用上述方法進(jìn)行估計(jì)輸出在一般情況下能滿足整體規(guī)劃的要求,如總體的資源配置等。但實(shí)際規(guī)劃工作中,很多時(shí)候需要對(duì)個(gè)體零件物流體積有一個(gè)較準(zhǔn)確的估計(jì),如單個(gè)零件采購(gòu)價(jià)格中物流成本的估計(jì),生產(chǎn)線邊某工位的首輪規(guī)劃等。在涉及到管狀零件時(shí),由于存在估計(jì)偏差較大的問題,會(huì)對(duì)后續(xù)規(guī)劃造成困擾。以下我們將采用深度學(xué)習(xí)的方法,構(gòu)造一個(gè)估計(jì)零件包裝體積的神經(jīng)網(wǎng)絡(luò)并進(jìn)行訓(xùn)練。
表1 傳統(tǒng)管狀零件包裝體積估計(jì)
我們將依次對(duì)深度神經(jīng)網(wǎng)絡(luò)的輸出層,輸入層與隱藏層進(jìn)行分析與構(gòu)建
從我們所希望得到的結(jié)果出發(fā),首先構(gòu)筑輸出層,可以為之后的工作提供一個(gè)明確的目標(biāo)。而損失函數(shù)是訓(xùn)練過程中引導(dǎo)訓(xùn)練向最優(yōu)化進(jìn)行的關(guān)鍵函數(shù)。在本文的研究過程中,嘗試過三種不同的輸出結(jié)構(gòu)與損失函數(shù)。
(1)直接輸出體積。這是我們最直觀的需求,即對(duì)一個(gè)具體樣本神經(jīng)網(wǎng)絡(luò)輸出計(jì)算的體積數(shù)值。損失函數(shù)即為所有參與訓(xùn)練的樣本輸出相對(duì)于標(biāo)準(zhǔn)值的偏差平均值。
雖然這種輸出比較直觀,但是神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)機(jī)制決定了這種輸出并不合適。在后續(xù)的訓(xùn)練過程中,極易造成BP計(jì)算中的梯度消失。
(2)輸出簡(jiǎn)單的分類??紤]到神經(jīng)網(wǎng)絡(luò)最適合進(jìn)行分類輸出,按我們得到的樣本數(shù)據(jù),將輸出依體積分成十類,見表2。
以上是根據(jù)已經(jīng)獲取的樣本數(shù)據(jù)的平均分布進(jìn)行的分類。例如表1中列舉的三個(gè)零件分別屬于6,2,1類。對(duì)于每一個(gè)樣本,輸出是一個(gè)十維的one-hot向量。如表1中第一個(gè)零件屬于類6,則輸出的onehot向量為y'=(0,0,0,0,0,0,1,0,0,0)。損失函數(shù)則是輸出向量與樣本準(zhǔn)確向量的交叉熵Cross-entropy
表2 輸出結(jié)果分類
這種輸出結(jié)構(gòu)與損失函數(shù)雖然較易訓(xùn)練,但是由于我們的目標(biāo)是獲取一個(gè)體積數(shù)值,而非分類,所以這種輸出無(wú)法滿足需求的準(zhǔn)確性。而且在訓(xùn)練中只要沒有進(jìn)入分類區(qū),逐步接近準(zhǔn)確數(shù)值的狀態(tài)并不會(huì)比那些遠(yuǎn)離的狀態(tài)更有優(yōu)勢(shì)。而一旦進(jìn)入了分類,也就失去動(dòng)力進(jìn)一步靠近準(zhǔn)確數(shù)值。
(3)輸出逼近數(shù)值概率的分類。沿用方法(2)的分類。但輸出不是one-hot的向量,而是一個(gè)考慮鄰分類與本分類中數(shù)值逼近程度的向量。
v'-準(zhǔn)確的體積數(shù)值;v'm-準(zhǔn)確體積所在分類的中間數(shù)值;
v'max-準(zhǔn)確體積所在分類的最大值;v'min-準(zhǔn)確體積所在分類的最小值;
P1-準(zhǔn)確體積所在分類的概率;P2-最鄰近分類的概率。
其它分類的輸出則仍然是0。
仍以表1中第一個(gè)零件為例,輸出y'=(0,0,0,0,0,0,0.58,0.42,0,0),對(duì)應(yīng) 0.002 7m3。
這種方式在訓(xùn)練落入分類與分類鄰近區(qū)域時(shí)仍有動(dòng)力逼近準(zhǔn)確值,同時(shí)還能在獲得輸出后,通過對(duì)公式(1)的逆運(yùn)算獲得體積數(shù)值。這種輸出的缺陷在于,與直接輸出體積相比,目標(biāo)還是存在一些偏差,但比常用的one-hot分類有了大幅度優(yōu)化。損失函數(shù)同樣是輸出向量與樣本準(zhǔn)確向量的交叉熵
這種輸出結(jié)構(gòu)是筆者結(jié)合此問題的特殊性創(chuàng)造的,實(shí)驗(yàn)中也取得了不錯(cuò)的效果。
輸入層為我們能獲取到的實(shí)際樣本的參數(shù)結(jié)構(gòu)。與目標(biāo)有關(guān)的參數(shù)越多,訓(xùn)練效果越好,但也會(huì)造成計(jì)算負(fù)荷指數(shù)級(jí)的上升。同時(shí)也需要大量的樣本數(shù)量,樣本稀少極易造成過擬合。
具體到本文的問題,考慮與零件包裝體積相關(guān)的參數(shù)主要是零件的外形,雖然零件的各部分材質(zhì)等也會(huì)影響到實(shí)際包裝,但此類參數(shù)較難獲取并格式化。所以在本文中我們只取零件外形數(shù)據(jù)。
將獲取的零件3D圖紙先轉(zhuǎn)為STL標(biāo)準(zhǔn)格式后再轉(zhuǎn)化為11*11*11的體素圖(如圖3所示)。同時(shí),大小不同的零件標(biāo)準(zhǔn)化為相同大小的體素圖,則必然存在一個(gè)大小變化的比例值s,這個(gè)值將填入體素矩陣中有實(shí)物點(diǎn)的位置中。
圖3 單個(gè)零件體素矩陣
最終輸入x為m*1 331的列表(m為參與訓(xùn)練的樣本數(shù)量)。
本文的實(shí)驗(yàn)中轉(zhuǎn)化了156個(gè)管狀零件樣本的體素矩陣,并以此為基礎(chǔ)進(jìn)行訓(xùn)練。但相比于神經(jīng)網(wǎng)絡(luò)的要求,這個(gè)數(shù)據(jù)量還是非常小的。結(jié)合本文采用的卷積神經(jīng)網(wǎng)絡(luò)框架,筆者使用了數(shù)據(jù)增強(qiáng)技術(shù)(Data Augmentation)。在卷積神經(jīng)網(wǎng)絡(luò)中,通過卷積與池化可以實(shí)現(xiàn)平移不變性與小幅度旋轉(zhuǎn)的不變性。但對(duì)于同一個(gè)樣本的大幅度旋轉(zhuǎn)或視角變化則會(huì)存在結(jié)果差異。我們對(duì)每一個(gè)樣本從6個(gè)視角分別進(jìn)行鏡像和90度旋轉(zhuǎn),這樣就能產(chǎn)生48個(gè)樣本,總的樣本數(shù)量即可增加到7 488個(gè)。圖4是列舉9個(gè)衍生樣本的示例。
另外,還需要準(zhǔn)備一批測(cè)試集數(shù)據(jù),驗(yàn)證模型訓(xùn)練的效果與精度。測(cè)試集數(shù)據(jù)完全獨(dú)立于訓(xùn)練樣本,不參加訓(xùn)練。在本文中取了10個(gè)零件樣本做測(cè)試集。
整個(gè)神經(jīng)網(wǎng)絡(luò)構(gòu)建如圖5所示。
輸入層獲得的數(shù)據(jù)為樣本的列表數(shù)據(jù)m*1 331。變形還原為三階矩陣數(shù)據(jù),對(duì)應(yīng)零件的體素圖,以供后續(xù)卷積處理。
隱藏層分兩次卷積,兩次池化,一次全連接層和一次Dropout,最終輸出體積預(yù)測(cè)。
圖4 單個(gè)零件體素矩陣衍生示例
圖5 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)總圖
卷積層(Convolutional Layer)本質(zhì)上是一個(gè)濾波器。樣本的每一部分與卷積窗口進(jìn)行點(diǎn)積。通過對(duì)共享參數(shù)進(jìn)行訓(xùn)練,最終形成一個(gè)能提取到樣本區(qū)域特征的卷積窗口。每個(gè)通道提取一種特征。在復(fù)雜的模型中有多層卷積,以提取復(fù)雜而隱藏的特征。卷積層輸出后將經(jīng)過激活函數(shù),以實(shí)現(xiàn)非線性化。本模型所用為L(zhǎng)eakyrelu激活函數(shù)。
池化層(Pooling Layer)主要用來(lái)降維,將卷積層提取的特征中可能重復(fù)的部分剔除。同時(shí)實(shí)現(xiàn)特征的平移不變性,小旋轉(zhuǎn)不變性。從模型中可以看到,每次池化后維度下降了一半。
全連接層(Densely Connected Layer)起到分類器的作用。卷積層、池化層和激活函數(shù)將原始數(shù)據(jù)映射到隱藏特征空間,全連接層重新將訓(xùn)練學(xué)習(xí)到的分布式特征映射到樣本標(biāo)記空間。
Dropout層在訓(xùn)練中按50%的概率隨機(jī)丟棄一些全連接層的神經(jīng)元。在本文模型中,由于數(shù)據(jù)樣本較少,而模型有一定復(fù)雜度,很容易造成訓(xùn)練過擬合。Dropout的方法在實(shí)際訓(xùn)練中可以有效降低過擬合概率。
輸出層在對(duì)Dropout層輸出做Softmax操作后,即可得到樣本屬于各分類的概率。通過對(duì)損失函數(shù)的不斷迭代優(yōu)化以訓(xùn)練模型中所有參數(shù)。
本文采用開源人工智能庫(kù)Tensorflow構(gòu)造了上述神經(jīng)網(wǎng)絡(luò)。訓(xùn)練與測(cè)試結(jié)果如圖6。
Traingning Set Loss指訓(xùn)練過程中損失函數(shù)值的變化趨勢(shì),該指標(biāo)用來(lái)跟蹤神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程,理論上隨著訓(xùn)練次數(shù)不斷降低,最終達(dá)到穩(wěn)定。
Testing Set Loss指訓(xùn)練好的模型用于測(cè)試集的損失函數(shù)值。實(shí)驗(yàn)中每隔100次優(yōu)化即用測(cè)試集測(cè)試。從結(jié)果看趨勢(shì)與訓(xùn)練集基本一致,說(shuō)明不存在過擬合。
Testing Set Value Deviation指測(cè)試集在神經(jīng)網(wǎng)絡(luò)輸出的概率矩陣轉(zhuǎn)化為體積數(shù)值之后,與準(zhǔn)確的體積數(shù)值的偏差率。由于本問題中損失函數(shù)與最終輸出并不嚴(yán)格對(duì)應(yīng),偏差率才是最終驗(yàn)證輸出質(zhì)量的指標(biāo)。從結(jié)果看,偏差率與損失函數(shù)趨勢(shì)一致。最終穩(wěn)定在0.32,即32%的偏差(其中最大偏差為44%,最小為7%)。
圖6 訓(xùn)練與測(cè)試結(jié)果
對(duì)照表1中的幾個(gè)例子,深度學(xué)習(xí)后的平均偏差率遠(yuǎn)小于傳統(tǒng)方法,并且偏差波動(dòng)較小,取得了相當(dāng)明顯的效果,具體見表3。
表3 深度學(xué)習(xí)結(jié)果對(duì)照
本文對(duì)深度學(xué)習(xí)方法在物流規(guī)劃日常工作中的應(yīng)用進(jìn)行了有效地嘗試,積累了經(jīng)驗(yàn),并已在實(shí)踐中得到了應(yīng)用,對(duì)工作有明顯幫助?;诂F(xiàn)有的結(jié)果,筆者認(rèn)為還可以從以下方面進(jìn)行優(yōu)化。
(1)提高零件體素化像素精度。本文采用的分辨率為11*11*11,是考慮在不太高的運(yùn)算負(fù)荷下能盡快測(cè)試多種建構(gòu)模型。參考目前流行的手寫數(shù)字?jǐn)?shù)據(jù)集像素為28*28,可以將像素提高到20以上,在此基礎(chǔ)上增加卷積層通道,可以進(jìn)一步提高輸出精度。
(2)獲取更多的實(shí)驗(yàn)樣本。本文僅獲取了管狀零件原始樣本156個(gè),后續(xù)可以建立完整的零件體素化數(shù)據(jù)庫(kù),范圍擴(kuò)大到所有零件。這樣可以將輸出結(jié)果的適用對(duì)象擴(kuò)大到所有零件。雖然對(duì)于規(guī)則零件而言,由于參數(shù)與結(jié)果的映射關(guān)系比較簡(jiǎn)單,深度學(xué)習(xí)預(yù)估的精度不會(huì)比人工估計(jì)高,但可以為此環(huán)節(jié)自動(dòng)化、智能化處理建立基礎(chǔ)。
(3)多神經(jīng)網(wǎng)絡(luò)聯(lián)結(jié)。零件包裝基本參數(shù)應(yīng)為包裝箱型與裝箱數(shù),通過箱型尺寸計(jì)算單件包裝體積。可以首先為箱型類別構(gòu)筑神經(jīng)網(wǎng)絡(luò),而這種分類問題也更適合深度學(xué)習(xí)方法。然后將零件圖與箱型作為下一個(gè)神經(jīng)網(wǎng)絡(luò)的輸入,裝箱數(shù)作為輸出。
深度學(xué)習(xí)技術(shù)在近幾年中的發(fā)展極其迅猛,不斷有適合不同場(chǎng)景的新網(wǎng)絡(luò)模式和訓(xùn)練方法出現(xiàn)。在習(xí)以為常的物流工作中也可以抓住前沿科技的發(fā)展,促進(jìn)物流效率不斷提升。