A. 如何用神經網路的方法分析兩者之間的關系
數模大賽吧 自己完成
B. 最小二乘法、回歸分析法、灰色預測法、決策論、神經網路等5個演算法的使用范圍及優缺點是什麼
最小二乘法:通過最小化誤差的平方和尋找數據的最佳函數匹配。利用最小二乘法可以簡便地求得未知的數據,並使得這些求得的數據與實際數據之間誤差的平方和為最小。最小二乘法還可用於曲線擬合。其他一些優化問題也可通過最小化能量或最大化熵用最小二乘法來表達。優點:實現簡單,計算簡單。缺點:不能擬合非線性數據.
回歸分析法:指的是確定兩種或兩種以上變數間相互依賴的定量關系的一種統計分析方法。在大數據分析中,回歸分析是一種預測性的建模技術,它研究的是因變數(目標)和自變數(預測器)之間的關系。這種技術通常用於預測分析,時間序列模型以及發現變數之間的因果關系。優點:在分析多因素模型時,更加簡單和方便,不僅可以預測並求出函數,還可以自己對結果進行殘差的檢驗,檢驗模型的精度。缺點:回歸方程式只是一種推測,這影響了因子的多樣性和某些因子的不可測性,使得回歸分析在某些情況下受到限制。
灰色預測法:
色預測法是一種對含有不確定因素的系統進行預測的方法 。它通過鑒別系統因素之間發展趨勢的相異程度,即進行關聯分析,並對原始數據進行生成處理來尋找系統變動的規律,生成有較強規律性的數據序列,然後建立相應的微分方程模型,從而預測事物未來發展趨勢的狀況。它用等時間距離觀測到的反應預測對象特徵的一系列數量值構造灰色預測模型,預測未來某一時刻的特徵量,或者達到某一特徵量的時間。優點:對於不確定因素的復雜系統預測效果較好,且所需樣本數據較小。缺點:基於指數率的預測沒有考慮系統的隨機性,中長期預測精度較差。
決策樹:在已知各種情況發生概率的基礎上,通過構成決策樹來求取凈現值的期望值大於等於零的概率,評價項目風險,判斷其可行性的決策分析方法,是直觀運用概率分析的一種圖解法。由於這種決策分支畫成圖形很像一棵樹的枝幹,故稱決策樹。在機器學習中,決策樹是一個預測模型,他代表的是對象屬性與對象值之間的一種映射關系。優點:能夠處理不相關的特徵;在相對短的時間內能夠對大型數據源做出可行且效果良好的分析;計算簡單,易於理解,可解釋性強;比較適合處理有缺失屬性的樣本。缺點:忽略了數據之間的相關性;容易發生過擬合(隨機森林可以很大程度上減少過擬合);在決策樹當中,對於各類別樣本數量不一致的數據,信息增益的結果偏向於那些具有更多數值的特徵。
神經網路:優點:分類的准確度高;並行分布處理能力強,分布存儲及學習能力強,對雜訊神經有較強的魯棒性和容錯能力,能充分逼近復雜的非線性關系;具備聯想記憶的功能。缺點:神經網路需要大量的參數,如網路拓撲結構、權值和閾值的初始值;不能觀察之間的學習過程,輸出結果難以解釋,會影響到結果的可信度和可接受程度;學習時間過長,甚至可能達不到學習的目的。
C. 神經網路相關名詞解釋
很多人認為深度學習很枯燥,大部分情況是因為對深度學習的學術詞語,特別是專有名詞很困惑,即便對相關從業者,亦很難深入淺出地解釋這些詞語的含義。
相信讀過此文的圈友,會對深度學習有個全新的認識,機器人圈希望可以為圈友的深度學習之路起到一些輔助作用。
人工智慧,深度學習,機器學習—無論你在做什麼,如果你對它不是很了解的話—去學習它。否則的話不用三年你就跟不上時代的潮流了。——馬克.庫班
馬克.庫班的這個觀點可能聽起來很極端——但是它所傳達的信息是完全正確的! 我們正處於一場革命的旋渦之中——一場由大數據和計算能力引起的革命。
只需要一分鍾,我們來想像一下,在20世紀初,如果一個人不了解電力,他/她會覺得如何?你會習慣於以某種特定的方式來做事情,日復一日,年復一年,而你周圍的一切事情都在發生變化,一件需要很多人才能完成的事情僅依靠一個人和電力就可以輕松搞定,而我們今天正以機器學習和深度學習的方式在經歷一場相似的旅程。
所以,如果你還沒有探索或理解深度學習的神奇力量——那你應該從今天就開始進入這一領域。
與主題相關的術語
為了幫助你了解各種術語,我已經將它們分成3組。如果你正在尋找特定術語,你可以跳到該部分。如果你是這個領域的新手,那我建議你按照我寫的順序來通讀它們。
1.神經網路基礎(Basics of Neural Networks) ——常用激活函數(Common Activation Functions)
2.卷積神經網路(Convolutional Neural Networks)
3.循環神經網路(Recurrent Neural Networks)
神經網路基礎
1)神經元(Neuron) ——就像形成我們大腦基本元素的神經元一樣,神經元形成神經網路的基本結構。想像一下,當我們得到新信息時我們該怎麼做。當我們獲取信息時,我們一般會處理它,然後生成一個輸出。類似地,在神經網路的情況下,神經元接收輸入,處理它並產生輸出,而這個輸出被發送到其他神經元用於進一步處理,或者作為最終輸出進行輸出。
2)權重(Weights) ——當輸入進入神經元時,它會乘以一個權重。例如,如果一個神經元有兩個輸入,則每個輸入將具有分配給它的一個關聯權重。我們隨機初始化權重,並在模型訓練過程中更新這些權重。訓練後的神經網路對其輸入賦予較高的權重,這是它認為與不那麼重要的輸入相比更為重要的輸入。為零的權重則表示特定的特徵是微不足道的。
讓我們假設輸入為a,並且與其相關聯的權重為W1,那麼在通過節點之後,輸入變為a * W1
3)偏差(Bias) ——除了權重之外,另一個被應用於輸入的線性分量被稱為偏差。它被加到權重與輸入相乘的結果中。基本上添加偏差的目的是來改變權重與輸入相乘所得結果的范圍的。添加偏差後,結果將看起來像a* W1 +偏差。這是輸入變換的最終線性分量。
4)激活函數(Activation Function) ——一旦將線性分量應用於輸入,將會需要應用一個非線性函數。這通過將激活函數應用於線性組合來完成。激活函數將輸入信號轉換為輸出信號。應用激活函數後的輸出看起來像f(a * W1 + b),其中f()就是激活函數。
在下圖中,我們將「n」個輸入給定為X1到Xn而與其相應的權重為Wk1到Wkn。我們有一個給定值為bk的偏差。權重首先乘以與其對應的輸入,然後與偏差加在一起。而這個值叫做u。
U =ΣW* X+ b
激活函數被應用於u,即 f(u),並且我們會從神經元接收最終輸出,如yk = f(u)。
常用的激活函數
最常用的激活函數就是Sigmoid,ReLU和softmax
a)Sigmoid ——最常用的激活函數之一是Sigmoid,它被定義為:
Sigmoid變換產生一個值為0到1之間更平滑的范圍。我們可能需要觀察在輸入值略有變化時輸出值中發生的變化。光滑的曲線使我們能夠做到這一點,因此優於階躍函數。
b)ReLU(整流線性單位) ——與Sigmoid函數不同的是,最近的網路更喜歡使用ReLu激活函數來處理隱藏層。該函數定義為:
當X>0時,函數的輸出值為X;當X<=0時,輸出值為0。函數圖如下圖所示:
使用ReLU函數的最主要的好處是對於大於0的所有輸入來說,它都有一個不變的導數值。常數導數值有助於網路訓練進行得更快。
c) Softmax ——Softmax激活函數通常用於輸出層,用於分類問題。它與sigmoid函數是很類似的,唯一的區別就是輸出被歸一化為總和為1。Sigmoid函數將發揮作用以防我們有一個二進制輸出,但是如果我們有一個多類分類問題,softmax函數使為每個類分配值這種操作變得相當簡單,而這可以將其解釋為概率。
以這種方式來操作的話,我們很容易看到——假設你正在嘗試識別一個可能看起來像8的6。該函數將為每個數字分配值如下。我們可以很容易地看出,最高概率被分配給6,而下一個最高概率分配給8,依此類推……
5)神經網路(Neural Network) ——神經網路構成了深度學習的支柱。神經網路的目標是找到一個未知函數的近似值。它由相互聯系的神經元形成。這些神經元具有權重和在網路訓練期間根據錯誤來進行更新的偏差。激活函數將非線性變換置於線性組合,而這個線性組合稍後會生成輸出。激活的神經元的組合會給出輸出值。
一個很好的神經網路定義——
「神經網路由許多相互關聯的概念化的人造神經元組成,它們之間傳遞相互數據,並且具有根據網路」經驗「調整的相關權重。神經元具有激活閾值,如果通過其相關權重的組合和傳遞給他們的數據滿足這個閾值的話,其將被解僱;發射神經元的組合導致「學習」。
6)輸入/輸出/隱藏層(Input / Output / Hidden Layer) ——正如它們名字所代表的那樣,輸入層是接收輸入那一層,本質上是網路的第一層。而輸出層是生成輸出的那一層,也可以說是網路的最終層。處理層是網路中的隱藏層。這些隱藏層是對傳入數據執行特定任務並將其生成的輸出傳遞到下一層的那些層。輸入和輸出層是我們可見的,而中間層則是隱藏的。
7)MLP(多層感知器) ——單個神經元將無法執行高度復雜的任務。因此,我們使用堆棧的神經元來生成我們所需要的輸出。在最簡單的網路中,我們將有一個輸入層、一個隱藏層和一個輸出層。每個層都有多個神經元,並且每個層中的所有神經元都連接到下一層的所有神經元。這些網路也可以被稱為完全連接的網路。
8)正向傳播(Forward Propagation) ——正向傳播是指輸入通過隱藏層到輸出層的運動。在正向傳播中,信息沿著一個單一方向前進。輸入層將輸入提供給隱藏層,然後生成輸出。這過程中是沒有反向運動的。
9)成本函數(Cost Function) ——當我們建立一個網路時,網路試圖將輸出預測得盡可能靠近實際值。我們使用成本/損失函數來衡量網路的准確性。而成本或損失函數會在發生錯誤時嘗試懲罰網路。
我們在運行網路時的目標是提高我們的預測精度並減少誤差,從而最大限度地降低成本。最優化的輸出是那些成本或損失函數值最小的輸出。
如果我將成本函數定義為均方誤差,則可以寫為:
C= 1/m ∑(y–a)^2,
其中m是訓練輸入的數量,a是預測值,y是該特定示例的實際值。
學習過程圍繞最小化成本來進行。
10)梯度下降(Gradient Descent) ——梯度下降是一種最小化成本的優化演算法。要直觀地想一想,在爬山的時候,你應該會採取小步驟,一步一步走下來,而不是一下子跳下來。因此,我們所做的就是,如果我們從一個點x開始,我們向下移動一點,即Δh,並將我們的位置更新為x-Δh,並且我們繼續保持一致,直到達到底部。考慮最低成本點。
在數學上,為了找到函數的局部最小值,我們通常採取與函數梯度的負數成比例的步長。
11)學習率(Learning Rate) ——學習率被定義為每次迭代中成本函數中最小化的量。簡單來說,我們下降到成本函數的最小值的速率是學習率。我們應該非常仔細地選擇學習率,因為它不應該是非常大的,以至於最佳解決方案被錯過,也不應該非常低,以至於網路需要融合。
12)反向傳播(Backpropagation) ——當我們定義神經網路時,我們為我們的節點分配隨機權重和偏差值。一旦我們收到單次迭代的輸出,我們就可以計算出網路的錯誤。然後將該錯誤與成本函數的梯度一起反饋給網路以更新網路的權重。 最後更新這些權重,以便減少後續迭代中的錯誤。使用成本函數的梯度的權重的更新被稱為反向傳播。
在反向傳播中,網路的運動是向後的,錯誤隨著梯度從外層通過隱藏層流回,權重被更新。
13)批次(Batches) ——在訓練神經網路的同時,不用一次發送整個輸入,我們將輸入分成幾個隨機大小相等的塊。與整個數據集一次性饋送到網路時建立的模型相比,批量訓練數據使得模型更加廣義化。
14)周期(Epochs) ——周期被定義為向前和向後傳播中所有批次的單次訓練迭代。這意味著1個周期是整個輸入數據的單次向前和向後傳遞。
你可以選擇你用來訓練網路的周期數量,更多的周期將顯示出更高的網路准確性,然而,網路融合也需要更長的時間。另外,你必須注意,如果周期數太高,網路可能會過度擬合。
15)丟棄(Dropout) ——Dropout是一種正則化技術,可防止網路過度擬合套。顧名思義,在訓練期間,隱藏層中的一定數量的神經元被隨機地丟棄。這意味著訓練發生在神經網路的不同組合的神經網路的幾個架構上。你可以將Dropout視為一種綜合技術,然後將多個網路的輸出用於產生最終輸出。
16)批量歸一化(Batch Normalization) ——作為一個概念,批量歸一化可以被認為是我們在河流中設定為特定檢查點的水壩。這樣做是為了確保數據的分發與希望獲得的下一層相同。當我們訓練神經網路時,權重在梯度下降的每個步驟之後都會改變,這會改變數據的形狀如何發送到下一層。
但是下一層預期分布類似於之前所看到的分布。 所以我們在將數據發送到下一層之前明確規范化數據。
17)濾波器(Filters) ——CNN中的濾波器與加權矩陣一樣,它與輸入圖像的一部分相乘以產生一個迴旋輸出。我們假設有一個大小為28 * 28的圖像,我們隨機分配一個大小為3 * 3的濾波器,然後與圖像不同的3 * 3部分相乘,形成所謂的卷積輸出。濾波器尺寸通常小於原始圖像尺寸。在成本最小化的反向傳播期間,濾波器值被更新為重量值。
參考一下下圖,這里filter是一個3 * 3矩陣:
與圖像的每個3 * 3部分相乘以形成卷積特徵。
18)卷積神經網路(CNN) ——卷積神經網路基本上應用於圖像數據。假設我們有一個輸入的大小(28 * 28 * 3),如果我們使用正常的神經網路,將有2352(28 * 28 * 3)參數。並且隨著圖像的大小增加參數的數量變得非常大。我們「卷積」圖像以減少參數數量(如上面濾波器定義所示)。當我們將濾波器滑動到輸入體積的寬度和高度時,將產生一個二維激活圖,給出該濾波器在每個位置的輸出。我們將沿深度尺寸堆疊這些激活圖,並產生輸出量。
你可以看到下面的圖,以獲得更清晰的印象。
19)池化(Pooling) ——通常在卷積層之間定期引入池層。這基本上是為了減少一些參數,並防止過度擬合。最常見的池化類型是使用MAX操作的濾波器尺寸(2,2)的池層。它會做的是,它將佔用原始圖像的每個4 * 4矩陣的最大值。
你還可以使用其他操作(如平均池)進行池化,但是最大池數量在實踐中表現更好。
20)填充(Padding) ——填充是指在圖像之間添加額外的零層,以使輸出圖像的大小與輸入相同。這被稱為相同的填充。
在應用濾波器之後,在相同填充的情況下,卷積層具有等於實際圖像的大小。
有效填充是指將圖像保持為具有實際或「有效」的圖像的所有像素。在這種情況下,在應用濾波器之後,輸出的長度和寬度的大小在每個卷積層處不斷減小。
21)數據增強(Data Augmentation) ——數據增強是指從給定數據導出的新數據的添加,這可能被證明對預測有益。例如,如果你使光線變亮,可能更容易在較暗的圖像中看到貓,或者例如,數字識別中的9可能會稍微傾斜或旋轉。在這種情況下,旋轉將解決問題並提高我們的模型的准確性。通過旋轉或增亮,我們正在提高數據的質量。這被稱為數據增強。
循環神經網路
22)循環神經元(Recurrent Neuron) ——循環神經元是在T時間內將神經元的輸出發送回給它。如果你看圖,輸出將返回輸入t次。展開的神經元看起來像連接在一起的t個不同的神經元。這個神經元的基本優點是它給出了更廣義的輸出。
23)循環神經網路(RNN) ——循環神經網路特別用於順序數據,其中先前的輸出用於預測下一個輸出。在這種情況下,網路中有循環。隱藏神經元內的循環使他們能夠存儲有關前一個單詞的信息一段時間,以便能夠預測輸出。隱藏層的輸出在t時間戳內再次發送到隱藏層。展開的神經元看起來像上圖。只有在完成所有的時間戳後,循環神經元的輸出才能進入下一層。發送的輸出更廣泛,以前的信息保留的時間也較長。
然後根據展開的網路將錯誤反向傳播以更新權重。這被稱為通過時間的反向傳播(BPTT)。
24)消失梯度問題(Vanishing Gradient Problem) ——激活函數的梯度非常小的情況下會出現消失梯度問題。在權重乘以這些低梯度時的反向傳播過程中,它們往往變得非常小,並且隨著網路進一步深入而「消失」。這使得神經網路忘記了長距離依賴。這對循環神經網路來說是一個問題,長期依賴對於網路來說是非常重要的。
這可以通過使用不具有小梯度的激活函數ReLu來解決。
25)激增梯度問題(Exploding Gradient Problem) ——這與消失的梯度問題完全相反,激活函數的梯度過大。在反向傳播期間,它使特定節點的權重相對於其他節點的權重非常高,這使得它們不重要。這可以通過剪切梯度來輕松解決,使其不超過一定值。
D. 全轉錄組關聯分析TWAS的原理與方法
對GWAS(genome-wide association study, 全基因組關聯分析)大家應該比較熟悉,是分析遺傳變異(genotype, 如SNP)與表型(phenotype)之間的關聯。如果某個SNP總是和某種疾病同時出現,那麼可以推測這個SNP極有可能與此疾病有關,也就是這個SNP和這個phenotype協同變化,有相關性。但基於GWAS的結果,僅能給出候選的染色體區域,無法確切定位致病的候選基因。為了進一步縮小候選基因的范圍,研究者提出了很多方法,全轉錄組關聯分析TWAS (transcriptome-wide association)是其中一種。 TWAS是把轉錄調控(expression)作為遺傳變異(genotype)和表型(phenotype)之間的中介,將單個遺傳變異與表型的關聯轉換成基因/轉錄本與表型的關聯。
第一步,基於reference panel來建模,構建SNP和基因表達量之間的關系。reference panel中的樣本同時擁有基因分型和表達量的結果,根據距離確定基因對應的SNP位點,比如選擇基因上下游500kb或者1Mb范圍內的SNP位點,擬合這些SNP位點和基因表達量之間的關系。
第二步,用第一步建模的結果來預測另外一個隊列的基因表達量,這個隊列中的樣本量只有GWAS結果,稱之為gwas cohort, 這一步可以看做是對gwas cohort中的基因表達量進行填充。
第三步,用填充之後的基因表達量來分析基因和性狀之間的關聯。
2015年,Eric R Gamazon等人為了建立起受遺傳調控的基因表達與性狀之間的關系,提出了一種方法PrediXcan。
2020年10月,Eric R Gamazon課題組提出MR-JTI(Mendelian randomization & joint-tissue imputation) 方法,對TWAS分析做了兩個優化:
第一,JTI方法可以提高表達量預測模型的精度,從而增加關聯分析的檢驗效能;
第二,MR方法可以解決基因多效性 (horizontal pleiotropy) 及潛在混雜因素帶來的假陽性問題。
方法的流程圖如下:
首先來看第一步優化,JTI方法。
之前的TWAS分析方法,在預測表達量模型的訓練中,未充分利用GTEx數據組織間廣泛存在的生物學相似性。這里,研究者通過整合多個相似的組織 (Joint-tissue imputation, JTI) 來提升模型的預測精度。研究者同樣使用彈性神經網路方法進行訓練,不同的是在損失函數中引用了相似性權重值:
此方法彌補了TWAS的一大缺陷,且對於工具變數異質性的假設較MR-Egger等經典方法更為靈活。將MR-JTI方法應用於LDL-C疾病相關的GWAS數據,與僅用JTI方法的結果進行比較,發現加入了孟德爾隨機化過程後,可以過濾掉大多數基因,保留下的基因中有7個已得到實驗驗證。
本文主要對TWAS分析的原理和方法進行了簡介。TWAS的優勢在於可以找到顯著性的基因而不是SNP,因此更具有生物學意義。
目前,TWAS已經成功應用於精神分裂症、乳腺癌、前列腺癌等疾病中,相關的數據分析軟體除了上文介紹的PrediXcan和MR-JTI外,還有S-prediXcan,、Fusion、 UTMOST等。從文獻的分析比較來看,MR-JTI的分析效果最佳。
下次將具體介紹軟體使用,並且對比不同軟體的分析效果,不容錯過哦~
[1] GTEx Consortium, Gamazon, E.R., Wheeler, H.E., Shah, K.P., Mozaffari, S.V., Aquino-Michaels, K., Carroll, R.J., Eyler, A.E., Denny, J.C., Nicolae, D.L., et al. (2015). A gene-based association method for mapping traits using reference transcriptome data. Nat Genet 47, 1091–1098.
[2] Wainberg, M., Sinnott-Armstrong, N., Mancuso, N., Barbeira, A.N., Knowles, D.A., Golan, D., Ermel, R., Ruusalepp, A., Quertermous, T., Hao, K., et al. (2019). Opportunities and challenges for transcriptome-wide association studies. Nature Genetics 51, 592–599.
[3] Zhou, D., Jiang, Y., Zhong, X., Cox, N.J., Liu, C., and Gamazon, E.R. (2020). A unified framework for joint-tissue transcriptome-wide association and Mendelian randomization analysis. Nat Genet 52, 1239–1246.
E. Nature 論文:探索深度神經網路之間的個體差異
深度神經網路(DNNs)是 AI 領域的重要成果,但它的 「存在感」 已經不僅僅限於該領域。
一些前沿生物醫學研究,也正被這一特別的概念所吸引。特別是計算神經科學家。
在以前所未有的任務性能徹底改變計算機視覺之後,相應的 DNNs 網路很快就被用以試著解釋大腦信息處理的能力,並日益被用作靈長類動物大腦神經計算的建模框架。經過任務優化的深度神經網路,已經成為預測靈長類動物視覺皮層多個區域活動的最佳模型類型之一。
用神經網路模擬大腦或者試圖讓神經網路更像大腦正成為主流方向的當下,有研究小組卻選擇用神經生物學的方法重新審視計算機學界發明的DNNs。
而他們發現,諸如改變初始權重等情況就能改變網路的最終訓練結果。這對使用單個網路來窺得生物神經信息處理機制的普遍做法提出了新的要求:如果沒有將具有相同功能的深度神經網路具有的差異性納入考慮的話,藉助這類網路進行生物大腦運行機制建模將有可能出現一些隨機的影響。要想盡量避免這種現象,從事 DNNs 研究的計算神經科學家,可能需要將他們的推論建立在多個網路實例組的基礎上,即嘗試去研究多個相同功能的神經網路的質心,以此克服隨機影響。
而對於 AI 領域的研究者,團隊也希望這種表徵一致性的概念能幫助機器學習研究人員了解在不同任務性能水平下運行的深度神經網路之間的差異。
人工神經網路由被稱為 「感知器」、相互連接的單元所建立,感知器則是生物神經元的簡化數字模型。人工神經網路至少有兩層感知器,一層用於輸入層,另一層用於輸出層。在輸入和輸出之間夾上一個或多個 「隱藏」 層,就得到了一個 「深層」 神經網路,這些層越多,網路越深。
深度神經網路可以通過訓練來識別數據中的特徵,就比如代表貓或狗圖像的特徵。訓練包括使用一種演算法來迭代地調整感知器之間的連接強度(權重系數),以便網路學會將給定的輸入(圖像的像素)與正確的標簽(貓或狗)相關聯。理想狀況是,一旦經過訓練,深度神經網路應該能夠對它以前沒有見過的同類型輸入進行分類。
但在總體結構和功能上,深度神經網路還不能說是嚴格地模仿人類大腦,其中對神經元之間連接強度的調整反映了學習過程中的關聯。
一些神經科學家常常指出深度神經網路與人腦相比存在的局限性:單個神經元處理信息的范圍可能比 「失效」 的感知器更廣,例如,深度神經網路經常依賴感知器之間被稱為反向傳播的通信方式,而這種通信方式似乎並不存在於人腦神經系統。
然而,計算神經科學家會持不同想法。有的時候,深度神經網路似乎是建模大腦的最佳選擇。
例如,現有的計算機視覺系統已經受到我們所知的靈長類視覺系統的影響,尤其是在負責識別人、位置和事物的路徑上,借鑒了一種被稱為腹側視覺流的機制。
對人類來說,腹側神經通路從眼睛開始,然後進入丘腦的外側膝狀體,這是一種感覺信息的中繼站。外側膝狀體連接到初級視覺皮層中稱為 V1 的區域,在 V1 和 V4 的下游是區域 V2 和 V4,它們最終通向下顳葉皮層。非人類靈長類動物的大腦也有類似的結構(與之相應的背部視覺流是一條很大程度上獨立的通道,用於處理看到運動和物體位置的信息)。
這里所體現的神經科學見解是,視覺信息處理的分層、分階段推進的:早期階段先處理視野中的低級特徵(如邊緣、輪廓、顏色和形狀),而復雜的表徵,如整個對象和面孔,將在之後由顳葉皮層接管。
如同人的大腦,每個 DNN 都有獨特的連通性和表徵特徵,既然人的大腦會因為內部構造上的差異而導致有的人可能記憶力或者數學能力更強,那訓練前初始設定不同的神經網路是否也會在訓練過程中展現出性能上的不同呢?
換句話說,功能相同,但起始條件不同的神經網路間究竟有沒有差異呢?
這個問題之所以關鍵,是因為它決定著科學家們應該在研究中怎樣使用深度神經網路。
在之前 Nature 通訊發布的一篇論文中,由英國劍橋大學 MRC 認知及腦科學研究組、美國哥倫比亞大學 Zuckerman Institute 和荷蘭拉德堡大學的 Donders 腦科學及認知與行為學研究中心的科學家組成的一支科研團隊,正試圖回答這個問題。論文題目為《Indivial differences among deep neural network models》。
根據這篇論文,初始條件不同的深度神經網路,確實會隨著訓練進行而在表徵上表現出越來越大的個體差異。
此前的研究主要是採用線性典範相關性分析(CCA,linear canonical correlation analysis)和 centered-kernel alignment(CKA)來比較神經網路間的內部網路表徵差異。
這一次,該團隊的研究採用的也是領域內常見的分析手法 —— 表徵相似性分析(RSA,representational similarity analysis)。
該分析法源於神經科學的多變數分析方法,常被用於將計算模型生產的數據與真實的大腦數據進行比較,在原理上基於通過用 「雙(或『對』)」 反饋差異表示系統的內部刺激表徵(Inner stimulus representation)的表徵差異矩陣(RDMs,representational dissimilarity matrices),而所有雙反饋組所組成的幾何則能被用於表示高維刺激空間的幾何排布。
兩個系統如果在刺激表徵上的特點相同(即表徵差異矩陣的相似度高達一定數值),就被認為是擁有相似的系統表徵。
表徵差異矩陣的相似度計算在有不同維度和來源的源空間(source spaces)中進行,以避開定義 「系統間的映射網路」。本研究的在這方面上的一個特色就是,使用神經科學研究中常用的網路實例比較分析方法對網路間的表徵相似度進行比較,這使得研究結果可被直接用於神經科學研究常用的模型。
最終,對比的結果顯示,僅在起始隨機種子上存在不同的神經網路間存在明顯個體差異。
該結果在採用不同網路架構,不同訓練集和距離測量的情況下都成立。團隊分析認為,這種差異的程度與 「用不同輸入訓練神經網路」 所產生的差異相當。
如上圖所示,研究團隊通過計算對應 RDM 之間的所有成對距離,比較 all-CNN-C 在所有網路實例和層、上的表示幾何。
再通過 MDS 將 a 中的數據點(每個點對應一個層和實例)投影到二維。各個網路實例的層通過灰色線連接。雖然早期的代表性幾何圖形高度相似,但隨著網路深度的增加,個體差異逐漸顯現。
在證明了深度神經網路存在的顯著個體差異之後,團隊繼續探索了這些差異存在的解釋。
隨後,研究者再通過在訓練和測試階段使用 Bernoulli dropout 方法調查了網路正則化(network regularization)對結果能造成的影響,但發現正則化雖然能在一定程度上提升 「採用不同起始隨機種子的網路之表徵」 的一致性,但並不能修正這些網路間的個體差異。
最後,通過分析網路的訓練軌跡與個體差異出現的過程並將這一過程可視化,團隊在論文中表示,神經網路的性能與表徵一致性間存在強負相關性,即網路間的個體差異會在訓練過程中被加劇。
總而言之,這項研究主要調查了多個神經網路在最少的實驗干預條件下是否存在個體差異,即在訓練開始前為網路設置不同權重的隨機種子,但保持其他條件一致,並以此拓展了此前與 「神經網路間相關性」 有關的研究。
除了這篇 這篇 研究以外,「深度學習三巨頭」 之一、著名 AI 學者 Hinton 也有過與之相關的研究,論文名為《Similarity of Neural Network Representations Revisited》,文章探討了測量深度神經網路表示相似性的問題,感興趣的讀者可以一並進行閱讀。
Refrence:
[1]https://www.nature.com/articles/s41467-020-19632-w#citeas
[2]https://www.quantamagazine.org/deep-neural-networks-help-to-explain-living-brains-20201028/
F. 大數據分析方法分哪些類
CDA大數據課程設計比較全面,業務邏輯和大數據技術都有,出來就是復合型人才.
第一部分 大數據平台:
大數據平台包含了採集層、存儲層、計算層和應用層,是一個復雜的IT系統,需要學會Hadoop等分布式系統的開發技能。
1.1採集層:Sqoop可用來採集導入傳統關系型資料庫的數據、Flume對於日誌型數據採集,另外使用Python一類的語言開發網路爬蟲獲取網路數據;
1.2儲存層:分布式文件系統HDFS最為常用;
1.3計算層:有不同的計算框架可以選擇,常見的如MapRece、Spark等,一般來講,如果能使用計算框架的「原生語言」,運算效率會最高(MapRece的原生支持Java,而Spark原生支持Scala);
1.4應用層:包括結果數據的可視化、交互界面開發以及應用管理工具的開發等,更多的用到Java、Python等通用IT開發前端、後端的能力;
第二部分 大數據分析:
大數據挖掘指的是利用演算法和模型提高數據處理效率、挖掘數據價值、實現從數據到知識的轉換
2.1數據分析方法論:統計基礎 微積分(求導)代數(矩陣運算)等
2.2統計模型:方差分析、線性回歸、邏輯回歸、列聯分析、聚類分析、面板模型等
2.3數據挖掘模型:決策樹 關聯分析、SVM、神經網路 貝葉斯網路等
G. 神經網路分析法的神經網路分析法在風險評估的運用
神經網路分析方法應用於信用風險評估的優點在於其無嚴格的假設限制,且具有處理非線性問題的能力。它能有效解決非正態分布、非線性的信用評估問題,其結果介於0與1之間,在信用風險的衡量下,即為違約概率。神經網路法的最大缺點是其工作的隨機性較強。因此使該模型的應用受到了限制。Altman、marco和varetto(1994)在對義大利公司財務危機預測中應用了神經網路分析法;coats及fant(1993)trippi採用神經網路分析法分別對美國公司和銀行財務危機進行預測,取得較好效果。然而,要得到一個較好的神經網路結構,需要人為隨機調試,需要耗費大量人力和時間,加之該方法結論沒有統計理論基礎,解釋性不強,所以應用受到很大限制。
H. 一文看懂四種基本的神經網路架構
原文鏈接:
http://blackblog.tech/2018/02/23/Eight-Neural-Network/
更多干貨就在我的個人博客 http://blackblog.tech 歡迎關注
剛剛入門神經網路,往往會對眾多的神經網路架構感到困惑,神經網路看起來復雜多樣,但是這么多架構無非也就是三類,前饋神經網路,循環網路,對稱連接網路,本文將介紹四種常見的神經網路,分別是CNN,RNN,DBN,GAN。通過這四種基本的神經網路架構,我們來對神經網路進行一定的了解。
神經網路是機器學習中的一種模型,是一種模仿動物神經網路行為特徵,進行分布式並行信息處理的演算法數學模型。這種網路依靠系統的復雜程度,通過調整內部大量節點之間相互連接的關系,從而達到處理信息的目的。
一般來說,神經網路的架構可以分為三類:
前饋神經網路:
這是實際應用中最常見的神經網路類型。第一層是輸入,最後一層是輸出。如果有多個隱藏層,我們稱之為「深度」神經網路。他們計算出一系列改變樣本相似性的變換。各層神經元的活動是前一層活動的非線性函數。
循環網路:
循環網路在他們的連接圖中定向了循環,這意味著你可以按照箭頭回到你開始的地方。他們可以有復雜的動態,使其很難訓練。他們更具有生物真實性。
循環網路的目的使用來處理序列數據。在傳統的神經網路模型中,是從輸入層到隱含層再到輸出層,層與層之間是全連接的,每層之間的節點是無連接的。但是這種普通的神經網路對於很多問題卻無能無力。例如,你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。
循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。
對稱連接網路:
對稱連接網路有點像循環網路,但是單元之間的連接是對稱的(它們在兩個方向上權重相同)。比起循環網路,對稱連接網路更容易分析。這個網路中有更多的限制,因為它們遵守能量函數定律。沒有隱藏單元的對稱連接網路被稱為「Hopfield 網路」。有隱藏單元的對稱連接的網路被稱為玻爾茲曼機。
其實之前的帖子講過一些關於感知機的內容,這里再復述一下。
首先還是這張圖
這是一個M-P神經元
一個神經元有n個輸入,每一個輸入對應一個權值w,神經元內會對輸入與權重做乘法後求和,求和的結果與偏置做差,最終將結果放入激活函數中,由激活函數給出最後的輸出,輸出往往是二進制的,0 狀態代表抑制,1 狀態代表激活。
可以把感知機看作是 n 維實例空間中的超平面決策面,對於超平面一側的樣本,感知器輸出 1,對於另一側的實例輸出 0,這個決策超平面方程是 w⋅x=0。 那些可以被某一個超平面分割的正反樣例集合稱為線性可分(linearly separable)樣例集合,它們就可以使用圖中的感知機表示。
與、或、非問題都是線性可分的問題,使用一個有兩輸入的感知機能容易地表示,而異或並不是一個線性可分的問題,所以使用單層感知機是不行的,這時候就要使用多層感知機來解決疑惑問題了。
如果我們要訓練一個感知機,應該怎麼辦呢?
我們會從隨機的權值開始,反復地應用這個感知機到每個訓練樣例,只要它誤分類樣例就修改感知機的權值。重復這個過程,直到感知機正確分類所有的樣例。每一步根據感知機訓練法則來修改權值,也就是修改與輸入 xi 對應的權 wi,法則如下:
這里 t 是當前訓練樣例的目標輸出,o 是感知機的輸出,η 是一個正的常數稱為學習速率。學習速率的作用是緩和每一步調整權的程度,它通常被設為一個小的數值(例如 0.1),而且有時會使其隨著權調整次數的增加而衰減。
多層感知機,或者說是多層神經網路無非就是在輸入層與輸出層之間加了多個隱藏層而已,後續的CNN,DBN等神經網路只不過是將重新設計了每一層的類型。感知機可以說是神經網路的基礎,後續更為復雜的神經網路都離不開最簡單的感知機的模型,
談到機器學習,我們往往還會跟上一個詞語,叫做模式識別,但是真實環境中的模式識別往往會出現各種問題。比如:
圖像分割:真實場景中總是摻雜著其它物體。很難判斷哪些部分屬於同一個對象。對象的某些部分可以隱藏在其他對象的後面。
物體光照:像素的強度被光照強烈影響。
圖像變形:物體可以以各種非仿射方式變形。例如,手寫也可以有一個大的圓圈或只是一個尖頭。
情景支持:物體所屬類別通常由它們的使用方式來定義。例如,椅子是為了讓人們坐在上面而設計的,因此它們具有各種各樣的物理形狀。
卷積神經網路與普通神經網路的區別在於,卷積神經網路包含了一個由卷積層和子采樣層構成的特徵抽取器。在卷積神經網路的卷積層中,一個神經元只與部分鄰層神經元連接。在CNN的一個卷積層中,通常包含若干個特徵平面(featureMap),每個特徵平面由一些矩形排列的的神經元組成,同一特徵平面的神經元共享權值,這里共享的權值就是卷積核。卷積核一般以隨機小數矩陣的形式初始化,在網路的訓練過程中卷積核將學習得到合理的權值。共享權值(卷積核)帶來的直接好處是減少網路各層之間的連接,同時又降低了過擬合的風險。子采樣也叫做池化(pooling),通常有均值子采樣(mean pooling)和最大值子采樣(max pooling)兩種形式。子采樣可以看作一種特殊的卷積過程。卷積和子采樣大大簡化了模型復雜度,減少了模型的參數。
卷積神經網路由三部分構成。第一部分是輸入層。第二部分由n個卷積層和池化層的組合組成。第三部分由一個全連結的多層感知機分類器構成。
這里舉AlexNet為例:
·輸入:224×224大小的圖片,3通道
·第一層卷積:11×11大小的卷積核96個,每個GPU上48個。
·第一層max-pooling:2×2的核。
·第二層卷積:5×5卷積核256個,每個GPU上128個。
·第二層max-pooling:2×2的核。
·第三層卷積:與上一層是全連接,3*3的卷積核384個。分到兩個GPU上個192個。
·第四層卷積:3×3的卷積核384個,兩個GPU各192個。該層與上一層連接沒有經過pooling層。
·第五層卷積:3×3的卷積核256個,兩個GPU上個128個。
·第五層max-pooling:2×2的核。
·第一層全連接:4096維,將第五層max-pooling的輸出連接成為一個一維向量,作為該層的輸入。
·第二層全連接:4096維
·Softmax層:輸出為1000,輸出的每一維都是圖片屬於該類別的概率。
卷積神經網路在模式識別領域有著重要應用,當然這里只是對卷積神經網路做了最簡單的講解,卷積神經網路中仍然有很多知識,比如局部感受野,權值共享,多卷積核等內容,後續有機會再進行講解。
傳統的神經網路對於很多問題難以處理,比如你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。RNN之所以稱為循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。理論上,RNN能夠對任何長度的序列數據進行處理。
這是一個簡單的RNN的結構,可以看到隱藏層自己是可以跟自己進行連接的。
那麼RNN為什麼隱藏層能夠看到上一刻的隱藏層的輸出呢,其實我們把這個網路展開來開就很清晰了。
從上面的公式我們可以看出,循環層和全連接層的區別就是循環層多了一個權重矩陣 W。
如果反復把式2帶入到式1,我們將得到:
在講DBN之前,我們需要對DBN的基本組成單位有一定的了解,那就是RBM,受限玻爾茲曼機。
首先什麼是玻爾茲曼機?
[圖片上傳失敗...(image-d36b31-1519636788074)]
如圖所示為一個玻爾茲曼機,其藍色節點為隱層,白色節點為輸入層。
玻爾茲曼機和遞歸神經網路相比,區別體現在以下幾點:
1、遞歸神經網路本質是學習一個函數,因此有輸入和輸出層的概念,而玻爾茲曼機的用處在於學習一組數據的「內在表示」,因此其沒有輸出層的概念。
2、遞歸神經網路各節點鏈接為有向環,而玻爾茲曼機各節點連接成無向完全圖。
而受限玻爾茲曼機是什麼呢?
最簡單的來說就是加入了限制,這個限制就是將完全圖變成了二分圖。即由一個顯層和一個隱層構成,顯層與隱層的神經元之間為雙向全連接。
h表示隱藏層,v表示顯層
在RBM中,任意兩個相連的神經元之間有一個權值w表示其連接強度,每個神經元自身有一個偏置系數b(對顯層神經元)和c(對隱層神經元)來表示其自身權重。
具體的公式推導在這里就不展示了
DBN是一個概率生成模型,與傳統的判別模型的神經網路相對,生成模型是建立一個觀察數據和標簽之間的聯合分布,對P(Observation|Label)和 P(Label|Observation)都做了評估,而判別模型僅僅而已評估了後者,也就是P(Label|Observation)。
DBN由多個限制玻爾茲曼機(Restricted Boltzmann Machines)層組成,一個典型的神經網路類型如圖所示。這些網路被「限制」為一個可視層和一個隱層,層間存在連接,但層內的單元間不存在連接。隱層單元被訓練去捕捉在可視層表現出來的高階數據的相關性。
生成對抗網路其實在之前的帖子中做過講解,這里在說明一下。
生成對抗網路的目標在於生成,我們傳統的網路結構往往都是判別模型,即判斷一個樣本的真實性。而生成模型能夠根據所提供的樣本生成類似的新樣本,注意這些樣本是由計算機學習而來的。
GAN一般由兩個網路組成,生成模型網路,判別模型網路。
生成模型 G 捕捉樣本數據的分布,用服從某一分布(均勻分布,高斯分布等)的雜訊 z 生成一個類似真實訓練數據的樣本,追求效果是越像真實樣本越好;判別模型 D 是一個二分類器,估計一個樣本來自於訓練數據(而非生成數據)的概率,如果樣本來自於真實的訓練數據,D 輸出大概率,否則,D 輸出小概率。
舉個例子:生成網路 G 好比假幣製造團伙,專門製造假幣,判別網路 D 好比警察,專門檢測使用的貨幣是真幣還是假幣,G 的目標是想方設法生成和真幣一樣的貨幣,使得 D 判別不出來,D 的目標是想方設法檢測出來 G 生成的假幣。
傳統的判別網路:
生成對抗網路:
下面展示一個cDCGAN的例子(前面帖子中寫過的)
生成網路
判別網路
最終結果,使用MNIST作為初始樣本,通過學習後生成的數字,可以看到學習的效果還是不錯的。
本文非常簡單的介紹了四種神經網路的架構,CNN,RNN,DBN,GAN。當然也僅僅是簡單的介紹,並沒有深層次講解其內涵。這四種神經網路的架構十分常見,應用也十分廣泛。當然關於神經網路的知識,不可能幾篇帖子就講解完,這里知識講解一些基礎知識,幫助大家快速入(zhuang)門(bi)。後面的帖子將對深度自動編碼器,Hopfield 網路長短期記憶網路(LSTM)進行講解。
I. 神經網路簡述
機器學習中談論的神經網路是指「神經網路學習」,或者說,是機器學習和神經網路這兩個學科領域的交叉部分[1]。
在這里,神經網路更多的是指計算機科學家模擬人類大腦結構和智能行為,發明的一類演算法的統稱。
神經網路是眾多優秀仿生演算法中的一種,讀書時曾接觸過蟻群優化演算法,曾驚訝於其強大之處,但神經網路的強大,顯然蟻群優化還不能望其項背。
A、起源與第一次高潮。有人認為,神經網路的最早討論,源於現代計算機科學的先驅——阿蘭.圖靈在1948年的論文中描述的「B型組織機器」[2]。二十世紀50年代出現了以感知機、Adaling為代表的一系列成功,這是神經網路發展的第一個高潮[1]。
B、第一次低谷。1969年,馬文.明斯基出版《感知機》一書,書中論斷直接將神經網路打入冷宮,導致神經網路十多年的「冰河期」。值得一提的是,在這期間的1974年,哈佛大學Paul Webos發明BP演算法,但當時未受到應有的重視[1]。
C、第二次高潮。1983年,加州理工學院的物理學家John Hopfield利用神經網路,在旅行商問題上獲得當時最好結果,引起轟動;Rumelhart等人重新發明了BP演算法,BP演算法迅速走紅,掀起神經網路第二次高潮[1]。
D、第二次低谷。二十世紀90年代中期,統計學習理論和支持向量機興起,較之於這些演算法,神經網路的理論基礎不清晰等缺點更加凸顯,神經網路研究進入第二次低谷[1]。
E、深度學習的崛起。2010年前後,隨著計算能力的提升和大數據的涌現,以神經網路為基礎的「深度學習」崛起,科技巨頭公司谷歌、Facebook、網路投入巨資研發,神經網路迎來第三次高潮[1]。2016年3月9日至15日,Google人工智慧程序AlphaGo對陣韓國圍棋世界冠軍李世乭,以4:1大比分獲勝,比眾多專家預言早了十年。這次比賽,迅速在全世界經濟、科研、計算機產業各領域掀起人工智慧和深度學習的熱烈討論。
F、展望。從幾個方面討論一下。
1)、近期在Google AlphaGo掀起的熱潮中,民眾的熱情與期待最大,甚至有少許恐慌情緒;計算機產業和互聯網產業熱情也非常巨大,對未來充滿期待,各大巨頭公司對其投入大量資源;學術界的反應倒是比較冷靜的。學術界的冷靜,是因為神經網路和深度神經網路的理論基礎還沒有出現長足的進步,其缺點還沒有根本改善。這也從另一個角度說明了深度神經網路理論進步的空間很大。
2)、"當代神經網路是基於我們上世紀六十年代掌握的腦知識。"關於人類大腦的科學與知識正在爆炸式增長。[3]世界上很多學術團隊正在基於大腦機制新的認知建立新的模型[3]。我個人對此報樂觀態度,從以往的仿生演算法來看,經過億萬年進化的自然界對科技發展的促進從來沒有停止過。
3)、還說AlphaGo,它並不是理論和演算法的突破,而是基於已有演算法的工程精品。AlhphaGo的工作,為深度學習的應用提供了非常廣闊的想像空間。分布式技術提供了巨大而廉價的計算能力,巨量數據的積累提供了豐富的訓練樣本,深度學習開始騰飛,這才剛剛開始。
一直沿用至今的,是McChlloch和Pitts在1943年依據腦神經信號傳輸結構抽象出的簡單模型,所以也被稱作」M-P神經元模型「。
其中,
f函數像一般形如下圖的函數,既考慮階躍性,又考慮光滑可導性。
實際常用如下公式,因形如S,故被稱作sigmoid函數。
把很多個這樣的神經元按一定層次連接起來,就得到了神經網路。
兩層神經元組成,輸入層接收外界輸入信號,輸出層是M-P神經元(只有輸出層是)。
感知機的數學模型和單個M-P神經元的數學模型是一樣的,如因為輸入層只需接收輸入信號,不是M-P神經元。
感知機只有輸出層神經元是B-P神經元,學習能力非常有限。對於現行可分問題,可以證明學習過程一定會收斂。而對於非線性問題,感知機是無能為力的。
BP神經網路全稱叫作誤差逆傳播(Error Propagation)神經網路,一般是指基於誤差逆傳播演算法的多層前饋神經網路。這里為了不佔篇幅,BP神經網路將起篇另述。
BP演算法是迄今最為成功的神經網路學習演算法,也是最有代表性的神經網路學習演算法。BP演算法不僅用於多層前饋神經網路,還用於其他類型神經網路的訓練。
RBF網路全程徑向基函數(Radial Basis Function)網路,是一種單隱層前饋神經網路,其與BP網路最大的不同是採用徑向基函數作為隱層神經元激活函數。
卷積神經網路(Convolutional neural networks,簡稱CNNs)是一種深度學習的前饋神經網路,在大型圖片處理中取得巨大成功。卷積神經網路將起篇另述。
循環神經網路(Recurrent Neural Networks,RNNs)與傳統的FNNs不同,RNNs引入定向循環,能夠處理那些輸入之間前後關聯的問題。RNNs已經在眾多自然語言處理(Natural Language Processing, NLP)中取得了巨大成功以及廣泛應用[5]。RNNs將起篇另述。[5]
[1]、《機器學習》,周志華著
[2]、《模式識別(第二版)》,Richard O.Duda等著,李宏東等譯
[3]、《揭秘IARPA項目:解碼大腦演算法或將徹底改變機器學習》,Emily Singerz著,機器之心編譯出品
[4]、圖片來源於互聯網
[5]、 循環神經網路(RNN, Recurrent Neural Networks)介紹
J. 一文讀懂神經網路
要說近幾年最引人注目的技術,無疑的,非人工智慧莫屬。無論你是否身處科技互聯網行業,隨處可見人工智慧的身影:從 AlphaGo 擊敗世界圍棋冠軍,到無人駕駛概念的興起,再到科技巨頭 All in AI,以及各大高校向社會輸送海量的人工智慧專業的畢業生。以至於人們開始萌生一個想法:新的革命就要來了,我們的世界將再次發生一次巨變;而後開始焦慮:我的工作是否會被機器取代?我該如何才能抓住這次革命?
人工智慧背後的核心技術是深度神經網路(Deep Neural Network),大概是一年前這個時候,我正在回老家的高鐵上學習 3Blue1Brown 的 Neural Network 系列視頻課程,短短 4 集 60 多分鍾的時間,就把神經網路從 High Level 到推導細節說得清清楚楚,當時的我除了獲得新知的興奮之外,還有一點新的認知,算是給頭腦中的革命性的技術潑了盆冷水:神經網路可以解決一些復雜的、以前很難通過寫程序來完成的任務——例如圖像、語音識別等,但它的實現機制告訴我,神經網路依然沒有達到生物級別的智能,短期內期待它來取代人也是不可能的。
一年後的今天,依然在這個春運的時間點,將我對神經網路的理解寫下來,算是對這部分知識的一個學習筆記,運氣好的話,還可以讓不了解神經網路的同學了解起來。
維基網路這樣解釋 神經網路 :
這個定義比較寬泛,你甚至還可以用它來定義其它的機器學習演算法,例如之前我們一起學習的邏輯回歸和 GBDT 決策樹。下面我們具體一點,下圖是一個邏輯回歸的示意圖:
其中 x1 和 x2 表示輸入,w1 和 w2 是模型的參數,z 是一個線性函數:
接著我們對 z 做一個 sigmod 變換(圖中藍色圓),得到輸出 y:
其實,上面的邏輯回歸就可以看成是一個只有 1 層 輸入層 , 1 層 輸出層 的神經網路,圖中容納數字的圈兒被稱作 神經元 ;其中,層與層之間的連接 w1、w2 以及 b,是這個 神經網路的參數 ,層之間如果每個神經元之間都保持著連接,這樣的層被稱為 全連接層 (Full Connection Layer),或 稠密層 (Dense Layer);此外,sigmoid 函數又被稱作 激活函數 (Activation Function),除了 sigmoid 外,常用的激活函數還有 ReLU、tanh 函數等,這些函數都起到將線性函數進行非線性變換的作用。我們還剩下一個重要的概念: 隱藏層 ,它需要把 2 個以上的邏輯回歸疊加起來加以說明:
如上圖所示,除輸入層和輸出層以外,其他的層都叫做 隱藏層 。如果我們多疊加幾層,這個神經網路又可以被稱作 深度神經網路 (Deep Neural Network),有同學可能會問多少層才算「深」呢?這個沒有絕對的定論,個人認為 3 層以上就算吧:)
以上,便是神經網路,以及神經網路中包含的概念,可見,神經網路並不特別,廣義上講,它就是
可見,神經網路和人腦神經也沒有任何關聯,如果我們說起它的另一個名字—— 多層感知機(Mutilayer Perceptron) ,就更不會覺得有多麼玄乎了,多層感知機創造於 80 年代,可為什麼直到 30 年後的今天才爆發呢?你想得沒錯,因為改了個名字……開個玩笑;實際上深度學習這項技術也經歷過很長一段時間的黑暗低谷期,直到人們開始利用 GPU 來極大的提升訓練模型的速度,以及幾個標志性的事件:如 AlphaGo戰勝李世石、Google 開源 TensorFlow 框架等等,感興趣的同學可以翻一下這里的歷史。
就拿上圖中的 3 個邏輯回歸組成的神經網路作為例子,它和普通的邏輯回歸比起來,有什麼優勢呢?我們先來看下單邏輯回歸有什麼劣勢,對於某些情況來說,邏輯回歸可能永遠無法使其分類,如下面數據:
這 4 個樣本畫在坐標系中如下圖所示
因為邏輯回歸的決策邊界(Decision Boundary)是一條直線,所以上圖中的兩個分類,無論你怎麼做,都無法找到一條直線將它們分開,但如果藉助神經網路,就可以做到這一點。
由 3 個邏輯回歸組成的網路(這里先忽略 bias)如下:
觀察整個網路的計算過程,在進入輸出層之前,該網路所做的計算實際上是:
即把輸入先做了一次線性變換(Linear Transformation),得到 [z1, z2] ,再把 [z1, z2] 做了一個非線性變換(sigmoid),得到 [x1', x2'] ,(線性變換的概念可以參考 這個視頻 )。從這里開始,後面的操作就和一個普通的邏輯回歸沒有任何差別了,所以它們的差異在於: 我們的數據在輸入到模型之前,先做了一層特徵變換處理(Feature Transformation,有時又叫做特徵抽取 Feature Extraction),使之前不可能被分類的數據變得可以分類了 。
我們繼續來看下特徵變換的效果,假設 為 ,帶入上述公式,算出 4 個樣本對應的 [x1', x2'] 如下:
再將變換後的 4 個點繪制在坐標系中:
顯然,在做了特徵變換之後,這兩個分類就可以很容易的被一條決策邊界分開了。
所以, 神經網路的優勢在於,它可以幫助我們自動的完成特徵變換或特徵提取 ,尤其對於聲音、圖像等復雜問題,因為在面對這些問題時,人們很難清晰明確的告訴你,哪些特徵是有用的。
在解決特徵變換的同時,神經網路也引入了新的問題,就是我們需要設計各式各樣的網路結構來針對性的應對不同的場景,例如使用卷積神經網路(CNN)來處理圖像、使用長短期記憶網路(LSTM)來處理序列問題、使用生成式對抗網路(GAN)來寫詩和作圖等,就連去年自然語言處理(NLP)中取得突破性進展的 Transformer/Bert 也是一種特定的網路結構。所以, 學好神經網路,對理解其他更高級的網路結構也是有幫助的 。
上面說了,神經網路可以看作一個非線性函數,該函數的參數是連接神經元的所有的 Weights 和 Biases,該函數可以簡寫為 f(W, B) ,以手寫數字識別的任務作為例子:識別 MNIST 數據集 中的數字,數據集(MNIST 數據集是深度學習中的 HelloWorld)包含上萬張不同的人寫的數字圖片,共有 0-9 十種數字,每張圖片為 28*28=784 個像素,我們設計一個這樣的網路來完成該任務:
把該網路函數所具備的屬性補齊:
接下來的問題是,這個函數是如何產生的?這個問題本質上問的是這些參數的值是怎麼確定的。
在機器學習中,有另一個函數 c 來衡量 f 的好壞,c 的參數是一堆數據集,你輸入給 c 一批 Weights 和 Biases,c 輸出 Bad 或 Good,當結果是 Bad 時,你需要繼續調整 f 的 Weights 和 Biases,再次輸入給 c,如此往復,直到 c 給出 Good 為止,這個 c 就是損失函數 Cost Function(或 Loss Function)。在手寫數字識別的列子中,c 可以描述如下:
可見,要完成手寫數字識別任務,只需要調整這 12730 個參數,讓損失函數輸出一個足夠小的值即可,推而廣之,絕大部分神經網路、機器學習的問題,都可以看成是定義損失函數、以及參數調優的問題。
在手寫識別任務中,我們既可以使用交叉熵(Cross Entropy)損失函數,也可以使用 MSE(Mean Squared Error)作為損失函數,接下來,就剩下如何調優參數了。
神經網路的參數調優也沒有使用特別的技術,依然是大家剛接觸機器學習,就學到的梯度下降演算法,梯度下降解決了上面迭代過程中的遺留問題——當損失函數給出 Bad 結果時,如何調整參數,能讓 Loss 減少得最快。
梯度可以理解為:
把 Loss 對應到 H,12730 個參數對應到 (x,y),則 Loss 對所有參數的梯度可以表示為下面向量,該向量的長度為 12730:
$$
abla L(w,b) = left[
frac{partial L}{partial w_1},
frac{partial L}{partial w_2},...,
frac{partial L}{partial b_{26}}
ight] ^ op
$$
所以,每次迭代過程可以概括為
用梯度來調整參數的式子如下(為了簡化,這里省略了 bias):
上式中, 是學習率,意為每次朝下降最快的方向前進一小步,避免優化過頭(Overshoot)。
由於神經網路參數繁多,所以需要更高效的計算梯度的演算法,於是,反向傳播演算法(Backpropagation)呼之欲出。
在學習反向傳播演算法之前,我們先復習一下微積分中的鏈式法則(Chain Rule):設 g = u(h) , h = f(x) 是兩個可導函數,x 的一個很小的變化 △x 會使 h 產生一個很小的變化 △h,從而 g 也產生一個較小的變化 △g,現要求 △g/△x,可以使用鏈式法則:
有了以上基礎,理解反向傳播演算法就簡單了。
假設我們的演示網路只有 2 層,輸入輸出都只有 2 個神經元,如下圖所示:
其中 是輸入, 是輸出, 是樣本的目標值,這里使用的損失函數 L 為 MSE;圖中的上標 (1) 或 (2) 分別表示參數屬於第 (1) 層或第 (2) 層,下標 1 或 2 分別表示該層的第 1 或 第 2 個神經元。
現在我們來計算 和 ,掌握了這 2 個參數的偏導數計算之後,整個梯度的計算就掌握了。
所謂反向傳播演算法,指的是從右向左來計算每個參數的偏導數,先計算 ,根據鏈式法則
對左邊項用鏈式法則展開
又 是輸出值, 可以直接通過 MSE 的導數算出:
而 ,則 就是 sigmoid 函數的導數在 處的值,即
於是 就算出來了:
再來看 這一項,因為
所以
注意:上面式子對於所有的 和 都成立,且結果非常直觀,即 對 的偏導為左邊的輸入 的大小;同時,這里還隱含著另一層意思:需要調整哪個 來影響 ,才能使 Loss 下降得最快,從該式子可以看出,當然是先調整較大的 值所對應的 ,效果才最顯著 。
於是,最後一層參數 的偏導數就算出來了
我們再來算上一層的 ,根據鏈式法則 :
繼續展開左邊這一項
你發現沒有,這幾乎和計算最後一層一摸一樣,但需要注意的是,這里的 對 Loss 造成的影響有多條路徑,於是對於只有 2 個輸出的本例來說:
上式中, 都已經在最後一層算出,下面我們來看下 ,因為
於是
同理
注意:這里也引申出梯度下降的調參直覺:即要使 Loss 下降得最快,優先調整 weight 值比較大的 weight。
至此, 也算出來了
觀察上式, 所謂每個參數的偏導數,通過反向傳播演算法,都可以轉換成線性加權(Weighted Sum)計算 ,歸納如下:
式子中 n 代表分類數,(l) 表示第 l 層,i 表示第 l 層的第 i 個神經元。 既然反向傳播就是一個線性加權,那整個神經網路就可以藉助於 GPU 的矩陣並行計算了 。
最後,當你明白了神經網路的原理,是不是越發的認為,它就是在做一堆的微積分運算,當然,作為能證明一個人是否學過微積分,神經網路還是值得學一下的。Just kidding ..
本文我們通過
這四點,全面的學習了神經網路這個知識點,希望本文能給你帶來幫助。
參考: