- TensorFlow神經網絡到深度學習
- 張德豐編著
- 4066字
- 2021-05-19 18:18:32
2.1 計算機視覺
人工智能是人類一個非常美好的夢想。我們想制造出一種機器,使它能跟人一樣具有一定對外界事物感知的能力,如看見世界。
在20世紀50年代,數學家圖靈提出判斷機器是否具有人工智能的標準:圖靈測試。即把機器放在一個房間,人類測試員在另一個房間,人跟機器聊天,測試員事先不知道另一個房間里是人還是機器。經過聊天,如果測試員不能確定跟他聊天的是人還是機器,那么圖靈測試就通過了,也就是說這個機器具有與人一樣的感知能力。
但是從圖靈測試提出來開始到21世紀初,50多年時間有無數科學家提出很多機器學習的算法,試圖讓計算機具有與人一樣的智力水平,但直到2006年深度學習算法成功,才帶來了一絲解決的希望。
2.1.1 人類視覺的啟迪
20世紀50年代Torsten Wiesel和David Hubel兩位神經科學家在貓和猴子身上進行了一項非常有名的關于動物視覺的實驗,如圖2-1所示。

圖2-1 腦部連入電極的貓
實驗中貓的頭被固定,視野只能落在電視屏幕上,電視屏幕上會不時出現小光點或者劃過小光條,而一條導線直接連入貓的腦部區域視覺皮層位置。
Torsten Wiesel和David Hubel通過實驗發現,當有小光點出現在屏幕上時,貓視覺皮層的一部分區域被激活,隨著不同光點的閃現,不同腦部視覺神經區域被激活。而當屏幕上出現光條時,則有更多的神經細胞被激活,區域也更為豐富。他們的研究還發現,有些腦部視覺細胞對于明暗對比非常敏感,對視野中光亮的方向(不是位置)和光亮移動的方向具有選擇性。
從Torsten Wiesel和David Hubel做這個有名的腦部視覺神經實驗之后,視覺神經科學(見圖2-2)正式被人們確立。目前為止,關于視覺神經的幾個被廣為接受的觀點如下:

圖2-2 視覺神經科學
·腦對視覺信息的處理是分層級的,低級腦區可能處理對比度、邊緣之類,高級腦區處理更抽象,如人臉、房子、運動的物體等。信息被一層一層抽取出來,往上傳遞,進行處理。
·大腦對視覺信息的處理也是并行的,不同的腦區提取出不同信息、干不同的活,有的負責處理這個物體是什么,有的負責處理這個物體是怎么動的。
·腦區之間存在著廣泛的聯系,同時高級腦區對低級腦區也有很多反饋投射。
·信息的處理普遍受自上而下和自下而上的注意和調控。
進一步的研究發現,當一個特定物體出現在視野的任意一個范圍時,某些腦部的視覺神經元會一直處于固定的活躍狀態。對視覺神經科學的解釋就是人類的視覺辨識是從視網膜到腦皮層,神經系統從識別細微特征演變為目標識別。計算機如果擁有這么一個“腦皮層”,能夠對信號進行轉換,那么計算機依照人類擁有視覺就會變為現實。
2.1.2 計算機視覺的難點和人工神經網絡
盡管通過大量研究,人類視覺的秘密正在逐漸被揭開,但是相同的經驗用于計算機上卻并非易事。計算機識別往往有嚴格的限制和規格,即使同一張圖片或者場景,一旦光線或者觀察角度發生變化,計算機的判別也會發生變化。對于計算機來說,識別兩個獨立的物體容易,但是在不同的場景下識別同一個物體則困難得多。
因此,計算機視覺(見圖2-3)核心在于如何忽略同一個物體內部的差異而強化不同物體之間的區別,即同一個物體相似而不同的物體之間有很大的差別。

圖2-3 計算機視覺
長期以來,對于解決計算機視覺識別問題,大量的研究人員投入了很多精力,貢獻了很多不同的算法和解決方案。經過不懈努力和無數嘗試,最終計算機視覺研究人員發現,使用人工神經網絡解決計算機視覺問題是最好的解決辦法。
人工神經網絡在20世紀60年代就萌芽了,但是限于當時的計算機硬件資源,其理論只能停留在簡單的模型之上,無法全面發展和驗證。
隨著人們對人工神經網絡的進一步研究,20世紀80年代人工神經網絡具有里程碑意義的理論基礎“反射傳播算法”的發明,將其原本非常復雜的鏈式法則拆解為一個個獨立的只有前后關系的連接層,并按各自的權重分配錯誤更新。這種方法使得人工神經網絡從繁重的、幾乎不可能解決的樣本計算中脫離出來,通過學習已有的數據統計規律對未定位的事件進行預測。
隨著研究的進一步深入,2006年,多倫多大學的Geoffrey Hinton在深層神經網絡的訓練上取得了突破。他首次證明了使用更多隱藏層和更多神經元的人工神經網絡具有更好的學習能力。其基本原理就是使用具有一定分布規律的數據保證神經網絡模型初始化,再使用監督數據在初始化好的網絡上進行計算,使用反向傳播對神經元進行優化調整。
2.1.3 深度學習
深度學習在很多學術領域,比非深度學習算法往往有20%~30%成績的提高。很多大公司也逐漸開始出手投資這種算法,并成立自己的深度學習團隊,其中投入最大的就是谷歌。2008年6月披露了谷歌腦項目;2014年1月谷歌收購DeepMind;2016年3月其開發的Alphago算法在圍棋挑戰賽中,戰勝了韓國九段棋手李世石,證明深度學習設計出的算法可以戰勝最強的人類選手。
在硬件方面,Nvidia最開始做顯示芯片,但從2006年及2007年開始主推用GPU芯片進行通用計算,它特別適合深度學習中大量簡單重復的計算量。目前很多人選擇用Nvidia的CUDA工具包進行深度學習軟件的開發。
微軟從2012年開始,利用深度學習進行機器翻譯和中文語音合成工作,其人工智能小娜背后就是一套自然語言處理和語音識別的數據算法。
百度在2013年宣布成立百度研究院,其中最重要的就是百度深度學習研究所,當時招募了著名科學家余凱博士。不過后來余凱離開百度,創立了另一家從事深度學習算法開發的公司地平線。
Facebook和Twitter也都各自進行了深度學習研究,其中Facebook攜手紐約大學教授Yann Lecun,建立了自己的深度學習算法實驗室,2015年10月,Facebook宣布開源其深度學習算法框架,即Torch框架;Twitter在2014年7月收購了Madbits,為用戶提供高精度的圖像檢索服務。
2.1.4 前深度學習時代的計算機視覺
互聯網巨頭看重深度學習當然不是為了學術,主要是它能帶來巨大的市場。那為什么在深度學習出來之前,傳統算法沒有達到深度學習的精度呢?
在深度學習算法出來之前,對于視覺算法來說,大致可以分為以下5個步驟:特征感知、圖像預處理、特征提取、特征篩選、推理預測與識別。在早期的機器學習中,占優勢的統計機器學習群體對特征是不大關心的。
我們認為,計算機視覺可以說是機器學習在視覺領域的應用,所以計算機視覺在采用這些機器學習方法的時候,不得不自己設計前面4個部分。
但對任何人來說這都是一個比較難的任務。傳統的計算機識別方法把特征提取和分類器設計分開來做,然后在應用時再合在一起,如圖2-4所示。如果輸入是一個摩托車圖像,那么首先要有一個特征表達或者特征提取的過程,然后把表達出來的特征放到學習算法中進行分類學習。

圖2-4 傳統識別過程
在過去20年中出現了不少優秀的特征算子,如最著名的一個是SIFT算子,即對尺度旋轉保持不變的算子。它被廣泛地應用在圖像比對,特別是在structure from motion(運動恢復結構,sfm)這些應用中;另一個是HoG算子,它可以提取物體,比較魯棒的物體邊緣,在物體檢測中扮演著重要的角色。
這些算子還包括Textons、Spin image、RIFT和GLOH,都是在深度學習誕生之前或者深度學習真正流行起來之前,占領視覺算法的主流。
2.1.5 仿生學角度看深度學習
如果不手動設計特征,不挑選分類器,那么有沒有別的方案呢?能不能同時學習特征和分類器呢?即輸入某一個模型的時候,只是輸入圖片,輸出就是它自己的標簽。圖像的特征分類過程如圖2-5所示,輸入一個人的頭像,出來的標簽就是一個50維的向量(在50個人里識別),其中對應明星的向量是1,其他位置是0。

圖2-5 圖像的特征分類過程
這種設定符合人類腦科學的研究成果。
1981年諾貝爾醫學生理學獎頒發給了David Hubel,一位神經生物學家。他的主要研究成果是發現了視覺系統信息處理機制,證明大腦的可視皮層是分級的。他認為人的視覺功能一個是抽象,一個是迭代。抽象就是把非常具體的形象的元素,即原始的光線像素等信息,抽象出來形成有意義的概念。這些有意義的概念又會往上迭代,變得更加抽象,是人可以感知到的抽象概念。
像素是沒有抽象意義的,但人腦可以把這些像素連接成邊緣,邊緣相對像素來說就變成了比較抽象的概念;邊緣進而形成球形,球形然后到氣球,又是一個抽象的過程,大腦最終就知道看到的是一個氣球。
圖2-6所示為模擬人腦識別人臉的過程。從最開始的像素(pixels)到第二層的邊緣(edges),再到人臉的部分(object parts),最后到整張人臉(object models),是一個抽象迭代的過程。

圖2-6 模擬人腦識別人臉的過程
例如,看到圖2-4中的摩托車,我們可能在腦子里就幾微秒的時間,但是經過了大量的神經元抽象迭代。對計算機來說最開始看到的根本也不是摩托車,而是RGB圖像三個通道上不同的數字。
特征或者視覺特征,就是把這些數值綜合起來用統計或非統計的形式,把摩托車的部件或者整輛摩托車表現出來。深度學習在流行之前,大部分的設計圖像特征就是基于此,即把一個區域內的像素級別的信息綜合表現出來,利于后面的分類進行學習。
如果要完全模擬人腦,那么我們也要模擬抽象和遞歸迭代的過程,把信息從最細瑣的像素級別,抽象到“種類”的概念,讓人能夠接受。
2.1.6 應用深度學習解決計算機視覺問題
受從前研究的啟發,“帶有卷積結構的深度神經網絡(CNN)”被大量應用于計算機視覺之中。這是一種依照生物視覺的逐層分解算法,分配不同的層級對圖像進行處理。例如,第一層檢測物體的邊緣、角點、尖銳或不平滑的區域,這一層幾乎不包含語義信息;第二層基于第一層檢測的結果進行組合,檢測不同物體的位置、紋路、形狀等,并將這些組合傳遞給下一層。以此類推,使得計算機和生物一樣擁有視覺能力、辨識能力和精度。
因此,CNN的基本原理和基礎被視為計算機視覺的首先解決方案,這就是深度學習的一個應用。除此之外,深度學習應用于解決計算機視覺的還有其他優點,主要表現如下:
·深度學習算法的通用性很強,在傳統算法里面,需要針對不同的物體定制不同的算法。相比來看,基于深度學習的算法更加通用,如在傳統CNN基礎上發展起來的faster RCNN,在人臉、行人、一般物體檢測任務上都可以取得非常好的效果。計算機視覺辨識圖片如圖2-7所示。

圖2-7 計算機視覺辨識圖片
·深度學習獲得的特征(feature)有很強的遷移能力。特征遷移能力指的是在A任務上學習一些特征,在B任務上使用也可以獲得非常好的效果。例如,在ImageNet(物體為主)上學習到的特征,在場景分類任務上也能取得非常好的效果。
·工程開發、優化、維護成本低。深度學習計算主要是卷積與矩陣相乘,針對這種計算優化,所有深度學習算法都可以提升性能。