深度學習入門:深度學習(完結)

目錄

  • 1、加深網絡
    • 1.1 向更深的網絡出發
    • 1.2 進一步提高識別精度
    • 1.3 加深層的動機
  • 2、深度學習的小歷史
    • 2.1 ImageNet
    • 2.2 VGG
    • 2.3 GoogleNet
    • 2.4 ResNet
  • 3、深度學習的高速化
    • 3.1 需要努力解決的問題
    • 3.2 基于GPU的高速化
    • 3.3 分布式學習
    • 3.4 運算精度的位數縮減
  • 4、深度學習的應用案例
    • 4.1 物體檢測
    • 4.2 圖像分割
    • 4.3 圖像標題的生成
  • 5、深度學習的未來
    • 5.1 圖像風格變換
    • 5.2 圖像的生成
    • 5.3 自動駕駛
    • 5.4 Deep Q-Network(強化學習)
  • 6、小結

1、加深網絡

1.1 向更深的網絡出發

深度學習是加深了層的深度神經網絡。基于之前介紹的網絡,只需通過疊加層,就可以創建深度網絡。

話不多說,這里我們來創建一個如圖所示的網絡結構的CNN(一個比之前的網絡都深的網絡)。這個網絡參考了下一節要介紹的VGG。

如圖所示,這個網絡的層比之前實現的網絡都更深。這里使用的卷積層全都是3 × 3的小型濾波器,特點是隨著層的加深,通道數變大(卷積層的通道數從前面的層開始按順序以16、16、32、32、64、64的方式增加)。此外,如圖所示,插入了池化層,以逐漸減小中間數據的空間大小;并且,后面的全連接層中使用了Dropout層。
在這里插入圖片描述
這個網絡使用He初始值作為權重的初始值,使用Adam更新權重參數。把上述內容總結起來,這個網絡有如下特點。

? 基于3×3的小型濾波器的卷積層。
? 激活函數是ReLU。
? 全連接層的后面使用Dropout層。
? 基于Adam的最優化。
? 使用He初始值作為權重初始值。

從這些特征中可以看出,網絡中使用了多個之前介紹的神經網絡技術。現在,我們使用這個網絡進行學習。先說一下結論,這個網絡的識別精度為99.38% ,可以說是非常優秀的性能了!

這些識別失敗的圖像對于我們人類而言也很難判斷。實際上,這里面有幾個圖像很難判斷是哪個數字,即使是我們人類,也同樣會犯“識別錯誤”。整體上,“1”和“7”、“0”和“6”、“3”和“5”的組合比較容易混淆。

1.2 進一步提高識別精度

在一個標題為“What is the class of this image ?”的網站[32]上,以排行榜的形式刊登了目前為止通過論文等渠道發表的針對各種數據集的方法的識別精度。

實際上,排行榜上的前幾名大都是基于CNN的方法。順便說一下,截止到2016年6月,對MNIST數據集的最高識別精度是99.79%(錯誤識別率為0.21%),該方法也是以CNN為基礎的[33]。不過,它用的CNN并不是特別深層的網絡(卷積層為2層、全連接層為2層的網絡)。

對于MNIST數據集,層不用特別深就獲得了(目前)最高的識別精度。一般認為,這是因為對于手寫數字識別這樣一個比較簡單的任務,沒有必要將網絡的表現力提高到那么高的程度。因此,可以說加深層的好處并不大。而之后要介紹的大規模的一般物體識別的情況,因為問題復雜,所以加深層對提高識別精度大有裨益。

參考剛才排行榜中前幾名的方法,可以發現進一步提高識別精度的技術和線索。

Data Augmentation基于算法“人為地”擴充輸入圖像(訓練圖像)。具體地說,如圖所示,對于輸入圖像,通過施加旋轉、垂直或水平方向上的移動等微小變化,增加圖像的數量。這在數據集的圖像數量有限時尤其有效。
在這里插入圖片描述
Data Augmentation還可以通過其他各種方法擴充圖像,比如裁剪圖像的“ crop處理”、將圖像左右翻轉的“flip處理”等。對于一般的圖像,施加亮度等外觀上的變化、放大縮小等尺度上的變化也是有效的。不管怎樣,通過Data Augmentation巧妙地增加訓練圖像,就可以提高深度學習的識別精度。雖然這個看上去只是一個簡單的技巧,不過經常會有很好的效果。

1.3 加深層的動機

其中一個好處就是可以減少網絡的參數數量。說得詳細一點,就是與沒有加深層的網絡相比,加深了層的網絡可以用更少的參數達到同等水平(或者更強)的表現力。這一點結合卷積運算中的濾波器大小來思考就好理解了。比如,圖展示了由5 × 5的濾波器構成的卷積層。
在這里插入圖片描述
這里希望大家考慮一下輸出數據的各個節點是從輸入數據的哪個區域計算出來的。顯然,在上圖的例子中,每個輸出節點都是從輸入數據的某個5 × 5的區域算出來的。接下來我們思考一下下圖中重復兩次3 × 3的卷積運算的情形。此時,每個輸出節點將由中間數據的某個3 × 3的區域計算出來。那么,中間數據的3 × 3的區域又是由前一個輸入數據的哪個區域計算出來的呢?仔細觀察下圖,可知它對應一個5 × 5的區域。也就是說,下圖的輸出數據是“觀察”了輸入數據的某個5 × 5的區域后計算出來的。
在這里插入圖片描述
一次5 × 5的卷積運算的區域可以由兩次3 × 3的卷積運算抵充。并且,相對于前者的參數數量25(5 × 5),后者一共是18(2 × 3 × 3),通過疊加卷積層,參數數量減少了。而且,這個參數數量之差會隨著層的加深而變大。比如,重復三次3 × 3的卷積運算時,參數的數量總共是27。而為了用一次卷積運算“觀察”與之相同的區域,需要一個7 × 7的濾波器,此時的參數數量是49。

疊加小型濾波器來加深網絡的好處是可以減少參數的數量,擴大感受野(receptive?field,給神經元施加變化的某個局部空間區域)。并且,通過疊加層,將 ReLU等激活函數夾在卷積層的中間,進一步提高了網絡的表現力。這是因為向網絡添加了基于激活函數的“非線性”表現力,通過非線性函數的疊加,可以表現更加復雜的東西。

加深層的另一個好處就是使學習更加高效。與沒有加深層的網絡相比,通過加深層,可以減少學習數據,從而高效地進行學習。為了直觀地理解這一點,大家可以回憶一下上一章第六節的內容。其中介紹了CNN的卷積層會分層次地提取信息。具體地說,在前面的卷積層中,神經元會對邊緣等簡單的形狀有響應,隨著層的加深,開始對紋理、物體部件等更加復雜的東西有響應。

我們先牢記這個網絡的分層結構,然后考慮一下“狗”的識別問題。要 用淺層網絡解決這個問題的話,卷積層需要一下子理解很多“狗”的特征。“狗”有各種各樣的種類,根據拍攝環境的不同,外觀變化也很大。因此,要理解“狗”的特征,需要大量富有差異性的學習數據,而這會導致學習需要花費很多時間。

不過,通過加深網絡,就可以分層次地分解需要學習的問題。因此,各層需要學習的問題就變成了更簡單的問題。比如,最開始的層只要專注于學習邊緣就好,這樣一來,只需用較少的學習數據就可以高效地進行學習。這是為什么呢?因為和印有“狗”的照片相比,包含邊緣的圖像數量眾多,并且邊緣的模式比“狗”的模式結構更簡單。

通過加深層,可以分層次地傳遞信息,這一點也很重要。比如,因為提取了邊緣的層的下一層能夠使用邊緣的信息,所以應該能夠高效地學習更加高級的模式。也就是說,通過加深層,可以將各層要學習的問題分解成容易解決的簡單問題,從而可以進行高效的學習。

2、深度學習的小歷史

一般認為,現在深度學習之所以受到大量關注,其契機是2012年舉辦的大規模圖像識別大賽ILSVRC(ImageNet Large Scale Visual Recognition Challenge)。在那年的比賽中,基于深度學習的方法(通稱AlexNet)以壓倒性的優勢勝出,徹底顛覆了以往的圖像識別方法。2012年深度學習的這場逆襲成為一個轉折點,在之后的比賽中,深度學習一直活躍在舞臺中央。本節我們以ILSVRC這個大規模圖像識別比賽為軸,看一下深度學習最近的發展趨勢。

2.1 ImageNet

ImageNet是擁有超過100萬張圖像的數據集。它包含了各種各樣的圖像,并且每張圖像都被關聯了標簽(類別名)。每年都會舉辦使用這個巨大數據集的ILSVRC圖像識別大賽。

ILSVRC大賽有多個測試項目,其中之一是“類別分類”(classification),在該項目中,會進行1000個類別的分類,比試識別精度。

以2012年為界,之后基于深度學習的方法一直居于首位。實際上,我們發現2012年的AlexNet大幅降低了錯誤識別率。并且,此后基于深度學習的方法不斷在提升識別精度。特別是2015年的ResNet(一個超過150層的深度網絡)將錯誤識別率降低到了3.5%。據說這個結果甚至超過了普通人的識別能力。

這些年深度學習取得了不斐的成績,其中VGG、GoogLeNet、ResNet已廣為人知,在與深度學習有關的各種場合都會遇到這些網絡。下面我們就來簡單地介紹一下這3個有名的網絡。

2.2 VGG

VGG是由卷積層和池化層構成的基礎的CNN。不過,如圖8-9所示,它的特點在于將有權重的層(卷積層或者全連接層)疊加至16層(或者19層),具備了深度(根據層的深度,有時也稱為“VGG16”或“VGG19”)。

VGG中需要注意的地方是,基于3×3的小型濾波器的卷積層的運算是連續進行的。如圖8-9所示,重復進行“卷積層重疊2次到4次,再通過池化層將大小減半”的處理,最后經由全連接層輸出結果。
在這里插入圖片描述

2.3 GoogleNet

GoogLeNet的網絡結構如圖所示。圖中的矩形表示卷積層、池化層等。
在這里插入圖片描述
只看圖的話,這似乎是一個看上去非常復雜的網絡結構,但實際上它基本上和之前介紹的CNN結構相同。不過,GoogLeNet的特征是,網絡不僅在縱向上有深度,在橫向上也有深度(廣度)。
在這里插入圖片描述
GoogLeNet在橫向上有“寬度”,這稱為“Inception結構”,以圖所示的結構為基礎。

如圖所示,Inception結構使用了多個大小不同的濾波器(和池化),最后再合并它們的結果。GoogLeNet的特征就是將這個Inception結構用作一個構件(構成元素)。此外,在GoogLeNet中,很多地方都使用了大小為1 × 1的濾波器的卷積層。這個1 × 1的卷積運算通過在通道方向上減小大小,有助于減少參數和實現高速化處理(具體請參考原始論文[23])。

2.4 ResNet

ResNet是微軟團隊開發的網絡。它的特征在于具有比以前的網絡更深的結構。

我們已經知道加深層對于提升性能很重要。但是,在深度學習中,過度加深層的話,很多情況下學習將不能順利進行,導致最終性能不佳。ResNet中,為了解決這類問題,導入了“快捷結構”(也稱為“捷徑”或“小路”)。導入這個快捷結構后,就可以隨著層的加深而不斷提高性能了(當然,層的加深也是有限度的)。
在這里插入圖片描述
如圖所示,快捷結構橫跨(跳過)了輸入數據的卷積層,將輸入x合計到輸出。

圖中,在連續2層的卷積層中,將輸入x跳著連接至2層后的輸出。這里的重點是,通過快捷結構,原來的2層卷積層的輸出F(x)變成了F(x) + x。通過引入這種快捷結構,即使加深層,也能高效地學習。這是因為,通過快捷結構,反向傳播時信號可以無衰減地傳遞。

因為快捷結構只是原封不動地傳遞輸入數據,所以反向傳播時會將
來自上游的梯度原封不動地傳向下游。這里的重點是不對來自上游
的梯度進行任何處理,將其原封不動地傳向下游。因此,基于快捷
結構,不用擔心梯度會變小(或變大),能夠向前一層傳遞“有意義
的梯度”。通過這個快捷結構,之前因為加深層而導致的梯度變小的
梯度消失問題就有望得到緩解。

ResNet以前面介紹過的VGG網絡為基礎,引入快捷結構以加深層,其結果如圖所示。
在這里插入圖片描述
如圖所示,ResNet通過以2個卷積層為間隔跳躍式地連接來加深層。另外,根據實驗的結果,即便加深到150層以上,識別精度也會持續提高。并且,在ILSVRC大賽中,ResNet的錯誤識別率為3.5%(前5類中包含正確解這一精度下的錯誤識別率),令人稱奇。

3、深度學習的高速化

隨著大數據和網絡的大規模化,深度學習需要進行大量的運算。雖然到目前為止,我們都是使用CPU進行計算的,但現實是只用CPU來應對深度學習無法令人放心。實際上,環視一下周圍,大多數深度學習的框架都支持GPU(Graphics Processing Unit),可以高速地處理大量的運算。另外,最近的框架也開始支持多個GPU或多臺機器上的分布式學習。本節我們將焦點放在深度學習的計算的高速化上,然后逐步展開。

3.1 需要努力解決的問題

在介紹深度學習的高速化之前,我們先來看一下深度學習中什么樣的處理比較耗時。圖8-14中以AlexNet的forward處理為對象,用餅圖展示了各層所耗費的時間。
在這里插入圖片描述
從圖中可知,AlexNex中,大多數時間都被耗費在卷積層上。實際上,卷積層的處理時間加起來占GPU整體的95%,占CPU整體的89%!因此,如何高速、高效地進行卷積層中的運算是深度學習的一大課題。雖然該圖是推理時的結果,不過學習時也一樣,卷積層中會耗費大量時間。

正如之前介紹的那樣,卷積層中進行的運算可以追溯至乘積累加運算。因此,深度學習的高速化的主要課題就變成了如何高速、高效地進行大量的乘積累加運算。

3.2 基于GPU的高速化

GPU原本是作為圖像專用的顯卡使用的,但最近不僅用于圖像處理,也用于通用的數值計算。由于GPU可以高速地進行并行數值計算,因此GPU計算的目標就是將這種壓倒性的計算能力用于各種用途。所謂GPU計算,是指基于GPU進行通用的數值計算的操作。

深度學習中需要進行大量的乘積累加運算(或者大型矩陣的乘積運算)。這種大量的并行運算正是GPU所擅長的(反過來說,CPU比較擅長連續的、復雜的計算)。因此,與使用單個CPU相比,使用GPU進行深度學習的運算可以達到驚人的高速化。下面我們就來看一下基于GPU可以實現多大程度的高速化。下圖是基于CPU和GPU進行AlexNet的學習時分別所需的時間。
在這里插入圖片描述
從圖中可知,使用CPU要花40天以上的時間,而使用GPU則可以將時間縮短至6天。此外,還可以看出,通過使用cuDNN這個最優化的庫,可以進一步實現高速化。

GPU主要由NVIDIA和AMD兩家公司提供。雖然兩家的GPU都可以用于通用的數值計算,但與深度學習比較“親近”的是NVIDIA的GPU。實際上,大多數深度學習框架只受益于NVIDIA的GPU。這是因為深度學習的框架中使用了NVIDIA提供的CUDA這個面向GPU計算的綜合開發環境。

圖中出現的cuDNN是在CUDA上運行的庫,它里面實現了為深度學習最優化過的函數等。

通過im2col可以將卷積層進行的運算轉換為大型矩陣的乘積。這個im2col方式的實現對 GPU來說是非常方便的實現方式。這是因為,相比按小規模的單位進行計算,GPU更擅長計算大規模的匯總好的數據。也就是說,通過基于im2col以大型矩陣的乘積的方式匯總計算,更容易發揮出 GPU的能力。

3.3 分布式學習

雖然通過GPU可以實現深度學習運算的高速化,但即便如此,當網絡較深時,學習還是需要幾天到幾周的時間。并且,前面也說過,深度學習伴隨著很多試錯。為了創建良好的網絡,需要反復進行各種嘗試,這樣一來就必然會產生盡可能地縮短一次學習所需的時間的要求。于是,將深度學習的學習過程擴展開來的想法(也就是分布式學習)就變得重要起來。

為了進一步提高深度學習所需的計算的速度,可以考慮在多個GPU或者多臺機器上進行分布式計算。現在的深度學習框架中,出現了好幾個支持多GPU或者多機器的分布式學習的框架。其中,Google的TensorFlow、微軟的CNTK(Computational Network Toolki)在開發過程中高度重視分布式學習。以大型數據中心的低延遲·高吞吐網絡作為支撐,基于這些框架的分布式學習呈現出驚人的效果。

基于分布式學習,可以達到何種程度的高速化呢?圖中顯示了基于TensorFlow的分布式學習的效果。
在這里插入圖片描述
如圖所示,隨著GPU個數的增加,學習速度也在提高。實際上,與使用1個GPU時相比,使用100個GPU(設置在多臺機器上,共100個)似乎可以實現56倍的高速化!這意味著之前花費7天的學習只要3個小時就能完成,充分說明了分布式學習驚人的效果。

3.4 運算精度的位數縮減

在深度學習的高速化中,除了計算量之外,內存容量、總線帶寬等也有可能成為瓶頸。關于內存容量,需要考慮將大量的權重參數或中間數據放在內存中。關于總線帶寬,當流經GPU(或者CPU)總線的數據超過某個限制時,就會成為瓶頸。考慮到這些情況,我們希望盡可能減少流經網絡的數據的位數。

計算機中為了表示實數,主要使用64位或者32位的浮點數。通過使用較多的位來表示數字,雖然數值計算時的誤差造成的影響變小了,但計算的處理成本、內存使用量卻相應地增加了,還給總線帶寬帶來了負荷。

關于數值精度(用幾位數據表示數值),我們已經知道深度學習并不那么需要數值精度的位數。這是神經網絡的一個重要性質。這個性質是基于神經網絡的健壯性而產生的。這里所說的健壯性是指,比如,即便輸入圖像附有一些小的噪聲,輸出結果也仍然保持不變。可以認為,正是因為有了這個健壯性,流經網絡的數據即便有所“劣化”,對輸出結果的影響也較小。

計算機中表示小數時,有32位的單精度浮點數和64位的雙精度浮點數等格式。根據以往的實驗結果,在深度學習中,即便是16位的半精度浮點數(half float),也可以順利地進行學習[30]。實際上,NVIDIA的下一代GPU框架Pascal也支持半精度浮點數的運算,由此可以認為今后半精度浮點數將被作為標準使用。

NVIDIA的Maxwell?GPU雖然支持半精度浮點數的存儲(保存數據的功能),但是運算本身不是用 16位進行的。下一代的 Pascal框架,因為運算也是用 16位進行的,所以只用半精度浮點數進行計算,就有望實現超過上一代 GPU約 2倍的高速化。

以往的深度學習的實現中并沒有注意數值的精度,不過Python中一般使用64位的浮點數。NumPy中提供了16位的半精度浮點數類型(不過,只有16位類型的存儲,運算本身不用16位進行),即便使用NumPy的半精度浮點數,識別精度也不會下降。

4、深度學習的應用案例

前面,作為使用深度學習的例子,我們主要討論了手寫數字識別的圖像類別分類問題(稱為“物體識別”)。不過,深度學習并不局限于物體識別,還可以應用于各種各樣的問題。此外,在圖像、語音、自然語言等各個不同的領域,深度學習都展現了優異的性能。本節將以計算機視覺這個領域為中心,介紹幾個深度學習能做的事情(應用)。

4.1 物體檢測

物體檢測是從圖像中確定物體的位置,并進行分類的問題。如圖所示,要從圖像中確定物體的種類和物體的位置。
在這里插入圖片描述
在使用CNN進行物體檢測的方法中,有一個叫作R-CNN的有名的方法。下圖顯示了R-CNN的處理流。
在這里插入圖片描述
希望大家注意圖中的“2.Extract region proposals”(候選區域的提取)和“3.Compute CNN features”(CNN特征的計算)的處理部分。這里,首先(以某種方法)找出形似物體的區域,然后對提取出的區域應用CNN進行分類。R-CNN中會將圖像變形為正方形,或者在分類時使用SVM(支持向量機),實際的處理流會稍微復雜一些,不過從宏觀上看,也是由剛才的兩個處理(候選區域的提取和CNN特征的計算)構成的。

在R-CNN的前半部分的處理——候選區域的提取(發現形似目標物體的處理)中,可以使用計算機視覺領域積累的各種各樣的方法。R-CNN的論文中使用了一種被稱為Selective Search的方法,最近還提出了一種基于CNN來進行候選區域提取的Faster R-CNN方法[36]。Faster R-CNN用一個CNN來完成所有處理,使得高速處理成為可能。

4.2 圖像分割

圖像分割是指在像素水平上對圖像進行分類。如圖所示,使用以像素為單位對各個對象分別著色的監督數據進行學習。然后,在推理時,對輸入圖像的所有像素進行分類。
在這里插入圖片描述
之前實現的神經網絡是對圖像整體進行了分類,要將它落實到像素水平的話,該怎么做呢?

要基于神經網絡進行圖像分割,最簡單的方法是以所有像素為對象,對每個像素執行推理處理。比如,準備一個對某個矩形區域中心的像素進行分類的網絡,以所有像素為對象執行推理處理。正如大家能想到的,這樣的方法需要按照像素數量進行相應次forward處理,因而需要耗費大量的時間(正確地說,卷積運算中會發生重復計算很多區域的無意義的計算)。為了解決這個無意義的計算問題,有人提出了一個名為FCN(Fully Convolutional Network)的方法。該方法通過一次forward處理,對所有像素進行分類

FCN的字面意思是“全部由卷積層構成的網絡”。相對于一般的 CNN包含全連接層,FCN將全連接層替換成發揮相同作用的卷積層。在物體識別中使用的網絡的全連接層中,中間數據的空間容量被作為排成一列的節點進行處理,而只由卷積層構成的網絡中,空間容量可以保持原樣直到最后的輸出。
在這里插入圖片描述
如圖所示,FCN的特征在于最后導入了擴大空間大小的處理。基于這個處理,變小了的中間數據可以一下子擴大到和輸入圖像一樣的大小。FCN最后進行的擴大處理是基于雙線性插值法的擴大(雙線性插值擴大)。FCN中,這個雙線性插值擴大是通過去卷積(逆卷積運算)來實現的

全連接層中,輸出和全部的輸入相連。使用卷積層也可以實現與此結構完全相同的連接。比如,針對輸入大小是 32×10×10(通道數 32、高 10、長 10)的數據的全連接層可以替換成濾波器大小為32×10×10的卷積層。如果全連接層的輸出節點數是 100,那么在卷積層準備 100個 32×10×10的濾波器就可以實現完全相同的處理。像這樣,全連接層可以替換成進行相同處理的卷積層。

4.3 圖像標題的生成

有一項融合了計算機視覺和自然語言的有趣的研究,該研究如圖所示,給出一個圖像后,會自動生成介紹這個圖像的文字(圖像的標題)。
在這里插入圖片描述
給出一個圖像后,會像圖一樣自動生成表示該圖像內容的文本。比如,左上角的第一幅圖像生成了文本“A person riding a motorcycle on a dirt road.”(在沒有鋪裝的道路上騎摩托車的人),而且這個文本只從該圖像自動生成。文本的內容和圖像確實是一致的。并且,令人驚訝的是,除了“騎摩托車”之外,連“沒有鋪裝的道路”都被正確理解了。

一個基于深度學習生成圖像標題的代表性方法是被稱為NIC(Neural Image Caption)的模型。如下圖所示,NIC由深層的CNN和處理自然語言的RNN(Recurrent Neural Network)構成。RNN是呈遞歸式連接的網絡,經常被用于自然語言、時間序列數據等連續性的數據上。
在這里插入圖片描述
NIC基于CNN從圖像中提取特征,并將這個特征傳給RNN。RNN以CNN提取出的特征為初始值,遞歸地生成文本。這里,我們不深入討論技術上的細節,不過基本上NIC是組合了兩個神經網絡(CNN和RNN)的簡單結構。基于NIC,可以生成驚人的高精度的圖像標題。我們將組合圖像和自然語言等多種信息進行的處理稱為多模態處理。多模態處理是近年來備受關注的一個領域。

RNN的R表示Recurrent(遞歸的)。這個遞歸指的是神經網絡的遞歸的網絡結構。根據這個遞歸結構,神經網絡會受到之前生成的信息的影響(換句話說,會記憶過去的信息),這是 RNN的特征。比如,生成“我”這個詞之后,下一個要生成的詞受到“我”這個詞的影響,生成了“要”;然后,再受到前面生成的“我要”的影響,生成了“睡覺”這個詞。對于自然語言、時間序列數據等連續性的數據,RNN以記憶過去的信息的方式運行。

5、深度學習的未來

5.1 圖像風格變換

有一項研究是使用深度學習來“繪制”帶有藝術氣息的畫。如圖 8-23所示,輸入兩個圖像后,會生成一個新的圖像。兩個輸入圖像中,一個稱為“內容圖像”,另一個稱為“風格圖像”。

如圖所示,如果指定將梵高的繪畫風格應用于內容圖像,深度學習就會按照指示繪制出新的畫作。
在這里插入圖片描述
基于論文“A Neural Algorithm of Artistic Style”的圖像風格變換的例子:左上角是風格圖像,右上角是內容圖像,下面的圖像是新生成的圖像

5.2 圖像的生成

剛才的圖像風格變換的例子在生成新的圖像時輸入了兩個圖像。不同于這種研究,現在有一種研究是生成新的圖像時不需要任何圖像(雖然需要事先使用大量的圖像進行學習,但在“畫”新圖像時不需要任何圖像)。比如,基于深度學習,可以實現從零生成“臥室”的圖像。圖8-24中展示的圖像是基 于 DCGAN(Deep Convolutional Generative Adversarial Network)[41] 方法生成的臥室圖像的例子。
在這里插入圖片描述
圖中的圖像可能看上去像是真的照片,但其實這些圖像都是基于DCGAN新生成的圖像。也就是說,DCGAN生成的圖像是誰都沒有見過的圖像(學習數據中沒有的圖像),是從零生成的新圖像。

能畫出以假亂真的圖像的DCGAN會將圖像的生成過程模型化。使用大量圖像(比如,印有臥室的大量圖像)訓練這個模型,學習結束后,使用這個模型,就可以生成新的圖像。

DCGAN中使用了深度學習,其技術要點是使用了Generator(生成者)和Discriminator(識別者)這兩個神經網絡。Generator生成近似真品的圖像,Discriminator判別它是不是真圖像(是Generator生成的圖像還是實際拍攝的圖像)。像這樣,通過讓兩者以競爭的方式學習,Generator會學習到更加精妙的圖像作假技術,Discriminator則會成長為能以更高精度辨別真假的鑒定師。兩者互相切磋、共同成長,這是GAN(Generative Adversarial Network)這個技術的有趣之處。在這樣的切磋中成長起來的Generator最終會掌握畫出足以以假亂真的圖像的能力(或者說有這樣的可能)。

之前我們見到的機器學習問題都是被稱為監督學習(supervised?learning)的問題。這類問題就像手寫數字識別一樣,使用的是圖像數據和教師標簽成對給出的數據集。不過這里討論的問題,并沒有給出監督數據,只給了大量的圖像(圖像的集合),這樣的問題稱為無監督學習(unsupervised?learning)。無監督學習雖然是很早之前就開始研究的領域(Deep?Belief?Network、Deep?Boltzmann?Machine等很有名),但最近似乎并不是很活躍。今后,隨著使用深度學習的DCGAN等方法受到關注,無監督學習有望得到進一步發展。

5.3 自動駕駛

計算機代替人類駕駛汽車的自動駕駛技術有望得到實現。除了汽車制造商之外,IT企業、大學、研究機構等也都在為實現自動駕駛而進行著激烈的競爭。自動駕駛需要結合各種技術的力量來實現,比如決定行駛路線的路線計劃(path plan)技術、照相機或激光等傳感技術等,在這些技術中,正確識別周圍環境的技術據說尤其重要。這是因為要正確識別時刻變化的環境、自由來往的車輛和行人是非常困難的。

如果可以在各種環境中穩健地正確識別行駛區域的話,實現自動駕駛可能也就沒那么遙遠了。最近,在識別周圍環境的技術中,深度學習的力量備受期待。比如,基于CNN的神經網絡SegNet,可以像圖那樣高精度地識別行駛環境。

圖中對輸入圖像進行了分割(像素水平的判別)。觀察結果可知,在某種程度上正確地識別了道路、建筑物、人行道、樹木、車輛等。今后若能基于深度學習使這種技術進一步實現高精度化、高速化的話,自動駕駛的實用化可能也就沒那么遙遠了。
在這里插入圖片描述

5.4 Deep Q-Network(強化學習)

就像人類通過摸索試驗來學習一樣(比如騎自行車),讓計算機也在摸索試驗的過程中自主學習,這稱為強化學習(reinforcement learning)。強化學習和有“教師”在身邊教的“監督學習”有所不同。

強化學習的基本框架是,代理(Agent)根據環境選擇行動,然后通過這個行動改變環境。根據環境的變化,代理獲得某種報酬。強化學習的目的是決定代理的行動方針,以獲得更好的報酬。
在這里插入圖片描述

圖中展示了強化學習的基本框架。這里需要注意的是,報酬并不是確定的,只是“預期報酬”。比如,在《超級馬里奧兄弟》這款電子游戲中,讓馬里奧向右移動能獲得多少報酬不一定是明確的。這時需要從游戲得分(獲得的硬幣、消滅的敵人等)或者游戲結束等明確的指標來反向計算,決定“預期報酬”。如果是監督學習的話,每個行動都可以從“教師”那里獲得正確的評價。

在使用了深度學習的強化學習方法中,有一個叫作Deep Q-Network(通稱DQN)的方法。該方法基于被稱為Q學習的強化學習算法。這里省略Q學習的細節,不過在Q學習中,為了確定最合適的行動,需要確定一個被稱為最優行動價值函數的函數。為了近似這個函數,DQN使用了深度學習(CNN)。

在DQN的研究中,有讓電子游戲自動學習,并實現了超過人類水平的操作的例子。如圖所示,DQN中使用的CNN 把游戲圖像的幀(連續4幀)作為輸入,最終輸出游戲手柄的各個動作(控制桿的移動量、按鈕操作的有無等)的“價值”。
在這里插入圖片描述
之前在學習電子游戲時,一般是把游戲的狀態(人物的地點等)事先提取出來,作為數據給模型。但是,在DQN中,如圖所示,輸入數據只有電子游戲的圖像。這是DQN值得大書特書的地方,可以說大幅提高了DQN的實用性。為什么呢?因為這樣就無需根據每個游戲改變設置,只要給DQN游戲圖像就可以了。實際上,DQN 可以用相同的結構學習《吃豆人》、Atari等很多游戲,甚至在很多游戲中取得了超過人類的成績。

人工智能 AlphaGo擊敗圍棋冠軍的新聞受到了廣泛關注。這個AlphaGo技術的內部也用了深度學習和強化學習。AlphaGo學習了3000萬個專業棋手的棋譜,并且不停地重復自己和自己的對戰,積累了大量的學習經驗。AlphaGo和 DQN都是 Google的 Deep?Mind公司進行的研究,該公司今后的研究值得密切關注。

6、小結

? 對于大多數的問題,都可以期待通過加深網絡來提高性能。
? 在最近的圖像識別大賽ILSVRC中,基于深度學習的方法獨占鰲頭,
使用的網絡也在深化。
? VGG、GoogLeNet、ResNet等是幾個著名的網絡。
? 基于GPU、分布式學習、位數精度的縮減,可以實現深度學習的高速化。
? 深度學習(神經網絡)不僅可以用于物體識別,還可以用于物體檢測、
圖像分割。
? 深度學習的應用包括圖像標題的生成、圖像的生成、強化學習等。最近,
深度學習在自動駕駛上的應用也備受期待。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905676.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905676.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905676.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何利用 Python 爬蟲按關鍵字搜索京東商品:實戰指南

在電商領域,京東作為國內知名的電商平臺,擁有海量的商品數據。通過 Python 爬蟲技術,我們可以高效地按關鍵字搜索京東商品,并獲取其詳細信息。這些信息對于市場分析、選品上架、庫存管理和價格策略制定等方面具有重要價值。本文將…

?JMeter聚合報告中的任務數和并發數區別

?JMeter聚合報告中的任務數和并發數有本質的區別。? 任務數(樣本數) 任務數或樣本數是指在性能測試中發出的請求數量。例如,如果模擬20個用戶,每個用戶發送100次請求,那么總的任務數或樣本數就是2000次請求? 并發…

Java 框架配置自動化:告別冗長的 XML 與 YAML 文件

在 Java 開發領域,框架的使用極大地提升了開發效率和系統的穩定性。然而,傳統框架配置中冗長的 XML 與 YAML 文件,卻成為開發者的一大困擾。這些配置文件不僅書寫繁瑣,容易出現語法錯誤,而且在項目規模擴大時&#xff…

OpenShift AI - 用 ModelCar 構建容器化模型,提升模型彈性擴展速度

《OpenShift / RHEL / DevSecOps 匯總目錄》 說明:本文已經在 OpenShift 4.18 OpenShift AI 2.19 的環境中驗證 文章目錄 什么是 ModelCar構建模型鏡像在 OpenShift AI 使用模型鏡像部署模型擴展速度對比 參考 什么是 ModelCar KServe 典型的模型初始化方法是從 S…

C#+WPF+prism+materialdesign創建工具主界面框架

代碼使用C#WPFprismmaterialdesign創建工具主界面框架 主界面截圖:

在選擇合適的實驗室鐵地板和鑄鐵試驗平板,幫分析?

鑄鐵測試底板是一種采用鑄鐵材料經過加工制成的基準測量工具,主要用于工業檢測、機械加工和實驗室等高精度要求的場合。其核心功能是為各類測量、檢驗、裝配工作提供穩定的水平基準面,確保測量數據的準確性和一致性。 一、鑄鐵測試底板的基本特性 1.材質…

C++匿名函數

C 中的匿名函數(Lambda 表達式)是 C11 引入的一項重要特性,它允許你在需要的地方定義一個臨時的、無名的函數對象,使代碼更加簡潔和靈活。 1. 基本語法 Lambda 表達式的基本結構: [capture list](parameter list) -…

LabVIEW機械振動信號分析與故障診斷

利用 LabVIEW 開發機械振動信號分析與故障診斷系統,融合小波變換、時頻分布、高階統計量(雙譜)等先進信號處理技術,實現對齒輪、發動機等機械部件的非平穩非高斯振動信號的特征提取與故障診斷。系統通過虛擬儀器技術將理論算法轉化…

湖北理元理律師事務所:債務優化如何實現“減負不降質”?

在債務壓力普遍加劇的背景下,如何平衡債務清償與生活質量,成為個人及企業關注的焦點。湖北理元理律師事務所基于多年實務經驗,總結出一套“法律財務”雙軌制債務優化模型,其核心在于通過科學規劃,幫助債務人在法律框架…

多鏈互操作性標準解析:構建下一代區塊鏈互聯生態

引言 在區塊鏈技術快速演進的今天,“多鏈宇宙”已成為不可逆的趨勢。然而,鏈與鏈之間的孤立性導致流動性割裂、開發成本高昂和用戶體驗碎片化。互操作性標準的制定,正是打破這一僵局的核心鑰匙。本文將深入探討主流互操作性協議的技術架構、…

電腦開機提示按f1原因分析及解決方法(6種解決方法)

經常有網友問到一個問題,我電腦開機后提示按f1怎么解決?不管理是臺式電腦,還是筆記本,都有可能會遇到開機需要按F1,才能進入系統的問題,引起這個問題的原因比較多,今天小編在這里給大家列舉了比較常見的幾種電腦開機提示按f1的解決方法。 電腦開機提示按f1原因分析及解決…

講講git 和svn

講講git 和svn 目錄Git到底是什么?它該怎末用?核心概念基礎操作1. 倉庫的創建2. 文件的提交工作流程3. 分支管理4. 遠程倉庫操作 進階操作實際應用建議**基本用法****常用命令的幫助示例****幫助文檔的結構****替代方法****練習建議****核心概念****與Gi…

【行為型之中介者模式】游戲開發實戰——Unity復雜系統協調與通信架構的核心秘訣

文章目錄 🕊? 中介者模式(Mediator Pattern)深度解析一、模式本質與核心價值二、經典UML結構三、Unity實戰代碼(成就系統協調)1. 定義中介者接口與同事基類2. 實現具體同事類3. 實現具體中介者4. 客戶端使用 四、模式…

【網工第6版】第10章 網絡規劃和設計②

目錄 ■ 網絡分析與設計 ◆ 網絡規劃設計模型 ◆ 網絡設計的約束因素 ◆ 技術評價 ■ 網絡結構與功能 ◆ 局域網結構類型 ■ 網絡冗余設計 ◆ 網絡冗余設計-備用路徑 ◆ 網絡冗余設計-負載分擔 ■ 廣域網接入技術 ◆ 廣域網接入技術 ◆ 接入和終結設備 ■ 網絡分析…

PowerBI鏈接EXCEL實現自動化報表

PowerBI鏈接EXCEL實現自動化報表 曾經我將工作中一天的工作縮短至2個小時,其中最關鍵的一步就是使用PowerBI鏈接Excel做成一個自動化報表,PowerBI更新源數據,Excel更新報表并且保留報表格式。 以制作一個超市銷售報表為例,簡單敘…

C#.NET 或 VB.NET Windows 窗體中的 DataGridView – 技巧、竅門和常見問題

DataGridView 控件是一個 Windows 窗體控件,它允許您自定義和編輯表格數據。它提供了許多屬性、方法和事件來自定義其外觀和行為。在本文中,我們將討論一些常見問題及其解決方案。這些問題來自各種來源,包括一些新聞組、MSDN 網站以及一些由我…

表記錄的檢索

1.select語句的語法格式 select 字段列表 from 表名 where 條件表達式 group by 分組字段 [having 條件表達式] order by 排序字段 [asc|desc];說明: from 子句用于指定檢索的數據源 where子句用于指定記錄的過濾條件 group by 子句用于對檢索的數據進行分組 ha…

能源設備數據采集

在全球可持續發展目標與環境保護理念日益深入人心的時代背景下,有效管理和優化能源使用已成為企業實現綠色轉型、提升競爭力的關鍵路徑。能源設備數據采集系統,作為能源管理的核心技術支撐,通過對各類能源生產設備運行數據的全面收集、深度分…

【鴻蒙開發】性能優化

語言層面的優化 使用明確的數據類型,避免使用模糊的數據類型,例如ESObject。 使用AOT模式 AOT就是提前編譯,將字節碼提前編譯成機器碼,這樣可以充分優化,從而加快執行速度。 未啟用AOT時,一邊運行一邊進…

群暉NAS部署PlaylistDL音樂下載器結合cpolar搭建私有云音樂庫

文章目錄 前言1.關于PlaylistDL音樂下載器2.Docker部署3.PlaylistDL簡單使用4.群暉安裝Cpolar工具5.創建PlaylistDL音樂下載器的公網地址6.配置固定公網地址總結 前言 各位小伙伴們,你們是不是經常為了聽幾首歌而開通各種平臺的VIP?或者為了下載無損音質…