湯輝,張國鋒,張維勤
(黔南民族師范學院計算機與信息學院,都勻558000)
水書是我國的少數民族之一水族使用的典籍,被稱為水族人民的百科全書和象形文字的活化石。水書多以水書先生代代相傳,隨著時間的推移,水書先生的數量在逐年減少,導致水書傳承出現斷層的危機。所以將水字信息化,有利于水書文獻的搶救性保護和深層次研究。據不完全統計水字468 個,連同異體共收字1780 個,包括天干、地支、五行、九星、八卦、二十八宿、時節等類別[1]。水族古文字的結構主要有以下三種:一是象形字、二是仿漢字、三是宗教文字。水字是既有借漢字也有自造字,而參照造字又隨意反書、倒書、側書和增損筆畫等造成了大量的異體字,導致了許多水字字形區別度不高,有很多形似字[2],因此給水字的識別帶來了很大的挑戰。
目前,很少有對水書文字圖像進行識別的研究和討論,而在其他少數民族文字圖像識別方面,夏吾吉等人[3]針對藏文數字識別手工構建3 層卷積層、3 層池化層和1 層全連接層的CNN 模型,并選用Softmax 函數作為目標函數,參數更新法使用Adam 法,使得藏文數字識別率達到了97.85%。陳善雄等人[4]在古彝文的識別中構建了4 層CNN 網絡,并以此為基礎模型擴展出5 個模型,然后基于Alpha-Beta 散度自編碼融合模型,通過2 個全連接層抽取特征,最終取得了93.97%的識別準確率。我們可以發現針對不同的學習任務需要搭建不同的CNN 模型去進行訓練識別,同時還需要耗費大量的時間對CNN 模型的網絡結構及其超參數進行調優。
本文采用自動機器學習的Auto-Keras 框架自動構建CNN 模型以識別水字圖像。Auto-Keras 框架引入了神經網絡核函數和樹結構的采集函數優化方法,并使用貝葉斯優化指導神經網絡架構進行網絡態射,從而找到最優的識別水字的網絡模型。同時我們手動構建了一個11 層的CNN 模型來與其做對比,以研究自動機器學習構建的模型在水字識別任務上的識別效果。
在進行圖像識別時,我們常常采用深度學習模型之一的卷積神經網絡(Convolutional Neural Network,CNN),它能夠直接以2D、3D 圖像作為數據輸入,自動提取圖像特征。相比較于人工神經網絡而言,卷積神經網絡具有局部連接、權值共享、下采樣三個基本特性,大大減少了網絡參數的數量,降低了計算的復雜度和時間。同時卷積神經網絡具有表征學習的能力,具體為卷積神經網絡的卷積層和池化層可以提取輸入圖像的平移、縮放等不變特征。在表征學習的過程中,卷積神經網絡模型可以組合低層特征形成更加抽象的高層特征,以發現數據的分布式特征表示[5]。
卷積神經網絡是一種帶有卷積結構的神經網絡,其基本結構為輸入層、隱含層和輸出層。如圖1 所示。輸入層在卷積神經網絡中可以處理序列、圖像、視頻等多維數據。隱含層包含卷積層、池化層、全連接層3 類常見結構,在其他算法中,還會用到Inception 模塊、殘差塊等復雜結構。在卷積神經網絡中,卷積層最主要的特征就是局部連接和權值共享。卷積層中的卷積核實際上是一組權值參數,它與上一層特征圖進行局部連接計算,加偏置后傳遞給非線性激活函數,如ReLU 函數、Sigmoid 函數等,得到一個特征圖,即實現對特征的提取。而權值共享就是卷積核在滑動卷積上一層特征圖時,卷積核中的參數不變并且全圖共享。因此與傳統的全連接神經網絡相比,卷積神經網絡只需要很少的參數就可以完成訓練,并減少了過擬合風險。池化層本質上是下采樣,利用圖像空間相關性原理對卷積層的特征圖做下采樣,減小下一層的輸入大小,同時減少網絡的參數量和計算量并保留有用的信息,提升了魯棒性。常見的池化有最大池化、平均池化、L2 范數池化等。全連接層在CNN 中起到“分類器”的作用,就是將學習到的分布式特征表示映射到樣本標記空間,即將前面卷積層和池化層提取到的局部特征進行非線性組合以輸出。為了提升CNN 的網絡性能,全連接層每一個神經元的激勵函數一般會采用Re?LU 函數。輸出層作為CNN 的最后一層,針對不同的問題需要選擇合適的激活函數來進行分類,如Sigmoid函數可以用于二類分類、Softmax 函數則可以用于多類別分類。

圖1 基本的卷積神經網絡結構
VGGNet[6]、LeNet[7]、AlexNet[8]等是目前常用的CNN模型,它們是針對具體的任務調整過的CNN 模型。在本文中我們構建類似于VGGNet 的網絡模型Artifi?cial_CNN 模型,它是一個11 層的網絡結構,經過多次的實驗對網絡結構和超參數進行調整,本文最終選用3×3 的卷積核,采用零填充(Zero-padding),池化層使用2×2 的最大池化,激活函數選擇ReLU 函數。此外,優化器選擇RMSprop,學習率為0.001,dropout 率為0.7。其結構如圖2 所示。

圖2 Artificial_CNN網絡結構
從文中人工搭建的Artificial_CNN 模型可以看出,針對具體的學習任務需要選擇合適的網絡結構,并且需要考慮使用多少層結構,每一層多少個神經元,使用哪一個激活函數等超參數才能找到合適的網絡模型。因此需要使用者學習使用大量的專業知識和時間來找到神經網絡架構和超參數之間的平衡。自動機器學習(Automated Machine Learning,AutoML)的目標就是使用自動化的數據驅動方式來解決上述問題,使用者只需提供數據,自動機器學習系統根據數據自動的決定最佳方案構成神經網絡架構。
通過使用神經結構搜索(Neural Architecture Search,NAS)算法[9]自動設計網絡及超參數優化等問題,從而達到自動機器學習(AutoML)的目的。NAS 的目的就是在給定的學習任務和數據集上尋找最佳的神經網絡結構。NAS 的流程如圖3 所示。搜索空間就是一個可供搜索的網絡結構的集合,其中包括了網絡的結構及其操作(如:神經網絡的深度、層之間鏈接類型和濾波器數量等)。搜索策略就是以何種方法來對搜索空間進行探索生成“子網絡”,然后交由性能評估策略對“子網絡”結構進行性能評估,并將評估結果返回給搜索策略進行更新以調整下一次網絡結構的選擇,循環上述步驟直至找到最優的網絡結構。由于傳統NAS 算法中涉及的搜索空間很大,并且評估“子網絡”結構的性能涉及數據集的訓練,使得這種方法會帶來昂貴的計算開銷及時間開銷,如:NASNet[10],使用450個GPU 運行了大約3-4 天。為了解決這些問題,我們采用了AutoML 的開源框架Auto-Keras,依然使用NAS,但是提供了一種新的框架,即使用貝葉斯優化指導網絡態射進行神經架構搜索,以此實現高效的神經架構搜索[11]。而且Auto-Keras 可以在CPU 和GPU 上并行運行,針對不同GPU 內存限制采用自適應搜索策略,如:使用1 塊NVIDIA GTX 1080Ti 的GPU 運行12小時就可以得到一個最優的模型[12]。

圖3 神經網絡架構搜索流程
Auto-Keras 主要流程如圖4 所示。在有限的時間內,API 接收用戶的調用,然后將預處理的數據集傳遞給Searcher 模塊,它是一個包含了貝葉斯優化器和高斯過程的模塊。Graph 是一個處理神經網絡計算圖的模塊,它具有用于網絡態射操作的功能。Searcher 模塊使用模擬退火算法控制Graph 模塊是否將Model stor?age 模塊中已經訓練好的神經網絡態射成新的網絡結構。而Model Trainer 模塊則是對新的網絡結構進行訓練,因為只是為了評估網絡結構不進行充分訓練,所以采用early stop 提升效率。然后將訓練后的網絡結構存放在Model Storage 模塊中,網絡結構的性能則反饋給Searcher 模塊的高斯過程回歸來預估更優秀網絡結構。搜索網絡結構和訓練評估網絡結構同時進行。最后就是對最優的網絡結構進行充分的訓練并對其進行評估得到Best model。

圖4 Auto-Keras流程
Auto-Keras 之所以高效是使用貝葉斯優化引導網絡態射的同時又以高斯過程模型來估計下一個最優結構,節省了架構搜索時間。在NAS 背景下,貝葉斯優化流程進行以下循環:①更新:用現有的圖結構及其性能訓練高斯過程模型。②生成:通過優化采集函數來生成下一個要觀察的計算圖。③觀察:訓練生成的新圖以獲得實際性能。由于神經網絡本身可以映射為圖結構,為了使貝葉斯優化能夠在樹結構搜索空間中進行,Auto-Keras 框架開發了神經網絡核函數來表達一個圖變形到另一個圖的編輯距離,即經過多少操作可以變成另一個圖。網絡態射就是將一個圖變形為另一個圖的操作集合,它改變神經網絡結構的同時仍保留其功能,使得子圖可以重用父圖的權重,減少了網絡結構的訓練時間,提升了模型的搜索效率。在樹結構搜索空間使用上置信界[13]作為采集函數,并使用模擬退火算法進行優化,起到了平衡探索和利用問題。此外,為了應對結構在變形時保持中間輸出張量形狀的一致性,還定義了一個圖級態射去發現和變形在整個網絡中受層級操作影響的層。
本文采集的51 類水字訓練數據分別來自正七卷和壬辰卷[14],共得到18264 張圖片。測試集數據來自喪葬卷[15],共得到5984 張圖片。把訓練數據中30%劃分為驗證集,70%劃分為訓練集。為了使得水字圖像可以取得更好的識別效果,所以對圖像進行了以下圖片預處理,結果如圖5 所示。

圖5 水書文字預處理
(1)從書卷中提取的圖片大小不一,所以將圖片的像素固定到32×32 的大小。
(2)為了提升識別效果,將圖片全部轉為黑底白字的灰度圖像。
(3)將水字圖片的像素值由(0,255)歸一化到(0,1),提升模型的收斂速度和精度。
數據和特征決定了機器學習的上限,算法和模型只是為了接近這個上限。由于現存的水族文字數據還比較匱乏,沒有成規模的水字數據庫,所以為了防止模型在訓練時因數據量過少而導致過擬合,因此在本文中采用了圖像數據增強(Image Data Augmentation)[16]的方法提升數據集的規模。本文采用的數據增強方法主要有水平翻轉、垂直翻轉、隨機裁剪、高斯擾動、銳化和浮雕效果。在生成圖片數據集時將隨機選用一種效果進行增強,最終使每一類水字圖片增加到1000 張,一共獲得51000 張圖片。如圖6 所示為部分增強效果圖。

圖6 對圖片進行數據增強
本文使用以往構建CNN 模型的經驗人工構建Artificial_CNN 模型和使用Auto-Keras 自動搜索最優架構的Auto_CNN 模型進行對比,為了客觀評價兩種模型在數據增強前后的表現,兩種模型訓練和測試使用的數據集相同,并使用F1-score 值作為每個類別的評價指標,由于測試類別數量的不均衡,使用F1-Weighted avg 作為整個模型的評價指標。結果如表1所示。在未增強的訓練數據上,我們使用Artifi?cial_CNN 和Auto_CNN 模型各進行三次訓練并在測試集上預測,然后將三次在測試集上預測得到的F1-Weighted avg 值相加取平均值作為模型最終的識別準確率,分別取得了86.17%和88.21%的準確率。然后在增強的訓練數據上2 種模型同樣進行三次訓練取平均值得到了94.30%和90.72%的準確率。說明在樣本量較少時使用數據增強可以提高模型的泛化能力,從而提高模型的識別準確率。而人工構建的CNN 模型之所以達到了94.30%的準確率,主要是由于我們經過很長時間對網絡結構、超參數進行調整,最終使得Artificial_CNN模型達到了一個令人滿意的結果。Auto_CNN 模型僅僅只是提供數據集便可以自動搜索構建識別水字的CNN 模型從而得到90.72%平均識別率,足以看到自動搜索神經網絡結構是可行的。

表1 Artificial_CNN 和Auto_CNN 模型增強數據前后平均識別率的對比
為了進一步分析每類水字識別效果,我們對每類水字的三次F1-score 值取平均值,水字分類識別結果如圖7 所示。通過對比每類水字識別準確率可以看出,經過數據增強后水字識別準確率有明顯的提升,但有多類水字在模型上的預測結果都不太理想。我們挑選了部分識別效果不理想的水字圖片進行分析,如表2所示,從左到右依次為“五、辰、未、月、土”五個水字。通過人工對比訓練集和測試集中這五類水字發現其在結構上存在書寫差異,主要是因為水書的造字機制,水書中一種文字可能存在一種及以上的書寫結構,導致模型在測試集上預測效果并不理想。還有一些其他水字由于手寫者書寫的隨意性使得有些水字難以識別,影響了最終的識別效果。

表2 識別效果較差的水字

圖7 兩種模型水字識別分類結果
隨著時間發展在圖片分類上的CNN 模型從簡單的LeNet 模型到復雜的ResNet 模型都需要人為設計網絡架構并調參,不僅耗時還容易出錯。為此本文圍繞自動機器學習框架Auto-Keras 自動搜索構建最優的CNN 模型來識別常用水字,避免了人工干預,同時與人工耗時調參構建的CNN 模型進行對比。在經過數據增強的數據集上訓練的模型最終分別取得了90.72%和94.30%的平均識別率。
由于現階段對水字識別的研究還比較少,且還沒有成規模的手寫水字數據集。采集到的水書文字因其造字機制、書寫者手寫水字的隨意性等影響,致使模型在進行常用水字識別時使得某些水字的識別準確率并不理想。但從總體來看,本文初步完成了基于NAS 算法自動構建CNN 模型識別常用水字的研究,對于其他使用頻率較低的水字識別是我們進一步的研究方向。