天天看點

從這開始了解深度學習——視覺的深度學習與網絡

已經很久沒有更新内容了,今天抽空來給大家分享一些關于計算機視覺領域的一個重點,那就是 “深度學習”,接下來就來詳細聊聊深度學習(為什麼要深度學習特征???),然後來說說深度網絡的搭建,最後讓我們自己用手 diy 屬于自己的網絡,現在就開始 ing......

介紹

一說起 “深度學習”,大家有想過為什麼要去搭建複雜網絡,去學習更進階的特征呢?其實很簡單,因為趨勢是朝着類腦那個大方向,現在類腦工作已經得到很多研究員的關注。

類腦計算實際上存在兩個技術層面:第 1 層面是 “走出諾依曼架構”,主要屬于人工神經網絡的大範疇;第 2 層面是 “基于神經科學的計算機算法”,試圖超越人工神經網絡架構和擺脫權值計算模型,實作對生物腦的高逼真性模拟。是以歐盟都已經聯合開始研究人腦,都成立一個叫 “人類腦計劃”,美國也開始關注類腦。是以類腦計算這個方向是前途無量的。

第 1 類

主要有歐盟的 “人類腦計劃” 和美國的 “brains” 計劃,雖然技術路徑不同,但都是從生物腦的微觀層面的實驗資料和知識入手,通過逐漸整合,向上尋找中觀和宏觀層面上的數量關系規律,最終建立起整體的腦理論模型。

該類方法的特點是 “自下而上”,一場大規模的微觀海量的資料和碎片化的實驗知識的 “拼圖工程”。首先發展高尖端技術工具,以實作對腦的微觀的結構和功能的全面測量和記錄;然後建立起全腦微觀資料庫;在此基礎上,逐漸向大規模的腦計算模型上發展,并試圖形成對腦活動、腦病變和腦智能的機制性解讀的整體理論;最後形成比較成熟的類腦計算技術和類腦人工智能。這種研究屬于長周期的大科學或大工程,需要動員大量人力物力和财力。

第 2 類

研究方法的特點是 “自上而下”。直接将研究重心放在一個 “好的” 腦理論的建造上,然後向下導出神經元模型和神經元群體網絡模型;之後測試和檢驗模型與微觀神經知識和資料之間的契合度。這種研究的關鍵在于怎樣找到正确的理論入手點,這一步不是單純的模組化方法問題,也不是一般的學科性理論問題,而是若幹個重要學科的理論程序中的彙合點上的再綜合,屬于科學大周期性的結晶過程。這種研究屬于長周期和 “形而上” 的小科學。目前,采用第 2 類方法的主要有美國 numenta 公司和中國的神經深構造運算與腦計 算 機 實 驗 室(neural deep structure computing & mindcomputer lab,mindputer lab),兩個實驗室技術路徑雖異,但總體方法都是先從全腦角度來建立理論架構,然後将理論逐漸地向下細化,導出中觀和微觀的計算模型,之後再檢驗與微觀層面的實驗資料和知識的互恰性。

各有利弊

兩類研究方法各有利弊,第 1 類方法就像在萬米懸崖峭壁貼身攀岩,向上的每一步很費時且充滿未知。因為,從海量的資料中去試圖進行全腦網絡的微觀拼圖,是一個大随機性的事件,即使有超級計算機或其他先進微觀技術的幫助,歐美兩個腦項目的 10 年計劃時間是遠遠不夠的。而第 2 類方法更像是空中傘降,難點在降落傘上,隻要降落傘做得好,則向下定點降落的時間和複雜度比攀岩小的多。科學史已經證明,一個好的理論是大大削減科學探險随機性風險的銳利刀具。

有點說偏了,今天我們主要來說說深度學習這些事!

為什麼要深度學習?

先來一個簡單的例子:

從這開始了解深度學習——視覺的深度學習與網絡
從這開始了解深度學習——視覺的深度學習與網絡
從這開始了解深度學習——視覺的深度學習與網絡

這都是底層特征的可視化,說明底層特征也隻能學習一些基礎的紋理等特征,但是如果達到人腦的視覺感覺,就必須要學習更進階的高層語義特征。是以才會出現更深更複雜的網絡,可以了解為挖掘更高層的語義特征來進行目标的表示。如下:

從這開始了解深度學習——視覺的深度學習與網絡

什麼才是深度學習?

一般會有:1)組合模型;2)端到端的學習(end-to-end)。

                            學習

從具體 ------------------------> 抽象

1)組合模型

從這開始了解深度學習——視覺的深度學習與網絡

猶如上面的流程圖,充分說明了模型的組合學習。

2)end-to-end

下面兩個連結是前期推送的内容,充分表明了網絡的端到端學習過程。

<a href="http://mp.weixin.qq.com/s?__biz=mzu0ntayntq1oq==&amp;mid=2247483810&amp;idx=1&amp;sn=e4c57979f5d65ae44218fc5368264784&amp;chksm=fb727d7ecc05f468bb047d4962b9457ba4159ee00b626e45360aa954dfa16bb4cbef9faf5880&amp;scene=21#wechat_redirect" target="_blank">深度學習 --- 反向傳播的具體案例</a>

<a href="http://mp.weixin.qq.com/s?__biz=mzu0ntayntq1oq==&amp;mid=2247484071&amp;idx=1&amp;sn=6827a6b72e08c628e70f2ffb080031d4&amp;chksm=fb727e7bcc05f76d0b3b9f0cae3b13544446278e09e392677111c879c98b54d4f3c6530cc6b0&amp;scene=21#wechat_redirect" target="_blank">神經網絡介紹—利用反向傳播算法的模式學習</a>

接下來參考了 “slide credit marc’aurelio ranzato,cvpr ‘14 tutorial”

從這開始了解深度學習——視覺的深度學習與網絡

下面這個連結也詳細介紹了 cnn 的演變與改進:

<a href="http://mp.weixin.qq.com/s?__biz=mzu0ntayntq1oq==&amp;mid=2247483999&amp;idx=1&amp;sn=ab5604d7640d26af8dadb965e3f55858&amp;chksm=fb727e83cc05f7955a901787c1ab04cf472acba30e0c411f0be6ffa7ebec27c6777d7fb17a99&amp;scene=21#wechat_redirect" target="_blank">深度網絡的 “從古至今” 的蛻變</a>

架構

深度學習發展迅速,随之不同的架構也大量湧現出來。

torch7

nyu

scientific computing framework in lua

supported by facebook

theano/pylearn2

u. montreal

scientific computing framework in python

symbolic computation and automatic differentiation

cuda-convnet2

alex krizhevsky

very fast on state-of-the-art gpus with multi-gpu parallelism

c++ / cuda library

tf(大家很熟悉了,不詳細介紹)

等等。

因為我入門到現在一直用 caffe,是以今天節詳細說說這個架構。

原因(參考):

expression: models + optimizations are plaintext schemas, not code.

speed: for state-of-the-art models and massive data.

modularity: to extend to new tasks and settings.

openness: common code and reference models for reproducibility.

community: joint discussion and development through bsd-2 licensing.

pure c++ / cuda architecture for deep learning

command line, python, matlab interfaces

fast, well-tested code

tools, reference models, demos, and recipes

seamless switch between cpu and gpu

網絡(net)

一個網絡是由一組不同層連接配接而成:

name: "dummy-net"

layers{name: "data" …}

layers {name: "conv" …}

layers {name: "pool" …}

… more layers …

layers {name: "loss" …}

lenet:

從這開始了解深度學習——視覺的深度學習與網絡

層(layer)

                                                           name: "conv1"

                                                           type: convolution

                                                           bottom: "data"

                                                           top: "conv1"

                                                           convolution_param {

                                                                      num_output: 20

                                                                      kernel_size: 5

                                                                      stride: 1    

                                                                      weight_filler {

                                                                                  type: "xavier"

                                                                      }

                                                           }

protobuf

網絡(net)和層(layer)就是通過 protobuf 來定義的。

blob

<a href="http://mp.weixin.qq.com/s?__biz=mzu0ntayntq1oq==&amp;mid=2247483762&amp;idx=1&amp;sn=cd55949f1866f67a093d2ed05cfa34aa&amp;chksm=fb727daecc05f4b885ab616c666d6770e261c31c14002a262d533e680e6c0438cc170915bff2&amp;scene=21#wechat_redirect" target="_blank">caffe 源碼 ---blob 基本使用</a>

solving: 訓練一個網絡

                                                train_net: "lenet_train.prototxt"

                                                base_lr: 0.01

                                                momentum: 0.9

                                                weight_decay: 0.0005

                                                max_iter: 10000

                                                snapshot_prefix: "lenet_snapshot"

如果你需要 gpu 訓練:

caffe train -solver lenet_solver.prototxt -gpu 0

最後舉一些流行的例子,有興趣的朋友可以自己動手去 diy。

目标檢測

r-cnn: regions with convolutional neural networks

<a href="http://nbviewer.ipython.org/github/bvlc/caffe/blob/master/examples/detection.ipynb" target="_blank">http://nbviewer.ipython.org/github/bvlc/caffe/blob/master/examples/detection.ipynb</a>

從這開始了解深度學習——視覺的深度學習與網絡

視覺風格識别

karayev et al. recognizing image style. bmvc14. caffe fine-tuning example.

從這開始了解深度學習——視覺的深度學習與網絡

場景識别

<a href="http://places.csail.mit.edu/" target="_blank">http://places.csail.mit.edu/</a>

從這開始了解深度學習——視覺的深度學習與網絡

微調(fine-tuning)

從這開始了解深度學習——視覺的深度學習與網絡

輸入:不同的源檔案;

最後一層:不同的分類器。

<a href="http://mp.weixin.qq.com/s?__biz=mzu0ntayntq1oq==&amp;mid=2247484020&amp;idx=3&amp;sn=6882d32290f44d15cb353ea92849356b&amp;chksm=fb727ea8cc05f7be022025b20d6e8e71170eb5eb1ce383d526aabe8b92a759fd426e9cd114b3&amp;scene=21#wechat_redirect" target="_blank">如何成為一名成功的 “煉丹師”——dl 訓練技巧</a>

今天就到這裡,希望可以給需要的朋友一帶來一些幫助,謝謝!

====================================分割線================================

本文作者:ai研習社

繼續閱讀