# 一、人工神經網絡
人工神經網絡利用了 DL 的概念 。它們是人類神經系統的抽象表示,其中包含一組神經元,這些神經元通過稱為軸突的連接相互通信。
Warren McCulloch 和 Walter Pitts 在 1943 年根據神經活動的計算模型提出了第一個人工神經元模型。這個模型之后是 John von Neumann,Marvin Minsky,Frank Rosenblatt(所謂的感知器)和其他許多人提出的另一個模型。
## 生物神經元
看一下大腦的架構靈感。大腦中的神經元稱為生物神經元。它們是看起來不尋常的細胞,主要存在于動物大腦中,由皮質組成。皮質本身由細胞體組成,細胞體包含細胞核和細胞的大部分復雜成分。有許多稱為樹突的分支延伸,加上一個稱為軸突的非常長的延伸。
在它的極端附近,軸突分裂成許多分支稱為終樹突,并且在這些分支的頂部是稱為突觸末端(或簡單的突觸)的微小結構,連接到其他神經元的樹突。生物神經元接收稱為來自其他神經元的信號的短電脈沖,作為回應,它們發出自己的信號:

圖 7:生物神經元的工作原理。
在生物學中,神經元由以下組成:
* 細胞體或體細胞
* 一個或多個樹突,其職責是接收來自其他神經元的信號
* 軸突,反過來將同一神經元產生的信號傳遞給其他連接的神經元
神經元的活動在發送/接收來自其他神經元的信號(活動狀態)和休息(非活動狀態)之間交替。從一個相到另一個相的轉變是由外部刺激引起的,由樹枝狀晶體拾取的信號表示。每個信號具有興奮或抑制作用,在概念上由與刺激相關的權重表示。
處于空閑狀態的神經元累積它收到的所有信號,直到達到某個激活閾值。
## 人工神經元
基于生物神經元的概念,出現了人工神經元的術語和思想,它們已被用于構建基于 DL 的預測分析的智能機器。這是啟發人工神經網絡的關鍵理念。與生物神經元類似,人工神經元由以下部分組成:
* 一個或多個傳入連接,其任務是從其他神經元收集數字信號:為每個連接分配一個權重,用于考慮發送的每個信號
* 一個或多個輸出連接,將信號傳遞給其他神經元
* 激活函數,基于一些信號確定輸出信號的數值,信號從和其他神經元的輸入連接接受,并從權重和神經元本身的激活閾值中適當地收集,權重與每個接收信號相關:

圖 8:人工神經元模型。
通過將激活函數(也稱為傳遞函數)應用于輸入的加權和來計算輸出,即神經元傳輸的信號。這些函數的動態范圍介于 -1 和 1 之間,或介于 0 和 1 之間。許多激活函數在復雜性和輸出方面有所不同。在這里,我們簡要介紹三種最簡單的形式:
* 階躍函數:一旦我們確定閾值`x`(例如,`x = 10`),如果輸入之和高于閾值,該函數將返回 1,否則則返回 0。
* 線性組合:不管理閾值,而是從默認值中減去輸入值的加權和。我們將得到二元結果,該結果將由減法的正(+b)或負(-b)輸出表示。
* Sigmoid:這會產生 Sigmoid 曲線,這是一條具有 S 趨勢的曲線。通常,sigmoid 函數指的是邏輯函數的特殊情況。
從第一個人工神經元原型制作中使用的最簡單的形式,我們轉向更復雜的形式,可以更好地表征神經元的功能:
* 雙曲正切函數
* 徑向基函數
* 圓錐截面函數
* Softmax 函數

圖 9:最常用的人工神經元模型傳遞函數。(a)階梯函數(b)線性函數(c)sigmoid 函數,計算值介于 0 和 1 之間(d)sigmoid 函數,計算值介于 -1 和 1 之間。
選擇適當的激活函數(也是權重初始化)是使網絡發揮最佳表現并獲得良好訓練的關鍵。這些主題正在進行大量研究,如果訓練階段正確進行,研究表明在產出質量方面存在微小差異。
### 注意
在神經網絡領域沒有經驗法則。這一切都取決于您的數據以及在通過激活函數后希望數據轉換的形式。如果要選擇特定的激活函數,則需要研究函數的圖形,以查看結果如何根據給定的值進行更改。
# ANN 如何學習?
神經網絡的學習過程被配置為權重優化的迭代過程,因此是監督類型。由于網絡在屬于訓練集的一組示例上的表現(即,您知道示例所屬的類的集合),因此修改權重。
目的是最小化損失函數,其表示網絡行為偏離期望行為的程度。然后在由除了訓練集中的對象之外的對象(例如,圖像分類問題中的圖像)組成的測試集上驗證網絡的表現。
## 人工神經網絡和反向傳播算法
常用的監督學習算法是反向傳播算法。訓練程序的基本步驟如下:
1. 用隨機權重初始化網絡
2. 對于所有訓練案例,請按照下列步驟操作:
* 正向傳播:計算網絡的誤差,即所需輸出與實際輸出之間的差值
* 向后傳遞:對于所有層,從輸出層回到輸入層:
i:使用正確的輸入顯示網絡層的輸出(誤差函數)。
ii:調整當前層中的權重以最小化誤差函數。這是反向傳播的優化步驟。
當驗證集上的誤差開始增加時,訓練過程結束,因為這可能標志著階段過擬合的開始,即網絡傾向于以犧牲訓練數據為代價來內插訓練數據的階段。普遍性。
## 權重優化
因此, 優化權重的有效算法的可用性構成了構建神經網絡的必要工具。該問題可以通過稱為梯度下降(GD)的迭代數值技術來解決。該技術根據以下算法工作:
1. 隨機選擇模型參數的初始值
2. 根據模型的每個參數計算誤差函數的梯度 G.
3. 更改模型的參數,使它們朝著減小誤差的方向移動,即沿 -G 方向移動
4. 重復步驟 2 和 3,直到 G 的值接近零
誤差函數 E 的梯度(G)提供了誤差函數與當前值具有更陡斜率的方向;所以為了減少 E,我們必須在相反的方向上做一些小步驟,-G。
通過以迭代方式多次重復此操作,我們向下移動到 E 的最小值,以達到`G = 0`的點,從而無法進一步進展:

圖 10:搜索誤差函數 E 的最小值。我們沿著函數 E 的梯度 G 最小的方向移動。
## 隨機梯度下降
在 GD 優化中,我們基于完整的訓練集計算成本梯度,因此我們有時也將其稱為批量 GD。在非常大的數據集的情況下,使用 GD 可能非常昂貴,因為我們在訓練集上只進行一次傳遞。訓練集越大,我們的算法更新權重的速度就越慢,并且在收斂到全局成本最小值之前可能需要的時間越長。
最快的梯度下降方法是隨機梯度下降(SGD),因此,它被廣泛應用于深度神經網絡。在 SGD 中,我們僅使用來自訓練集的一個訓練樣本來對特定迭代中的參數進行更新。
這里,術語隨機來自這樣的事實:基于單個訓練樣本的梯度是真實成本梯度的隨機近似。由于其隨機性,通向全局最小成本的路徑并不像 GD 那樣直接,但如果我們可視化 2D 空間中的成本表面,則可能會出現鋸齒形:

圖 11:GD 與 SGD:梯度下降(左圖)確保權重中的每次更新都在正確的方向上完成:最小化成本函數的方向。隨著數據集大小的增長以及每個步驟中更復雜的計算,SGD(右圖)在這些情況下是首選。這里,在處理每個樣本時完成權重的更新,因此,后續計算已經使用了改進的權重。盡管如此,這個原因導致了在最小化誤差函數方面的一些誤導。
# 神經網絡架構
我們連接節點的方式和存在的層數(即輸入和輸出之間的節點級別以及每層神經元的數量)定義了神經網絡的架構。
神經網絡中存在各種類型的架構。我們可以將 DL 架構,分為四組:深度神經網絡(DNN),卷積神經網絡(CNN),循環神經網絡(RNN)和緊急架構(EA)。本章的以下部分將簡要介紹這些架構。更多詳細分析,以及應用實例,將成為本書后續章節的主題。
## 深度神經網絡(DNN)
DNN 是人工神經網絡,它們強烈地面向 DL。在正常分析程序不適用的情況下,由于要處理的數據的復雜性,因此這種網絡是一種極好的建模工具。 DNN 是與我們討論過的神經網絡非常相似的神經網絡,但它們必須實現更復雜的模型(更多的神經元,隱藏層和連接),盡管它們遵循適用于所有 ML 問題的學習原則(例如作為監督學習)。每層中的計算將下面層中的表示轉換為稍微更抽象的表示。
我們將使用術語 DNN 將具體指代多層感知器(MLP),堆疊自編碼器(SAE)和深度信任網絡(DBN)。 SAE 和 DBN 使用自編碼器(AEs)和 RBM 作為架構的塊。它們與 MLP 之間的主要區別在于,訓練分兩個階段執行:無監督的預訓練和監督微調:

圖 12:分別使用 AE 和 RBM 的 SAE 和 DBN。
在無監督預訓練中,如上圖所示,這些層按順序堆疊并以分層方式進行訓練,如使用未標記數據的 AE 或 RBM。然后,在有監督的微調中,堆疊輸出分類器層,并通過用標記數據重新訓練來優化完整的神經網絡。
在本章中,我們不討論 SAE(詳見第 5 章,優化 TensorFlow 自編碼器),但將堅持使用 MLP 和 DBN 并使用這兩種 DNN 架構。我們將看到如何開發預測模型來處理高維數據集。
### 多層感知器
在多層網絡中,可以識別層的人工神經元,以便每個神經元連接到下一層中的所有神經元,確保:
* 屬于同一層的神經元之間沒有連接
* 屬于非相鄰層的神經元之間沒有連接
* 每層的層數和神經元數取決于要解決的問題
輸入和輸出層定義輸入和輸出,并且存在隱藏層,其復雜性實現網絡的不同行為。最后,神經元之間的連接由與相鄰層對相同的矩陣表示。
每個數組包含兩個相鄰層的節點對之間的連接的權重。前饋網絡是層內沒有環路的網絡。
我們將在第 3 章,使用 TensorFlow 的前饋神經網絡中更詳細地描述前饋網絡:

圖 13:MLP 架構
### 深度信念網絡(DBNs)
為了克服 MLP 中的過擬合問題,我們建立了一個 DBN,做了無監督預訓練,為輸入獲得了一組不錯的特征表示,然后微調訓練集從網絡獲得實際預測。雖然 MLP 的權重是隨機初始化的,但 DBN 使用貪婪的逐層預訓練算法通過概率生成模型初始化網絡權重。模型由可見層和多層隨機和潛在變量組成,稱為隱藏單元或特征檢測器。
DBN 是深度生成模型,它們是神經網絡模型,可以復制您提供的數據分布。這允許您從實際數據點生成“虛假但逼真”的數據點。
DBN 由可見層和多層隨機潛在變量組成,這些變量稱為隱藏單元或特征檢測器。前兩層在它們之間具有無向的對稱連接并形成關聯存儲器,而較低層從前一層接收自上而下的有向連接。 DBN 的構建塊是受限玻爾茲曼機(RBM)。如下圖所示,幾個 RBM 一個接一個地堆疊形成 DBN:

圖 14:配置用于半監督學習的 DBN
單個 RBM 由兩層組成。第一層由可見神經元組成,第二層由隱藏神經元組成。下圖顯示了簡單 RBM 的結構。可見單元接受輸入,隱藏單元是非線性特征檢測器。每個可見神經元都連接到所有隱藏的神經元,但同一層中的神經元之間沒有內部連接。
RBM 由可見層節點和隱藏層節點組成,但沒有可見 - 隱藏和隱藏 - 隱藏連接,因此項受限制。它們允許更有效的網絡訓練,可以監督或監督。這種類型的神經網絡能夠表示輸入的大量特征,然后隱藏的節點可以表示多達 2n 個特征。可以訓練網絡回答單個問題(例如,問題是或否:它是貓嗎?),直到它能夠(再次以二元的方式)響應總共 2n 個問題(它是貓嗎? ,這是暹羅人?,它是白色的嗎?)。
RBM 的架構如下,神經元根據對稱的二分圖排列:

圖 15:RBM 架構。
由于無法對變量之間的關系進行建模,因此單個隱藏層 RBM 無法從輸入數據中提取所有特征。因此,一層接一層地使用多層 RBM 來提取非線性特征。在 DBN 中,首先使用輸入數據訓練 RBM,并且隱藏層表示使用貪婪學習方法學習的特征。這些第一 RBM 的學習特征,即第一 RBM 的隱藏層,被用作第二 RBM 的輸入,作為 DBN 中的另一層。
類似地,第二層的學習特征用作另一層的輸入。這樣,DBN 可以從輸入數據中提取深度和非線性特征。最后一個 RBM 的隱藏層代表整個網絡的學習特征。
## 卷積神經網絡(CNNs)
CNN 已經專門用于圖像識別。學習中使用的每個圖像被分成緊湊的拓撲部分,每個部分將由過濾器處理以搜索特定模式。形式上,每個圖像被表示為像素的三維矩陣(寬度,高度和顏色),并且每個子部分可以與濾波器組卷積在一起。換句話說,沿著圖像滾動每個濾鏡計算相同濾鏡和輸入的內積。
此過程為各種過濾器生成一組特征圖(激活圖)。將各種特征圖疊加到圖像的相同部分上,我們得到輸出量。這種類型的層稱為卷積層。下圖是 CNN 架構的示意圖:

圖 16:CNN 架構。
雖然常規 DNN 適用于小圖像(例如,MNIST 和 CIFAR-10),但由于需要大量參數,它們會因較大的圖像而崩潰。例如,`100×100`圖像具有 10,000 個像素,并且如果第一層僅具有 1,000 個神經元(其已經嚴格限制傳輸到下一層的信息量),則這意味著 1000 萬個連接。另外,這僅適用于第一層。
CNN 使用部分連接的層解決了這個問題。由于相鄰層僅部分連接,并且因為它重復使用其權重,因此 CNN 的參數遠遠少于完全連接的 DNN,這使得訓練速度更快。這降低了過擬合的風險,并且需要更少的訓練數據。此外,當 CNN 已經學習了可以檢測特定特征的內核時,它可以在圖像上的任何地方檢測到該特征。相反,當 DNN 在一個位置學習一個特征時,它只能在該特定位置檢測到它。由于圖像通常具有非常重復的特征,因此 CNN 在圖像處理任務(例如分類)和使用較少的訓練示例方面能夠比 DNN 更好地推廣。
重要的是,DNN 沒有關于如何組織像素的先驗知識;它不知道附近的像素是否接近。 CNN 的架構嵌入了這一先驗知識。較低層通常識別圖像的單元域中的特征,而較高層將較低層特征組合成較大特征。這適用于大多數自然圖像,使 CNN 在 DNN 上具有決定性的先機:

圖 17:常規 DNN 與 CNN。
例如,在上圖中,在左側,您可以看到常規的三層神經網絡。在右側,CNN 以三維(寬度,高度和深度)排列其神經元,如在其中一個層中可視化。 CNN 的每一層都將 3D 輸入音量轉換為神經元激活的 3D 輸出音量。紅色輸入層保持圖像,因此其寬度和高度將是圖像的尺寸,深度將是三個(紅色,綠色和藍色通道)。
因此,我們所看到的所有多層神經網絡都有由長線神經元組成的層,我們不得不將輸入圖像或數據平鋪到 1D,然后再將它們饋送到神經網絡。但是,當您嘗試直接為它們提供 2D 圖像時會發生什么?答案是在 CNN 中,每個層都用 2D 表示,這樣可以更容易地將神經元與其相應的輸入進行匹配。我們將在接下來的部分中看到這方面的示例。
## 自編碼器
AE 是具有三層或更多層的網絡 ,其中輸入層和輸出具有相同數量的神經元,并且那些中間(隱藏層)具有較少數量的神經元。對網絡進行訓練,以便在輸出中簡單地為每條輸入數據再現輸入中相同的活動模式。
AE 是能夠在沒有任何監督的情況下學習輸入數據的有效表示的 ANN(即,訓練集是未標記的)。它們通常具有比輸入數據低得多的維度,使得 AE 可用于降低維數。更重要的是,AE 作為強大的特征檢測器,它們可用于 DNN 的無監督預訓練。
該問題的顯著方面在于,由于隱藏層中神經元的數量較少,如果網絡可以從示例中學習并推廣到可接受的程度,則它執行數據壓縮;對于每個示例,隱藏神經元的狀態為輸入和輸出公共狀態的壓縮版本提供。 AEs 的有用應用是數據可視化的數據去噪和降維。
下圖顯示了 AE 通常如何工作;它通過兩個階段重建接收的輸入:編碼階段,其對應于原始輸入的尺寸減小;以及解碼階段,其能夠從編碼(壓縮)表示重建原始輸入:

圖 18:自編碼器的編碼和解碼階段。
作為無監督神經網絡,自編碼器的主要特征是其對稱結構。 自編碼器有兩個組件:將輸入轉換為內部表示的編碼器,然后是將內部表示轉換為輸出的解碼器。
換句話說, 自編碼器可以看作是編碼器的組合,其中我們將一些輸入編碼為代碼,以及解碼器,其中我們將代碼解碼/重建為其原始輸入作為輸出。因此,MLP 通常具有與自編碼器相同的架構,除了輸出層中的神經元的數量必須等于輸入的數量。
如前所述,訓練自編碼器的方法不止一種。第一種方法是一次訓練整個層,類似于 MLP。但是,在計算成本函數時,不像在監督學習中使用某些標記輸出,我們使用輸入本身。因此,成本函數顯示實際輸入和重建輸入之間的差異。
## 循環神經網絡(RNNs)
RNN 的基本特征是網絡包含至少一個反饋連接,因此激活可以在循環中流動。它使網絡能夠進行時間處理和學習序列,例如執行序列識別/再現或時間關聯/預測。
RNN 架構可以有許多不同的形式。一種常見類型包括標準 MLP 加上添加的循環。這些可以利用 MLP 強大的非線性映射功能,并具有某種形式的內存。其他人具有更均勻的結構,可能與每個神經元連接到所有其他神經元,并且可能具有隨機激活函數:

圖 19:RNN 架構。
對于簡單的架構和確定性激活函數,可以使用類似的 GD 過程來實現學習,這些過程導致用于前饋網絡的反向傳播算法。
上圖查看了 RNN 的一些最重要的類型和功能。 RNN 被設計成利用輸入數據的順序信息,與諸如感知器,長短期存儲器單元(LSTM)或門控循環單元(GRU)之類的構件塊之間的循環連接。后兩者用于消除常規 RNN 的缺點,例如梯度消失/爆炸問題和長短期依賴性。我們將在后面的章節中討論這些架構。
## 前沿架構
已經提出了許多其他前沿 DL 架構 ,例如深度時空神經網絡(DST-NN),多維循環神經網絡(MD-RNN),和卷積自編碼器(CAE)。
然而,人們正在談論和使用其他新興網絡,例如 CapsNets(CNN 的改進版本,旨在消除常規 CNN 的缺點),用于個性化的分解機和深度強化學習。
# 深度學習框架
在本節中,我們介紹了一些最流行的 DL 框架。簡而言之,幾乎所有的庫都提供了使用圖形處理器加速學習過程的可能性,在開放許可下發布,并且是大學研究小組的結果。
TensorFlow 是數學軟件,是一個開源軟件庫,用 Python 和 C++ 編寫,用于機器智能。 Google Brain 團隊在 2011 年開發了它,它可以用來幫助我們分析數據,預測有效的業務成果。構建神經網絡模型后,在必要的特征工程之后,您可以使用繪圖或 TensorBoard 以交互方式執行訓練。
最新版 TensorFlow 提供的主要功能包括更快的計算,靈活性,可移植性,易于調試,統一的 API,GPU 計算的透明使用,易用性和可擴展性。其他好處包括它被廣泛使用,支持,并且可以大規模生產。
Keras 是一個深度學習庫,位于 TensorFlow 和 Theano 之上,提供了一個直觀的 API,受到了 Torch(可能是現有的最佳 Python API)的啟發。 Deeplearning4j 依賴于 Keras 作為其 Python API,并從 Keras 和 Keras,Theano 和 TensorFlow 導入模型。
Google 的軟件工程師 Fran?oisChollet 創建了 Keras。它可以在 CPU 和 GPU 上無縫運行。這樣可以通過用戶友好性,模塊化和可擴展性輕松快速地進行原型設計。 Keras 可能是增長最快的框架之一,因為構建 NN 層太容易了。因此,Keras 很可能成為 NN 的標準 Python API。
Theano 可能是最常見的庫。 Theano 是用 Python 編寫的,它是 ML 領域中使用最廣泛的語言之一(Python 也用于 TensorFlow)。此外,Theano 允許使用 GPU,比單 CPU 快 24 倍。 Theano 允許您有效地定義,優化和求值復雜的數學表達式,例如多維數組。不幸的是,Yoshua Bengio 于 2017 年 9 月 28 日宣布,Theano 的發展將停止。這意味著 Theano 實際上已經死了。
Neon 是由 Nirvana 開發的基于 Python 的深度學習框架。 Neon 的語法類似于 Theano 的高級框架(例如,Keras)。目前,Neon 被認為是基于 GPU 的最快工具,特別是對于 CNN。雖然它的基于 CPU 的實現比大多數其他庫相對更差。
Torch 是 ML 的巨大生態系統,提供大量算法和函數,包括 DL 和處理各種類型的多媒體數據,特別關注并行計算。它為 C 語言提供了出色的接口, 擁有龐大的用戶社區。 Torch 是一個擴展腳本語言 Lua 的庫,旨在為設計和訓練 ML 系統提供靈活的環境。 Torch 是各種平臺(Windows,Mac,Linux 和 Android)上的獨立且高度可移植的框架,腳本可以在這些平臺上運行而無需修改。 Torch 為不同的應用提供了許多用途。
Caffe,主要由伯克利遠景和學習中心(BVLC)開發 ,是一個框架 ,因其表達,速度和模塊性而脫穎而出。其獨特的架構鼓勵應用和創新,使計算更容易從 CPU 轉換到 GPU。龐大的用戶群意味著最近發生了相當大的發展。它是用 Python 編寫的,但由于需要編譯的眾多支持庫,安裝過程可能很長。
MXNet 是一個支持多種語言的 DL 框架,例如 R,Python,C++ 和 Julia。這很有幫助,因為如果你知道這些語言中的任何一種,你根本不需要走出自己的舒適區來訓練你的 DL 模型。它的后端用 C++ 和 CUDA 編寫,它能夠以與 Theano 類似的方式管理自己的內存。
MXNet 也很受歡迎,因為它可以很好地擴展,并且可以與多個 GPU 和計算機一起使用,這使它對企業非常有用。這就是為什么亞馬遜將 MXNet 作為 DL 的參考庫。 2017 年 11 月,AWS 宣布推出 ONNX-MXNet,這是一個開源 Python 包,用于將開放式神經網絡交換(ONNX) DL 模型導入 Apache MXNet。
Microsoft Cognitive Toolkit(CNTK)是 Microsoft Research 的統一 DL 工具包,可以輕松訓練, 將多種 GPU 和服務器中的流行模型類型組合在一起。 CNTK 為語音,圖像和文本數據實現高效的 CNN 和 RNN 訓練。它支持 cuDNN v5.1 進行 GPU 加速。 CNTK 還支持 Python,C++ ,C#和命令行接口。
這是一個總結這些框架的表:
| 框架 | 支持的編程語言 | 訓練教材和社區 | CNN 建模能力 | RNN 建模能力 | 可用性 | 多 GPU 支持 |
| --- | --- | --- | --- | --- | --- | --- |
| Theano | Python,C++ | ++ | 豐富的 CNN 教程和預建模型 | 豐富的 RNN 教程和預建模型 | 模塊化架構 | 否 |
| Neon | Python, | + | CNN 最快的工具 | 資源最少 | 模塊化架構 | 否 |
| Torch | Lua,Python | + | 資源最少 | 豐富的 RNN 教程和預建模型 | 模塊化架構 | 是 |
| Caffe | C++ | ++ | 豐富的 CNN 教程和預建模型 | 資源最少 | 創建層需要時間 | 是 |
| MXNet | R,Python,Julia,Scala | ++ | 豐富的 CNN 教程和預建模型 | 資源最少 | 模塊化架構 | 是 |
| CNTK | C++ | + | 豐富的 CNN 教程和預建模型 | 豐富的 RNN 教程和預建模型 | 模塊化架構 | 是 |
| TensorFlow | Python,C++ | +++ | 豐富的 RNN 教程和預建模型 | 豐富的 RNN 教程和預建模型 | 模塊化架構 | 是 |
| DeepLearning4j | Java,Scala | +++ | 豐富的 RNN 教程和預建模型 | 豐富的 RNN 教程和預建模型 | 模塊化架構 | 是 |
| Keras | Python | +++ | 豐富的 RNN 教程和預建模型 | 豐富的 RNN 教程和預建模型 | 模塊化架構 | 是 |
除了前面的庫之外,最近還有一些關于云計算的 DL 項目。這個想法是將 DL 功能帶到大數據,擁有數十億個數據點和高維數據。例如,Amazon Web Services(AWS),Microsoft Azure,Google Cloud Platform 和 NVIDIA GPU Cloud(NGC)[都提供機器和深度學習服務](http://searchbusinessanalytics.techtarget.com/feature/Machine-learning-platforms-comparison-Amazon-Azure-Google-IBM),它們是公共云的原生。
2017 年 10 月,AWS 針對 Amazon Elastic Compute Cloud(EC2)P3 實例發布了深度學習 AMI(亞馬遜機器映像) 。這些 AMI 預裝了深度學習框架,如 TensorFlow,Gluon 和 Apache MXNet,這些框架針對 Amazon EC2 P3 實例中的 NVIDIA Volta V100 GPU 進行了優化。深度學習服務目前提供三種類型的 AMI:Conda AMI,Base AMI 和帶源代碼的 AMI。
Microsoft Cognitive Toolkit 是 Azure 的開源深度學習服務。與 AWS 的產品類似,它側重于可以幫助開發人員構建和部署深度學習應用的工具。該工具包安裝在 Python 2.7 的根環境中。 Azure 還提供了一個[模型庫](https://www.microsoft.com/en-us/cognitive-toolkit/features/model-gallery/),其中包含代碼示例等資源,以幫助企業開始使用該服務。
另一方面,[NGC 為 AI 科學家和研究人員提供 GPU 加速容器](https://www.nvidia.com/en-us/data-center/gpu-cloud-computing/)。 NGC 采用容器化的深度學習框架,如 TensorFlow,PyTorch 和 MXNet,經過 NVIDIA 的調整,測試和認證,可在參與的云服務提供商的最新 NVIDIA GPU 上運行。盡管如此,還有通過各自市場提供的第三方服務。
# 總結
在本章中,我們介紹了 DL 的一些基本主題。 DL 由一組方法組成,這些方法允許 ML 系統獲得多個級別上的數據的分層表示。這是通過組合簡單單元來實現的,每個簡單單元從輸入級別開始,以更高和抽象級別的表示,在其自己的級別上轉換表示。
最近,這些技術提供了許多應用中從未見過的結果,例如圖像識別和語音識別。這些技術普及的主要原因之一是 GPU 架構的發展,這大大減少了 DNN 的訓練時間。
有不同的 DNN 架構,每個架構都是針對特定問題而開發的。我們將在后面的章節中更多地討論這些架構,并展示使用 TensorFlow 框架創建的應用示例。本章最后簡要介紹了最重要的 DL 框架。
在下一章中,我們將開始我們的 DL 之旅,介紹 TensorFlow 軟件庫。我們將介紹 TensorFlow 的主要功能,并了解如何安裝它并設置我們的第一個工作再營銷數據集。
- TensorFlow 1.x 深度學習秘籍
- 零、前言
- 一、TensorFlow 簡介
- 二、回歸
- 三、神經網絡:感知器
- 四、卷積神經網絡
- 五、高級卷積神經網絡
- 六、循環神經網絡
- 七、無監督學習
- 八、自編碼器
- 九、強化學習
- 十、移動計算
- 十一、生成模型和 CapsNet
- 十二、分布式 TensorFlow 和云深度學習
- 十三、AutoML 和學習如何學習(元學習)
- 十四、TensorFlow 處理單元
- 使用 TensorFlow 構建機器學習項目中文版
- 一、探索和轉換數據
- 二、聚類
- 三、線性回歸
- 四、邏輯回歸
- 五、簡單的前饋神經網絡
- 六、卷積神經網絡
- 七、循環神經網絡和 LSTM
- 八、深度神經網絡
- 九、大規模運行模型 -- GPU 和服務
- 十、庫安裝和其他提示
- TensorFlow 深度學習中文第二版
- 一、人工神經網絡
- 二、TensorFlow v1.6 的新功能是什么?
- 三、實現前饋神經網絡
- 四、CNN 實戰
- 五、使用 TensorFlow 實現自編碼器
- 六、RNN 和梯度消失或爆炸問題
- 七、TensorFlow GPU 配置
- 八、TFLearn
- 九、使用協同過濾的電影推薦
- 十、OpenAI Gym
- TensorFlow 深度學習實戰指南中文版
- 一、入門
- 二、深度神經網絡
- 三、卷積神經網絡
- 四、循環神經網絡介紹
- 五、總結
- 精通 TensorFlow 1.x
- 一、TensorFlow 101
- 二、TensorFlow 的高級庫
- 三、Keras 101
- 四、TensorFlow 中的經典機器學習
- 五、TensorFlow 和 Keras 中的神經網絡和 MLP
- 六、TensorFlow 和 Keras 中的 RNN
- 七、TensorFlow 和 Keras 中的用于時間序列數據的 RNN
- 八、TensorFlow 和 Keras 中的用于文本數據的 RNN
- 九、TensorFlow 和 Keras 中的 CNN
- 十、TensorFlow 和 Keras 中的自編碼器
- 十一、TF 服務:生產中的 TensorFlow 模型
- 十二、遷移學習和預訓練模型
- 十三、深度強化學習
- 十四、生成對抗網絡
- 十五、TensorFlow 集群的分布式模型
- 十六、移動和嵌入式平臺上的 TensorFlow 模型
- 十七、R 中的 TensorFlow 和 Keras
- 十八、調試 TensorFlow 模型
- 十九、張量處理單元
- TensorFlow 機器學習秘籍中文第二版
- 一、TensorFlow 入門
- 二、TensorFlow 的方式
- 三、線性回歸
- 四、支持向量機
- 五、最近鄰方法
- 六、神經網絡
- 七、自然語言處理
- 八、卷積神經網絡
- 九、循環神經網絡
- 十、將 TensorFlow 投入生產
- 十一、更多 TensorFlow
- 與 TensorFlow 的初次接觸
- 前言
- 1.?TensorFlow 基礎知識
- 2. TensorFlow 中的線性回歸
- 3. TensorFlow 中的聚類
- 4. TensorFlow 中的單層神經網絡
- 5. TensorFlow 中的多層神經網絡
- 6. 并行
- 后記
- TensorFlow 學習指南
- 一、基礎
- 二、線性模型
- 三、學習
- 四、分布式
- TensorFlow Rager 教程
- 一、如何使用 TensorFlow Eager 構建簡單的神經網絡
- 二、在 Eager 模式中使用指標
- 三、如何保存和恢復訓練模型
- 四、文本序列到 TFRecords
- 五、如何將原始圖片數據轉換為 TFRecords
- 六、如何使用 TensorFlow Eager 從 TFRecords 批量讀取數據
- 七、使用 TensorFlow Eager 構建用于情感識別的卷積神經網絡(CNN)
- 八、用于 TensorFlow Eager 序列分類的動態循壞神經網絡
- 九、用于 TensorFlow Eager 時間序列回歸的遞歸神經網絡
- TensorFlow 高效編程
- 圖嵌入綜述:問題,技術與應用
- 一、引言
- 三、圖嵌入的問題設定
- 四、圖嵌入技術
- 基于邊重構的優化問題
- 應用
- 基于深度學習的推薦系統:綜述和新視角
- 引言
- 基于深度學習的推薦:最先進的技術
- 基于卷積神經網絡的推薦
- 關于卷積神經網絡我們理解了什么
- 第1章概論
- 第2章多層網絡
- 2.1.4生成對抗網絡
- 2.2.1最近ConvNets演變中的關鍵架構
- 2.2.2走向ConvNet不變性
- 2.3時空卷積網絡
- 第3章了解ConvNets構建塊
- 3.2整改
- 3.3規范化
- 3.4匯集
- 第四章現狀
- 4.2打開問題
- 參考
- 機器學習超級復習筆記
- Python 遷移學習實用指南
- 零、前言
- 一、機器學習基礎
- 二、深度學習基礎
- 三、了解深度學習架構
- 四、遷移學習基礎
- 五、釋放遷移學習的力量
- 六、圖像識別與分類
- 七、文本文件分類
- 八、音頻事件識別與分類
- 九、DeepDream
- 十、自動圖像字幕生成器
- 十一、圖像著色
- 面向計算機視覺的深度學習
- 零、前言
- 一、入門
- 二、圖像分類
- 三、圖像檢索
- 四、對象檢測
- 五、語義分割
- 六、相似性學習
- 七、圖像字幕
- 八、生成模型
- 九、視頻分類
- 十、部署
- 深度學習快速參考
- 零、前言
- 一、深度學習的基礎
- 二、使用深度學習解決回歸問題
- 三、使用 TensorBoard 監控網絡訓練
- 四、使用深度學習解決二分類問題
- 五、使用 Keras 解決多分類問題
- 六、超參數優化
- 七、從頭開始訓練 CNN
- 八、將預訓練的 CNN 用于遷移學習
- 九、從頭開始訓練 RNN
- 十、使用詞嵌入從頭開始訓練 LSTM
- 十一、訓練 Seq2Seq 模型
- 十二、深度強化學習
- 十三、生成對抗網絡
- TensorFlow 2.0 快速入門指南
- 零、前言
- 第 1 部分:TensorFlow 2.00 Alpha 簡介
- 一、TensorFlow 2 簡介
- 二、Keras:TensorFlow 2 的高級 API
- 三、TensorFlow 2 和 ANN 技術
- 第 2 部分:TensorFlow 2.00 Alpha 中的監督和無監督學習
- 四、TensorFlow 2 和監督機器學習
- 五、TensorFlow 2 和無監督學習
- 第 3 部分:TensorFlow 2.00 Alpha 的神經網絡應用
- 六、使用 TensorFlow 2 識別圖像
- 七、TensorFlow 2 和神經風格遷移
- 八、TensorFlow 2 和循環神經網絡
- 九、TensorFlow 估計器和 TensorFlow HUB
- 十、從 tf1.12 轉換為 tf2
- TensorFlow 入門
- 零、前言
- 一、TensorFlow 基本概念
- 二、TensorFlow 數學運算
- 三、機器學習入門
- 四、神經網絡簡介
- 五、深度學習
- 六、TensorFlow GPU 編程和服務
- TensorFlow 卷積神經網絡實用指南
- 零、前言
- 一、TensorFlow 的設置和介紹
- 二、深度學習和卷積神經網絡
- 三、TensorFlow 中的圖像分類
- 四、目標檢測與分割
- 五、VGG,Inception,ResNet 和 MobileNets
- 六、自編碼器,變分自編碼器和生成對抗網絡
- 七、遷移學習
- 八、機器學習最佳實踐和故障排除
- 九、大規模訓練
- 十、參考文獻