60年技術(shù)簡史,帶你讀懂AI的前世今生
人類的進化發(fā)展史就是一部人類制造和使用工具的歷史,不同的工具代表了人類的進化水平。從石器時代、鐵器時代、蒸汽時代、電氣時代再到現(xiàn)在的信息時代,我們使用更加先進便捷的工具來改變生產(chǎn)和生活。
工具的目的是延伸和拓展人類的能力,我們跑得不快,但可以借助騎馬和開車日行千里,跳得不高,更不會飛,但是借助飛機火箭上天入地。工具總體來看可以分為兩類:拓展人類體力的工具和拓展人類腦力的工具。
在計算機發(fā)明之前,人類制造的大多數(shù)工具都是前者,它可以幫助我們減少體力勞動。比如使用?;蛘咄侠瓩C來耕地的效率更高。當然也有少量的減少腦力勞動的工具,比如算盤,也包括文字——它可以極大的擴充人類的記憶容量,現(xiàn)在很多機械的腦力勞動都可以由計算機完成。但傳統(tǒng)的計算機程序只能幫我們擴充記憶和完成簡單機械的計算,我們有容量更大速度更快的存儲器,可以編制財務(wù)軟件來幫助進行財務(wù)核算。
我們無法實現(xiàn)需要“智能”才能來完成的事情,比如無法讓計算機進行汽車駕駛,計算機目前也無法像人類一樣用自然語言和人類進行日常溝通,而人工智能的目標就是讓計算機能夠像人類一樣“智能”的解決這些復雜問題?,F(xiàn)在的人工智能系統(tǒng)已經(jīng)能夠在圍棋上戰(zhàn)勝人類世界冠軍,現(xiàn)在的語音識別系統(tǒng)已經(jīng)能在某些特定場景下達到人類的識別準確率,無人駕駛的汽車也已經(jīng)在某些地方實驗性的上路了。未來,人工智能會有更多的應用場景,我們的終極目標是制造和人類一樣甚至超越人類智能的機器。
人工智能發(fā)展簡史
人工智能最早的探索也許可以追溯到萊布尼茨,他試圖制造能夠進行自動符號計算的機器,但現(xiàn)代意義上人工智能這個術(shù)語誕生于1956年的達特茅斯會議。
關(guān)于人工智能有很多的定義,它本身就是很多學科的交叉融合,不同的人關(guān)注它的不同方面,因此很難給出一個大家都認可的一個定義。我們下面通過時間的脈絡(luò)來了解AI的反正過程。
黃金時期(1956-1974)
這是人工智能的一個黃金時期,大量的資金用于支持這個學科的研究和發(fā)展。這一時期有影響力的研究包括通用問題求解器(General Problem Solver),以及最早的聊天機器人ELIZA。很多人都以為與其聊天的ELIZA是一個真人,但它只是簡單的基于匹配模板的方式來生成回復(我們現(xiàn)在很多市面上的聊天機器人其實也使用了類似的技術(shù))。當時人們非常樂觀,比如H. A. Simon在1958年斷言不出10年計算機將在下(國際)象棋上擊敗人類。他在1965年甚至說“二十年后計算機將可以做所有人類能做的事情”。
第一次寒冬(1974-1980)
到了這一時期,之前的斷言并沒有兌現(xiàn),因此各種批評之聲涌現(xiàn)出來,國家(美國)也不再投入更多經(jīng)費,人工智能進入第一次寒冬。這個時期也是聯(lián)結(jié)主義(connectionism)的黑暗時期。1958年Frank Rosenblatt提出了感知機(Perception),這可以認為是最早的神經(jīng)網(wǎng)絡(luò)的研究。但是在之后的10年聯(lián)結(jié)主義沒有太多的研究和進展。
興盛期(1980-1989)
這一時期的興盛得益于專家系統(tǒng)的流行。聯(lián)結(jié)主義的神經(jīng)網(wǎng)絡(luò)也有所發(fā)展,包括1982年John Hopfield提出了Hopfield網(wǎng)絡(luò),以及同時期發(fā)現(xiàn)的反向傳播算法,但主流的方法還是基于符號主義的專家系統(tǒng)。
第二次寒冬(1989-1993)
之前成功的專家系統(tǒng)由于成本太高以及其它的原因,商業(yè)上很難獲得成功,人工智能再次進入寒冬期。
發(fā)展期(1993-2006)
這一期間人工智能的主流是機器學習。統(tǒng)計學習理論的發(fā)展和SVM這些工具的流行,使得機器學習進入穩(wěn)步發(fā)展的時期。
爆發(fā)期(2006-現(xiàn)在)
這一次人工智能的發(fā)展主要是由深度學習,也就是深度神經(jīng)網(wǎng)絡(luò)帶動的。上世紀八九十年度神經(jīng)網(wǎng)絡(luò)雖然通過非線性激活函數(shù)解決了理論上的異或問題,而反向傳播算法也使得訓練淺層的神經(jīng)網(wǎng)絡(luò)變得可能。不過,由于計算資源和技巧的限制,當時無法訓練更深層的網(wǎng)絡(luò),實際的效果并不比傳統(tǒng)的“淺度”的機器學習方法好,因此并沒有太多人關(guān)注這個方向。
直到2006年,Hinton提出了Deep Belief Nets (DBN),通過pretraining的方法使得訓練更深的神經(jīng)網(wǎng)絡(luò)變得可能。2009年Hinton和DengLi在語音識別系統(tǒng)中首次使用了深度神經(jīng)網(wǎng)絡(luò)(DNN)來訓練聲學模型,最終系統(tǒng)的詞錯誤率(Word Error Rate/WER)有了極大的降低。
讓深度學習在學術(shù)界名聲大噪的是2012年的ILSVRC評測。在這之前,好的top5分類錯誤率在25%以上,而2012年AlexNet首次在比賽中使用了深層的卷積網(wǎng)絡(luò),取得了16%的錯誤率。之后每年都有新的好成績出現(xiàn),2014年是GoogLeNet和VGG,而2015年是ResNet殘差網(wǎng)絡(luò),目前好系統(tǒng)的top5分類錯誤率在5%以下了。真正讓更多人(尤其是中國人)了解深度學習進展的是2016年Google DeepMind開發(fā)的AlphaGo以4比1的成績戰(zhàn)勝了人類世界冠軍李世石。因此人工智能進入了又一次的興盛期,各路資本競相投入,甚至國家層面的人工智能發(fā)展計劃也相繼出臺。
2006年到現(xiàn)在分領(lǐng)域的主要進展
下面我們來回顧一下從2006年開始深度學習在計算機視覺、聽覺、自然語言處理和強化學習等領(lǐng)域的主要進展,根據(jù)它的發(fā)展過程來分析未來可能的發(fā)展方向。因為作者水平和興趣點的局限,這里只是列舉作者了解的一些文章,所以肯定會遺漏一些重要的工作。
計算機視覺
無監(jiān)督預訓練
雖然”現(xiàn)代”深度學習的很多模型,比如DNN、CNN和RNN(LSTM)很早就提出來了,但在2006年之前,大家沒有辦法訓練很多層的神經(jīng)網(wǎng)絡(luò),因此在效果上深度學習和傳統(tǒng)的機器學習并沒有顯著的差別。
2006年,Hinton等人在論文《A fast learning algorithm for deep belief nets》里提出了通過貪心的、無監(jiān)督的Deep Belief Nets(DBN)逐層Pretraining的方法和最終有監(jiān)督fine-tuning的方法首次實現(xiàn)了訓練多層(五層)的神經(jīng)網(wǎng)絡(luò)。此后的研究熱點就是怎么使用各種技術(shù)訓練深度的神經(jīng)網(wǎng)絡(luò),這個過程大致持續(xù)到2010年。主要的想法是使用各種無監(jiān)督的Pretraining的方法,除了DBN,Restricted Boltzmann Machines(RBM), Deep Boltzmann Machines(DBM)還有Denoising Autoencoders等模型也在這一期間提出。
代表文章包括Hinton等人的《Reducing the dimensionality of data with neural networks》發(fā)表在Nature上)、Bengio等人在NIPS 2007上發(fā)表的《Greedy layer-wise training of deep networks》,Lee等人發(fā)表在ICML 2009上的《Convolutional deep belief networks for scalable unsupervised learning of hierarchical representations》,Vincent等人2010年發(fā)表的《Stacked denoising autoencoders: Learning useful representations in a deep network with a local denoising criterion》。
那個時候要訓練較深的神經(jīng)網(wǎng)絡(luò)是非常tricky的事情,因此也有類似Glorot等人的《Understanding the difficulty of training deep feedforward neural networks》,大家在使用深度學習工具時可能會遇到Xavier初始化方法,這個方法的作者正是Xavier Glorot。那個時候能把超參數(shù)選好從而能夠訓練好的模型是一種”黑科技”,我記得還有一本厚厚的書《Neural Networks: Tricks of the Trade》,專門介紹各種tricks。
深度卷積神經(jīng)網(wǎng)絡(luò)
深度學習受到大家的關(guān)注很大一個原因就是Alex等人實現(xiàn)的AlexNet在LSVRC-2012 ImageNet這個比賽中取得了非常好的成績。此后,卷積神經(jīng)網(wǎng)絡(luò)及其變種被廣泛應用于各種圖像相關(guān)任務(wù)。從2012年開始一直到2016年,每年的LSVRC比賽都會產(chǎn)生更深的模型和更好的效果。
Alex Krizhevsky在2012年的論文《ImageNet classification with deep convolutional neural networks》開啟了這段”深度”競爭之旅。
2014年的冠軍是GoogleNet,來自論文《Going deeper with convolutions》,它提出了Inception的結(jié)構(gòu),通過這種結(jié)構(gòu)可以訓練22層的深度神經(jīng)網(wǎng)絡(luò)。它同年的亞軍是VGGNet,它在模型結(jié)構(gòu)上并沒有太多變換,只是通過一些技巧讓卷積網(wǎng)絡(luò)變得更深(18層)。
2015年的冠軍是ResNet,來自何愷明等人的論文《Deep residual learning for image recognition》,通過引入殘差結(jié)構(gòu),他們可以訓練152層的網(wǎng)絡(luò),2016年的文章《Identity Mappings in Deep Residual Networks》對殘差網(wǎng)絡(luò)做了一些理論分析和進一步的改進。
2016年Google的Szegedy等人在論文《Inception-v4, inception-resnet and the impact of residual connections on learning》里提出了融合殘差連接和Incpetion結(jié)構(gòu)的網(wǎng)絡(luò)結(jié)構(gòu),進一步提升了識別效果。
下圖是這些模型在LSVRC比賽上的效果,我們可以看到隨著網(wǎng)絡(luò)的加深,分類的top-5錯誤率在逐漸下降。
圖:LSVRC比賽
目標檢測和實例分割
前面的模型主要考慮的是圖片分類任務(wù),目標檢測和實例分割也是計算機視覺非常常見的任務(wù)。把深度卷積神經(jīng)網(wǎng)絡(luò)用到這兩個任務(wù)上是非常自然的事情,但是這個任務(wù)除了需要知道圖片里有什么物體,還需要準確的定位這些物體。為了把卷積神經(jīng)網(wǎng)絡(luò)用于這類任務(wù),需要做很多改進工作。
當然把CNN用于目標檢測非常自然,最簡單的就是先對目標使用傳統(tǒng)的方法進行定位,但是定位效果不好。Girshick等人在2014年在論文《Rich feature hierarchies for accurate object detection and semantic segmentation》提出了R-CNN模型,使用Region Proposal來產(chǎn)生大量的候選區(qū)域,最后用CNN來判斷是否是目標,但因為需要對所有的候選進行分類判斷,因此它的速度非常慢。
圖:R-CNN
2015年,Girshick等人提出了Fast R-CNN,它通過RoI Pooling層通過一次計算同時計算所有候選區(qū)域的特征,從而可以實現(xiàn)快速計算。但是Regional Proposal本身就很慢,Ren等人在同年的論文《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》提出了Faster R-CNN,通過使用Region Proposal Networks(RPN)這個網(wǎng)絡(luò)來替代原來的Region Proposal算法,從而實現(xiàn)實時目標檢測算法。為了解決目標物體在不同圖像中不同尺寸(scale)的問題,Lin等人在論文《Feature Pyramid Networks for Object Detection》里提出了Feature Pyramid Networks(FPN)。
圖:Fast R-CNN
圖:Faster R-CNN
因為R-CNN在目標檢測任務(wù)上很好的效果,把Faster R-CNN用于實例分割是很自然的想法。但是RoI Pooling在用于實例分割時會有比較大的偏差,原因在于Region Proposal和RoI Pooling都存在量化的舍入誤差。因此何愷明等人在2017年提出了Mask R-CNN模型。
圖:Mask R-CNN
從這一系列文章我們可以看到深度學習應用于一個更復雜場景的過程:首先是在一個復雜的過程中部分使用深度神經(jīng)網(wǎng)絡(luò),最后把所有的過程End-to-End的用神經(jīng)網(wǎng)絡(luò)來實現(xiàn)。
此外,Redmon等人《You only look once: Unified, real-time object detection》提出了YOLO模型(包括后續(xù)的YOLOv2和YOLOv3等),Liu等人也提出的SSD: Single Shot MultiBox Detector模型,這些模型的目的是為了保持準確率不下降的條件下怎么加快檢測速度。
生成模型
如果要說最近在計算機視覺哪個方向最火,生成模型絕對是其中之一。要識別一個物體不容易,但是要生成一個物體更難(三歲小孩就能識別貓,但是能畫好一只貓的三歲小孩并不多)。而讓生成模型火起來的就是Goodfellow在2014年提出的Generative Adversarial Nets(簡稱GAN)。
因為這個領(lǐng)域比較新,而且研究的”范圍”很廣,也沒有圖像分類這樣的標準任務(wù)和ImageNet這樣的標準數(shù)據(jù)集,很多時候評測的方法非常主觀。很多文章都是找到某一個應用點,然后生成(也可能是精心挑選)了一些很酷的圖片或者視頻,”有圖有真相”,大家一看圖片很酷,內(nèi)容又看不懂,因此不明覺厲。要說解決了什么實際問題,也很難說。但是不管怎么說,這個方向是很吸引眼球的,比如DeepFake這樣的應用一下就能引起大家的興趣和討論。我對這個方向了解不多,下面只列舉一些應用。
style-transfer
最早的《A Neural Algorithm of Artistic Style》發(fā)表于2015年,這還是在GAN提出之前,不過我還是把它放到生成模型這里了。它當年可是火過一陣,還因此產(chǎn)生了一個爆款的App叫Prisma。如下圖所示,給定一幅風景照片和一幅畫(比如c是梵高的畫),使用這項技術(shù)可以在風景照片里加入梵高的風格。
圖:Neural Style Transfer
朱俊彥等人在《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》提出的CycleGAN是一個比較有趣其的模型,它不需要Paired的數(shù)據(jù)。所謂Paired數(shù)據(jù),就是需要一張普通馬的照片,還需要一張斑馬的照片,而且要求它們內(nèi)容是完全匹配的。要獲得配對的數(shù)據(jù)是非常困難的,我們拍攝的時候不可能找到外形和姿勢完全相同的斑馬和普通馬,包括相同的背景。另外給定一張梵高的作品,我們怎么找到與之配對的照片?或者反過來,給定一張風景照片,去哪找和它內(nèi)容相同的藝術(shù)作品?
本文介紹的Cycle GAN不要求有配對的訓練數(shù)據(jù),而只需要兩個不同Domain的未標注數(shù)據(jù)集就行了。比如要把普通馬變成斑馬,我們只需要準備很多普通馬的照片和很多斑馬的照片,然后把所有斑馬的照片放在一起,把所有的普通馬照片放到一起就行了,這顯然很容易。風景畫變梵高風格也很容易——我們找到很多風景畫的照片,然后盡可能多的找到梵高的畫作就可以了。它的效果如下圖所示。
圖:CycleGAN
text-to-image
text-to-image是根據(jù)文字描述來生成相應的圖片,這和Image Captioning正好相反。Zhang等人2016年的《StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks》是這個方向較早的一篇文章,其效果如下圖最后一行所示。
圖:StackGAN和其它模型的對比
super-resolution
super-resolution是根據(jù)一幅低分辨率的圖片生成對應高分辨率的圖片,和傳統(tǒng)的插值方法相比,生成模型因為從大量的圖片里學習到了其分布,因此它”猜測”出來的內(nèi)容比插值效果要好很多?!禘nhanced Super-Resolution Generative Adversarial Networks》是2018年的一篇文章,它的效果如下圖中間所示。
圖:ESRGAN效果
image inpainting
image inpainting是遮擋掉圖片的一部分,比如打了馬賽克,然后用生成模型來”修補”這部分內(nèi)容。下圖是Generative Image Inpainting with Contextual Attention的效果。
圖:DeepFill系統(tǒng)的效果
《EdgeConnect: Generative Image Inpainting with Adversarial Edge Learning》這篇文章借鑒人類繪畫時先畫輪廓(線)后上色的過程,通過把inpainting分成edge generator和image completion network兩個步驟,如下面是它的效果。
圖:EdgeConnect的效果
熱點:自動優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu)和半監(jiān)督學習
最近有兩個方向我覺得值得關(guān)注:一個是自動優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu);另一個是半監(jiān)督的學習。
自動網(wǎng)絡(luò)優(yōu)化最新的文章是Google研究院的《EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks》,它希望找到一個神經(jīng)網(wǎng)絡(luò)擴展方法可以同時提高網(wǎng)絡(luò)的準確率和效率(減少參數(shù))。要實現(xiàn)這點,一個很關(guān)鍵的步驟便是如何平衡寬度、深度和分辨率這三個維度。
作者發(fā)現(xiàn),可以使用一種固定比例的縮放操作簡單地實現(xiàn)對三者的平衡。最終,作者提出了一種簡單卻有效的compound scaling method。如果想使用 2𝑁倍的計算資源,只需要對網(wǎng)絡(luò)寬度增加𝛼𝑁,深度增加𝛽𝑁和增加𝛾𝑁倍的圖像大小。其中𝛼,𝛽,𝛾是固定的系數(shù),最優(yōu)的值通常使用小范圍的grid search得到。通過這種方法他們實現(xiàn)了EfficientNet模型,這個模型使用非常少的參數(shù)就達到了很好的效果,如下圖所示。
圖:模型參數(shù)和準確率圖
我們可以看到,EfficientNet比之前好的模型GPipe要小8.4倍,但是效果比它還要好。
半監(jiān)督學習這里指的是通過未標注的圖片來預訓練學習特征,然后用少量監(jiān)督的數(shù)據(jù)進行學習。最新的文章是Google DeepMind的《Data-Efficient Image Recognition with Contrastive Predictive Coding》。這篇文章通過Contrastive Predictive Coding的方法來從大量未標注的數(shù)據(jù)量提取特征。在這些特征上簡單的加上一個線性的softmax層,在ImageNet上就可以超過使用AlexNet有監(jiān)督學習的模型。
如果每個類的訓練數(shù)據(jù)只有13個,則本文的方法比只用13個數(shù)據(jù)訓練的模型的Top-5準確率要高20%,比之前好的半監(jiān)督模型高10%。傳統(tǒng)的很多無監(jiān)督的特征在少量數(shù)據(jù)會比較好,但是當數(shù)據(jù)量足夠多的時候會比完全的監(jiān)督學習要差,但是本文的方法得到的特征使用全部的ImageNet數(shù)據(jù)訓練,也可以達到和完全監(jiān)督學習類似的效果,這說明它學到的特征足夠好。
語音識別
語音識別系統(tǒng)是一個非常復雜的系統(tǒng),在深度學習技術(shù)之前的主流系統(tǒng)都是基于HMM模型。它通常時候HMM-GMM來建模subword unit(比如triphone),通過發(fā)音詞典來把subword unit的HMM拼接成詞的HMM,最后解碼器還要加入語言模型最終來融合聲學模型和語言模型在巨大的搜索空間里尋找更優(yōu)的路徑。
Hinton一直在嘗試使用深度神經(jīng)網(wǎng)絡(luò)來改進語音識別系統(tǒng),最早(2006年后)的工作是2009年發(fā)表的《Deep belief networks for phone recognition》,這正是Pretraining流行的時期,把DBN從計算機視覺用到語音識別是非常自然的想法。類似的工作包括2010年的《Phone Recognition using Restricted Boltzmann Machines》。但是這些工作只是進行最簡單的phone分類,也就是判斷每一幀對應的phone,這距離連續(xù)語音識別還相差的非常遠。
真正把深度神經(jīng)網(wǎng)絡(luò)用于語音識別的重要文章是Hinton等人2012年《Deep Neural Networks for Acoustic Modeling in Speech Recognition》的文章,這篇文章使用DNN替代了傳統(tǒng)HMM-GMM聲學模型里的GMM模型,從此語音識別的主流框架變成了HMM-DNN的模型。接著在2013年Sainath等人在《Deep convolutional neural networks for LVCSR》用CNN替代普通的全連接網(wǎng)絡(luò)。從George等人的文章《Improving deep neural networks for LVCSR using rectified linear units and dropout》也可以發(fā)現(xiàn)在計算機視覺常用的一些技巧也用到了語音識別上。
前面的HMM-DNN雖然使用了深度神經(jīng)網(wǎng)絡(luò)來替代GMM,但是HMM和后面的N-gram語言模型仍然存在,而且DNN本身的訓練還需要使用HMM-GMM的強制對齊來提供幀級別的訓練數(shù)據(jù)。
怎么構(gòu)建一個End-to-end的語音識別系統(tǒng)一直是學術(shù)界關(guān)注的重點。RNN我們現(xiàn)在處理時序數(shù)據(jù)的有力武器,2013年的時候Graves等人在論文《Speech Recognition with Deep Recurrent Neural Networks》里把RNN用于了語音識別。這篇文章使用了RNN加上CTC損失函數(shù),CTC是后來的Deep Speech的核心。雖然”真正”把CTC用于語音識別是在2013年,但是Graves卻是早在2006年的時候就在論文《Connectionist temporal classification: labelling unsegmented sequence data with recurrent neural networks》提出了CTC。
Hannun等人在2014年提出的《Deep Speech: Scaling up end-to-end speech recognition》是首個效果能和HMM-DNN媲美的End-to-end系統(tǒng),包括后續(xù)的《Deep Speech 2: End-to-End Speech Recognition in English and Mandarin》。Deep Speech的系統(tǒng)非常簡單,輸入是特征序列,輸出就是字符序列,沒有HMM、GMM、發(fā)音詞典這些模塊,甚至沒有phone的概念。
除了基于CTC損失函數(shù)的End-to-end系統(tǒng),另外一類End-to-end系統(tǒng)借鑒了機器翻譯等系統(tǒng)常用的seq2seq模型。這包括最早的《Listen, attend and spell: A neural network for large vocabulary conversational speech recognition》,Google的《State-of-the-art Speech Recognition With Sequence-to-Sequence Models》總結(jié)了用于語音識別的SOTA的一些Seq2Seq模型,并且稱他們在實際的系統(tǒng)中使用了這個模型之后詞錯誤率從原來的6.7%下降到5.6%。這是首個在業(yè)界真正得到應用的End-to-end的語音識別系統(tǒng)(雖然Andrew Ng領(lǐng)導的百度IDL提出了Deep Speech和Deep Speech2,但是在百度的實際系統(tǒng)中并沒有使用它)。
下圖是常見數(shù)據(jù)集上的效果,拿SwitchBoard為例,在2006年之前的進展是比較緩慢的,但是在使用了深度學習之后,詞錯誤率持續(xù)下降,圖中是2017年的數(shù)據(jù),微軟的系統(tǒng)已經(jīng)降到了6.3%的詞錯誤率。
圖:詞錯誤率變化
自然語言處理
和語音識別不同,自然語言處理是一個很”龐雜”的領(lǐng)域,語音識別就一個任務(wù)——把聲音變成文字,即使加上相關(guān)的語音合成、說話人識別等任務(wù),也遠遠無法和自然語言處理任務(wù)數(shù)量相比。自然語言處理的終極目標是讓機器理解人類的語言,理解是一個很模糊的概念。相對論的每個詞的含義我都可能知道,但是并不代表我理解了相對論。
因為這個原因,在這里我關(guān)注的是比較普適性的方法,這些方法能用到很多的子領(lǐng)域而不是局限于某個具體的任務(wù)。
自然語言和連續(xù)的語音與圖像不同,它是人類創(chuàng)造的離散抽象的符號系統(tǒng)。傳統(tǒng)的特征表示都是離散的稀疏的表示方法,其泛化能力都很差。比如訓練數(shù)據(jù)中出現(xiàn)了很多”北京天氣”,但是沒有怎么出現(xiàn)”上海天氣”,那么它在分類的時候預測的分數(shù)會相差很大。但是”北京”和”上海”很可能經(jīng)常在相似的上下文出現(xiàn),這種表示方法無法利用這樣的信息。
在2003年到時候,Bengio在論文《A Neural Probabilistic Language Model》就提出了神經(jīng)網(wǎng)絡(luò)的語言模型,通過Embedding矩陣把一個詞編碼成一個低維稠密的向量,這樣實現(xiàn)相似上下文的共享——比如”北京”和”上海”經(jīng)常在相似的上下文出現(xiàn),則它們會被編碼成比較相似的向量,這樣即使”上海天氣”在訓練數(shù)據(jù)中不怎么出現(xiàn),也能通過”北京天氣”給予其較大的概率。
不過2003年的時候大家并不怎么關(guān)注神經(jīng)網(wǎng)絡(luò),因此這篇文章當時并沒有太多后續(xù)的工作。到了2012年之后,深度神經(jīng)網(wǎng)絡(luò)在計算機視覺和語音識別等領(lǐng)域取得了重大的進展,把它應用到自然語言處理領(lǐng)域也是非常自然的事情。但是這個時候面臨一個問題——沒有大量有監(jiān)督的標注數(shù)據(jù)。這其實也是前面提到的自然語言處理是很”龐雜”的有關(guān)。
自然語言處理的任務(wù)太多了,除了機器翻譯等少數(shù)直接面向應用并且有很強實際需求的任務(wù)有比較多的數(shù)據(jù)外,大部分任務(wù)的標注數(shù)據(jù)非常有限。和ImageNet這種上百萬的標注數(shù)據(jù)集或者語音識別幾千小時的標注數(shù)據(jù)集相比,很多自然語言處理的標注數(shù)據(jù)都是在幾萬最多在幾十萬這樣的數(shù)量級。這是由自然語言處理的特點決定的,因為它是跟具體業(yè)務(wù)相關(guān)的。因此自然語言處理領(lǐng)域一直急需解決的就是怎么從未標注的數(shù)據(jù)里學習出有用的知識,這些知識包括語法的、語義的和世界知識。
Mikolov等人2013年在《Efficient estimation of word representations in vector space》和《Distributed representations of words and phrases and their compositionality》開始了這段征程。他們提出的Word2Vec可以簡單高效的學習出很好的詞向量,如下圖所示。
圖:Word2Vec的詞向量
從上圖我們可以發(fā)現(xiàn)它確實學到了一些語義知識,通過向量計算可以得到類似”man-woman=king-queen”。
我們可以把這些詞向量作為其它任務(wù)的初始值。如果下游任務(wù)數(shù)據(jù)量很少,我們甚至可以固定住這些預訓練的詞向量,然后只調(diào)整更上層的參數(shù)。Pennington等人在2014年的論文《Glove: Global vectors for word representation》里提出了GloVe模型。
但是Word2Vec無法考慮上下文的信息,比如”bank”有銀行和水邊的意思。但是它無法判斷具體在某個句子里到底是哪個意思,因此它只能把這兩個語義同時編碼進這個向量里。但是在下游應用中的具體某個句子里,只有一個語義是需要的。當然也有嘗試解決多義詞的問題,比如Neelakantan等人在2014年的《Efficient Non-parametric Estimation of Multiple Embeddings per Word in Vector Space》,但都不是很成功。
另外一種解決上下文的工具就是RNN。但是普通的RNN有梯度消失的問題,因此更常用的是LSTM。LSTM早在1997年就被Sepp Hochreiter和Jürgen Schmidhuber提出了。在2016年前后才大量被用于自然語言處理任務(wù),成為當時文本處理的”事實”標準——大家認為任何一個任務(wù)首先應該就使用LSTM。當然LSTM的其它變體以及新提出的GRU也得到廣泛的應用。RNN除了能夠?qū)W習上下文的語義關(guān)系,理論上還能解決長距離的語義依賴關(guān)系(當然即使引入了門的機制,實際上太長的語義關(guān)系還是很難學習)。
圖:LSTM
很多NLP的輸入是一個序列,輸出也是一個序列,而且它們之間并沒有嚴格的順序和對應關(guān)系。為了解決這個問題,seq2seq模型被提了出來。最終使用seq2seq的是機器翻譯。Sutskever等人在2014年的論文《Sequence to Sequence Learning with Neural Networks》首次使用了seq2seq模型來做機器翻譯,Bahdanau等人在論文《Neural Machine Translation by Jointly Learning to Align and Translate》里首次把Attention機制引入了機器翻譯,從而可以提高長句子的翻譯效果。而Google在論文里《Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation》介紹了他們實際系統(tǒng)中使用神經(jīng)網(wǎng)絡(luò)機器翻譯的一些經(jīng)驗,這是首次在業(yè)界應用的神經(jīng)網(wǎng)絡(luò)翻譯系統(tǒng)。
圖:LSTM
seq2seq加Attention成為了解決很多問題的標準方法,包括摘要、問答甚至對話系統(tǒng)開始流行這種End-to-End的seq2seq模型。
Google2017年在《Attention is All You Need》更是把Attention機制推向了極致,它提出了Transformer模型。因為Attention相對于RNN來說可以更好的并行,而且它的Self-Attention機制可以同時編碼上下文的信息,它在機器翻譯的WMT14數(shù)據(jù)上取得了第一的成績。
圖:Neural Machine Translation
不過其實和Attention同時流行的還包括”Memory”,這大概是2015年的時候,當時流行”Reason, Attention and Memory”(簡稱RAM),我記得當年NIPS還有個RAM的workshop。Memory就是把LSTM的Cell進一步抽象,變成一種存儲機制,就行計算機的內(nèi)存,然后提出了很多復雜的模型,包括Neural Turing Machine(NTM)等等,包括讓神經(jīng)網(wǎng)絡(luò)自動學習出排序等算法。當時也火過一陣,但最終并沒有解決什么實際問題。
雖然RNN/Transformer可以學習出上下文語義關(guān)系,但是除了在機器翻譯等少量任務(wù)外,大部分任務(wù)的訓練數(shù)據(jù)都很少。因此怎么能夠使用無監(jiān)督的語料學習出很好的上下文語義關(guān)系就成為非常重要的課題。這個方向從2018年開始一直持續(xù)到現(xiàn)在,包括Elmo、OpenAI GPT、BERT和XLNet等,這些模型一次又一次的刷榜,引起了極大的關(guān)注。
ELMo是Embeddings from Language Models的縮寫,意思就是語言模型得到的(句子)Embedding。另外Elmo是美國兒童教育電視節(jié)目芝麻街(Sesame Street)里的小怪獸的名字。原始論文是《Deep contextualized word representations》,這個標題是很合適的,也就是用深度的Transformer模型來學習上下文相關(guān)的詞表示。
這篇論文的想法其實非常非常簡單,但取得了非常好的效果。它的思路是用深度的雙向RNN(LSTM)在大量未標注數(shù)據(jù)上訓練語言模型,如下圖所示。然后在實際的任務(wù)中,對于輸入的句子,我們使用這個語言模型來對它處理,得到輸出的向量,因此這可以看成是一種特征提取。但是和普通的Word2Vec或者GloVe的pretraining不同,ELMo得到的Embedding是有上下文的。
比如我們使用Word2Vec也可以得到詞”bank”的Embedding,我們可以認為這個Embedding包含了bank的語義。但是bank有很多意思,可以是銀行也可以是水邊,使用普通的Word2Vec作為Pretraining的Embedding,只能同時把這兩種語義都編碼進向量里,然后靠后面的模型比如RNN來根據(jù)上下文選擇合適的語義——比如上下文有money,那么它更可能是銀行;而如果上下文是river,那么更可能是水邊的意思。但是RNN要學到這種上下文的關(guān)系,需要這個任務(wù)有大量相關(guān)的標注數(shù)據(jù),這在很多時候是沒有的。而ELMo的特征提取可以看成是上下文相關(guān)的,如果輸入句子有money,那么它就(或者我們期望)應該能知道bank更可能的語義,從而幫我們選擇更加合適的編碼。
圖:RNN語言模型
ELMo學到的語言模型參數(shù)是固定的,下游的任務(wù)把它的隱狀態(tài)作為特征。而來自論文《Improving Language Understanding by Generative Pre-Training》的OpenAI GPT模型會根據(jù)特定的任務(wù)進行調(diào)整(通常是微調(diào)),這樣得到的句子表示能更好的適配特定任務(wù)。它的思想其實也很簡單,使用Transformer來學習一個語言模型,對句子進行無監(jiān)督的Embedding,然后根據(jù)具體任務(wù)對Transformer的參數(shù)進行微調(diào)。因為訓練的任務(wù)語言模型的輸入是一個句子,但是下游的很多任務(wù)的輸入是兩個,因此OpenAI GPT通過在兩個句子之前加入特殊的分隔符來處理兩個輸入,如下圖所示。
圖:OpenAI GPT處理下游任務(wù)的方法
OpenAI GPT取得了非常好的效果,在很多任務(wù)上遠超之前的第一。
ELMo和GPT最大的問題就是傳統(tǒng)的語言模型是單向的——我們是根據(jù)之前的歷史來預測當前詞。但是我們不能利用后面的信息。比如句子”The animal didn’t cross the street because it was too tired”。我們在編碼it的語義的時候需要同時利用前后的信息,因為在這個句子中,it可能指代animal也可能指代street。根據(jù)tired,我們推斷它指代的是animal,因為street是不能tired。但是如果把tired改成wide,那么it就是指代street了。
傳統(tǒng)的語言模型,不管是RNN還是Transformer,它都只能利用單方向的信息。比如前向的RNN,在編碼it的時候它看到了animal和street,但是它還沒有看到tired,因此它不能確定it到底指代什么。如果是后向的RNN,在編碼的時候它看到了tired,但是它還根本沒看到animal,因此它也不能知道指代的是animal。Transformer的Self-Attention理論上是可以同時attend to到這兩個詞的,但是根據(jù)前面的介紹,由于我們需要用Transformer來學習語言模型,必須用Mask來讓它看不到未來的信息,因此它也不能解決這個問題。
那它是怎么解決語言模型只能利用一個方向的信息的問題?答案是它的pretraining訓練的不是普通的語言模型,而是Mask語言模型。這個思路是在Google的論文《Pre-training of Deep Bidirectional Transformers for Language Understanding》里提出了,也就是我們現(xiàn)在熟知的BERT模型。
BERT一出來就橫掃了各種NLP的評測榜單,引起了極大的關(guān)注。就在媒體都在用”最強NLP模型”之類的詞贊美BERT的時候,最近又出現(xiàn)了XLNet,又一次橫掃了各大榜單。它認為BERT有兩大問題:它假設(shè)被Mask的詞之間在給定其它非Mask詞的條件下是獨立的,這個條件并不成立;Pretraining的時候引入了特殊的[MASK],但是fine-tuing又沒有,這會造成不匹配。XLNet通過Permutation語言模型來解決普通語言模型單向信息流的問題,同時借鑒Transformer-XL的優(yōu)點。通過Two-Stream Self-Attention解決target unaware的問題,最終訓練的模型在很多任務(wù)上超過BERT創(chuàng)造了新的記錄。
強化學習
強化學習和視覺、聽覺和語言其實不是一個層面上的東西,它更多的是和監(jiān)督學習、非監(jiān)督學習并行的一類學習機制(算法),但是我認為強化學習是非常重要的一種學習機制。
監(jiān)督學習的特點是有一個“老師”來“監(jiān)督”我們,告訴我們正確的結(jié)果是什么。在我們在小的時候,會有老師來教我們,本質(zhì)上監(jiān)督學習是一種知識的傳遞,但不能發(fā)現(xiàn)新的知識。對于人類整體而言,真正(甚至唯一)的知識來源是實踐——也就是強化學習。比如神農(nóng)嘗百草,最早人類并不知道哪些草能治病,但是通過嘗試,就能學到新的知識。學到的這些知識通過語言文字記錄下來,一代一代的流傳下來,從而人類社會作為整體能夠不斷的進步。
與監(jiān)督學習不同,沒有一個“老師”會“監(jiān)督“我們。比如下圍棋,不會有人告訴我們當前局面最好的走法是什么,只有到游戲結(jié)束的時候我們才知道最終的勝負,我們需要自己復盤(學習)哪一步是好棋哪一步是臭棋。自然界也是一樣,它不會告訴我們是否應該和別人合作,但是通過優(yōu)勝劣汰,最終”告訴”我們互相協(xié)助的社會會更有競爭力。和前面的監(jiān)督、非監(jiān)督學習相比有一個很大的不同點:在強化學習的Agent是可以通過Action影響環(huán)境的——我們的每走一步棋都會改變局面,有可能變好也有可能變壞。
它要解決的核心問題是給定一個狀態(tài),我們需要判斷它的價值(Value)。價值和獎勵(Reward)是強化學習最基本的兩個概念。對于一個Agent(強化學習的主體)來說,Reward是立刻獲得的,內(nèi)在的甚至與生俱來的。比如處于饑餓狀態(tài)下,吃飯會有Reward。而Value是延遲的,需要計算和慎重考慮的。比如饑餓狀態(tài)下去偷東西吃可以有Reward,但是從Value(價值觀)的角度這(可能)并不是一個好的Action。為什么不好?雖然人類的監(jiān)督學習,比如先賢告訴我們這是不符合道德規(guī)范的,不是好的行為。但是我們之前說了,人類最終的知識來源是強化學習,先賢是從哪里知道的呢?有人認為來自上帝或者就是來自人的天性,比如“人之初性本善”。如果從進化論的角度來解釋,人類其實在玩一場”生存”游戲,有遵循道德的人群和有不遵循的人群,大自然會通過優(yōu)勝劣汰”告訴”我們最終的結(jié)果,最終我們的先賢“學到”了(其實是被選擇了)這些道德規(guī)范,并且把這些規(guī)范通過教育(監(jiān)督學習)一代代流傳下來。
因為強化學習只是一種方法,它在很多領(lǐng)域都有應用,機器人、控制和游戲是其最常見的應用領(lǐng)域,但是其它領(lǐng)域包括自然語言處理的對話系統(tǒng),也經(jīng)常會用到強化學習技術(shù)。強化學習和機器學習一樣有很多方法:根據(jù)是否對環(huán)境建??梢苑譃镸odel based和Mode free的方法;按照是否有Value函數(shù)又分為Value based方法和Policy Gradient,但是又可以把兩者結(jié)合得到Actor-Critic方法……
我們這里重點關(guān)注深度學習和強化學習結(jié)合的一些方法。
Google DeepMind在Nature發(fā)表的文章《Human-level Control through Deep Reinforcement Learning》首次實現(xiàn)了End-to-End的深度強化學習模型Deep Q-Networks,它的輸入是游戲畫面的像素值,而輸出是游戲的控制命令,它的原理如下圖所示。
圖:Deep Q-Networks
通過Experience Replay來避免同一個trajectory數(shù)據(jù)的相關(guān)性,同時使用引入了一個Target Network 𝑄𝜃′來解決target不穩(wěn)定的問題,Deep Q-Networks在Atari 2600的49個游戲中,有29個游戲得分達到了人類的75%以上,而其中23個游戲中的得分超過了人類選手,如下圖所示。
圖:Deep Q-Networks在Atari2600平臺上的得分
Deep Q-Networks的后續(xù)改進工作包括《Prioritized Expeience Replay》、《Deep Reinforcement Learning with Double Q-learning》和《Rainbow: Combining Improvements in Deep Reinforcement Learning》等。
而Policy Gradient類的工作包括《Trust Region Policy Optimization》(TRPO)、Deterministic Policy Gradient Algorithms》(DPG)、《Expected Policy Gradients for Reinforcement Learning》、《Proximal Policy Optimization Algorithms》(PPO)等。
而在游戲方面,Google DeepMind發(fā)表的大家耳熟能詳?shù)腁lphaGo、AlphaGoZero和AlphaZero系列文章。
圍棋解決了之后,大家也把關(guān)注點放到了即時戰(zhàn)略游戲上,包括DeepMind的《AlphaStar: An Evolutionary Computation Perspective》和OpenAI Five在星際爭霸2和Dota2上都取得了很大的進展。
此外,在Meta Learning、Imitation Learning和Inverse Reinforcement Learning也出現(xiàn)了一些新的進展,我們這里就不一一列舉了。
未來展望
最近一個比較明顯的趨勢就是非監(jiān)督(半監(jiān)督)學習的進展,首先是在自然語言處理領(lǐng)域,根據(jù)前面的分析,這個領(lǐng)域的任務(wù)多、監(jiān)督數(shù)據(jù)少的特點一直期望能在這個方向有所突破。在計算機視覺我們也看到了Google DeepMind的最新進展,我覺得還會有更多的突破。相對而言,在語音識別領(lǐng)域這方面的進展就慢了一些,先不說無監(jiān)督,就連從一個數(shù)據(jù)集(應用場景)Transfer到另一個數(shù)據(jù)集(場景)都很難。比如我們有大量普通話的數(shù)據(jù),怎么能夠使用少量的數(shù)據(jù)就能在其它帶方言的普通話上進行很好的識別。雖然有很多Adaptation的技術(shù),但是總體看起來還是很難達到預期。
另外一個就是End-to-End的系統(tǒng)在業(yè)界(除了Google聲稱使用)還并沒有得到廣泛應用,當然這跟語音領(lǐng)域的玩家相對很少有關(guān),況且目前的系統(tǒng)效果也不錯,完全推倒重來沒有必要(除非計算機視覺領(lǐng)域一樣深度學習的方法遠超傳統(tǒng)的方法)。原來的HMM-GMM改造成HMM-DNN之后再加上各種Adaptation和sequence discriminative training,仍然可以得到SOTA的效果,所以相對來講使用End-to-end的動力就更加不足。雖然學術(shù)界大力在往這個方向發(fā)展,但是老的語音玩家(Google之外)并不怎么買賬。
從長遠來講,要“真正”實現(xiàn)人工智能,我認為還得結(jié)合視覺、聽覺(甚至味覺和觸覺等)和語言,使用無監(jiān)督、監(jiān)督和強化學習的方法,讓”機器”有一個可以自己控制的身體,像三歲小孩一樣融入”真正”的物理世界和人類社會,才有可能實現(xiàn)。這除了需要科技上的進步,還需要我們?nèi)祟愒谒枷肷系木薮笸黄撇庞锌赡軐崿F(xiàn)。