如果現在 Google 上搜深度學習,我們會發現深度學習的關注度從2012年到2017年上升了數十倍。尤其在中國,近兩年幾乎都在談機器學習、人工智能。在深度學習這一塊又拍雲也進行了諸多的實踐。
先介紹一下又拍雲在人工智能方面的首個産品——又拍雲内容識别服務。“内容識别”是又拍雲“圖像視覺”項目下的第一個産品,是基于人工智能、大資料分析而研發的新型資訊安全解決方案,能實時處理多媒體内容(圖檔、視訊、直播等),識别色情、廣告、暴恐等多種資訊,目前色情内容識别正确率已高達 99.7%,而且在不斷提高中。
本文以又拍雲内容識别服務為例,向大家展示又拍雲在深度學習系統中的實踐。
在介紹深度學習之前,先簡單介紹一下深度學習的基本理論知識。
深度學習—分類器與分類算法
1.分類器:常見的分類方式有垃圾郵件過濾、手寫數字識别、圖檔分類、鑒黃等;
2.分類算法:深度學習算法有樸素按貝葉斯算法,以及基于 KNN、SVM 的算法和人工神經網絡算法等;
從圖 1 我們可以看到傳統機器學習算法準确率前期會随着資料量的增長有所上身,但增長到一個點時就很難繼續增長,而基于人工神經網絡的模型随着資料量的增長,準确率會持續上升。
目前所處的網際網路時代,資料積累相對比較容易,且擁有很大的資料積累量,非常适合機器深度學習。是以又拍雲選用的分類器是人工神經網絡。
△ 圖1 傳統機器學習 vs 人工神經網絡
圖 2 所示為人工神經網絡示意圖,人工神經網絡由很多的層組成,每一層有很多節點,節點之間有邊相連的,每條邊都有一個權重。對于文本來說輸入值是每一個字元,對于圖檔來說輸入值就是每一個像素。
△ 圖2 人工神經網絡
人工神經網絡通過前向傳播對輸入值,進行權值運算,最後一層層傳下去得到最終輸出預測的值。再通過反向傳播,與真實值做對比修正前向傳播的權值和偏置。
圖3 反向傳播
反向傳播是如何更新參數 W 和 B 的?通過梯度下降的算法,運用梯度下降的算法可以找出一組 W 和 B,使得函數 C 最小,在樣本上找到最優或者近似最優的 W 和 B ,之後使用 W 和 B 進行預測。
△ 圖4 梯度下降
在了解深度學習的基本知識之後,我們看下需要哪些硬體、軟體工具。
硬體
下圖表格是又拍雲第一台深度學習訓練機器的硬體配置:
軟體
深度學習機器配置的作業系統,又拍雲選擇了 Ubuntu 16.04,架構選擇 Caffe 和 Tensorflow,下文我們也主要介紹這兩種架構。
Caffe 架構
Caffe 容易入門,性能優異,支援 python 和 C++ 接口,同時還有很多 model zoo,可以輕松找到語音識别、計算機圖檔識别、人臉識别等類型的深度學習模型。但是 Caffe 存在難以擴充,設計架構沒有為擴充留好接口,隻能單機運作且安裝太複雜等缺點,并且 Caffe 每一個版本都需要重新編寫 C++ 代碼。
TensorFlow 架構
TensorFlow 支援 GPU、分布式(彌補了Caffe 不支援的缺點),擁有 TensorBoard 功能,可以訓練整個可視化的過程,同時還有活躍的社群和完善的文檔,并且功能強大、容易擴充。但是 TensorFlow 的模型沒有 Caffe 直覺,通過文本檔案定義的 Caffe 不用編輯代碼,而使用 TensorFlow 需要有編寫能力和算法功底。
内容識别:主要是指色情、廣告、暴恐等圖像、視訊内容的智能鑒别;
内容識别系統原理:上傳圖檔到樣本管理平台,人工進行标注圖檔是不是性感圖、色情圖、廣告圖或者是暴恐圖檔,标注完成後将它放到線下處理平台訓練,得出訓練模型和結果,再将模型拿到線上進行智能鑒别。
△ 圖5 又拍雲圖檔鑒别系統原理
圖6是又拍雲圖檔鑒黃控制台,使用者将圖檔上傳到又拍雲鑒黃控制台後,就可以實作色情識别,不需要自己開發背景。
圖7是又拍雲人臉相似度識别背景,使用者将攝像頭、圖檔接入控制台後,系統會自動判斷圖檔裡面的人物。
25.jpg
△ 圖6 圖檔鑒黃
△圖7 人臉相似度識别
資料
資料來源:主要通過對初始資料圖檔進行人工标注和機器标注。資料樣本非常的重要,好的樣本等于成功了一半。
模型
從 Caffe model zoo 找到适用模型之後主要針對兩個檔案進行修改調整:第一個檔案是輸入,比如說修改一下 data 檔案,或将輸入的位址改成剛剛定義的 TXT 檔案;第二個是 solver 檔案,對 baselr 參數進行調整。
△ 圖8 模型輸入修改
調整完輸入和 solver 檔案就可以進行深度學習訓練了。根據任務的大小,訓練往往會花費幾個小時、甚至幾周。訓練完之後 Caffe 會生成 model 檔案,可以直接用 Caffe text 将模型的參數代入,對測試檔案進行預測,并輸出預測的結果。
計算
訓練計算方式主要有指令行和 python 接口兩種方式。上文提到的訓練方式主要是以指令行的方式進行的。此外我們還可以通過 python 接口進行訓練。
通過 python 接口進行預測的 Caffe 主體代碼,在開始時定義 Caffe 的 net,這裡需要指定模型,指定的參數檔案。圖9 中間一段代碼是對輸入的圖檔進行諸如将像素減去平均值這類的預處理。完成之後輸入需要進行預測的圖檔,将圖檔的位址給它,調用前向傳播,就可以得到一個輸出,這裡是不需要做反向傳播,因為我們是進行預測而不是訓練,最後可以把預測結果列印出來。
圖9 python 接口
1.對模型進行二次調優
Fine-turning,中文翻譯“微調”,如果我們隻有幾千張、幾萬張圖檔,很難訓練優質的模型。訓練優異的模型需要花費的長達幾天、幾周時間。我們想快速得到訓練結果,可以對之前訓練好的版本進行二次調優,在原有的檔案 model 上進行二次訓練,就把預訓練的模型加在 Caffe 後面,Caffe 會使用後面的參數進行初始化。如果不指定的話,Caffe 的初始化是随機的。
當資料量增大後,我們會發現一台機器運作速度太慢,需要使用多台機器進行訓練,但是 Caffe 隻支援多 GPU 模式,不支援多機器聯機模式,是以涉及到多機器訓練時,我們可以選擇 TensorFlow。
2.Data Augmentation
當圖檔數量達到一定數量級後,因為網際網路裡的圖檔都互相連結,難免相同,這帶來了樣本增長困難的問題。
Data Augmentation 算法通過對同一張圖檔進行旋轉、縮放以及翻轉等操作,将圖10老鼠增強了很多倍。但是 Caffe 原生系統中是不支援資料增強的,這需要自己編寫程式。
△ 圖10 增加正樣本數量
3.Mesos+Docker 部署
最後當參數和模型都設定訓練完成之後,我們可以通過 Mesos+Docker 的模型将它部署到線上對外服務。
Mesos+Docker 部署有兩個模式:CPU模式和GPU模式
優點:簡單、不受機器限制;
缺點:速度慢,單核處理一張圖檔需要250ms
适用于異步處理任務
優點:速度快,性能是CPU的八倍
特性:mesos:--docker=nvidia-docker(使用 GPU 模式,必須在啟動 mesos 時設定好這個參數)
适用于同步處理
1.pilow-simd 規換 PIL:因為PIL不支援CPU的進階的指令,是以将 pilow-simd 替換的,性能大概能提高25%左右;
2.樣本越多越好,樣本越多訓練出來的模型就越精準;
3.batch_size:這個值一次訓練圖檔的數量,需要我們将數值能調到最大;
4.base_lr、 weight_decay 等參數需要進行多次重試,不斷地調整設定。
上述就是又拍雲深度學習的實踐,主要涉及硬體、軟體,以及架構選型,感興趣的朋友可以自己嘗試操作一下。
性感與色情有多遠——你不知道的圖檔鑒黃那些事兒