導航:首頁 > 網路安全 > 負相關的函數如何用神經網路訓練

負相關的函數如何用神經網路訓練

發布時間:2023-05-18 14:07:07

㈠ 圖像卷積得到負值怎麼

圖像卷積中,出現的結果如果超過了255或者小於0,要做邊界處理。因為這些個別的點都是離散點,所以實際是不影響最終結果的。

卷積神經網路CNN是一類包含卷積計算且具有深度結構的神經網路,是深度學習的代表演算法之一 。在計算機視覺領域具有強大的影響力,是計算機視覺領域核心的演算法模型。
圖片的存儲
計算機視覺中常常處理圖片數據,圖像在計算機中是一堆按順序排列的數字,數值為0到255。0表示最暗,255表示最亮。 我們可以把這堆數字用一個長長的向量來表示, 然而用向量表示的話會失去輪臘平面結構的信息,為保留該平面結構信息,通常選擇矩陣的表示方式。

RGB顏色模型中,因為圖片有三個通道,那麼每一個矩陣又叫這個圖片的一個通道,在計算中使用三個通道來進行表示,在電腦中,一張圖片是數字構成的"長方體"。可用 寬, 高, 深來描述,一張圖片在電腦中是這樣存在的:

RGB三通道

三種常見的圖像的處理方式:
1均值化(CNN只用去均值):把輸入數據各個維度都中心化到0

2歸一化:數據幅度歸一化到同樣的范圍

3PCA/白化:用PCA降維,白化是對數據每個特徵軸上的幅度歸一化

去均值:所有樣本求和求平均,然後用所有的樣本減去這個均值樣本就是去均值。

歸一化:對於每個特徵而言,范圍最好是[-1,1],

PCA/白化:用PCA降維,讓每個維度的相關度取消,特徵和特徵之間是相互獨立的。白化,對數據每個特徵軸上的幅度歸一化

圖片處理

圖片處理

圖片數據並不會直接放到神經網路中,而是要進行一系列的處理,這樣才能放到神經網路中,我們將這個步驟稱為圖片數據的預處理操作。

神經網路:
人工神經網路

神經網路也可以處理圖片數據,但是它會有一些問題,首先圖片數據放到神經網路中需要將圖片數據展開成向量,這樣會需要很多的參數才可以,這樣的結果就會導致需要大量的計算力才能完成神經網路的訓練任務,而且圖片有一點很特殊,不同的圖像在不同的位置應該是一樣的,所以我們可以重復利用學習到的這部分特徵。圖片有一個性質叫做局部關聯性質,一個圖片的像素點影響最大的是它周邊的像素點,而距離這個像素點比較遠的像素點二者之間關系不大。很明顯神經網路是做不到的,所以為了解決這個問題,我們使用局部連接+權值共享的方式,不僅權重參數降下來了,而且學習能力並沒有實質的降低,針對於此,卷積神經網路可以完美的處理這兩個問題,使得卷積神經網路稱為處理圖片數據的標配。

卷積神經網路
現在我們對卷積神經網路有一個初步認識了,下面具體來講解一下卷積神經網路,用卷積神經網路常常處理圖片數據,比如識別一輛汽車:

卷積神經網路

汽車作為輸入數據輸入到卷積神經網路中,經過卷積層CONV,然後RELU激活,POOL表示池化操作(多個卷積層+激勵層之後接一個池化層),最後連接一個全連接層FC進行分類操作。

這就是卷積神經網路的全部,下面我們將對卷積神經網路進行切分,對每個功能進行講解,各個擊破。

卷積神經網路之卷積層:
卷積神經網路中每一個神經元只需要和上一層局部連接,相當於每一茄桐盯個神經元掃描一小區域,然後許多神經元合起來就相當於掃描了全局,這樣就構成一個特徵圖(表示圖像的某一維度的特徵),n個特徵圖就提取了這個圖片的n維特徵,每個特徵圖是由很多神經元來完成的。

在卷積神顫和經網路中,我們先選擇一個局部區域(filter),用這個局部區域(filter)去掃描整張圖片。 局部區域所圈起來的所有節點會被連接到下一層的一個節點上。

卷積層

圖片是一個矩陣,然後它的下一層也是一個矩陣,我們用一個filter從圖片矩陣左上角到右下角滑動,每滑動一次,當然被圈起來的神經元們就會連接下一層的一個神經元,形成參數矩陣這個就是卷積核,當然每次滑動雖然圈起來的神經元不同,連接下一層的神經元也不同,但是產生的參數矩陣確是一樣的,這就是權值共享。

卷積核會和掃描的圖片的那個局部矩陣作用產生一個值,比如第一次的時候,(w1*0+w2*1+w3*4+w4*5),所以,filter從左上到右下的這個過程中會得到一個矩陣(這就是下一層也是一個矩陣的原因),具體過程如下所示:

卷積計算過程

上圖中左邊是圖片矩陣,我們使用的filter的大小是3*3的,第一次滑動的時候,卷積核和圖片矩陣作用(1*1+1*0+1*1+0*0+1*1+1*0+0*1+0*0+1*1)=4,會產生一個值,就是右邊矩陣的第一個值,filter滑動9次之後,會產生9個值,也就是說下一層有9個神經元,這9個神經元產生的值就構成了一個矩陣,就是上圖右圖所示,這矩陣叫做特徵圖,表示image的某一維度的特徵,當然具體哪一維度可能並不知道,可能是這個圖像的顏色,也有可能是這個圖像的輪廓等等。

以上就是單通道的圖片的卷積處理,這里再總結一下,圖片是一個矩陣,我們用指定大小的filter去左上角到右下角來滑動,每次滑動所圈起來的結點會和下一層的一個結點相連,連接之後就會形成局部連接,每一條連接都會產生權重,這些權重就是卷積核,所以每次滑動都會產生一個卷積核,因為權值共享,所以這些卷積核都是一樣的。卷積核會不斷和當時filter所圈起來的局部矩陣作用,每次產生的值就是下一層結點的值了,這樣多次產生的值組合起來就是一個特徵圖,表示某一維度的特徵。

卷積神經網路之激活層
上面就把卷積神經網路的中的卷積層講解完了,它的核心就是在提取特徵,下面講解激勵層的作用,激勵層的作用可以理解為把卷積層的結果做非線性映射。

激活層

上面的f表示激勵函數,常用的激勵函數有幾下幾種:

我們先來看一下激勵函數Sigmoid:導數最小為0,最大為1/4,

Sigmoid

Tanh(雙曲正切):和sigmoid相比,它會關於x軸上下對應,不至於朝某一方面偏向

Tanh

ReLU(修正線性單元):收斂快,求梯度簡單,較脆弱,左邊的梯度為0

只要不是一條直線,那麼就是非線性的。

ReLU

(Leaky ReLU);不會飽和/掛掉,不會"飽和"/掛掉,計算也很快,但是計算量比較大

Leaky ReLU

激活層將卷積層的線性計算的結果進行了非線性映射。可以從下面的圖中理解。它展示的是將非線性操作應用到一個特徵圖中。這里的輸出特徵圖也可以看作是"修正"過的特徵圖。如下所示:

激活層處理之後的圖像

卷積神經網路之池化層
下面講解池化層:降低了各個特徵圖的維度,但可以保持大部分重要的信息。

池化層夾在連續的卷積層中間,壓縮數據和參數的量,減小過擬合,池化層並沒有參數,它只不過是把上層給它的結果做了一個下采樣(數據壓縮)。

下采樣有兩種非常用的方式:

Max pooling:選取最大的,我們定義一個空間鄰域(比如,2x2 的窗口),並從窗口內的修正特徵圖中取出最大的元素,最大池化被證明效果更好一些。

Average pooling:平均的,我們定義一個空間鄰域(比如,2x2 的窗口),並從窗口內的修正特徵圖算出平均值

最大池化操作

上面就是max pool方式,使用的是2*2的步長為2的,這樣操作可以降低我們特徵圖的維度。

池化

無論是max pool還是average pool都會有部分信息被舍棄,那麼部分信息被舍棄後會損壞識別結果嗎?

因為卷積後的Feature Map中有對於識別物體不必要的冗餘信息,我們下采樣就是為了去掉這些冗餘信息,所以並不會損壞識別結果。

卷積神經網路之全連接層
到現在為止,我們已經從輸入講到了卷積層,激勵層,池化層,這些層一起就可以從圖像中提取有用的特徵,並在網路中引入非線性,減少特徵維度,同時保持這些特徵具有某種程度上的尺度變化不變性。

最終的結果會作為全連接層的輸入,下面我們來講解一下全連接層。兩層之間所有神經元都有權重連接,通常全連接層在卷積神經網路尾部。當前面卷積層抓取到足以用來識別圖片的特徵後,接下來的就是如何進行分類。 全連接層(前饋層)就可以用來將最後的輸出映射到。 通常卷積網路的最後會將末端得到的長方體平攤成一個長長的向量,並送入全連接層配合輸出層進行分類。比如,在下面圖中我們進行的圖像分類有四個可能的輸出結果

㈡ 求Deep learning 【Yann LeCun 1,2 , Yoshua Bengio 3 & Geoffrey Hinton 4,5】全文中文翻譯

原文摘要:深度學習可以讓那些擁有多個處理層的計算模型來學習具有多層次抽象的數據的表示。這些方法在許多方面都帶來了顯著的改善,包括最先進的語音識別、視覺對象識別、對象檢測和許多其它領域,例如葯物發現和基因組學等。深度學習能夠發現大數據中的復雜結構。它是利用BP演算法來完成這個發現過程的。BP演算法能夠指導機器如何從前一層獲取誤差而改變本層的內部參數,這些內部參數可以用於計算表示。深度卷積網路在處理圖像、視頻、語音和音頻方面帶來了突破,而遞歸網路在處理序列數據,比如文本和語音方面表現出了閃亮的一面。
機器學習技術在現代社會的各個方面表現出了強大的功能:從Web搜索到社會網路內容過濾,再到電子商務網站上的商品推薦都有涉足。並且它越來越多地出現在消費品中,比如相機和智能手機。
機器學習系統被用來識別圖片中的目標,將語音轉換成文本,匹配新聞元素,根據用戶興趣提供職位或產品,選擇相關的搜索結果。逐漸地,這些應用使用一種叫深度學習的技術。傳統的機器學習技術在處理未加工過的數據時,體現出來的能力是有限的。幾十年來,想要構建一個模式識別系統或者機器學習系統,需要一個精緻的引擎和相當專業的知識來設計一個特徵提取器,把原始數據(如圖像的像素值)轉換成一個適當的內部特徵表示或特徵向量,子學習系統,通常是一個分類器,對輸入的樣本進行檢測或分類。特徵表示學習是一套給機器灌入原始數據,然後能自動發現需要進行檢測和分類的表達的方法。深度學習就是一種特徵學習方法,把原始數據通過一些簡單的但是非線性的模型轉變成為更高層次的,更加抽象的表達。通過足夠多的轉換的組合,非常復雜的函數也可以被學習。對於分類任務,高層次的表達能夠強化輸入數據的區分能力方面,同時削弱不相關因素。比如,一副圖像的原始格式是一個像素數組,那麼在第一層上的學習特徵表達通常指的是在圖像的特定位置和方向上有沒有邊的存在。第二層通常會根據那些邊的某些排放而來檢測圖案,這時候會忽略掉一些邊上的一些小的干擾。第三層或許會把那些圖案進行組合,從而使其對應於熟悉目標的某部分。隨後的一些層會將這些部分再組合,從而構成待檢測目標。深度學習的核心方面是,上述各層的特徵都不是利用人工工程來設計的,而是使用一種通用的學習過程從數據中學到的。
深度學習正在取得重大進展,解決了人工智慧界的盡最大努力很多年仍沒有進展的問題。它已經被證明,它能夠擅長發現高維數據中的復雜結構,因此它能夠被應用於科學、商業和政府等領域。除了在圖像識別、語音識別等領域打破了紀錄,它還在另外的領域擊敗了其他機器學習技術,包括預測潛在的葯物分子的活性、分析粒子加速器數據、重建大腦迴路、預測在非編碼DNA突變對基因表達和疾病的影響。也許更令人驚訝的是,深度學習在自然語言理解的各項任務中產生了非常可喜的成果,特別是主題分類、情感分析、自動問答和語言翻譯。我們認為,在不久的將來,深度學習將會取得更多的成功,因為它需要很少的手工工程,它可以很容易受益於可用計算能力和數據量的增加。目前正在為深度神經網路開發的新的學習演算法和架構只會加速這一進程。
監督學習
機器學習中,不論是否是深層,最常見的形式是監督學習。試想一下,我們要建立一個系統,它能夠對一個包含了一座房子、一輛汽車、一個人或一個寵物的圖像進行分類。我們先收集大量的房子,汽車,人與寵物的圖像的數據集,並對每個對象標上它的類別。在訓練期間,機器會獲取一副圖片,然後產生一個輸出,這個輸出以向量形式的分數來表示,每個類別都有一個這樣的向量。我們希望所需的類別在所有的類別中具有最高的得分,但是這在訓練之前是不太可能發生的。通過計算一個目標函數可以獲得輸出分數和期望模式分數之間的誤差(或距離)。然後機器會修改其內部可調參數,以減少這種誤差。這些可調節的參數,通常被稱為權值,它們是一些實數,可以被看作是一些「旋鈕」,定義了機器的輸入輸出功能。在典型的深學習系統中,有可能有數以百萬計的樣本和權值,和帶有標簽的樣本,用來訓練機器。為了正確地調整權值向量,該學習演算法計算每個權值的梯度向量,表示了如果權值增加了一個很小的量,那麼誤差會增加或減少的量。權值向量然後在梯度矢量的相反方向上進行調整。我們的目標函數,所有訓練樣本的平均,可以被看作是一種在權值的高維空間上的多變地形。負的梯度矢量表示在該地形中下降方向最快,使其更接近於最小值,也就是平均輸出誤差低最低的地方。
在實際應用中,大部分從業者都使用一種稱作隨機梯度下降的演算法(SGD)。它包含了提供一些輸入向量樣本,計算輸出和誤差,計算這些樣本的平均梯度,然後相應的調整權值。通過提供小的樣本集合來重復這個過程用以訓練網路,直到目標函數停止增長。它被稱為隨機的是因為小的樣本集對於全體樣本的平均梯度來說會有雜訊估計。這個簡單過程通常會找到一組不錯的權值,同其他精心設計的優化技術相比,它的速度讓人驚奇。訓練結束之後,系統會通過不同的數據樣本——測試集來顯示系統的性能。這用於測試機器的泛化能力——對於未訓練過的新樣本的識別能力。
當前應用中的許多機器學習技術使用的是線性分類器來對人工提取的特徵進行分類。一個2類線性分類器會計算特徵向量的加權和。當加權和超過一個閾值之後,輸入樣本就會被分配到一個特定的類別中。從20世紀60年代開始,我們就知道了線性分類器只能夠把樣本分成非常簡單的區域,也就是說通過一個超平面把空間分成兩部分。
但像圖像和語音識別等問題,它們需要的輸入-輸出函數要對輸入樣本中不相關因素的變化不要過於的敏感,如位置的變化,目標的方向或光照,或者語音中音調或語調的變化等,但是需要對於一些特定的微小變化非常敏感(例如,一隻白色的狼和跟狼類似的白色狗——薩莫耶德犬之間的差異)。在像素這一級別上,兩條薩莫耶德犬在不同的姿勢和在不同的環境下的圖像可以說差異是非常大的,然而,一隻薩摩耶德犬和一隻狼在相同的位置並在相似背景下的兩個圖像可能就非常類似。

圖1 多層神經網路和BP演算法
多層神經網路(用連接點表示)可以對輸入空間進行整合,使得數據(紅色和藍色線表示的樣本)線性可分。注意輸入空間中的規則網格(左側)是如何被隱藏層轉換的(轉換後的在右側)。這個例子中只用了兩個輸入節點,兩個隱藏節點和一個輸出節點,但是用於目標識別或自然語言處理的網路通常包含數十個或者數百個這樣的節點。獲得C.Olah (http://colah.github.io/)的許可後重新構建的這個圖。
鏈式法則告訴我們兩個小的變化(x和y的微小變化,以及y和z的微小變化)是怎樣組織到一起的。x的微小變化量Δx首先會通過乘以∂y/∂x(偏導數)轉變成y的變化量Δy。類似的,Δy會給z帶來改變Δz。通過鏈式法則可以將一個方程轉化到另外的一個——也就是Δx通過乘以∂y/∂x和∂z/∂y(英文原文為∂z/∂x,系筆誤——編輯注)得到Δz的過程。當x,y,z是向量的時候,可以同樣處理(使用雅克比矩陣)。 具有兩個隱層一個輸出層的神經網路中計算前向傳播的公式。每個都有一個模塊構成,用於反向傳播梯度。在每一層上,我們首先計算每個節點的總輸入z,z是前一層輸出的加權和。然後利用一個非線性函數f(.)來計算節點的輸出。簡單期間,我們忽略掉了閾值項。神經網路中常用的非線性函數包括了最近幾年常用的校正線性單元(ReLU)f(z) = max(0,z),和更多傳統sigmoid函數,比如雙曲線正切函數f(z) = (exp(z) − exp(−z))/(exp(z) + exp(−z)) 和logistic函數f(z) = 1/(1 + exp(−z))。 計算反向傳播的公式。在隱層,我們計算每個輸出單元產生的誤差,這是由上一層產生的誤差的加權和。然後我們將輸出層的誤差通過乘以梯度f(z)轉換到輸入層。在輸出層上,每個節點的誤差會用成本函數的微分來計算。如果節點l的成本函數是0.5*(yl-tl)^2, 那麼節點的誤差就是yl-tl,其中tl是期望值。一旦知道了∂E/∂zk的值,節點j的內星權向量wjk就可以通過yj ∂E/∂zk來進行調整。 一個線性分類器或者其他操作在原始像素上的淺層分類器不能夠區分後兩者,雖然能夠將前者歸為同一類。這就是為什麼淺分類要求有良好的特徵提取器用於解決選擇性不變性困境——提取器會挑選出圖像中能夠區分目標的那些重要因素,但是這些因素對於分辨動物的位置就無能為力了。為了加強分類能力,可以使用泛化的非線性特性,如核方法,但這些泛化特徵,比如通過高斯核得到的,並不能夠使得學習器從學習樣本中產生較好的泛化效果。傳統的方法是手工設計良好的特徵提取器,這需要大量的工程技術和專業領域知識。但是如果通過使用通用學習過程而得到良好的特徵,那麼這些都是可以避免的了。這就是深度學習的關鍵優勢。
深度學習的體系結構是簡單模塊的多層棧,所有(或大部分)模塊的目標是學習,還有許多計算非線性輸入輸出的映射。棧中的每個模塊將其輸入進行轉換,以增加表達的可選擇性和不變性。比如說,具有一個5到20層的非線性多層系統能夠實現非常復雜的功能,比如輸入數據對細節非常敏感——能夠區分白狼和薩莫耶德犬,同時又具有強大的抗干擾能力,比如可以忽略掉不同的背景、姿勢、光照和周圍的物體等。
反向傳播來訓練多層神經網路
在最早期的模式識別任務中,研究者的目標一直是使用可以訓練的多層網路來替代經過人工選擇的特徵,雖然使用多層神經網路很簡單,但是得出來的解很糟糕。直到20世紀80年代,使用簡單的隨機梯度下降來訓練多層神經網路,這種糟糕的情況才有所改變。只要網路的輸入和內部權值之間的函數相對平滑,使用梯度下降就湊效,梯度下降方法是在70年代到80年代期間由不同的研究團隊獨立發明的。
用來求解目標函數關於多層神經網路權值梯度的反向傳播演算法(BP)只是一個用來求導的鏈式法則的具體應用而已。反向傳播演算法的核心思想是:目標函數對於某層輸入的導數(或者梯度)可以通過向後傳播對該層輸出(或者下一層輸入)的導數求得(如圖1)。反向傳播演算法可以被重復的用於傳播梯度通過多層神經網路的每一層:從該多層神經網路的最頂層的輸出(也就是改網路產生預測的那一層)一直到該多層神經網路的最底層(也就是被接受外部輸入的那一層),一旦這些關於(目標函數對)每層輸入的導數求解完,我們就可以求解每一層上面的(目標函數對)權值的梯度了。
很多深度學習的應用都是使用前饋式神經網路(如圖1),該神經網路學習一個從固定大小輸入(比如輸入是一張圖)到固定大小輸出(例如,到不同類別的概率)的映射。從第一層到下一層,計算前一層神經元輸入數據的權值的和,然後把這個和傳給一個非線性激活函數。當前最流行的非線性激活函數是rectified linear unit(ReLU),函數形式:f(z)=max(z,0)。過去的幾十年中,神經網路使用一些更加平滑的非線性函數,比如tanh(z)和1/(1+exp(-z)),但是ReLU通常會讓一個多層神經網路學習的更快,也可以讓一個深度網路直接有監督的訓練(不需要無監督的pre-train)。
達到之前那種有pre-train的效果。通常情況下,輸入層和輸出層以外的神經單元被稱為隱藏單元。隱藏層的作用可以看成是使用一個非線性的方式打亂輸入數據,來讓輸入數據對應的類別在最後一層變得線性可分。
在20世紀90年代晚期,神經網路和反向傳播演算法被大多數機器學習團隊拋棄,同時也不受計算機視覺和語音識別團隊的重視。人們普遍認為,學習有用的、多級層次結構的、使用較少先驗知識進行特徵提取的這些方法都不靠譜。確切的說是因為簡單的梯度下降會讓整個優化陷入到不好的局部最小解。
實踐中,如果在大的網路中,不管使用什麼樣的初始化條件,局部最小解並不算什麼大問題,系統總是得到效果差不多的解。最近的理論和實驗表明,局部最小解還真不是啥大問題。相反,解空間中充滿了大量的鞍點(梯度為0的點),同時鞍點周圍大部分曲面都是往上的。所以這些演算法就算是陷入了這些局部最小值,關系也不太大。
2006年前後,CIFAR(加拿大高級研究院)把一些研究者聚集在一起,人們對深度前饋式神經網路重新燃起了興趣。研究者們提出了一種非監督的學習方法,這種方法可以創建一些網路層來檢測特徵而不使用帶標簽的數據,這些網路層可以用來重構或者對特徵檢測器的活動進行建模。通過預訓練過程,深度網路的權值可以被初始化為有意思的值。然後一個輸出層被添加到該網路的頂部,並且使用標準的反向傳播演算法進行微調。這個工作對手寫體數字的識別以及行人預測任務產生了顯著的效果,尤其是帶標簽的數據非常少的時候。
使用這種與訓練方法做出來的第一個比較大的應用是關於語音識別的,並且是在GPU上做的,這樣做是因為寫代碼很方便,並且在訓練的時候可以得到10倍或者20倍的加速。2009年,這種方法被用來映射短時間的系數窗口,該系統窗口是提取自聲波並被轉換成一組概率數字。它在一組使用很少詞彙的標準的語音識別基準測試程序上達到了驚人的效果,然後又迅速被發展到另外一個更大的數據集上,同時也取得驚人的效果。從2009年到到2012年底,較大的語音團隊開發了這種深度網路的多個版本並且已經被用到了安卓手機上。對於小的數據集來說,無監督的預訓練可以防止過擬合,同時可以帶來更好的泛化性能當有標簽的樣本很小的時候。一旦深度學習技術重新恢復,這種預訓練只有在數據集合較少的時候才需要。
然後,還有一種深度前饋式神經網路,這種網路更易於訓練並且比那種全連接的神經網路的泛化性能更好。這就是卷積神經網路(CNN)。當人們對神經網路不感興趣的時候,卷積神經網路在實踐中卻取得了很多成功,如今它被計算機視覺團隊廣泛使用。 卷積神經網路
卷積神經網路被設計用來處理到多維數組數據的,比如一個有3個包含了像素值2-D圖像組合成的一個具有3個顏色通道的彩色圖像。很多數據形態都是這種多維數組的:1D用來表示信號和序列包括語言,2D用來表示圖像或者聲音,3D用來表示視頻或者有聲音的圖像。卷積神經網路使用4個關鍵的想法來利用自然信號的屬性:局部連接、權值共享、池化以及多網路層的使用。

圖2 卷積神經網路內部
一個典型的卷積神經網路結構(如圖2)是由一系列的過程組成的。最初的幾個階段是由卷積層和池化層組成,卷積層的單元被組織在特徵圖中,在特徵圖中,每一個單元通過一組叫做濾波器的權值被連接到上一層的特徵圖的一個局部塊,然後這個局部加權和被傳給一個非線性函數,比如ReLU。在一個特徵圖中的全部單元享用相同的過濾器,不同層的特徵圖使用不同的過濾器。使用這種結構處於兩方面的原因。首先,在數組數據中,比如圖像數據,一個值的附近的值經常是高度相關的,可以形成比較容易被探測到的有區分性的局部特徵。其次,不同位置局部統計特徵不太相關的,也就是說,在一個地方出現的某個特徵,也可能出現在別的地方,所以不同位置的單元可以共享權值以及可以探測相同的樣本。在數學上,這種由一個特徵圖執行的過濾操作是一個離線的卷積,卷積神經網路也是這么得名來的。
卷積層的作用是探測上一層特徵的局部連接,然而池化層的作用是在語義上把相似的特徵合並起來,這是因為形成一個主題的特徵的相對位置不太一樣。一般地,池化單元計算特徵圖中的一個局部塊的最大值,相鄰的池化單元通過移動一行或者一列來從小塊上讀取數據,因為這樣做就減少的表達的維度以及對數據的平移不變性。兩三個這種的卷積、非線性變換以及池化被串起來,後面再加上一個更多卷積和全連接層。在卷積神經網路上進行反向傳播演算法和在一般的深度網路上是一樣的,可以讓所有的在過濾器中的權值得到訓練。
深度神經網路利用的很多自然信號是層級組成的屬性,在這種屬性中高級的特徵是通過對低級特徵的組合來實現的。在圖像中,局部邊緣的組合形成基本圖案,這些圖案形成物體的局部,然後再形成物體。這種層級結構也存在於語音數據以及文本數據中,如電話中的聲音,因素,音節,文檔中的單詞和句子。當輸入數據在前一層中的位置有變化的時候,池化操作讓這些特徵表示對這些變化具有魯棒性。
卷積神經網路中的卷積和池化層靈感直接來源於視覺神經科學中的簡單細胞和復雜細胞。這種細胞的是以LNG-V1-V2-V4-IT這種層級結構形成視覺迴路的。當給一個卷積神經網路和猴子一副相同的圖片的時候,卷積神經網路展示了猴子下顳葉皮質中隨機160個神經元的變化。卷積神經網路有神經認知的根源,他們的架構有點相似,但是在神經認知中是沒有類似反向傳播演算法這種端到端的監督學習演算法的。一個比較原始的1D卷積神經網路被稱為時延神經網路,可以被用來識別語音以及簡單的單詞。
20世紀90年代以來,基於卷積神經網路出現了大量的應用。最開始是用時延神經網路來做語音識別以及文檔閱讀。這個文檔閱讀系統使用一個被訓練好的卷積神經網路和一個概率模型,這個概率模型實現了語言方面的一些約束。20世紀90年代末,這個系統被用來美國超過10%的支票閱讀上。後來,微軟開發了基於卷積神經網路的字元識別系統以及手寫體識別系統。20世紀90年代早期,卷積神經網路也被用來自然圖形中的物體識別,比如臉、手以及人臉識別(face recognition )。
使用深度卷積網路進行圖像理解
21世紀開始,卷積神經網路就被成功的大量用於檢測、分割、物體識別以及圖像的各個領域。這些應用都是使用了大量的有標簽的數據,比如交通信號識別,生物信息分割,面部探測,文本、行人以及自然圖形中的人的身體部分的探測。近年來,卷積神經網路的一個重大成功應用是人臉識別。
值得一提的是,圖像可以在像素級別進行打標簽,這樣就可以應用在比如自動電話接聽機器人、自動駕駛汽車等技術中。像Mobileye以及NVIDIA公司正在把基於卷積神經網路的方法用於汽車中的視覺系統中。其它的應用涉及到自然語言的理解以及語音識別中。

圖3 從圖像到文字
盡管卷積神經網路應用的很成功,但是它被計算機視覺以及機器學習團隊開始重視是在2012年的ImageNet競賽。在該競賽中,深度卷積神經網路被用在上百萬張網路圖片數據集,這個數據集包含了1000個不同的類。該結果達到了前所未有的好,幾乎比當時最好的方法降低了一半的錯誤率。這個成功來自有效地利用了GPU、ReLU、一個新的被稱為dropout的正則技術,以及通過分解現有樣本產生更多訓練樣本的技術。這個成功給計算機視覺帶來一個革命。如今,卷積神經網路用於幾乎全部的識別和探測任務中。最近一個更好的成果是,利用卷積神經網路結合回饋神經網路用來產生圖像標題。
如今的卷積神經網路架構有10-20層採用ReLU激活函數、上百萬個權值以及幾十億個連接。然而訓練如此大的網路兩年前就只需要幾周了,現在硬體、軟體以及演算法並行的進步,又把訓練時間壓縮到了幾小時。
基於卷積神經網路的視覺系統的性能已經引起了大型技術公司的注意,比如Google、Facebook、Microsoft、IBM,yahoo!、Twitter和Adobe等,一些快速增長的創業公司也同樣如是。
卷積神經網路很容易在晶元或者現場可編程門陣列(FPGA)中高效實現,許多公司比如NVIDIA、Mobileye、Intel、Qualcomm以及Samsung,正在開發卷積神經網路晶元,以使智能機、相機、機器人以及自動駕駛汽車中的實時視覺系統成為可能。
分布式特徵表示與語言處理
與不使用分布式特徵表示(distributed representations )的經典學習演算法相比,深度學習理論表明深度網路具有兩個不同的巨大的優勢。這些優勢來源於網路中各節點的權值,並取決於具有合理結構的底層生成數據的分布。首先,學習分布式特徵表示能夠泛化適應新學習到的特徵值的組合(比如,n元特徵就有2n種可能的組合)。其次,深度網路中組合表示層帶來了另一個指數級的優勢潛能(指數級的深度)。
多層神經網路中的隱層利用網路中輸入的數據進行特徵學習,使之更加容易預測目標輸出。下面是一個很好的示範例子,比如將本地文本的內容作為輸入,訓練多層神經網路來預測句子中下一個單詞。內容中的每個單詞表示為網路中的N分之一的向量,也就是說,每個組成部分中有一個值為1其餘的全為0。在第一層中,每個單詞創建不同的激活狀態,或單詞向量(如圖4)。在語言模型中,網路中其餘層學習並轉化輸入的單詞向量為輸出單詞向量來預測句子中下一個單詞,可以通過預測詞彙表中的單詞作為文本句子中下一個單詞出現的概率。網路學習了包含許多激活節點的、並且可以解釋為詞的獨立特徵的單詞向量,正如第一次示範的文本學習分層表徵文字元號的例子。這些語義特徵在輸入中並沒有明確的表徵。而是在利用「微規則」(『micro-rules』,本文中直譯為:微規則)學習過程中被發掘,並作為一個分解輸入與輸出符號之間關系結構的好的方式。當句子是來自大量的真實文本並且個別的微規則不可靠的情況下,學習單詞向量也一樣能表現得很好。利用訓練好的模型預測新的事例時,一些概念比較相似的詞容易混淆,比如星期二(Tuesday)和星期三(Wednesday),瑞典(Sweden)和挪威(Norway)。這樣的表示方式被稱為分布式特徵表示,因為他們的元素之間並不互相排斥,並且他們的構造信息對應於觀測到的數據的變化。這些單詞向量是通過學習得到的特徵構造的,這些特徵不是由專家決定的,而是由神經網路自動發掘的。從文本中學習得單詞向量表示現在廣泛應用於自然語言中。

圖4 詞向量學習可視化
特徵表示問題爭論的中心介於對基於邏輯啟發和基於神經網路的認識。在邏輯啟發的範式中,一個符號實體表示某一事物,因為其唯一的屬性與其他符號實體相同或者不同。該符號實例沒有內部結構,並且結構與使用是相關的,至於理解符號的語義,就必須與變化的推理規則合理對應。相反地,神經網路利用了大量活動載體、權值矩陣和標量非線性化,來實現能夠支撐簡單容易的、具有常識推理的快速「直覺」功能。
在介紹神經語言模型前,簡述下標准方法,其是基於統計的語言模型,該模型沒有使用分布式特徵表示。而是基於統計簡短符號序列出現的頻率增長到N(N-grams,N元文法)。可能的N-grams的數字接近於VN,其中V是詞彙表的大小,考慮到文本內容包含成千上萬個單詞,所以需要一個非常大的語料庫。N-grams將每個單詞看成一個原子單元,因此不能在語義相關的單詞序列中一概而論,然而神經網路語言模型可以,是因為他們關聯每個詞與真是特徵值的向量,並且在向量空間中語義相關的詞彼此靠近(圖4)。
遞歸神經網路
首次引入反向傳播演算法時,最令人興奮的便是使用遞歸神經網路(recurrent neural networks,下文簡稱RNNs)訓練。對於涉及到序列輸入的任務,比如語音和語言,利用RNNs能獲得更好的效果。RNNs一次處理一個輸入序列元素,同時維護網路中隱式單元中隱式的包含過去時刻序列元素的歷史信息的「狀態向量」。如果是深度多層網路不同神經元的輸出,我們就會考慮這種在不同離散時間步長的隱式單元的輸出,這將會使我們更加清晰怎麼利用反向傳播來訓練RNNs(如圖5,右)。

圖5 遞歸神經網路
RNNs是非常強大的動態系統,但是訓練它們被證實存在問題的,因為反向傳播的梯度在每個時間間隔內是增長或下降的,所以經過一段時間後將導致結果的激增或者降為零。
由於先進的架構和訓練方式,RNNs被發現可以很好的預測文本中下一個字元或者句子中下一個單詞,並且可以應用於更加復雜的任務。例如在某時刻閱讀英語句子中的單詞後,將會訓練一個英語的「編碼器」網路,使得隱式單元的最終狀態向量能夠很好地表徵句子所要表達的意思或思想。這種「思想向量」(thought vector)可以作為聯合訓練一個法語「編碼器」網路的初始化隱式狀態(或者額外的輸入),其輸出為法語翻譯首單詞的概率分布。如果從分布中選擇一個特殊的首單詞作為編碼網路的輸入,將會輸出翻譯的句子中第二個單詞的概率分布,並直到停止選擇為止。總體而言,這一過程是根據英語句子的概率分布而產生的法語詞彙序列。這種簡單的機器翻譯方法的表現甚至可以和最先進的(state-of-the-art)的方法相媲美,同時也引起了人們對於理解句子是否需要像使用推理規則操作內部符號表示質疑。這與日常推理中同時涉及到根據合理結論類推的觀點是匹配的。
剩下的超過字數限制了……

㈢ 神經網路演算法

20 世紀五、六⼗年代,科學家 Frank Rosenblatt其受到 Warren McCulloch 和 Walter Pitts早期的⼯作的影響,發明了感知機(Perceptrons)。

⼀個感知器接受⼏個⼆進制輸⼊, ,並產⽣⼀個⼆進制輸出:

如上圖所示的感知機有三個輸⼊: 。通常可以有更多或更少輸⼊。 我們再引⼊權重: ,衡量輸入對輸出的重要性。感知機的輸出為0 或者 1,則由分配權重後的總和 ⼩於等於或者⼤於閾值決定。和權重⼀樣,閾值(threshold)是⼀個實數,⼀個神經元的參數。⽤更精確的代數形式如下:

給三個因素設置權重來作出決定:

可以把這三個因素對應地⽤⼆進制變數 來表⽰。例如,如果天⽓好,我們把

,如果不好, 。類似地,如果你的朋友陪你去, ,否則 。 也類似。

這三個對於可能對你來說,「電影好不好看」對你來說最重要,而天氣顯得不是那麼的重要。所以你會這樣分配權值: ,然後定義閾值threshold=5。

現在,你可以使⽤感知器來給這種決策建⽴數學模型。

例如:

隨著權重和閾值的變化,你可以得到不同的決策模型。很明顯,感知機不是⼈做出決策使⽤的全部模型。但是這個例⼦說明了⼀個感知機如何能權衡不同的依據來決策。這看上去也可以⼤致解釋⼀個感知機⽹絡有時確實能夠做出一些不錯的決定。

現在我們隊上面的結構做一點變化,令b=-threshold,即把閾值移到不等號左邊,變成偏置, 那麼感知器的規則可以重寫為:

引⼊偏置只是我們描述感知器的⼀個很⼩的變動,但是我們後⾯會看到它引導更進⼀步的符號簡化。因此,我們不再⽤閾值,⽽總是使⽤偏置。

感知機是首個可以學習的人工神經網路,它的出現引起的神經網路的第一層高潮。需要指出的是,感知機只能做簡單的線性分類任務,而且Minsky在1969年出版的《Perceptron》書中,證明了感知機對XOR(異或)這樣的問題都無法解決。但是感知機的提出,對神經網路的發展是具有重要意義的。

通過上面的感知機的觀察我們發現一個問題,每個感知機的輸出只有0和1,這就意味著有時我們只是在單個感知機上稍微修改了一點點權值w或者偏置b,就可能造成最終輸出完全的反轉。也就是說,感知機的輸出是一個階躍函數。如下圖所示,在0附近的時候,輸出的變化是非常明顯的,而在遠離0的地方,我們可能調整好久參數也不會發生輸出的變化。

這樣階躍的跳變並不是我們想要的,我們需要的是當我們隊權值w或者偏置b做出微小的調整後,輸出也相應的發生微小的改變芹則禪。這同時也意味值我們的輸出不再只是0和1,還可以輸出小數。由此我們引入了S型神經元。

S型神經元使用 S 型函數,也叫Sigmoid function函數,我們用它作為激活函數。其表達式如下:

圖像如下圖所示:

利⽤實際的 σ 函數,我們得到⼀個,就像上⾯說明的,平滑的感知器。 σ 函數的平滑特性,正是關鍵因素,⽽不是其細部形式盯明。 σ 的平滑意味著權重和偏置的微⼩變化,即 ∆w 和 ∆b,會從神經元產⽣⼀個微⼩的輸出變化 ∆output。實際上,微積分告訴我們

∆output 可以很好地近似表⽰為:

上面的式子是⼀個反映權重、偏置變化嫌塵和輸出變化的線性函數。這⼀線性使得我們可以通過選擇權重和偏置的微⼩變化來達到輸出的微⼩變化。所以當 S 型神經元和感知器本質上是相同的,但S型神經元在計算處理如何變化權重和偏置來使輸出變化的時候會更加容易。

有了對S型神經元的了解,我們就可以介紹神經網路的基本結構了。具體如下:

在⽹絡中最左邊的稱為輸⼊層,其中的神經元稱為輸⼊神經元。最右邊的,即輸出層包含有輸出神經元,在圖中,輸出層只有⼀個神經元。中間層,既然這層中的神經元既不是輸⼊也不是輸出,則被稱為隱藏層。

這就是神經網路的基本結構,隨著後面的發展神經網路的層數也隨之不斷增加和復雜。

我們回顧一下神經網路發展的歷程。神經網路的發展歷史曲折盪漾,既有被人捧上天的時刻,也有摔落在街頭無人問津的時段,中間經歷了數次大起大落。

從單層神經網路(感知機)開始,到包含一個隱藏層的兩層神經網路,再到多層的深度神經網路,一共有三次興起過程。詳見下圖。

我們希望有⼀個演算法,能讓我們找到權重和偏置,以⾄於⽹絡的輸出 y(x) 能夠擬合所有的 訓練輸⼊ x。為了量化我們如何實現這個⽬標,我們定義⼀個代價函數:

這⾥ w 表⽰所有的⽹絡中權重的集合, b 是所有的偏置, n 是訓練輸⼊數據的個數,
a 是表⽰當輸⼊為 x 時輸出的向量,求和則是在總的訓練輸⼊ x 上進⾏的。當然,輸出 a 取決於 x, w和 b,但是為了保持符號的簡潔性,我沒有明確地指出這種依賴關系。符號 ∥v∥ 是指向量 v 的模。我們把 C 稱為⼆次代價函數;有時也稱被稱為均⽅誤差或者 MSE。觀察⼆次代價函數的形式我們可以看到 C(w, b) 是⾮負的,因為求和公式中的每⼀項都是⾮負的。此外,代價函數 C(w,b)的值相當⼩,即 C(w; b) ≈ 0,精確地說,是當對於所有的訓練輸⼊ x, y(x) 接近於輸出 a 時。因

此如果我們的學習演算法能找到合適的權重和偏置,使得 C(w; b) ≈ 0,它就能很好地⼯作。相反,當 C(w; b) 很⼤時就不怎麼好了,那意味著對於⼤量地輸⼊, y(x) 與輸出 a 相差很⼤。因此我們的訓練演算法的⽬的,是最⼩化權重和偏置的代價函數 C(w; b)。換句話說,我們想要找到⼀系列能讓代價盡可能⼩的權重和偏置。我們將采⽤稱為梯度下降的演算法來達到這個⽬的。

下面我們將代價函數簡化為C(v)。它可以是任意的多元實值函數, 。
注意我們⽤ v 代替了 w 和 b 以強調它可能是任意的函數,我們現在先不局限於神經⽹絡的環境。

為了使問題更加簡單我們先考慮兩個變數的情況,想像 C 是⼀個只有兩個變數 和 的函數,我們的目的是找到 和 使得C最小。

如上圖所示,我們的目的就是找到局部最小值。對於這樣的一個問題,一種方法就是通過微積分的方法來解決,我們可以通過計算導數來求解C的極值點。但是對於神經網路來說,我們往往面對的是非常道的權值和偏置,也就是說v的維數不只是兩維,有可能是億萬維的。對於一個高維的函數C(v)求導數幾乎是不可能的。

在這種情況下,有人提出了一個有趣的演算法。想像一下一個小球從山頂滾下山谷的過程, 我們的⽇常經驗告訴我們這個球最終會滾到⾕底。我們先暫時忽略相關的物理定理, 對球體的⾁眼觀察是為了激發我們的想像⽽不是束縛我們的思維。因此與其陷進物理學⾥凌亂的細節,不如我們就這樣問⾃⼰:如果我們扮演⼀天的上帝,能夠構造⾃⼰的物理定律,能夠⽀配球體可以如何滾動,那麼我們將會採取什麼樣的運動學定律來讓球體能夠總是滾落到⾕底呢?

為了更精確地描述這個問題,讓我們思考⼀下,當我們在 和 ⽅向分別將球體移動⼀個很⼩的量,即 ∆ 和 ∆ 時,球體將會發⽣什麼情況。微積分告訴我們 C 將會有如下變化:

也可以用向量表示為

現在我們的問題就轉換為不斷尋找一個小於0的∆C,使得C+∆C不斷變小。

假設我們選取:

這⾥的 η 是個很⼩的正數(稱為學習速率),於是

由於 ∥∇C∥2 ≥ 0,這保證了 ∆C ≤ 0,即,如果我們按照上述⽅程的規則去改變 v,那麼 C
會⼀直減⼩,不會增加。

所以我們可以通過不斷改變v來C的值不斷下降,是小球滾到最低點。

總結⼀下,梯度下降演算法⼯作的⽅式就是重復計算梯度 ∇C,然後沿著相反的⽅向移動,沿著⼭⾕「滾落」。我們可以想像它像這樣:

為了使梯度下降能夠正確地運⾏,我們需要選擇合適的學習速率η,確保C不斷減少,直到找到最小值。

知道了兩個變數的函數 C 的梯度下降方法,我們可以很容易的把它推廣到多維。我們假設 C 是⼀個有 m 個變數 的多元函數。 ∆C 將會變為:

其中, ∇C為

∆v為:

更新規則為:

在回到神經網路中,w和b的更新規則為:

前面提到神經⽹絡如何使⽤梯度下降演算法來學習他們⾃⾝的權重和偏置。但是,這⾥還留下了⼀個問題:我們並沒有討論如何計算代價函數的梯度。這里就需要用到一個非常重要的演算法:反向傳播演算法(backpropagation)。

反向傳播演算法的啟示是數學中的鏈式法則。

四個方程:

輸出層誤差方程:

當前層誤差方程:

誤差方程關於偏置的關系:

誤差方程關於權值的關系

演算法描述:

檢視這個演算法,你可以看到為何它被稱作反向傳播。我們從最後⼀層開始向後計算誤差向量δ。這看起來有點奇怪,為何要從後⾯開始。但是如果你認真思考反向傳播的證明,這種反向移動其實是代價函數是⽹絡輸出的函數的結果。為了理解代價隨前⾯層的權重和偏置變化的規律,我們需要重復作⽤鏈式法則,反向地獲得需要的表達式。

參考鏈接: http://neuralnetworksanddeeplearning.com/

㈣ 如何讓利用神經網路進行預測,怎麼在進行訓練之後,怎麼看出訓練模型的好壞如何進行評判

可以用MATLAB神經網路工具箱,先提取樣本,用mapminmax函數歸一化,再newff函數建立網路,設置好訓練參數後,使用train函數訓練,最後用sim函數看預測結果。

在訓練過程中,有一個performance可以觀察,它的訓練目標就是你設置的goal。在訓練過程中,它會自動分出一部分樣本作為validation驗證,可以保證不過擬合。具體要評價效果還是應該看最後預測的精度。

附件是一個BP預測的實例。

㈤ BP神經網路中的訓練函數如何選取

神經網路不同的網路有這不同的訓練函數,BP神經網路有兩種訓練函數,trainbp(),利用BP演算法訓練前向神經網路。trainbpx(),利用快速BP演算法訓練前向神經網路,即採用了動量或自適應學習,可減少訓練時間,tansig函數是神經元的傳遞函數,與訓練函數無關,在trainbp()函數中含有要訓練神經元的函數。

㈥ word2vec概述

文本表示是自然語言處纖圓理中的基礎工作,文本表示的好壞直接影響到整個自然語言處理系統的性能。文本向量化是文本表示的一種重要方式。文本向量化就是講文本表示成一系列能夠表達文本語義的向量。

當前階段,對文本向量化的大部分研究都是通過詞向量化來實現的。與此同時,也有相當一部分研究者將文章或者句子作為文本基本處理單元,提出了doc2vec和ste2vec技術。

基於embedding的詞表示,其核心思想是: 上下文相似的詞,其語義也相似。 這就是著名的 詞空間模型(word space model) ,詞向量通常使用神經網路模型訓練得到,神經網路模型就是根據上下文與目標詞之間的關系進行建模。

Word2vec主要有CBOW和Skip-gram兩種模式,其中CBOW是從原始語句推測目標字詞,而Skip-gram是從目標字詞推測出原始語句(滑動窗口范圍內),其中CBOW對小型數據比較合適,Skip-fram在大型語料中表現得更好。

接下來介紹兩種優化方法
在木有進行優化前,word2vec的隱藏層有 V*N 個參數,其中V是全局詞的數量,比如10W個,N是預設的詞嵌入向量維度,如300,那麼這個計算量太大了,因此要進行優化。

先復習一下 霍夫曼樹 ,這里我圖省事,直接把 劉建平 老師的博客貼上來。

回顧下傳統的神經網路詞向量語言模型,裡面一般有三層,輸入層(詞向量),隱藏層和輸出層(softmax層)。裡面最大的問題在於從隱藏層到輸出的softmax層的計算量很大,因為要計算所有詞的softmax概率,再去找概率最大的值。這個模型如下圖所示。其中V是詞彙表的大小。

 由於我們把之前所有都要計算的從輸出softmax層的概率計算變成了一顆二叉霍夫曼樹,那麼我們的softmax概率計算只需要沿著樹形結構進行就可以了。如下圖所示,我們可以沿著霍夫曼樹從根節點一直走到我們的葉子節點的詞 w2

 如何「沿著霍夫曼樹一步步完成」呢?在word2vec中,我們採用了二元邏輯回歸的方法,即規定沿著左子樹走,那麼就是負類(霍夫曼樹編碼1),沿著右子樹走,那麼就是正類(霍夫曼樹編碼0)。判虛豎沒別正類和負類的方法是使用sigmoid函數,即:
      
 其中 xw 是當前內部節點的詞向量,而θ則是我們需要從訓練樣本求出的邏輯回歸的模型參數。
 使用霍夫曼樹有什麼好處呢?首先,由於是二叉樹,之前計算量為V,現在變成了log2V。第二,由於使用霍夫曼樹是高頻的詞靠近樹根,這樣高頻詞需要更少的時間會被找到,這符合我們的貪心優化思想。
 容易理解,被劃分為左子樹而成為負類的概率為 P(−)=1−P(+) 。在某一個內部節點,要判斷是沿左子樹還是右子樹走的標准就是看 P(−),P(+) 誰的概率值大。而控制 P(−),P(+) 誰的概率值大的因素一個是當前節點的詞向量,另一個是當前節點的模型參數 θ
 對於上圖中的 w2 ,如果它是一個訓練樣本的輸出,那麼我們期望對於裡面的隱藏節點 n(w2,1) P(−) 概率大, n(w2,2) P(−) 概率大, n(w2,3) P(+) 概率大。
 回到基於Hierarchical Softmax的word2vec本身,我們差納的目標就是找到合適的所有節點的詞向量和所有內部節點 θ , 使訓練樣本達到最大似然。那麼如何達到最大似然呢?

在講基於Negative Sampling的word2vec模型前,我們先看看Hierarchical Softmax的的缺點。的確,使用霍夫曼樹來代替傳統的神經網路,可以提高模型訓練的效率。但是如果我們的訓練樣本里的中心詞w是一個很生僻的詞,那麼就得在霍夫曼樹中辛苦的向下走很久了。能不能不用搞這么復雜的一顆霍夫曼樹,將模型變的更加簡單呢?

Negative Sampling就是這么一種求解word2vec模型的方法,它摒棄了霍夫曼樹,採用了Negative Sampling(負采樣)的方法來求解,下面我們就來看看Negative Sampling的求解思路。

既然名字叫Negative Sampling(負采樣),那麼肯定使用了采樣的方法。采樣的方法有很多種,比如之前講到的大名鼎鼎的MCMC。我們這里的Negative Sampling采樣方法並沒有MCMC那麼復雜。

比如我們有一個訓練樣本,中心詞是 w ,它周圍上下文共有 2c 個詞,記為 context(w) 。由於這個中心詞 w ,的確和 context(w) 相關存在,因此它是一個真實的正例。通過 Negative Sampling 采樣,我們得到 neg 個和 w 不同的中心詞 wi,i=1,2,..neg ,這樣 context(w) wi 就組成了 neg 個並不真實存在的負例。利用這一個正例和 neg 個負例,我們進行二元邏輯回歸,得到負采樣對應每個詞 wi 對應的模型參數 θi ,和每個詞的詞向量。

從上面的描述可以看出, Negative Sampling 由於沒有採用霍夫曼樹,每次只是通過采樣 neg 個不同的中心詞做負例,就可以訓練模型,因此整個過程要比 Hierarchical Softmax 簡單。

不過有兩個問題還需要弄明白:1)如何通過一個正例和neg個負例進行二元邏輯回歸呢? 2) 如何進行負采樣呢?

一些細節:

在skip gram和CBOW中,中心詞詞向量在迭代過程中是不會更新的,只更新窗口詞向量,這個中心詞對應的詞向量需要下一次在作為非中心詞的時候才能進行迭代更新。

參考文章
1.劉建平老師的博客園, 地址
2. bitcarmanlee的CSDN博客

㈦ matlab中如何用神經網路求得數據擬合函數

我是做這個方向的,神經網路擬合出的曲線是沒有相應的函數的,他是根據許多的權重值,閥值世並和偏置值的訓練彎返嫌確定的曲線。埋手還有什麼相關問題可以問我,我的QQ378257104。

㈧ policy-gradient

參考資料 :

  1.  https://zhuanlan.hu.com/p/21725498

2.    https://zhuanlan.hu.com/p/75174892   (尤其是這個, 包括引入 base line,對應的正好是 reward的normalization)

基於值的強化學習演算法的基本思想是根喚絕仿據當前的狀態,計算採取每個動作的價值,然後根據價值貪心的選擇動作。如果我們省略中間的步驟,即直接根據當前的狀態來選擇動作,也就引出了強化學習中的另一種很重要的演算法,即策略梯度(Policy Gradient)。這篇文章,我們就來介紹這種演算法的最基礎的版本以及其簡單的實現。

本篇文章的大部分內容均學習自莫煩老師的強化學習課程,大家可以在b站上找到相關的視頻: https://www.bilibili.com/video/av16921335/#page=22

1、什麼是 Policy Gradients

其實在引言部分我們已經介紹了策略梯度的基本思想,就是直接根據狀態輸出動作或者動作的概率。那麼怎麼輸出呢,最簡單的就是使用神經網路啦!

我們使用神經網路輸入當前的狀態,網路就可以輸出我們在這個狀態下採取每個動作的概率,那麼網路應該如何訓練來實現最終的收斂呢?

我們之前在訓練神經網路時,使用最多的方法就是反向傳播演算法,我們需要一個誤差函數,通過梯度下降來使我們的損失最小。但對於強化學習來說,我們不知道動作的正確與否,只能通過獎勵值來判斷這個動作的相對好壞。基於上面的想法,我們有個非常簡單的想法:

如果一個動作得到的reward多,那麼我們就使其出現的概率增加,如果一個動作得到的reward少,我們就使其出現的概率減小。

根據這個思想,我們構造如下的損失函數: loss= -log(prob)*vt

我們簡單用白話介紹一下上面這個損失函數的合理性,那麼至於從數學角度上為什麼要使用上面的損失函數,可以參考: Why we consider log likelihood instead of Likelihood in Gaussian Distribution 。

其實,我們最初是,既然出現了這個 s-a, 那麼就進一步增加其出現的概率。 即按照梯度的方向盡量的maxmize

由於tensorflow中只有minimize函數,所以就把 loss定義為   loss= -log(prob)*vt            , 但是值得注意的是,這里的vt必須是一輪episode後的累計值(含有gamma衰減),而-log(prob)整體是單調遞減的。 所以意味著,和纖 如果vt大 ,那麼為了減少loss, 則要大幅減少 -log(prob)   , 也就意味著 大跨步按照梯度 增加 prob的值,  總體而言也就是  vt越大(累計reward值越大)那麼這個vt鏈條上的prob概率也就越要調大一些;  如果vt比較小了,意味著僅需要較小幅度地提升prob值(後果是得到較小幅度地降低了 -log(prob) ) ,這個場景的物理意義是loss本來就比較小了,所以沿著梯度的方向稍微降一點點。

    上述思路是沒有問題,但前提是 vt總是正的,這導致為了不斷減小loss,要一直不停地提升episode路徑上遇到的所有s-a對的概率,而其他非宏行episode路徑上的s-a概率值,出現被動下降(因為每次一個s對應的所有action的概率之和保持為1)。 這樣做,確實有一定的合理性,也符合出現的多,我就讓你下次出現的概率更大。 這就好比, 只要是熟人,我就增加推舉你高升的概率(給你打高分)。 這種情況下, 熟人一定比沒見過的生人的評分高。 但這並不完全合理,因為,有一些熟人,他確實在你生活里多出現了幾次, 但是,他的表現,未必好,達不到你的要求,甚至可能得罪你。

這樣的人,雖然多出現了幾次,但是他每次出現,對於你這個brain而言,都是減分項;這也意味著, 我們並非一定要按著上面的那個公式一直增加   的值,而是給 reward加一個 base line :

加上baseline b之後, 會導致:   經歷了一個 s-a,但它的reward值達不到期望值,那麼意味著  減去b之後是負的, 那麼意味著 的更新其實是朝著梯度下降方向做了減小。然後,我們再想一下背後的物理邏輯:  當 reward超出b很多的時候,意味著朝著梯度的方向,大幅增加 值, 值的增加也就意味著修正了策略 ,使得這一個s-a出現的概率進一步增大(至於為什麼,可以看程序以及交叉熵)。 如果reward值,大於b,但僅大了一點點,那麼就是相當於小幅增加 值,這也就意味著小幅增加了這個s-a出現的概率。 如果reward值小於b,那麼相當於減小\theta值,而且是reward值越小越遠離期望值b的時候,\theta減小的幅度也就越大,這背後意味著將大幅降低這個s-a對出現的概率。

      上述就是加了baseline b之後的效果,顯然更合理。 當然了,有的時候,比如morvan的程序,在計算 baseline b的時候, 方式是 給每一步  reward值做 normalization,也就是每個reward都相當於減去了 該s下所有a的reward值的均值, 並且再除以標准差。

 與q-learning系列不同, policy-gradient優化的不是q-table,而是直接優化 policy pai, policy是什麼呢,就是針對每個observation的 每種action被選擇的  概率!(注意,不是q-learning中的q值)。 

  那麼,到底怎麼優化 這個  s-a 對 的 概率值呢?   首先是方向,就是某種action獲得的 reward值越大,那就希望這個s-a的概率值也增大,反之則希望這個概率值變小。

   那麼,在tensorflow中布局好整個graph之後, 到底怎麼定義  loss 來展開訓練呢?   

loss的定義是這樣的:  loss= -log(prob)*vt                          

    (首先需要聲明的是,這個log函數,在底是 0-1的情況下是單調遞減,底>1的時候 單調遞增,這里情況是後者,只不過loga x的x這里是概率值,是0到1之間的一個數據,導致整體log值為負)

    vt就是獎勵值, vt越大, prob 越小, 則 最後的loss值會更更大, 這就要求我們立刻按照梯度方向,大跨步修正prob(增加prob值),以使得 -log(prob)*vt 的值更貼近於合理水平。  注意: 其實梯度修正的最終目的是要獲得一張 非常合理的 s-a 的概率表, 在這個概率表中, 能獲得較大vt的好的action,其對應的概率值就越大(注意並不是最大的vt要成為1,那種貪心是錯誤的), 獲得較小vt的action,其概率應該小一些。 

由於-log(prob) 是單調遞減函數,也就是說,  prob越小,-log(prob)就越大, 就需要配上小的vt,其乘積才等於或貼近於 最合理的 s-a 概率表; 如果是較大的vt, 而又是較小的 prob,那麼就要朝著梯度的方向大跨步調整 概率網。  同理, 如果是較小的vt, 那麼就應該配上較小的 prob,乘積較為適中,才更貼近 合理概率網, 如果較小的vt, 配上較大的prob,那麼雖然計算

鏈接:https://www.jianshu.com/p/2ccbab48414b

閱讀全文

與負相關的函數如何用神經網路訓練相關的資料

熱點內容
無線網路很不穩定路由器怎麼設置 瀏覽:539
連接wifi後抓取網路包 瀏覽:655
金地通網路是什麼 瀏覽:727
審核快的寫網路小說軟體 瀏覽:950
x狙擊手手機版怎麼網路連接 瀏覽:137
貴州ip網路呼叫中心多少錢 瀏覽:496
在火車上沒有移動網路 瀏覽:911
路由器哪個是網路指示燈 瀏覽:682
電腦網路不行wifi可以 瀏覽:869
貴州網路學校可以考什麼事業單位 瀏覽:801
辦公區域網路異常 瀏覽:921
手機華為登錄網路怎麼回事 瀏覽:836
網路毛筆字在哪裡學 瀏覽:491
高中選修網路技術軟體哪個好 瀏覽:413
wifi網路卡有什麼辦法 瀏覽:111
插卡路由器的無線網路連接 瀏覽:923
網路機頂盒有線連接顯示無信號 瀏覽:139
小米手機連接網路數據連不上 瀏覽:549
上海網路存儲服務在哪裡找 瀏覽:681
不用網路的電腦k歌軟體哪個好用 瀏覽:545

友情鏈接