我們壓縮了一批深度學習進階“傳送門”給小白

深度學習世界發表於2017-12-21

0?wx_fmt=gif&wxfrom=5&wx_lazy=1

來源:大資料文摘

ID:BigDataDigest

編譯:ShanLIU、Chloe、笪潔瓊、Harry 

作者:Seth Weidman

 

閱讀這篇文章的必要性:

 

無論是作為行業內的從業者還是一個組織,在開始深度學習應用之前,都需要掌握兩件事:


1. 知其然:掌握一個基礎概念,知道深度學習的最新發展可以實現什麼。


2. 知其所以然:訓練一個新模型或在生產環境下執行一個已有模型的技術能力


得益於開源社群的優勢,我們獲得“知其所以然”能力的途徑越來越多。網上有大量優質的教程,講解如何訓練、使用深度學習模型的技術細節,例如藉助TensorFlow這樣的開源軟體庫來實現。TensorFlow中的許多資料科學資訊每週都在更新相關資訊。


這意味著,當你有了“如何使用深度學習”的初步想法,實施這一計劃絕非易事,通常都伴隨著標準的“開發”工作:


讓你跟隨下文提到的連結教程學習,修改模型以實現具體目的,或為特定的資料服務、閱讀StackOverflow帖子來排查問題,諸如此類的指南。這類工作並不要求你,例如,僱傭一位擁有博士學位的“頂尖人才”,他可以從頭開始編寫原始的神經網路架構,而且是一名經驗豐富的軟體工程師。


這一系列的文章旨在填補第一部分能力的空缺。一方面,此文巨集觀地覆蓋了基礎概念,講述深度學習能勝任哪些事;同時,為那些希望更全面、深入地學習並理解程式碼從而掌握第二部分的讀者們提供資源


我會在下文展開更詳細的描述:


1. 基於開源框架、資料集的深度學習,其最新成就有哪些?

2. 促進以上成就的關鍵框架或其他洞察力是什麼?.

3. 可以從哪些優質資源入手,將相似的技術應用在自己的專案上?


這些重大突破有何共同點?

儘管這些突破涉及到很多新的框架和理念,卻都是通過機器學習領域很常規的"監督式學習"過程實現的。


具體執行步驟如下


1. 收集大量的、合適的訓練資料

2. 設立一個神經網路架構——由算式組成的複雜系統、在腦中簡單的建立一個模型-其中有數百萬引數被稱作"權重"

3.  通過神經網路反覆地輸入資料;在每次迭代中,對神經網路的預測結果與正確結果進行對比,然後基於對比結果的偏差量、方向,調整神經網路的每一項權重。

640?wx_fmt=png

上圖展示了神經網路的訓練過程:這一流程被反覆執行無數次。

(更多資訊:https://www.embedded-vision.com/platinum-members/cadence/embedded-vision-training/documents/pages/neuralnetworksimagerecognition)


這一過程被應用於許多不同領域,最後我們得到的是已經有所習得的神經網路。


在每一領域,我們將涵蓋以下部分內容:


1. 訓練模型所需的資料

2. 所使用的模型框架

3. 執行結果




一. 圖片歸類




神經網路可被訓練於識別一張圖片上所包含的一個或多個物體。


所需的資料


要訓練一個影像分類器,你需要有標籤分類的圖片集,其中每一張圖片歸屬於一系列限定類當中的一個。舉個例子,CIFAR 10資料是一種用於訓練影像分類器的標準化的資料集

(傳送門:https://www.cs.toronto.edu/~kriz/cifar.html)

它將圖片資料劃分為10類:如下圖,從左至右-左側為類名,右側一行顯示該類下的圖片元素,從上至下-飛機、汽車、鳥、貓、鹿、青蛙、馬、船、卡車這十大類。

 

640?wx_fmt=png

關於CIFAR-10 資料中的圖片的解釋

(更多資訊:https://becominghuman.ai/training-mxnet-part-2-cifar-10-c7b0b729c33c%27)

 

深度學習框架


我們將覆蓋到的所有神經網路框架都是受"人們是如何學習解決問題"這一想法而驅動的。那麼對於圖片識別是怎麼做的呢?當人類判斷一幅圖片裡有什麼的時候,我們首先尋找概要層次的一些特徵,例如說分支啊,鼻子,或者輪椅。然而,為了更好的觀察這些概要特性,你不得不關注底層的詳細特徵,比如顏色、線條、其它的形狀。實際上,從原始畫素一步步關注到更復雜的人類可辨識的特性,比方說眼睛,我們需要先察覺畫素的特徵,隨後去看這些細分特徵本身的特性,等等。

在深度學習之前,研究人員會手動嘗試去提取這些特性,並用於預測分析。在深度學習剛開始出現不久前,研究者們開始使用一些技術手段(主要是SVMs)

(傳送門:https://crypto.stanford.edu/~pgolle/papers/dogcat.pdf)

比方說,試圖尋找這些手工篩選出的特徵值與"這張圖片上到底是一隻貓還是狗"這兩者之間的複雜的、非線性關係。


640?wx_fmt=png

卷積神經網路在每一層抽取特徵值

(更多資訊:https://www.strong.io/blog/deep-neural-networks-go-to-the-movies)


目前,研究人員已經開發出了能夠自主學習原始畫素特徵值的神經網路框架;具體來說,也就是深度卷積神經網路框架。這些網路能夠抽取畫素的特徵,然後識別畫素特徵的附屬特徵,諸如此類,最終通過一層常規神經網路層(類似於邏輯迴歸),來進行最後的預測。


640?wx_fmt=png

關於一個主流卷積神經網路預測的樣本,分析物件是ImageNet資料集的圖片


放心~我們會在未來的一篇文章中深入探討關於卷積神經網路是如何用於圖片分類的。現在繼續來看剛才的話題。


成果


作為結果,在分配給這些框架的中心任務-圖片分類,演算法現在可以輸出優於人工的結果了。在著名的ImageNet資料集中(最常被作為卷積神經網路框架的標杆),

(傳送門:http://www.image-net.org/challenges/LSVRC/)

在圖片分類這一任務上,經過訓練的神經網路現在可以取得"優先於人類"的表現:


640?wx_fmt=png

2015年,計算機可以被訓練對圖片中的目標物體進行分類, 並取得了比人類更好的表現

(更多資訊:https://devblogs.nvidia.com/parallelforall/mocha-jl-deep-learning-julia/)


此外,研究人員找到了方法,將那些不能立即適用於當前圖片類的圖片定位,用一個矩形分隔出來,這一圖片極有可能代表著某些特定類的目標物,通過卷積神經網路(CNN)來補給每一個矩形中的圖片類資料,最後呈現的結果是每一張圖片中的物體根據其所屬的類的不同,被包圍在一個個獨立的矩形框裡(這被稱為"限位框")。

 

640?wx_fmt=png

 使用“Mark R-CNN”進行目標檢測

(更多資訊:https://arxiv.org/pdf/1703.06870.pdf)


這一整個多步驟的流程在技術上稱作"目標檢測",儘管它在最有挑戰性的一步中使用了影像分類。


資源


理論關於CNN為什麼奏效的深入閱讀,請移步Andrej Karpathy的史丹佛系列教程(傳送門:http://cs231n.github.io/convolutional-networks/)

如果要了解一個更偏重數理模型的版本,請在這查閱Chris Olah的卷積系列文章。

(傳送門:http://cs231n.github.io/convolutional-networks/)


程式碼準備開始構建一個圖片分類器,請檢視這個來自於TensorFlow文件的介紹性的例子

(傳送門:https://www.tensorflow.org/tutorials/layers)




二. 文字生成




神經網路可以被訓練以生成文字-模擬生成與給定型別相似的文字。

 

所需資料

 

直接輸入某一特定類的文字,比方說,莎士比亞的所有作品。

 

深度學習框架


神經網路可以在一個系列的元素裡去推斷下一個元素是什麼。它能參考之前輸入的字元的順序,根據給定的一串已經輸出來的字元,來預測哪一個字元會在下一個出現。

用於該問題的這個框架與適用於圖片分類器的框架是有差異的。由於框架不同,我們所要求網路學習的事情也不同。以前,我們是在要求它學習一張圖片當中有哪些特徵是重要特徵。在這,我們則期望它注意到字元順序,來預測未來字元出現的順序。為了做到這一點,不像是圖片分類器,這網路需要一種方式來記錄它的"狀態"。比方說,它看到的前一串字元是 “c-h-a-r-a-c-t-e”,這個網路應該有能力儲存這一瞬時資訊,預測到下一個字元應該是r。

 

一個迴圈神經網路框架(RNN)可以實現如下操作:在迭代過程中,它將每一個神經元的狀態反饋回去神經網路給到下一次迭代作為輸入,從而幫助該神經網路學習識別物件的排序順序。

 

其實遠不止這些內容,我們稍後再回到這個話題:)

 

640?wx_fmt=png

迴圈神經網路(RNN)架構圖

(更多資訊:https://medium.com/@erikhallstrm/hello-world-rnn-83cd7105b767)


但是,為了真正做好文字生成,除了具備上述能力外,RNN還必須能夠決定在序列中向後反饋的長度。有時候,比如在單詞中部,RNN只需檢視最新幾個的字母就可以確定下一個字母,而其他時候可能需要檢視多個字母來確定,比如在句子末尾。


有一種特殊的單元型別,“LSTM”(長期短期記憶)單元,這一點上做得特別好。每個單元根據單元內的權重來決定是 “記住”還是“忘記”,權重根據RNN看到的每個新字母隨時更新


640?wx_fmt=png

LSTM單元內部工作原理

(更多資訊:https://medium.com/@erikhallstrm/hello-world-rnn-83cd7105b767)


成果


簡而言之:我們可以生成文字,它有我們希望得到的文字所有的特質,同時減少拼寫錯誤的單詞、避免不像正常英語的錯誤。Andrej Karpathy的這篇文章提供了一些有趣的例子,從生成莎士比亞戲劇到Paul Graham散文。

(傳送門:http://karpathy.github.io/2015/05/21/rnn-effectiveness/)

用同樣的網路架構,通過順序地生成x和y座標,得到手寫體,正如通過一個個字母生成語句一樣。請檢視這個演示。

(傳送門:https://www.cs.toronto.edu/~graves/handwriting.cgi)

640?wx_fmt=png

(更多資訊:https://www.cs.toronto.edu/~graves/handwriting.cgi?text=Handwriting&style=&bias=0.15&samples=3)


神經網路的生成的手寫字跡。可以稱之為 “手”寫嗎?


我們會在後續文章中進一步討論RNN和LSTMs的工作原理。


資源


理論Chris Olah關於LSTMs的文章是經典,(傳送門:http://colah.github.io/posts/2015-08-Understanding-LSTMs/)

Andrej Karpathy關於RNN的文章也是經典,(傳送門:http://karpathy.github.io/2015/05/21/rnn-effectiveness/)講解了它們可以實現什麼,它們是如何工作的。


程式碼:這是一個很好的演練,教你如何建立端到端的文字生成模型,包括資料預處理。然後這個GitHub repo是用預訓練的RNN-LSTM模型生成手寫體。




三.語言翻譯




機器翻譯 ——翻譯語言的能力——是AI研究人員長久以來的夢想。深度學習使這一夢想更接近現實。


所需資料


不同語言同一意思的語句對。例如,“I am a student”和“je suis étudiant”可能出現在一個用於訓練英語法語互譯的神經網路的資料庫裡。


深度學習架構


與建立其他深度學習架構一樣,研究人員先“假設”計算機可能的理想地學習翻譯語言的過程,建立了一個模仿這一過程的架構。通過語言翻譯,基本上,一個句子(編碼成單詞序列)應該被翻譯成其本質上的“含義”。這個含義再被翻譯成另一種語言的單詞序列。


句子從單詞“轉化”成含義的過程應該是一個擅長處理序列的架構——就是上述的“迴圈神經網路”架構


640?wx_fmt=png

編碼-解碼架構圖解

(更多資訊:https://github.com/tensorflow/nmt/tree/tf-1.2)


2014年首次發現這一架構在語言翻譯上效果不錯,此後擴充套件到很多方向。


成果


這篇Google部落格文章顯示,這一架構圓滿完成了它所要完成的任務,把其他語言翻譯技術甩在後面。當然,也因為Google投入了大量的訓練資料來完成這項任務!

(傳送門:https://research.googleblog.com/2016/09/a-neural-network-for-machine.html)


640?wx_fmt=png

Google序列到序列模型的表現

(更多資訊:https://research.googleblog.com/2016/09/a-neural-network-for-machine.html)


資源


程式碼和理論:


Google發表了一個關於序列到序列架構的極好的教程。這一教程給出了序列到序列模型的目標和理論知識概述,還指導TensorFlow中的程式碼實現。教程還涉及“關注”,基本序列到序列架構的擴充套件,我會在詳細討論序列到序列模型時涉及它。

(傳送門:https://github.com/tensorflow/nmt/tree/tf-1.2)




四.生成對抗網路




所需資料


特定型別的影像——比如,大量臉部的影像。


深度學習架構


GANs是一個驚喜而重要的成果——Yann LeCun。


全世界領先的AI研究者之一,說過“在我看來,GANs是過去十年機器學習領域最有趣的想法。”事實證明,我們可以生成看起來像一組訓練影像,但實際上並不是這組訓練集的影像:比如,看起來像臉部,但實際上不是真實臉部的影像。這是通過同時訓練兩個神經網路來完成的:一個產生看起來真實的虛假影像,一個檢測這些影像是真是假。如果你訓練這兩個網路“以相同的速度”學習——這是構建GAN的難點 ——生成假影像的網路事實上能夠生成看起來相當真實的影像。


說一點細節:我們想用GANs訓練的主要網路稱為生成器:學習接收一個隨機噪聲向量,並將其轉換成逼真的影像。這個網路有來自卷積神經網路的“逆”結構,因此被貼切地稱為“去卷積”架構。另一個鑑別真實和偽造影像的網路是卷積網路,就像用於影像分類的卷積網路一樣,被稱為“鑑別器”

                                                                                                640?wx_fmt=png  

“生成器”的去卷積架構

(更多資訊:https://medium.com/@awjuliani/generative-adversarial-networks-explained-with-a-classic-spongebob-squarepants-episode-54deab2fce39)

640?wx_fmt=png

“鑑別器”的卷積架構

(更多資訊:https://medium.com/@awjuliani/generative-adversarial-networks-explained-with-a-classic-spongebob-squarepants-episode-54deab2fce39)


GANs的兩個神經網路都是卷積神經網路,因此這兩個神經網路都特別擅長影像特徵提取。


成果和資源

 

640?wx_fmt=png

GAN基於名人臉部資料庫生成的照片

(更多資訊:https://medium.com/@awjuliani/generative-adversarial-networks-explained-with-a-classic-spongebob-squarepants-episode-54deab2fce39)


程式碼:這個GitHub repo是一個用TensorFlow訓練GANs的好教程,還包含一些由GANs生成的驚人影像,比如上面的那個。

(傳送門:https://github.com/carpedm20/DCGAN-tensorflow)


理論:Irmak Sirer的這個演講是一個有趣的對GANs的介紹,同時涉及許多監督學習的概念,會幫助你理解上文的發現。

(傳送門:https://github.com/carpedm20/DCGAN-tensorflow)


最後,優秀的Arthur Juliani還有一個有趣的,形象的GANs的詳解,還有用TensorFlow實現的程式碼。

(傳送門:https://medium.com/@awjuliani)




總結




本文對深度學習在過去五年取得的巨大突破做了高度總結。以上我們討論的所有模型都有很多開源例項。這意味著你基本都能下載“預訓練”模型,應用於你的資料——比如,你可以下載預訓練影像分類器,給它輸入自己的資料,用來對新影像分類,或是圈出影像中的物體。因為大部分的工作已經為你做好了,所以使用這項尖端科技的工作並不是“研究深度學習”本身——研究員們已經為你解決了絕大部分——而是做“發展”工作,讓其他人建立的模型更好地用於你的問題。

希望你現在對深度學習模型的功能有了更深入的瞭解,離真正使用它們又更近了一步!


原文連結:https://towardsdatascience.com/the-5-deep-learning-breakthroughs-you-should-know-about-df27674ccdf2

640?wx_fmt=jpeg0?wx_fmt=gif

0?wx_fmt=png

點選下方“閱讀原文”瞭解【大資料實驗平臺】↓↓↓

相關文章