轉(zhuǎn)載自:CSDN極客頭條
作者:李理目前就職于環(huán)信旧蛾,即時通訊云平臺和全媒體智能客服平臺莽龟,在環(huán)信從事智能客服和智能機器人相關(guān)工作,致力于用深度學習來提高智能機器人的性能锨天。
相關(guān)文章:
李理:從Image Caption Generation理解深度學習(part I)
李理:從Image Caption Generation理解深度學習(part II)
李理:從Image Caption Generation理解深度學習(part III)
李理:從Image Caption Generation理解深度學習 (part IV)
建丁讓我寫一篇深度學習相關(guān)小文章毯盈,目標讀者是國內(nèi)的開發(fā)者。剛接到這個任務(wù)時我是頗為忐忑的病袄,寫文章要講究厚積薄發(fā)奶镶,如果“水之積也不厚”迟赃,“則其負大舟也無力”。因為我自知水平很有限厂镇,又不是在學校和科研機構(gòu)做研究纤壁,只不過因為工作和個人的興趣,對深度學習有一點點粗淺的了解捺信,所以擔心寫出來的東西不但于人無益酌媒,甚至還讓人誤入歧途。但后來又一想迄靠,如果把自己作為一個深度學習的學習者秒咨,和對它感興趣的普通開發(fā)者分享一些學習的經(jīng)歷,包括學習過程中遇到的問題掌挚,可能也是有一些意義的雨席。畢竟讀論文或者聽學術(shù)大牛的講座只能看到“成功”的經(jīng)驗,而且大部分開發(fā)者相對來說沒有太多的背景知識吠式,而很多圈內(nèi)的人都是假設(shè)讀者擁有這些知識的陡厘。但是對于普通的開發(fā)者來說,很多基礎(chǔ)知識比如線性代數(shù)和微積分在上完大學后估計就還給老師了特占,因此可能理解起來難度更大糙置。而從另外一個角度來說,工程師(開發(fā)者)和科學家(科研工作者)關(guān)注的點也是不一樣的是目“梗科學家更關(guān)注理論的東西,比如一個模型是怎么提出來的懊纳,為什么要這么設(shè)計模型揉抵,這樣的模型怎么轉(zhuǎn)化成一個優(yōu)化問題。而工程師則更關(guān)注這個東西能夠做什么嗤疯,具體這個優(yōu)化問題怎么求解更高效冤今。學術(shù)界每年有大量的論文發(fā)表,大量的idea被提出身弊,其中有好有壞,有的工作可能看起來理論很漂亮列敲,但實際應(yīng)用起來很難阱佛;有些工作可能不被太多人關(guān)注,但卻是某些工業(yè)界非常需要的戴而。
另外從人工智能的發(fā)展來說凑术,我個人覺得在傳統(tǒng)行業(yè)的普及也是非常重要的。現(xiàn)在很多人工智能創(chuàng)業(yè)公司所意,很多想用人工智能創(chuàng)造一個全新的產(chǎn)品淮逊,比如早期類似Siri的語音助手到現(xiàn)在火熱的機器人催首。但我個人覺得目前的人工智能的水平還很難做出達到用戶預期的產(chǎn)品,尤其是很多初創(chuàng)公司吹牛吹得有些過分泄鹏,導致用戶期望過高郎任,而真正使用產(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)品,不過可能很多人忽略了美國和中國的一些細小差異层玲,那就是音箱似乎不是大城市居民的必備品盐须。就我個人的朋友圈來說,每個家庭肯定都有個電視衔瓮,但是有音箱寥寥無幾浊猾。為什么會這樣呢,因為中國的大城市居民大都是住樓房热鞍,很多老破小隔音效果都很差葫慎,你整個音箱弄家里還沒high兩分鐘,估計鄰居就該敲門了薇宠。倒是耳機偷办,屌絲們擠公交地鐵時的必備利器,也許會更好賣澄港。
說了這么多椒涯,想表達的就是目前人工智能應(yīng)該更多的提高現(xiàn)有產(chǎn)品。比如提到Google回梧,大家可能會想到它收購的Deepmind的AlphaGo废岂,但是我們可能沒有意識到日常使用的很多產(chǎn)品中都使用了深度學習祖搓。比如搜索引擎的排序,郵件的智能回復生成湖苞,都大量使用了深度學習拯欧。而AlphaGo的作用則更多的是一種市場PR,一種宣傳作用袒啼,讓大家知道人工智能目前的一些進展哈扮,而現(xiàn)在AlphaGo團隊則是想將其技術(shù)用到醫(yī)療行業(yè)幫助醫(yī)生診斷疾病。
也就是說人工智能在未來也許就像計算機蚓再,互聯(lián)網(wǎng)滑肉,云計算一樣是一個非常基礎(chǔ)的設(shè)施摘仅,在任何需要用機器來替代或者減少人力的場景都是有用武之地的靶庙。目前不論是國內(nèi)還是國外,人工智能的人才都是非常稀缺的娃属,而且都是集中在少數(shù)學校的實驗室和大公司的研究院里六荒。因此向普通開發(fā)者傳播相關(guān)的知識就顯得尤為重要》耍基于這樣的考慮掏击,雖然自己的能力不夠,但還是愿意把自己學習的一些經(jīng)驗和問題向大家分享秩铆。
1. 為什么分享Image Caption Generation這個話題砚亭?
這篇小文章并沒有限定什么范圍,只要是深度學習相關(guān)的就行殴玛。這反倒讓人煩惱捅膘,就和人生一樣,選擇太多了也是一種煩惱滚粟。因為最近工作有空之余正在學習斯坦福的課程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)的部分包括學習的框架都已經(jīng)實現(xiàn)了,然后用IPython notebook把關(guān)鍵的代碼的函數(shù)的輸入和輸出都描述的非常清楚滓走,學習者只需要實現(xiàn)一個一個這樣的函數(shù)就行了垦江,而且每個函數(shù)都會有類似單元測試的檢測代碼正確性的數(shù)據(jù),從而保證我們的每一步都是在朝著正確的方向前進搅方。
因此這篇小文章打算講一講其中的Assignment3的Image Caption Generation部分比吭。目的是想通過一個具體的任務(wù)來給大家介紹深度學習的一些知識,讓大家對深度學習有一些概念和興趣姨涡。選擇Image Caption Generation的原因衩藤,一來這個任務(wù)挺有意思的;第二就是它涉及到很多深度學習流行的模型如CNN涛漂,RNN/LSTM赏表,Attention。
首先來介紹一下什么叫做Image Caption Generation怖喻。
對于計算機視覺相關(guān)的任務(wù)底哗,圖片分類和定位大家可能比較熟悉。圖片分類就是給定一張圖片锚沸,讓計算機告訴我們它是一只貓還是一只狗跋选;而圖片定位除了告訴我們這是一張狗的圖片,還需要用用一個矩形框把狗的位置標識出來哗蜈。當然還有要求更高的Image Segmentation前标,需要告訴我們哪一些像素屬于狗,而另外一些屬于背景距潘。
圖1就是這些任務(wù)的例子:
圖1:常見機器視覺任務(wù) 圖片來自http://cs231n.stanford.edu/slides/winter1516_lecture8.pdf
而Image Caption Generation任務(wù)是給定一張圖片炼列,需要讓計算機用一句話來描述這張圖片。
如圖2所示:
圖2:Caption Generation任務(wù)示例 圖片來自http://mscoco.org/dataset/#captions-challenge2015
從實際的應(yīng)用來說音比,這個任務(wù)也是很有用處的俭尖。比如一個手機拍完照片之后,我們可以用這個方法生成一句話來描述這個圖片,方便分享和以后查找稽犁。
而從理論研究的角度來說焰望,Caption Generation相對于之前的task來說需要更加深入“理解”圖片中物體之間的關(guān)系,甚至包括一些抽象的概念已亥。它把一幅信息量極大的圖片壓縮成短短一句話熊赖。
我是做自然語言處理(NLP)相關(guān)工作的,之前對計算機視覺有一些錯誤的看法虑椎。認為視覺信號是更底層和原始的信號震鹉,除了人類,動物也有很強的視覺能力捆姜,也能分辨不同物體传趾。而語言是人類創(chuàng)造的符號系統(tǒng),屬于更高層的抽象泥技,因而屬于更高級的人工智能問題墨缘,似乎不少人會有類似的觀點。
但是現(xiàn)在我有了一些不同的看法零抬,人類的大腦并沒有什么特殊之處镊讼。一個小孩在一歲之前一般不會說話,他認識世界的主要方式就是主要通過視覺系統(tǒng)來區(qū)分物體平夜,也許和神經(jīng)網(wǎng)絡(luò)類似蝶棋,通過復雜的神經(jīng)元的連接來“理解”世界。這些不同層次的網(wǎng)絡(luò)就是不同層次的特征忽妒,就像神經(jīng)網(wǎng)絡(luò)的“黑盒”玩裙,我們自己也很難用精確的語言描述我們大腦到底學習到了什么樣的特征。而且很可能每個人學到的特征段直,尤其是底層的特征都是不相同的吃溅。
比如下圖的一個汽車,最底層的特征可能是不同方向的線條鸯檬,而中間層的特征可能是各種基本的形狀决侈,而更上層的特征就是車輪這樣的更上層概念。
圖片來自http://cs231n.stanford.edu/slides/winter1516_lecture7.pdf
一個復雜的概念由一些簡單的概念組合而成喧务,而簡單的概念可能由最基本的原子概念組合而成赖歌。語言就是對這些概念的描述,或者說就是一個標簽功茴,一種命名庐冯。但是語言有一個特點就是它是用來溝通和交流的,所以語言的使用者需要達成一定程度的共識坎穿。那怎么達成共識呢展父,比如我們在教小孩語言時是怎么與他達成共識的呢返劲?比如一個桌子,我們通過手指這一個條狗狗栖茉,反復對小孩說“狗狗”這個詞(其實是聲音旭等,為了簡化,我們暫且當成文字)衡载,這樣我們就和小孩達成了共識,“狗狗”就是指這樣一個動物隙袁,然后又指著另外一條狗狗痰娱,也說“狗狗”,小孩就學到這一“類”物體都是狗狗菩收。所以他需要調(diào)整他的神經(jīng)元連接梨睁,使得那些符合某種特征的物體都被識別成狗狗。至于具體這個識別狗狗的神經(jīng)網(wǎng)絡(luò)的參數(shù)是什么樣的娜饵,我們很難知道坡贺,也許剛開始他需要分類的物體很少,比如只有“爸爸”箱舞,“媽媽”和“狗狗”遍坟,那么它可能需要不是那么“本質(zhì)”的特征來區(qū)分,比如他可能認為四條腿走的是“狗狗”晴股,兩條腿直立行走的就是“爸爸”和“媽媽”愿伴。當隨著需要識別的類別的增多,比如有了“貓貓”电湘,那他一上來可能認為也是“狗狗”隔节,但父母告訴他分類錯誤,這不是“狗狗”而是“貓貓”寂呛。那么他可能需要別的特征來區(qū)分貓貓和狗狗怎诫,也許他學到的是:四條腿走并且嘴很長的是狗狗,而四條腿圓臉的是貓貓贷痪。
那為了能夠區(qū)分貓貓和狗狗幻妓,小孩的中層的特征可能需要抽取類似“臉”的特征,或者說概念劫拢。我們也會告訴他這是狗狗的臉涌哲,這是貓貓的臉,這是爸爸的臉尚镰。這樣他需要學習出臉的共性的特征阀圾。
從上面的過程我們可以發(fā)現(xiàn),概念本身只是一種“特征”的指代狗唉,是我們的感覺系統(tǒng)(視覺)對一個物體的反應(yīng)初烘。而語言是一部分相似的生物對同一個/類物體達成共識的一種指代。但每個人的感覺系統(tǒng)和神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)都是不一樣的,所以也只能在非常粗糙的程度達成比較一致的共識肾筐,而在非常精細的概念層次是很難達成廣泛共識的哆料。因此我們會把周圍的人打上各種標簽,分成各種類別吗铐,由此各種概念也就產(chǎn)生——膚色东亦,語言,宗教唬渗,性別典阵,階級。每個人也只能和同一個標簽的人在某個方面達成共識镊逝,所以要找到一個完全“了解”自己的人是如此之難壮啊,而不同的物種的共識可能就更難了。所以就像《莊子·齊物論》里說的“毛嬙撑蒜、麗姬歹啼,人之所美也;魚見之深入座菠,鳥見之高飛狸眼,麋鹿見之決驟。四者孰知天下之正色哉浴滴?自我觀之份企,仁義之端,是非之涂巡莹,樊然殽亂司志,吾惡能知其辯!”毛嬙降宅、麗姬是我們?nèi)祟愌壑械拿缆钤叮窃隰~和雁看來只是可怕的敵人⊙可笑的是自戀的人類卻還要曲解莊子的愿意激才,認為它們是因為驚異于她們的美麗才沉魚落雁閉月羞花的。不說動物额嘿,即使是人類而言瘸恼,美也是很難達成共識的,那些黑人國家的美女册养,我們中國人是很少會認為她們是美女的东帅。
因此從這個意義上來說,語言也許并沒有我們想像中的那么高大上球拦。 就目前人工智能或者深度學習的水平來說靠闭,也許研究小孩在建立復雜概念之前的行為更有用處帐我。