人工智能是如何識(shí)別一張黃圖的?
前言
本文嘗試用通俗的語言為大家介紹人工智能是如何實(shí)現(xiàn)“黃圖”的識(shí)別的,全文沒有復(fù)雜的公式和晦澀的術(shù)語,適合初級技術(shù)人員和有強(qiáng)烈好奇心的讀者。如果有興趣對文章內(nèi)提及的一些人工智能的基礎(chǔ)概念(神經(jīng)網(wǎng)絡(luò),梯度下降,卷積等)深入研究,網(wǎng)上資料已經(jīng)很多了,可以自行查閱。(注意:由于演示需要,本文可能包含一些尺度較大的圖片。)
色情作為人類最基本欲望的體現(xiàn)之一,一直伴隨著人類社會(huì)的發(fā)展而以不同形式展現(xiàn)著?;ヂ?lián)網(wǎng)時(shí)代的到來也給色情的表現(xiàn)形式帶來了巨大的機(jī)會(huì),有文章說互聯(lián)網(wǎng)上的流量有50%都是與色情相關(guān)的,我不能證實(shí)這個(gè)數(shù)據(jù)的真實(shí)性,不過讀者可以在日常生活中自行體會(huì)。
當(dāng)然今天我們不討論色情產(chǎn)業(yè)的合理性,只專注于從技術(shù)角度研究如何鑒別互聯(lián)網(wǎng)上的這些數(shù)字內(nèi)容。接下來我結(jié)合網(wǎng)易信息安全部門的實(shí)踐經(jīng)驗(yàn)來解釋如何做到這件事。
鑒黃的歷史
在計(jì)算機(jī)的“遠(yuǎn)古時(shí)代”,其實(shí)也就是十幾年前吧,我們識(shí)別黃圖的做法簡單粗暴:人工審核。別小看了這個(gè)方法,其實(shí)針對當(dāng)時(shí)的網(wǎng)絡(luò)環(huán)境(帶寬小,產(chǎn)品少,圖片數(shù)據(jù)也少),效果還是很不錯(cuò)的。一天幾萬的圖片量,安排幾個(gè)人肉眼盯著看,發(fā)現(xiàn)有不良的圖片人工刪掉就好了。
后來,互聯(lián)網(wǎng)產(chǎn)品普及率高了,網(wǎng)絡(luò)數(shù)據(jù)量暴增,一個(gè)產(chǎn)品一天出現(xiàn)幾百萬的圖片量也是很正常的情況,這個(gè)時(shí)候想要靠堆人力去完成審核幾乎不可能了。(再說,有多少產(chǎn)品可以支撐得起幾百上千審核人員的成本呢)。幸好相應(yīng)的計(jì)算機(jī)視覺技術(shù)也有進(jìn)步了,我們用膚色識(shí)別算法過濾掉一些沒那么多“黃色”內(nèi)容的圖片,剩下的再進(jìn)入到人工審核,可以大大節(jié)約審核量。據(jù)統(tǒng)計(jì),經(jīng)過機(jī)器膚色識(shí)別過濾后大約只有20%的圖片還需要人工審核。
等到移動(dòng)互聯(lián)網(wǎng)普及,各種類型的網(wǎng)絡(luò)數(shù)據(jù)量暴增,人工審核連20%的數(shù)據(jù)量也無法承受了,加上視頻、直播等業(yè)務(wù)和數(shù)據(jù)的爆發(fā)式增長,我們迫切需要一個(gè)更加有效的方案來解決審核的問題。很自然的,我們也緊跟人工智能的技術(shù)熱潮開始研發(fā)機(jī)器學(xué)習(xí)的鑒黃系統(tǒng),并且取得了顯著成果。
人工智能鑒黃原理
辨別一張圖是不是黃圖,從機(jī)器學(xué)習(xí)的角度看,本質(zhì)上是一個(gè)分類問題:給定一張圖片,讓機(jī)器判斷是不是“黃圖”。我們要做的就是研發(fā)一個(gè)“分類器”,它能根據(jù)輸入的圖片計(jì)算出該圖片屬于“黃圖”類別的概率,然后再根據(jù)這個(gè)概率值輸出一個(gè)“是”或者“否”的結(jié)果。眾所周知,電腦擅長的是數(shù)學(xué)運(yùn)算,所以我們要把這個(gè)“分類器”先抽象成某種數(shù)學(xué)模型,這樣才有可能用電腦來運(yùn)算。
為了方便理解,我們把數(shù)學(xué)模型定義為:y=f(x)。即給定圖片x,我們要找到一個(gè)函數(shù)f,通過計(jì)算f(x)可以得到這個(gè)圖片的黃圖概率y。很簡單吧!理論上這個(gè)數(shù)學(xué)模型可以解決所有的分類問題。好了,那這個(gè)看似簡單的工作到底應(yīng)該怎么實(shí)現(xiàn)呢?我們按下面的步驟慢慢來:
第一步:給出定義。既然你要教機(jī)器分類,自然要有明確的分類標(biāo)準(zhǔn),如果標(biāo)準(zhǔn)都沒有,那機(jī)器計(jì)算出來的值就沒有意義了。很自然的,我們先把露點(diǎn)的圖片歸類到黃圖,再明確一點(diǎn),就是男性露下體,女性露乳房或者下體的圖。不過,多年的實(shí)踐經(jīng)驗(yàn)告訴我們只根據(jù)是否漏點(diǎn)來判斷圖片類別是遠(yuǎn)遠(yuǎn)不夠的。比如這張圖:
【介于圖片尺度問題,無法公開,大家可以想象一張裸體XXOO但不露點(diǎn)的側(cè)身圖】
(圖1: 沒露點(diǎn)的色情)
它并沒有露點(diǎn),但是很明顯不能認(rèn)為它是一個(gè)正常圖片。(不考慮政策監(jiān)管因素,僅從學(xué)術(shù)研究的角度講,也應(yīng)該把這個(gè)圖片歸類到黃圖的一種)。反之,也并不是所有露點(diǎn)的圖片都是黃圖,比如圖2:
(圖2 :特殊但合理)
然而,意識(shí)到這些僅僅是定義工作的開始,在真實(shí)世界的數(shù)據(jù)形態(tài)和政策法規(guī)的約束下,更多的圖片需要被分類,比如圖3、圖4等等:
(圖3: 此處想象一張低俗但不漏點(diǎn)的圖片)
(圖4 :泳裝)
通過上面的例子是為了讓大家明白,僅靠“黃圖”這樣一個(gè)籠統(tǒng)的定義是無法滿足實(shí)際情況的。我們得把一個(gè)“二分類問題”演進(jìn)成更加復(fù)雜的“多分類問題”,并且盡量把定義和標(biāo)準(zhǔn)清晰化,這顯然是一個(gè)龐大和繁雜的工作。我們組建了專門的運(yùn)營團(tuán)隊(duì)對數(shù)據(jù)和政策法規(guī)進(jìn)行研究,根據(jù)實(shí)際情況積累了許多的分類定義和標(biāo)準(zhǔn)。
第二步:收集樣本。有了定義之后,我們就要根據(jù)定義來收集樣本數(shù)據(jù)。幸好我們之前多年的審核工作積累了大量的圖片數(shù)據(jù),其中有很多經(jīng)過了人工審核確認(rèn)是黃圖的,所以我們從里面篩選出部分圖片作為訓(xùn)練的數(shù)據(jù)。由于定義的分類數(shù)量非常多,我們不得不開發(fā)專門的分類標(biāo)簽系統(tǒng)并組建額外的人工標(biāo)注團(tuán)隊(duì),把訓(xùn)練數(shù)據(jù)做進(jìn)一步的篩選。訓(xùn)練數(shù)據(jù)的質(zhì)量好壞對效果的影響非常大,所以我們必須很有耐心地投入到訓(xùn)練數(shù)據(jù)準(zhǔn)備的工作中。這個(gè)工作消耗了大量的時(shí)間和人力成本,并且還一直在持續(xù)進(jìn)行中。由于都是違禁的圖片,為了避免二次傳播,我們也難以像ImageNet一樣通過眾包的形式來完成。
第三步:訓(xùn)練模型?;氐揭婚_始的數(shù)學(xué)模型y=f(x),訓(xùn)練模型的目的就是為了得到f。我們通過前面的兩步得到了標(biāo)注好的圖片樣本集,把標(biāo)注的結(jié)果定義為y*,圖片為x,現(xiàn)在我們要想辦法找到一個(gè)f,可以對樣本集中所有的圖片計(jì)算得到的y跟y*最接近,也就是得到使|y- y*|的值最小的f。我們可以把|y- y*|定義為損失函數(shù)。如何找一個(gè)函數(shù)的最小值在數(shù)學(xué)界已經(jīng)有成熟的算法。一般采用梯度下降法去尋找合適的f。
雖然所有圖片數(shù)據(jù)在電腦看來也都是0和1的二進(jìn)制數(shù)據(jù),比如下圖就是前面圖1的二進(jìn)制形態(tài)的片段。但是直接拿這些0和1的數(shù)據(jù)計(jì)算,容易導(dǎo)致運(yùn)算量過大,圖片特征提取的效率和準(zhǔn)確度都難以保證。

(圖5 :圖片的二進(jìn)制值)
如何高效地提取出特征數(shù)據(jù)來代表圖片x是很關(guān)鍵的一步。技術(shù)上稱之為特征提取。幸好許多前輩科學(xué)家已經(jīng)做了大量的研究,近些年來,基于深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)模型在各種圖像識(shí)別的比賽中獲得了突破性的進(jìn)展。所以我們選用了CNN(卷積神經(jīng)網(wǎng)絡(luò))、GoogLeNet、ResNet(殘差網(wǎng)絡(luò))三種深度網(wǎng)絡(luò)模型結(jié)構(gòu)作為研究的基礎(chǔ)。通過這些模型,我們就可以更加高效地把圖片數(shù)據(jù)轉(zhuǎn)變成了可以運(yùn)算的數(shù)學(xué)模型,使我們可以更快更好地得到f。
當(dāng)然實(shí)際情況下f是一個(gè)非常復(fù)雜的函數(shù),為了簡化運(yùn)算,我們把f拆分成了fn(fn-1(fn-2(f…(f2(f0))…)),每一個(gè)f可以理解為神經(jīng)網(wǎng)絡(luò)的一層,n個(gè)f就是n層,這種層層遞進(jìn)的關(guān)系就是算法名稱中“深度”的由來。理論上我們可以搭建任意深度(層次)的神經(jīng)網(wǎng)絡(luò)模型。把f拆分之后,我們用倒推的辦法就能得到每一層的f。
我們以圖4為例,經(jīng)過不同層次的f運(yùn)算得到的結(jié)果,如下圖6:

(圖6: 不同網(wǎng)絡(luò)層次特征結(jié)果)
每一個(gè)層次的f可能會(huì)得到許多特征結(jié)果,有一些是模型對應(yīng)特征的響應(yīng)(對應(yīng)圖中有高亮的部分),有一些沒有響應(yīng)(圖中黑色部分)。最終經(jīng)過所有層級的f運(yùn)算所得結(jié)果經(jīng)過Sigmoid函數(shù)映射到0-1之間,得到的就是y值了。y越接近1,那么它命中類別的概率就越大。演化到多分類的問題上,y就是一個(gè)多維度的數(shù),理論上每個(gè)維度都可以得到一個(gè)0-1之前的值,我們按照一定算法選擇某一個(gè)維度的y作為結(jié)果輸出即可(一般按照y值大的)。
第四步:驗(yàn)證。經(jīng)過前面3步運(yùn)算我們得到了f。(其實(shí)是n層神經(jīng)網(wǎng)絡(luò)的參數(shù),也就是所謂的“黃圖”模型)。f的可視化結(jié)果可以參看圖7(以GoogLeNet為例),圖7展示了10個(gè)224*224的RGB圖片作為輸入,在第二個(gè)卷積層的時(shí)候就需要64*3*3*64=36864個(gè)f的參數(shù)。當(dāng)然這個(gè)是在計(jì)算一個(gè)非常簡單的圖示情況下的數(shù)據(jù)量,實(shí)際情況的輸入數(shù)據(jù)和網(wǎng)絡(luò)深度都要遠(yuǎn)遠(yuǎn)大于圖片所展示的。我們常說的算法調(diào)參,就是指調(diào)整這些f的上萬甚至上百萬個(gè)參數(shù)。

(圖7 :神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)模型)
接下來我們需要有一個(gè)驗(yàn)證的圖片集來測試f的效果。由于f是根據(jù)訓(xùn)練集生成的,那么直接用訓(xùn)練集不足以反映它在真實(shí)環(huán)境下的效果。得益于我們大量的歷史樣本數(shù)據(jù)集,我們專門挑選一些圖片作為驗(yàn)證使用。通過一個(gè)自動(dòng)化的測試平臺(tái)不停地對迭代出來的f做驗(yàn)證。在準(zhǔn)確率達(dá)到更優(yōu)的程度之后再更新上線。
人工智能鑒黃現(xiàn)狀
我們經(jīng)過不斷迭代,得到了越來越精準(zhǔn)的f(模型),在驗(yàn)證圖集上也達(dá)到了99.8%以上的準(zhǔn)確率。那么,我們就可以高枕無憂了么?恐怕還不行。
首先我們考慮真實(shí)世界里的場景:雖然互聯(lián)網(wǎng)產(chǎn)品類型多樣,但產(chǎn)品里面黃圖的比例往往很小,一般都是萬里挑一甚至是十萬分之一的級別(明目張膽玩情色的產(chǎn)品在中國活不久)。我們假設(shè)10k張圖像中有1張是黃圖,我們的系統(tǒng)準(zhǔn)確率為99.9%,即1k張圖像會(huì)判錯(cuò)一張,那么我們計(jì)算偽陽性率(False Positive Rate),即判斷為違禁圖像集合中正常樣本的比例為:

即11張判定為黃圖的結(jié)果里面竟有10張是誤判!不過用戶也不用過分擔(dān)心,統(tǒng)計(jì)為誤判的圖像,多數(shù)情況屬于一些邊界的情況,實(shí)際使用效果會(huì)更好。
其次,深度學(xué)習(xí)的模型會(huì)有一些奇怪的行為表現(xiàn),比如相關(guān)論文([1] Goodfellow, Ian J., Jonathon Shlens, and Christian Szegedy. "Explaining and harnessing adversarial examples." arXiv preprint arXiv:1412.6572 (2014).)里面描述的情況(圖8)

(圖8)
一張?jiān)灸鼙徽_識(shí)別的大熊貓圖像,在添加人眼幾乎不可辨認(rèn)的微小變化之后,竟然以99.3%的置信度被判別為長臂猿。
是神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)有問題嗎?不是,這個(gè)實(shí)驗(yàn)是基于獲得ILSVRC競賽冠軍的GoogLeNet網(wǎng)絡(luò)進(jìn)行的。
是訓(xùn)練數(shù)據(jù)的問題嗎?也不是,網(wǎng)絡(luò)是基于目前最大的物體識(shí)別分類數(shù)據(jù)集ImageNet訓(xùn)練的。
也就是說,對于一個(gè)卷積神經(jīng)網(wǎng)絡(luò),出現(xiàn)難以解釋的正常圖像誤判是普遍現(xiàn)象。即便是在實(shí)際應(yīng)用或比賽中取得滿意效果和優(yōu)異成績的算法,也會(huì)犯反人類直覺的“低級”錯(cuò)誤。
基于以上的原因,在真實(shí)的場景下,我們往往采取機(jī)器審核+人工審核的方式來做到雙重保險(xiǎn)。
結(jié)語
以上通過盡量簡單的描述說明了網(wǎng)易云安全(易盾)反垃圾系統(tǒng)在識(shí)別黃圖這個(gè)工作中所作的努力和成果。但是也提到了許多的挑戰(zhàn),比如反人類直覺的低級誤判問題,對于邊界條件的圖片識(shí)別準(zhǔn)確率問題等。技術(shù)的進(jìn)步是無止境的,網(wǎng)易云安全(易盾)實(shí)驗(yàn)室的算法工程師們也一直在努力。目前,網(wǎng)易云安全(易盾)已經(jīng)面向企業(yè)市場,我們每天會(huì)為中國的互聯(lián)網(wǎng)過濾1億條左右的有害信息。除了智能鑒黃,網(wǎng)易云安全(易盾)同時(shí)開放有廣告過濾、暴恐識(shí)別、謠言檢測等內(nèi)容安全服務(wù),驗(yàn)證碼、營銷反作弊、應(yīng)用加固等業(yè)務(wù)安全服務(wù),以及DDoS 防護(hù)、SSL 證書管理等網(wǎng)絡(luò)安全服務(wù)。