人臉識別到底是甚麼?演算法是不是無所不能?

人臉識別系統無處不在,我們似乎已無法抗拒一舉一動被記錄下來;但這些模擬人腦的演算法,其實遠非牢不可破。
2018年10月,中國北京一個保安科技博覽展。

【編者按】2019年,BBC的一套記錄片拍到了倫敦警察試用人臉識別系統的情景:一名(貌似有中東血統的)男子在攝像頭前把衣領拉高,結果被警察截停審問。行人質疑警察截查該男子的理由,警察說是因為「他看到鏡頭就立即嘗試遮臉」,所以他們認為他形跡可疑。這個不想讓攝像頭拍到自己的男子,最終還是被警察拍了照。

人臉識別不止在中俄等威權國家蓬勃發展,即使在民主社會,這種技術還是引起了許多關於私隱﹑人權的爭議,而且社會對個體的保障似乎遠沒有科技發展那麼迅速。端傳媒九月將刊出一系列專題報道,探討中國和俄羅斯成為監控社會之路。這篇文章是系列的第一篇,將解釋人臉識別的原理,以及個體「逃離」識別系統在技術上的可能性。請持續留意端傳媒報道。

(朱孝文,人工智能研究員)

她打開了自己的相簿,把一張自己早兩天拍下的生活照,從桌面上拉到網站的搜尋框。不消數十秒,網站顯示了一堆搜尋結果:那是從互聯網上九億張圖片中找出來的她的照片,裏面有一些連她自己也未看過,有些她甚至已經戴了口罩或太陽眼鏡。更甚的是,裏面一些圖片來自色情網站,雖然主角並不是她本人。這是《紐約時報》編輯Kashmir Hill在2022年5月測試一個名為PimEyes的人臉識別搜尋網站時的經歷。我讓端的編輯看看她的照片在PimEyes顯示了甚麼結果,她除了看到自己的照片,搜尋結果中也有跟她相似的陌生人(而且也有非她本人並來自色情網站的照片,正如Hill所言,單是系統認為這「可能是她們」,就已經夠令人不安了)。

十多年前谷歌Google Photo推出試用服務,大概是我第一次見識人臉識別系統潛力的契機--我將數千張照片拉到平台上,系統自動將數百個被拍攝者辨認出來。最讓我驚訝的,是同一個人跨越不同年齡段的照片都被它認出來了,例如童年時期的我與大學時期的我,Google的系統都能認作同一個人(雖然有少量我的照片被它辨識作另外兩個「我」,特別是側面照),在當時確實非常厲害。現在人面辨識已在各種應用上無處不在,從網上申請銀行帳戶時所提交的自拍所觸發的「電子模式認識你的客戶」(Electronic Know Your Customer,eKYC)驗證,到辨理簽證及各國機場入閘時的資料核對,都用上了這種技術。

過去十年,隨著深度學習的發展,人臉辨識技術也愈來愈成熟。現在它能從茫茫人海中將個人準確鎖定,如果被沒有權力制衡的組織使用,將會是我們每個人的惡夢。人臉識別系統自2010年代晚期開始普及進北京社區,根據外媒報道,這個系統也在不同城市掃描居民面孔,以判斷是否有維族人。配合社會信用體系,人臉辨識能令個人私生活無所遁形。2022年初,國際特赦組織也發布了研究報告,指紐約警方在黑人和拉丁裔社區的許多天眼有人臉辨識功能,是對個人自由的侵犯。而近年大行其道卻名聲敗壞的DeepFake演算法,也與個人私隱息息相關。

人面辨識系統如此強大,是不是就完全沒法抗衡?起碼現在還不是--在許多研究中,輸入一些經過加工的圖像會造成辨識系統誤判,將圖中人物辨認作另一個隨機或指定的人。這些加工圖片也可以讓看到人臉圖片的系統無法辨認出有人臉的存在。這些研究,對於個人面對人面辨識系統時的可能性,或可帶來一些啟示。

甚麼是「人工智能」?

要明白為何人面識別系統並非堅不可摧,我們需要了解它如何運作。對辨識系統進行除魅,也可讓我們不會過份渲染它的強大,能以更理性的角度去審視它的能與不能。

首先,人臉是一種數據:有時以圖片方式表達(計算機處理二維照片的傳統方式是三原色的二維矩陣),有時以「重要地標」坐標位置表達(選擇性的點雲(Point cloud),演算法處理特定三維模型的一種方法)的數據。無論是用甚麼方式表達,要處理數據就要用到統計學。

人臉辨識系統是機械學習(Machine Learning)演算法的一種。人工智能領域從80年代規則導向(rule based)的專家系統開始,發展到今日數據導向懂得自我調節的機械學習(Machine Learning)演算法,後者的理論基礎就是源於統計學。機械學習演算法透過用家給予的數據以調整自己計算時所使用的參數(也就是機械學習的「學習」),從而對統計數據的概率分布(distribution)進行模擬。因此人臉辨識系統需要數據學習,越多的數據,越能讓更複雜的機械學習模型有效學習。在這情況下,能以較低成本收集並使用大量人面數據的國家或企業,就越有能力開發更強大的人臉辨識系統。現時在全球人臉識別演算法方面排名前列的,幾乎都是美國﹑中國和俄羅斯的企業。

今日主流的人臉辨識系統,屬於機械學習中近10年來進展迅速的深度學習(Deep Learning)子分類。這是將計算機的計算單元以一種層層遞進方式連結起來的演算法,這種計算結構參考了人腦神經元的運作方式(這也是為何計算單元也被稱作「人工神經元」(artificial neuron),而深度學習模型有時也被稱作「人工神經網絡」)。人腦是宇宙間最複雜的組織,雖然我們還是認為它是單純的物質,但它實際如何運作,無論是腦神經科學家還是人工智能科學家,到現在也沒能完全掌握得到。人工智能之父,著名電腦科學家候世達(Douglas Hofstadter)認為人腦是「不可化約(irreducible)」的--即是我們無法有效地用更基本的語言歸納它。但現在人工神經網絡的運作方式,已經是現有理解中比較能模擬人腦運作的方式了。

也因為它需要極複雜的神經元連接來模擬人腦,這種演算法需要的計算資源非常龐大。所以雖然它早在80年代末誕生,但在2010年代前主要只出現在學論研究中。過去十多年,由於計量資源以及收集數據成本的下降,深度學習的研究與應用迅速成長。其中一個里程碑,是深度學習模型AlexNet在2012年的ImageNet挑戰賽(參加者需要在將巨量圖片按指定的1000類別分類,例如犬隻就有90個類別)中,擊敗一眾依賴傳統統計學與計算機視覺演算法的對手,成為史上第一個贏得此比賽的深度學習模型。

AlexNet與很多其它後來的圖片分類模型,都屬於一種稱為卷積神經網絡(Convolutional Neural Network, CNN)的結構。「卷積」是電子工程中一種傳統進行微積分的方法,原理可概括為拿取一個特定區域中數據加權平均的值。CNN中二維卷積配合深度學習的靈感,源自靈長類動物視覺系統從視網膜連到視皮質(Visual cortex)連接路徑的運作方式。一開始的「卷積」計算能讓網絡了解圖片的區域資訊,例如圖片的某一部份是否開始出現物件邊界,物件的顏色/紋理等等;而透過深度學習連結,在深層的計算單元能得出更抽象的知識(例如物件是否有「眼睛」,是否「動物」等等),最後作出分類。

人臉識別是怎麼把你認出來的?

而典型的人工智能是如何將圖像分類的呢?如果預設了有1000個分類(如ImageNet挑戰賽),那麼這個系統的輸出,就是一個有1000個數字的向量(vector);1000個數字加起來剛好等於1,分別代表1000個類型各自的概率。假設第539個數字屬於熊貓分類,而這數字的數值是80%,這代表了演算法認為該圖片有80%的概率為熊貓。

問題來了,地球有七十億人口,每個人都長得不一樣,難道要有七十億個分類?這種做法當然不太理想:第一,用分類來輸出太巨量,也很沒效率。第二,與分類系統不同,很多我們要讓人面辨識系統辨認的面孔,可以是事前它從未見過的。例如前述Google Photo的例子:系統以前還沒有看過你的照片,但當你把一堆自己的相片拉進平台,它就懂得自己分辨不同圖片裏的人是否同一人。

所以人臉需要一種新的表達方式。描述得太仔細不一定是好事:點雲能記錄面部每一個重要地標的三維坐標,但同一個人只要表情不同,點雲也會不一樣(當你笑的時候,嘴角的坐標就被拉到另一處了)。我們希望這種面孔的表達,可以代表一個人,而不是代表這個人的特定表情,同時也能表達系統未見過的人。

所以,我們需要一種叫「嵌入」(embedding)的表達方法。

如果有個監視器拍到影星畢彼特(Brad Pitt;另譯:畢比特﹑布萊德·彼特),系統怎麼知道他就是畢彼特呢?為方便解釋,我們假設這個是非常簡單的初階系統,只有四個變量:女性特質﹑年紀﹑膚色和輪廓。長得愈陰柔﹑圓潤的人,「女性特質」的變量也就愈高(最高為10,最低為0),輪廓愈深,「輪廓」的變量也愈高,如此類推。以畢彼特為例,他的女性特質可能是1,中年所以年紀是6,膚色較白所以膚色是3,輪廓深所以最後一項是7--那他的「嵌入」向量就是(1, 6, 3, 7)。假設系統也拍到了米雪兒.奧巴馬(Michelle Obama),她的變量則可能是(8, 6, 6, 6),拍到我的話,我的變量則可能是(3, 3, 5, 4)。

演算法拿到嵌入向量後,就會拿到數據庫與預先儲存起來的嵌入向量比較,發覺與眼前人的嵌入(1, 6, 3, 7)最接近的向量是(1, 5.8, 2.3, 6.9),而(1, 5.8, 2.3, 6.9)屬於畢彼特,因此系統就會判斷目前人是畢彼特了。當然我們早就脫離了規則導向的年代,不用自己決定這些變量,只要有大量數據(即人臉)讓系統學習,它會自動決定那些變量是甚麼。

嵌入是很多人面辨識系統(如前面提到的谷歌FaceNet模型,以及臉書2014年的DeepFace模型等等)的典型輸出。我們試圖用少量的數值(低維度),去表達原本甚為龐大的物件(高維度),所以嵌入是一個降維(dimensionality reduction)的過程。例如人臉重要地標的坐標(上文提到的點雲)總共可以有幾萬個數字,但其實用較少的數字去代表臉孔是可能的。例如2015年谷歌FaceNet模型的嵌入,就用上4,975個數字(也就是4,975維)去代表一個面孔。我曾在人臉嵌入開展過一些研究工作,當時使用的理論根基是2016年Anh Tuan Tran等學者發展出來的99維嵌入,然後將每張圖片的99維嵌入還原為原始的人臉。還原的方法一般是使用一些生成演算法,例如近年頗熱門的GAN(Generative Adversarial Network)。

這麼少的嵌入數值,之所以足夠「大」去承載原本更龐大的數據,是因為機械學習中的流形假設(manifold hypothesis)信念:很多表面上高維度的物體數據結構其實十分「鬆散」,他們可以用一種緊密得多的低維度表達方式(低維流形)去表達。嵌入一詞源自數學中的拓撲學(Topology),用來判斷兩個空間是否等價。人工智能領域借用此詞時,則用來判斷兩個數據空間是否「足夠近似」,假如人臉嵌入大約能將原始人臉壓縮,並在將來還原,那麼嵌入在某程度上與原始人臉就是「足夠近似」了。

常見的嵌入除了人面辨識的面孔嵌入(facial embedding)外,自然語言處理(Natural language processing,NLP)的演算法輸出的文字嵌入(word embedding)也是另一例子。一個有趣的例子是「國王」與「女皇」兩詞兩個文字嵌入之間的距離,與「男人」與「女人」兩詞兩個文字嵌入之間的距離頗為接近。說到這裏,我們大概都可以看到,嵌入在某程度上就好像人類對事物的認知(perception),也就是演算法對知識的一種理解。深度學習中一種經典的自編碼器(autoencoder)模型,就是將原始圖片轉化作低維的嵌入,再由嵌入重新轉成圖片,然後研究人員會比較輸出與輸入的差異有多少,以判斷嵌入是否能有效「儲存」原始資訊,達到流形假設所期待的效果。

所以「嵌入」與「分類」兩種輸出本質十分不同,前者是特定物件重要特徵的表達,後者純綷是將物品劃入已預先設定好的分類。如前所述,嵌入所代表的意義並不一定是明確的,這些數值只是演算法透過數據所學習到的表達方式。例如不一定像之前畢彼特的例子一樣,有一個指定的數值去決定女性特質﹑年紀﹑膚色和輪廓等等。

英國倫敦街頭,警方展示一張告示牌指該區正在測試人臉識別技術。
英國倫敦街頭,警方展示一張告示牌指該區正在測試人臉識別技術。

人面辨識模型會將不同照片的嵌入數值分群,數值相近的嵌入會被列入一個相同的群(cluster )。也就是說,同一個人的不同照片,我們希望其嵌入數值彼此相近。因此要愚弄人面辨識模型的話,意思其實是要操弄演算法的嵌入空間,希望被「添加」了的輸入,能讓演算法將圖片的嵌入投放至遠處,令它無法成功識別拍到的人。如果我們想愚弄的不單單是一個演算法,而是同一時間愚弄多個不同的人面辨識系統,操弄嵌入空間就變得更加重要。根據上文提及的流形假設,人面資訊在不同演算法下的「本質維度」應該要是近似的,不同演算法的嵌入亦很有可能有相似的幾何結構,因此只要能操弄一個演算法的嵌入,照理這種操弄亦應能轉移到其它演算法上,並成功欺瞞它們。

騙不了人,但卻能騙過強大的演算法

兩年前,網絡安全公司McAfee的團隊嘗試攻擊機場用於驗證護照的面部識別系統。他們用機器學習生成了在人眼裡看起來像人,但機器卻「看不懂」的圖像,並成功欺騙了人面識別系統。研究人員用的是一個叫CycleGAN的圖像翻譯算法,這種演算法擅長將照片改變風格,例如將馬的影片變成班馬影片,或是將夏季綠油油的山脈照片,變成冬季的積雪山脈。McAfee團隊將兩個人(甲和乙)的圖像輸入CycleGAN,讓它幫兩張照片互相「轉換風格」,最終生成了一張人類看起來像甲,但機器卻會以為是乙的圖像。所以如果甲在禁飛名單上,這種技術會讓他避過人面識別系統,成功上機。

有GAN之父之稱的Goodfellow,在2014年就指出卷積神經網絡其實很容易被欺瞞。一張熊貓圖片加上了一些精心計算的擾動(perturbation),在人眼看起來圖片幾乎毫無改變,依舊是一張熊貓圖片,但當時最先進的卷積模型會將圖片以99%信心度誤判為黑猩猩。這種用作攻擊的圖片,在研究領域被稱作對抗性例子(Adversarial Example)。但這種程度的擾動,對人類大腦而言是完全沒用的,沒有人會懷疑這不是熊貓。事實上,要人眼不察覺圖片被擾動修改,是對抗性例子中一個很常見的要求。這就是所謂的「隱閉性」--讓圖片不會被系統的人類維護員發現「有詐」。這也說明了,參考人類皮質運作方式而創造的卷積模型結構,與靈長類動物的視覺系統始終有巨大差別。

在這個方向發展,一些攻擊演算法開始能製造出能欺瞞人面辨識系統的圖片,例如Zhang等人在2020年論文中對中國騰訊的人面辨識系統展開攻擊,攻擊圖片的面孔在人類眼中就與原圖片無異,但辨識系統會錯誤地將圖中人物身份誤判為另一人。這些誤導的目標可以是隨機的,也可以是一個特定的目標。特定的目標當然較隨機目標困難,但並非不可能,例如私人企業ADVERSA他們為客戶測試系統健壯性(robustness)時所提供的攻擊,就可以將照片面孔誤導往指定人物(他們在廣告中,就示範如何輕易讓系統以為眼前人是SpaceX創始人馬斯克(Elon Musk))。

這是一個很有趣的效果:系統的「眼睛」明明看到一個分明不是馬斯克的人,但它大腦看到的卻是馬斯克。這又跟吃了迷幻藥,然後見到不存在事物的人類不一樣--我們可以控制系統見到甚麼,卻沒有一顆迷幻藥能控制嗑藥的人見到耶穌還是佛祖。除了將圖片辨識成另一身份,對抗性圖像也可以使系統看著前方人面的時候辨識不到人臉的存在,例如2016年Sharif等人的研究便讓人物帶上花紋眼鏡以達到「隱身」之效,跟漫畫《多啦A夢》裏,只要戴著就能讓人視而不見的石頭帽差不多。

英國倫敦街頭一部閉路電視。
英國倫敦街頭一部閉路電視。

當然,當面對真實的攝影鏡頭時,要擾亂系統就比靜態圖像要困難得多,但也還不是沒可能。早在2001年,Viola-Jones演算法(較低層次,準確率較低的非CNN人臉識別演算法)出現時,就有像Computer Vision Dazzle這樣的反人臉識別化妝出現。當然如果不是身在日本秋葉原,化個這樣的妝外出會非常突兀,而事實上這些意圖擾亂光暗的化妝,已經騙不過今日的CNN算法。

但對抗性例子仍然不斷出現:在2018年Brown等人的研究中,他們僅僅是在香蕉旁邊放下了一塊貼有擾動圖片的杯墊(他們稱之為adversarial patch;對抗性補丁),就可讓實時的攝影鏡頭將香蕉錯誤分頖為多士爐。谷歌在2017年製作了一隻海龜玩偶,在實時的攝影鏡頭監察下總會被分類為步槍。這些都是在物理環境下的對抗性例子。

當然--防衛者(也就是辨識系統的維護人員)也有辨法將高牆加高,例如使用更多的數據對系統進行訓練,或者使用訓練數據前先將圖片做平移、扭曲或加噪等的數據擴充(Data Augmentation)步驟,甚至在進行辨識前先額外用傳統方式對照片進行消噪等等。但無論如何,對系統的成功攻擊讓我們看到,強大的辨識系統並非毫無破綻。

雖然我們誰都不知道人臉識別演算法之後的發展會如何,但觀乎目前情況,攻擊人臉識別系統的方法持續出現,亦沒有人能設計出足夠健壯的系統去抵抗各種攻擊的方法。而目前很多提升了防禦的系統,都有演算法判斷力退化的問題。而對於物理環境的攻擊,目前的防禦都不是運作得很好。而在理論上,由於我們缺乏足夠好的理論工具去描述「攻擊——防禦問題」的優化解,無人知道理論上是否能建立一個能防禦各種攻擊的系統。無疑人臉識別在許多國家的廣泛使用令人擔憂,但在技術上,人臉識別演算法離「牢不可破」還有一段距離。

讀者評論 5

會員專屬評論功能升級中,稍後上線。加入會員可閱讀全站內容,享受更多會員福利。
  1. 软件工程出身,也觉得这篇文章写得浅显易懂,第一次看到文章最后说的人脸识别系统的防御方法,很有意思。最后提出的人脸识别系统并非牢不可破的理由,有说服力。

  2. 幾好的專題

  3. 作為機器學習使用者,我覺得這是一篇不錯的科普文章,涵蓋了人面以至物件識別最基本也最重要的概念。期待更多探討政策、價值觀、投放類似科技得失的文章。

  4. 演算法並非無所不能。但在操作者(主要是政府)眼中,是否只要能解決大部分的問題就夠了?剩下的可以用人工去糾正,這樣就能用可以接受的成本去達成過去難以想像的監控細緻度,必須現在各大互聯網平台的影片和留言的審核制度一樣。 同理,人面識別在應用中也許會出差錯,但只要錯誤率在成本上可接受範圍,操作者就會傾向於採用。