關於深度學習,這些知識點你需要了解一下
深度學習概述
o 受限玻爾茲曼機和深度信念網路
o Dropout
o 處理不平衡的技巧
o SMOTE:合成少數過取樣技術
o 神經網路中對成本敏感的學習
深度學習概述
在2006年之前,訓練深度監督前饋神經網路總是失敗的,其主要原因都是導致過度擬合,即訓練錯誤減少,而驗證錯誤增加。
深度網路通常意味著具有多於1個隱藏層的人工神經網路。訓練深層隱藏層需要更多的計算能力,具有更深的深度似乎更好,因為直覺神經元可以使用下面圖層中的神經元完成的工作,從而導致資料的分散式表示。
Bengio 認為隱藏層中的神經元可被看作是其下面的層中的神經元所學到的特徵檢測器(feature detector)。這個結果處於作為一個神經元子集的更好泛化(generalization)中,而這個神經元子集可從輸入空間中的特定區域的資料上進行學習。
而且,由於相同功能所需的計算單元越少,效率就越高,所以更深的架構可以更高效。分散式背後的核心思想是共享統計優勢,將不同架構的元件重用於不同的目的。
深度神經架構是由多個利用非線性操作的層組成的,例如在帶有許多隱藏層的神經網路中。資料集中常常存在各種變化的因素,例如資料各自的性質經常可能獨立地變化。
深度學習演算法可以獲取解釋資料中的統計變化,以及它們如何相互作用以生成我們觀察到的資料型別。較低層次的抽象更直接地與特定的觀察聯絡在一起,另一方面,更高層次的更抽象,因為他們與感知資料的聯絡更加偏遠。
深度架構學習的重點是自動發現從低階特徵到更高階別概念的抽象。演算法可以在不需要手動定義必要抽象的情況下啟用發現這些定義。
資料集中的訓練樣本的多樣性必須至少與測試集中的一樣多,否則演算法就不能一概而論。深度學習方法旨在學習特徵層次結構,將更低層次的特徵組合成更高層次的抽象。
具有大量引數的深度神經網路是非常強大的機器學習系統。但是,過度擬合在深度網路中是一個嚴重的問題。過度擬合是指當驗證錯誤開始增加而訓練錯誤下降時。Dropout是解決這個問題的正則化技術之一,這將在後面討論。
今天,深度學習技術取得成功的最重要因素之一是計算能力的提高。圖形處理單元(GPU)和雲端計算對於將深度學習應用於許多問題至關重要。
雲端計算允許計算機叢集和按需處理,通過並行訓練神經網路來幫助減少計算時間。另一方面,GPU是用於高效能數學計算的專用晶片,加速了矩陣的計算。
在06-07這一年,三篇論文徹底改變了深度學習的學科。他們工作中的關鍵原則是每層都可以通過無監督學習進行預先訓練,一次完成一層。最後,通過誤差反向傳播的監督訓練微調所有層,使得這種通過無監督學習進行的初始化比隨機初始化更好。
受限玻爾茲曼機和深度信念網路
其中有一種無監督演算法是受限玻爾茲曼機(RBM),可用於預訓練深層信念網路。RBM是波爾茲曼機的簡化版本,它的設計靈感來自於統計力學,它可以模擬給定資料集的基本分佈的基於能量的概率,從中可以得出條件分佈。
玻爾茲曼機是隨機處理可見單元和隱藏單元的雙向連線網路。原始資料對應於'可見'神經元和樣本到觀察狀態,而特徵檢測器對應'隱藏'神經元。在波爾茲曼機中,可見神經元為網路和其執行環境提供輸入。訓練過程中,可見神經元被鉗制(設定成定義值,由訓練資料確定)。另一方面,隱藏的神經元可以自由操作。
然而,玻爾茲曼機因為其連通性而非常難以訓練。一個 RBM 限制了連通性從而使得學習變得簡單。在組成二分圖(bipartite graph)的單層中,隱藏單元沒有連線。它的優勢是隱藏單位可以獨立更新,並且與給定的可見狀態平行。
這些網路由確定隱藏/可見狀態概率的能量函式控制。隱藏/可見單位的每個可能的連線結構( joint configurations )都有一個由權重和偏差決定的 Hopfield 能量。連線結構的能量由吉布斯取樣優化,它可通過最小化 RBM 的最低能量函式學習引數。
在深度信念網路(DBN)中,RBM由輸入資料進行訓練,輸入資料具有隱藏層中隨機神經元捕獲的輸入資料的重要特徵。在第二層中,訓練特徵的啟用被視為輸入資料。第二個RBM層的學習過程可以看作是學習特徵的特徵。每次當一個新的層被新增到深度信念網路中時,原始訓練資料的對數概率上的可變的更低的界限就會獲得提升。
隨機初始化RBM的權重,導致p(x)和q(x)的分佈差異。學習期間,迭代調整權重以最小化p(x)和q(x)之間的誤差。q(x)是原始資料的近似值,p(x)是原始資料。
調整來自神經元和另一神經元的突觸權重的規則不依賴於神經元是可見的還是隱藏的。由RBM層更新的引數被用作DBN中的初始化,通過反向傳播的監督訓練來微調所有層。
對於KDD Cup 1999的IDS資料,使用多模態(Bernoulli-Gaussian)RBM是不錯的選擇,因為KDD Cup 1999由混合資料型別組成,特別是連續和分類。在多模RBM中是使用兩個不同的通道輸入層,一個是用於連續特徵的高斯輸入單元,另一個是使用二進位制特徵的伯努利輸入單元層。今天我們就不進行詳細講解。
Dropout
最近的發展是想深度網路引入強大的正規化矩陣來減少過度擬合。在機器學習中,正則化是附加資訊,通常是一種懲罰機制被引入,以懲罰導致過度擬合的模型的複雜性。
Dropout是由Hinton引入的深度神經網路的正則化技術,其包括通過在每一個訓練迭代上隨機關掉一部分神經元,而是在測試時間使用整個網路(權重按比例縮小),從而防止特徵檢測器的共適應。
Dropout 通過等同於訓練一個共享權重的指數模型減少過擬合。對於給定的訓練迭代,存在不同 dropout 配置的不同指數,所以幾乎可以肯定每次訓練出的模型都不一樣。在測試階段,使用了所有模型的平均值,作為強大的總體方法。
在機器學習競賽中,平均很多模型通常是許多機器學習競賽獲勝者的關鍵,使用許多不同型別的模型,然後在測試時間將其結合起來進行預測。
隨機森林是一個非常強大的bagging演算法,它是通過對許多決策樹進行平均而建立的,給它們提供了不同的訓練樣本集和替換。眾所周知,決策樹很容易適應資料並且在測試時間快速,因此通過給予不同的訓練集合來平均不同的單獨樹木是可以承受的。
然而,對深度神經網路使用相同的方法,在計算上是非常昂貴。訓練單獨的深度神經網路和訓練多個深度神經網路計算成本已經很高了,然後平均似乎是不切實際的。此外,我們需要的是在測試有效的單個網路,而不是有大量的大型神經網路。
Dropout是平均許多大型神經網路的有效方法。每次訓練模型時,隱藏單元都可以省略。因此,在測試時我們應該使用權重減半的“平均網路”模型。平均網路等同於將所有可能網路預測的標籤上概率分佈的幾何平均值與單個隱藏的單位層和softmax輸出層。
另一種看待Dropout的方法是,它能夠防止特徵檢測器之間的共適應(co-adaption)。特徵檢測器的共適應意味著如果隱藏單元知道存在哪些其他隱藏單元,則可以在訓練資料上與它們進行協調。但是,在測試資料集上,複合協調很可能無法一概而論。
Dropout也可以以一種較低的概率在輸入層中使用,通常為20%的概率。這裡的概念和降噪自動編碼器發展出的概念相同。在此方法中,一些輸入會被遺漏。這會對準確性造成傷害,但也能改善泛化能力,其方式類似於在訓練時將噪聲新增到資料集中。
在2013年出現了Dropout的一種變體,稱為Drop connect。它不再是以特定的概率權重捨棄隱藏單位,而是以一定的概率隨機捨棄。實驗結果已經表明,在MNIST資料集上Drop connect網路比的dropout網路表現的更好。
處理類別失衡的技巧
當一個類別(少數類)相比於其他類別(多數類)明顯代表性不足的時候就會產生類別失衡問題。這個難題有著現實意義,會對誤分類少數類造成極高的代價,比如檢測欺詐或入侵這樣的異常活動。這裡有多種技術可以處理類別失衡難題,如下面解釋的這一種:
SMOTE:合成少數過取樣技術
解決類失衡問題的一種廣泛使用的方法是對資料集進行重取樣。抽樣方法涉及通過調整少數群體和多數群體的先驗分佈來預處理和平衡訓練資料集。SMOTE是一種過抽樣的方法,其中通過建立“合成”示例而不是通過對替換進過行取樣來對少數類別進行過取樣。
已經有人提出說通過替換進行的少數類過取樣不能顯著改進結果,不如說它趨於過擬合少數類的分類。相反,SMOTE演算法在“特徵空間”而不是“資料空間”中執行。它通過對少數類別進行過度抽樣來建立合成樣本,從而更好地推廣。
這個想法的靈感來自於通過對真實資料進行操作來建立額外的訓練資料,以便有更多資料有助於推廣預測。
在此演算法中第一個最近鄰(neighbours)是為了少數類計算的。然後,就可以以下列方式計算少數類的合成特徵:選擇最鄰近的一個隨機數字,然後使用這一數字與原始少數類資料點的距離。
該距離乘以0和1之間的隨機數,並將結果作為附加樣本新增到原始少數類資料的特徵向量,從而建立合成的少數類樣本。
神經網路中成本敏感的學習
成本敏感性學習似乎是解決分類問題的類不均衡問題的一種非常有效的方法。接下來我們描述特定於神經網路的三種成本敏感的方法。
在測試未見過的示例時,將該類的先驗概率合併到神經網路的輸出層中:
根據成本調整學習率。應將更高的學習率分配給具有高誤分類成本的樣本,從而對這些例子的權重變化產生更大的影響:
修改均方誤差函式。結果是,反向傳播進行的學習將最小化誤分類成本。新的誤差函式是:
其成本因子是K[i,j]。
這個新的誤差函式產生一個新的增量規則,用於更新網路的權重:
其中第一個方程表示輸出神經元的誤差函式,第二個方程表示隱層神經元的誤差函式。
本文作者:方向
本文為雲棲社群原創內容,未經允許不得轉載。
相關文章
- 關於深度學習編譯器,這些知識你需要了解一下深度學習編譯
- 小研帶你學Python(三):關於變數,這些知識你應該要了解一下Python變數
- 關於強化學習需要了解的知識強化學習
- 關於機器學習需要了解的知識機器學習
- 動手學深度學習需要這些數學基礎知識深度學習
- 關於響應式佈局,你需要了解的知識點
- 關於JVM,你必須知道的這些知識點JVM
- 什麼是5G?關注MWC 2019前你需要了解這些知識
- Netty中的這些知識點,你需要知道!Netty
- 新手學習Java需要了解的幾個知識點!Java
- 這些關於WebSocket的知識,你知道多少?Web
- 物流網首選協議,關於 MQTT 你需要了解這些協議MQQT
- 你需要知道這些關於技術美術的知識構成
- 關於redis,你需要了解的幾點!Redis
- 關於Linux系統,這些知識你都瞭解嗎?Linux
- 學習UI設計都需要了解哪些知識?UI
- 入門Java你需要了解的幾個知識要點!Java
- 關於Java兩點需要更新的知識Java
- 關於AP的一些知識點
- Python爬蟲需要學哪些東西?這些知識點必須掌握!Python爬蟲
- 關於Promise知識點都在這裡Promise
- 關於機器學習的知識點,全在這篇文章裡了機器學習
- 想要成為黑客?那你需要學會這些知識黑客
- 一些關於IO流的知識點
- 關於Async、Await的一些知識點AI
- 關於美顏SDK,還有這些你不知道的知識
- 當裸辭遇到面試難,這些面試題你需要了解一下面試題
- 關於深度學習的一些技巧深度學習
- 關於神經網路:你需要知道這些神經網路
- 更全面的記錄缺陷,你需要了解這些
- 當裸辭遇到了面試難,你需要了解一下這些面試題面試題
- Nacos必知必會:這些知識點你一定要掌握!
- 關於內容稽核,你需要了解的東西,這裡都有!
- 想學Web前端,你需要了解這些職責和必備技能Web前端
- 關於等保2.0,你需要了解的
- 這三個關於Python包匯入的知識點你知道嗎Python
- 這三個關於Python包匯入的知識點你知道嗎?Python
- 關於深度學習的一些淺見深度學習