本系列文章希望通過Image Caption Generation,一個有意思的具體任務(wù),來介紹深度學(xué)習(xí)的知識,涉及到很多深度學(xué)習(xí)流行的模型,如CNN,RNN/LSTM,Attention等。本文為第一篇。
作者李理,目前就職于環(huán)信——全球最大的即時通訊云PaaS平臺和移動端最佳實踐的全媒體智能客服平臺。李理童鞋在環(huán)信從事智能客服和智能機(jī)器人相關(guān)工作,致力于用深度學(xué)習(xí)來提高智能機(jī)器人的性能。李理也是MDCC 2016移動開發(fā)者大會人工智能與機(jī)器人專場的出品人,邀請人工智能一線專家擔(dān)任演講嘉賓,從無人駕駛、智能機(jī)器人、智能應(yīng)用開發(fā)實戰(zhàn)等方面解讀人工智能技術(shù)的內(nèi)涵及其對移動開發(fā)工作的影響。敬請關(guān)注。
0.前面的話
建丁讓我寫一篇深度學(xué)習(xí)相關(guān)小文章,目標(biāo)讀者是國內(nèi)的開發(fā)者。剛接到這個任務(wù)時我是頗為忐忑的,寫文章要講究厚積薄發(fā),如果“水之積也不厚”,“則其負(fù)大舟也無力”。因為我自知水平很有限,又不是在學(xué)校和科研機(jī)構(gòu)做研究,只不過因為工作和個人的興趣,對深度學(xué)習(xí)有一點點粗淺的了解,所以擔(dān)心寫出來的東西不但于人無益,甚至還讓人誤入歧途。但后來又一想,如果把自己作為一個深度學(xué)習(xí)的學(xué)習(xí)者,和對它感興趣的普通開發(fā)者分享一些學(xué)習(xí)的經(jīng)歷,包括學(xué)習(xí)過程中遇到的問題,可能也是有一些意義的。畢竟讀論文或者聽學(xué)術(shù)大牛的講座只能看到“成功”的經(jīng)驗,而且大部分開發(fā)者相對來說沒有太多的背景知識,而很多圈內(nèi)的人都是假設(shè)讀者擁有這些知識的。但是對于普通的開發(fā)者來說,很多基礎(chǔ)知識比如線性代數(shù)和微積分在上完大學(xué)后估計就還給老師了,因此可能理解起來難度更大。而從另外一個角度來說,工程師(開發(fā)者)和科學(xué)家(科研工作者)關(guān)注的點也是不一樣的?茖W(xué)家更關(guān)注理論的東西,比如一個模型是怎么提出來的,為什么要這么設(shè)計模型,這樣的模型怎么轉(zhuǎn)化成一個優(yōu)化問題。而工程師則更關(guān)注這個東西能夠做什么,具體這個優(yōu)化問題怎么求解更高效。學(xué)術(shù)界每年有大量的論文發(fā)表,大量的idea被提出,其中有好有壞,有的工作可能看起來理論很漂亮,但實際應(yīng)用起來很難;有些工作可能不被太多人關(guān)注,但卻是某些工業(yè)界非常需要的。
另外從人工智能的發(fā)展來說,我個人覺得在傳統(tǒng)行業(yè)的普及也是非常重要的,F(xiàn)在很多人工智能創(chuàng)業(yè)公司,很多想用人工智能創(chuàng)造一個全新的產(chǎn)品,比如早期類似Siri的語音助手到現(xiàn)在火熱的機(jī)器人。但我個人覺得目前的人工智能的水平還很難做出達(dá)到用戶預(yù)期的產(chǎn)品,尤其是很多初創(chuàng)公司吹牛吹得有些過分,導(dǎo)致用戶期望過高,而真正使用產(chǎn)品后則形成巨大的反差。我覺得目前階段人工智能更大的用處是提升現(xiàn)有系統(tǒng),用我自己的話來說就是目前的人工智能只是錦上添花而不是雪中送碳。也就是說光靠人工智能是不能吸引用戶來購買你的產(chǎn)品的。
比如現(xiàn)在國外很火的Amazon的智能音箱產(chǎn)品Echo,如果我不想買一個音箱,估計你很難這樣說服我購買Echo——我們的Echo有非常智能的語音交互功能,可以問天氣,可以設(shè)置鬧鐘,可以Uber打車,可以控制家里的智能冰箱。但是如果我想購買一個音箱,現(xiàn)在面臨兩個選擇:一個是傳統(tǒng)的音箱,另一個是Echo。那么你對我說Echo有多么牛逼的智能可能會打動我,反正也差不了多少錢,能有這么多聽起來很酷炫的功能也挺不錯的。
由于Echo的成功,國內(nèi)很多人也想“山寨”一個類似的產(chǎn)品,不過可能很多人忽略了美國和中國的一些細(xì)小差異,那就是音箱似乎不是大城市居民的必備品。就我個人的朋友圈來說,每個家庭肯定都有個電視,但是有音箱寥寥無幾。為什么會這樣呢,因為中國的大城市居民大都是住樓房,很多老破小隔音效果都很差,你整個音箱弄家里還沒high兩分鐘,估計鄰居就該敲門了。倒是耳機(jī),屌絲們擠公交地鐵時的必備利器,也許會更好賣。
說了這么多,想表達(dá)的就是目前人工智能應(yīng)該更多的提高現(xiàn)有產(chǎn)品。比如提到Google,大家可能會想到它收購的Deepmind的AlphaGo,但是我們可能沒有意識到日常使用的很多產(chǎn)品中都使用了深度學(xué)習(xí)。比如搜索引擎的排序,郵件的智能回復(fù)生成,都大量使用了深度學(xué)習(xí)。而AlphaGo的作用則更多的是一種市場PR,一種宣傳作用,讓大家知道人工智能目前的一些進(jìn)展,而現(xiàn)在AlphaGo團(tuán)隊則是想將其技術(shù)用到醫(yī)療行業(yè)幫助醫(yī)生診斷疾病。
也就是說人工智能在未來也許就像計算機(jī),互聯(lián)網(wǎng),云計算一樣是一個非;A(chǔ)的設(shè)施,在任何需要用機(jī)器來替代或者減少人力的場景都是有用武之地的。目前不論是國內(nèi)還是國外,人工智能的人才都是非常稀缺的,而且都是集中在少數(shù)學(xué)校的實驗室和大公司的研究院里。因此向普通開發(fā)者傳播相關(guān)的知識就顯得尤為重要;谶@樣的考慮,雖然自己的能力不夠,但還是愿意把自己學(xué)習(xí)的一些經(jīng)驗和問題向大家分享。
1.為什么分享Image Caption Generation這個話題?
這篇小文章并沒有限定什么范圍,只要是深度學(xué)習(xí)相關(guān)的就行。這反倒讓人煩惱,就和人生一樣,選擇太多了也是一種煩惱。因為最近工作有空之余正在學(xué)習(xí)斯坦福的課程CS231N,Convolutional Neural Networks for Visual Recognition。這個課程非常好,除了詳盡的slides和notes,最值得一提的就是它的作業(yè)。每個作業(yè)包含完整的模型,比如CNN、LSTM,所有的模型的代碼都只是用最簡單的python代碼實現(xiàn),而不是用現(xiàn)成的庫比如TensorFlow/Theano/Caffe。紙上得來終覺淺,絕知此事要躬行。很多理論,光聽課看slides,似乎覺得自己懂了,其實還是一知半解,真正要掌握,就得自己動手,最好是全部自己實現(xiàn)。但是全部自己實現(xiàn)需要花的時間太多,而且從實際工作的角度來說,大部分開發(fā)者肯定都是用TensorFlow這樣的工具。而這個課程的好處就是:把一些瑣碎的與核心代碼不相關(guān)的部分包括學(xué)習(xí)的框架都已經(jīng)實現(xiàn)了,然后用IPythonnotebook把關(guān)鍵的代碼的函數(shù)的輸入和輸出都描述的非常清楚,學(xué)習(xí)者只需要實現(xiàn)一個一個這樣的函數(shù)就行了,而且每個函數(shù)都會有類似單元測試的檢測代碼正確性的數(shù)據(jù),從而保證我們的每一步都是在朝著正確的方向前進(jìn)。
因此這篇小文章打算講一講其中的Assignment3的ImageCaptionGeneration部分。目的是想通過一個具體的任務(wù)來給大家介紹深度學(xué)習(xí)的一些知識,讓大家對深度學(xué)習(xí)有一些概念和興趣。選擇ImageCaptionGeneration的原因,一來這個任務(wù)挺有意思的;第二就是它涉及到很多深度學(xué)習(xí)流行的模型如CNN,RNN/LSTM,Attention。
首先來介紹一下什么叫做Image Caption Generation。
對于計算機(jī)視覺相關(guān)的任務(wù),圖片分類和定位大家可能比較熟悉。圖片分類就是給定一張圖片,讓計算機(jī)告訴我們它是一只貓還是一只狗;而圖片定位除了告訴我們這是一張狗的圖片,還需要用用一個矩形框把狗的位置標(biāo)識出來。當(dāng)然還有要求更高的Image Segmentation,需要告訴我們哪一些像素屬于狗,而另外一些屬于背景。
圖1就是這些任務(wù)的例子:
圖1:常見機(jī)器視覺任務(wù)
而Image Caption Generation任務(wù)是給定一張圖片,需要讓計算機(jī)用一句話來描述這張圖片。
如圖2所示:
圖2:Caption Generation任務(wù)示例
從實際的應(yīng)用來說,這個任務(wù)也是很有用處的。比如一個手機(jī)拍完照片之后,我們可以用這個方法生成一句話來描述這個圖片,方便分享和以后查找。
而從理論研究的角度來說,Caption Generation相對于之前的task來說需要更加深入“理解”圖片中物體之間的關(guān)系,甚至包括一些抽象的概念。它把一幅信息量極大的圖片壓縮成短短一句話。
我是做自然語言處理(NLP)相關(guān)工作的,之前對計算機(jī)視覺有一些錯誤的看法。認(rèn)為視覺信號是更底層和原始的信號,除了人類,動物也有很強(qiáng)的視覺能力,也能分辨不同物體。而語言是人類創(chuàng)造的符號系統(tǒng),屬于更高層的抽象,因而屬于更高級的人工智能問題,似乎不少人會有類似的觀點。
但是現(xiàn)在我有了一些不同的看法,人類的大腦并沒有什么特殊之處。一個小孩在一歲之前一般不會說話,他認(rèn)識世界的主要方式就是主要通過視覺系統(tǒng)來區(qū)分物體,也許和神經(jīng)網(wǎng)絡(luò)類似,通過復(fù)雜的神經(jīng)元的連接來“理解”世界。這些不同層次的網(wǎng)絡(luò)就是不同層次的特征,就像神經(jīng)網(wǎng)絡(luò)的“黑盒”,我們自己也很難用精確的語言描述我們大腦到底學(xué)習(xí)到了什么樣的特征。而且很可能每個人學(xué)到的特征,尤其是底層的特征都是不相同的。
比如下圖的一個汽車,最底層的特征可能是不同方向的線條,而中間層的特征可能是各種基本的形狀,而更上層的特征就是車輪這樣的更上層概念。
一個復(fù)雜的概念由一些簡單的概念組合而成,而簡單的概念可能由最基本的原子概念組合而成。語言就是對這些概念的描述,或者說就是一個標(biāo)簽,一種命名。但是語言有一個特點就是它是用來溝通和交流的,所以語言的使用者需要達(dá)成一定程度的共識。那怎么達(dá)成共識呢,比如我們在教小孩語言時是怎么與他達(dá)成共識的呢?比如一個桌子,我們通過手指這一個條狗狗,反復(fù)對小孩說“狗狗”這個詞(其實是聲音,為了簡化,我們暫且當(dāng)成文字),這樣我們就和小孩達(dá)成了共識,“狗狗”就是指這樣一個動物,然后又指著另外一條狗狗,也說“狗狗”,小孩就學(xué)到這一“類”物體都是狗狗。所以他需要調(diào)整他的神經(jīng)元連接,使得那些符合某種特征的物體都被識別成狗狗。至于具體這個識別狗狗的神經(jīng)網(wǎng)絡(luò)的參數(shù)是什么樣的,我們很難知道,也許剛開始他需要分類的物體很少,比如只有“爸爸”,“媽媽”和“狗狗”,那么它可能需要不是那么“本質(zhì)”的特征來區(qū)分,比如他可能認(rèn)為四條腿走的是“狗狗”,兩條腿直立行走的就是“爸爸”和“媽媽”。當(dāng)隨著需要識別的類別的增多,比如有了“貓貓”,那他一上來可能認(rèn)為也是“狗狗”,但父母告訴他分類錯誤,這不是“狗狗”而是“貓貓”。那么他可能需要別的特征來區(qū)分貓貓和狗狗,也許他學(xué)到的是:四條腿走并且嘴很長的是狗狗,而四條腿圓臉的是貓貓。
那為了能夠區(qū)分貓貓和狗狗,小孩的中層的特征可能需要抽取類似“臉”的特征,或者說概念。我們也會告訴他這是狗狗的臉,這是貓貓的臉,這是爸爸的臉。這樣他需要學(xué)習(xí)出臉的共性的特征。
從上面的過程我們可以發(fā)現(xiàn),概念本身只是一種“特征”的指代,是我們的感覺系統(tǒng)(視覺)對一個物體的反應(yīng)。而語言是一部分相似的生物對同一個/類物體達(dá)成共識的一種指代。但每個人的感覺系統(tǒng)和神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)都是不一樣的,所以也只能在非常粗糙的程度達(dá)成比較一致的共識,而在非常精細(xì)的概念層次是很難達(dá)成廣泛共識的。因此我們會把周圍的人打上各種標(biāo)簽,分成各種類別,由此各種概念也就產(chǎn)生——膚色,語言,宗教,性別,階級。每個人也只能和同一個標(biāo)簽的人在某個方面達(dá)成共識,所以要找到一個完全“了解”自己的人是如此之難,而不同的物種的共識可能就更難了。所以就像《莊子·齊物論》里說的“毛嬙、麗姬,人之所美也;魚見之深入,鳥見之高飛,麋鹿見之決驟。四者孰知天下之正色哉?自我觀之,仁義之端,是非之涂,樊然殽亂,吾惡能知其辯!”毛嬙、麗姬是我們?nèi)祟愌壑械拿,但是在魚和雁看來只是可怕的敵人?尚Φ氖亲詰俚娜祟悈s還要曲解莊子的愿意,認(rèn)為它們是因為驚異于她們的美麗才沉魚落雁閉月羞花的。不說動物,即使是人類而言,美也是很難達(dá)成共識的,那些黑人國家的美女,我們中國人是很少會認(rèn)為她們是美女的。
因此從這個意義上來說,語言也許并沒有我們想像中的那么高大上。就目前人工智能或者深度學(xué)習(xí)的水平來說,也許研究小孩在建立復(fù)雜概念之前的行為更有用處。