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