詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理

機器之心發表於2016-05-05

神經網路是機器學習演算法中最流行和最強大的一類。在計量金融中,神經網路常被用於時間序列預測、構建專用指標、演算法交易、證券分類和信用風險建模。它們也被用於構建隨機過程模型和價格衍生品。儘管神經網路有這些用處,但它們卻往往有一個壞名聲,因為它們的表現是「不可靠的」。在我看來,原因在於對神經網路工作原理存在誤解,導致網路設計也很糟糕。本文將對其中的一些誤解進行討論。


核心要點


  • 神經網路不是人類大腦的模型

  • 神經網路並不是統計學的「弱形式」

  • 神經網路流行許多不同的架構

  • 規模很重要,但並不是越大越好

  • 神經網路的訓練演算法有很多種

  • 神經網路並不總是需要大量資料

  • 神經網路不能基於任何資料訓練

  • 神經網路需要被再訓練

  • 神經網路不是黑箱

  • 神經網路不難實現



1. 神經網路不是人類大腦的模型


人類大腦,是我們這個時代最大的奧秘之一,科學家還未對其工作方式達成共識。目前已有的關於大腦的兩個理論分別叫做祖母細胞理論(grandmother cell theory)和分散式表徵理論。前一個理論認為,單個神經元具有很高的資訊容量,能夠表徵複雜的概念,如你的祖母或甚至 Jennifer Aniston(《老友記》女主角之一——譯者)。後一個理論則認為,神經元要簡單得多,而複雜的表徵分佈在許多神經元上。人工神經網路受到了第二種理論不夠精確的啟發。


我認為,目前這一代神經網路不具備感知(sentience,一個與智慧不同概念)能力的一個原因在於,生物神經元遠比人工神經元複雜。


大腦中的一個單個神經元就是一個極其複雜的機器,即使在今天,我們也還不能理解它。而神經網路中的一個「神經元」只是一個極其簡單的數學函式,它只能獲取生物神經元複雜性中極小的一部分。所以,如果要說神經網路模擬大腦,那也只在不夠精確的啟發水平上是對的,但事實上人工神經網路和生物大腦沒什麼相似之處。——吳恩達


大腦和神經網路之間的另一個巨大不同:大小和組織性。人類大腦包含的神經元和突觸數量遠多於神經網路,而且它們是自組織和自適應的。相對地,神經網路是根據一個架構進行組織的。神經網路的「自組織」非常和大腦的自組織並不是一個意思,它更類似於一張圖示,而不是一張有序的網路。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理

最先進的大腦成像技術生成的有趣大腦檢視


所以,那是什麼意思?可以這樣想:神經網路受到大腦啟發,就像北京的奧運體育場的設計靈感源自鳥巢。這並不意味著,該奧運體育場就是一個鳥巢,只是說,鳥巢的一些元素存在於該體育場的設計中。換句話說,大腦的元素存在於神經網路的設計中,但它們的相似程度比你想象的低得多。


事實上,比起人類大腦,神經網路更接近於曲線擬合(curve fitting)和迴歸分析(regression analysis)等統計方法。我認為,在計量金融的背景中記住這一點很重要,雖說某件事物是「由大腦啟發的」可能聽起來很酷,但是,這一表述可能會導致不切實際的期望或擔憂。

詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理

曲線擬合,亦即函式逼近。神經網路常被用來逼近複雜的數學函式


2. 神經網路並不是統計學的「弱形式」


神經網路由互連節點層組成。單個節點被稱為感知器(perceptron),類似於一個多元線性迴歸(multiple linear regression)。多元線性迴歸和感知器之間的不同之處在於:感知器將多元線性迴歸生成的訊號饋送進可能線性也可能非線性的啟用函式中。在多層感知器(MLP)中,感知器按層級排布,層與層之間互相連線。在 MLP 中有三種型別的層,即:輸入層(input layer)、隱藏層(hidden layer)和輸出層(output layer)。輸入層接收輸入模式而輸出層可以包含一個分類列表或那些輸入模式可以對映的輸出訊號。隱藏層調整那些輸入的權重,直到將神經網路的誤差降至最小。對此的一個解釋是,隱藏層提取輸入資料中的顯著特徵,這些特徵有關於輸出的預測能力。


對映輸入:輸出


感知器接收輸入向量,z=(z1,z2,…,zn)z=(z1,z2,…,zn),包含 n 個屬性。該輸入向量被稱為輸入模式(input pattern)。這些輸入再透過屬於感知器的權重向量 v=(v1,v2,…,vn) 進行加權。在多元線性迴歸的背景中,這些可被認為是迴歸係數或 β 係數。感知器的淨輸入訊號通常是輸入模式和其權重的總和產物。使用該總和產物得到淨值(net)的神經元被稱為求和單元(summation unit)。

詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理

淨輸入訊號減去偏差 θ 後被輸入一些啟用函式 f()。啟用函式通常是單調遞增函式,其值位於 (0,1) 或 (-1,1) 之間(本文後面將進一步對此進行討論)。啟用函式可以是線性的,也可以是非線性的。

詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理
下面是神經網路中一些常見的啟用函式:


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理

依次為:線性函式、階躍函式、斜坡函式、S 型函式、雙曲正切函式、高斯函式


最簡單的神經網路只有一個對映輸入到輸出的神經元。對於給定模式 p,該網路的目標是相對一些給定的訓練模式 tp 的一些一隻的目標值來最小化輸出訊號 op 的誤差。比如,如果該神經元應該對映 p 到 -1,但卻將其對映到了 1,那麼,根據距離的求和平方測定,神經元的誤差為 4,即 (-1-1)^2.


分層

詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理


如上圖所示,感知器被分層進行組織。感知器的第一層被稱為輸入層,它接收訓練集 PT 中的模式 p. 最後一層對映到這些模型的預期輸出。舉一個輸出的例子:模式可以是關於安全性的不同技術指標的數量列表,而潛在的輸出則可能是 {買進、持有、賣出} 這樣的分類。


隱藏層則將前一層的輸出作為下一層的輸入;而下一層的輸出又會作為另一層的輸入。所以,這些隱藏層到底在做什麼?一個解釋是,它們提取輸入資料中的顯著特徵,這些特徵可以預測輸出。這個過程被稱為特徵提取(feature extraction),而且在某種程度上,其和主成分分析(PCA)等統計技術具有相似的功能。


深度神經網路具有大量隱藏層,有能力從資料中提取更加深層的特徵。最近,深度神經網路在影像識別問題上取得了異常優異的表現。影像識別中的特徵提取的圖示如下:


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理

除了過擬合(overfitting)的明顯風險,我認為,用於交易的深度神經網路,在使用上所面臨的一個問題是該神經網路的輸入幾乎總是經過了嚴重的預處理,這意味著實際可以提取的特徵可能非常少,因為輸入已經是某種程度的特徵了。


學習規則


正如前面提到的那樣,神經網路的目標是最小化一些錯誤度量(measure of error) ε. 最常見的錯誤度量是誤差平方和(Sum squared error (SSE));儘管在金融市場的應用中,這種度量對異常值很敏感,而且可能沒有跟蹤誤差(tracking error)那樣合適。


誤差平方和:

詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理


鑑於該網路的目標是最小化 ε,我們可以使用一種最佳化演算法調整該神經網路中的權重。神經網路最常見的學習演算法是梯度下降演算法,儘管也可能使用其它演算法和潛在更好的最佳化演算法。梯度下降演算法的工作方式是,計算相對於神經網路中每一層的權重的誤差偏導數,然後在與梯度相反的方向上移動(因為我們想最小化神經網路的誤差)。透過最小化誤差,我們可以最大化神經網路在樣本中的表現。


數學表示神經網路(v)中的權重更新規則由下式給出:


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理

其中 η 是指學習率,控制著神經網路收斂的快慢程度。f 相對於模式 p 的淨輸入訊號的偏導數的計算是所有非連續啟用函式所面臨的問題,這不值一提;這也是可能使用可選最佳化演算法的一個原因。學習率的選擇對神經網路的表現有很大的影響。較小值的 η 可能導致非常慢的收斂,而較高值的 η 則可能導致訓練中的大量偏差。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理

小學習率慢收斂,大學習率發散

總結


不管我遇見過的一些統計學家相信什麼,神經網路不只是「懶人分析師的弱形式的統計學」(之前確實有人跟我這麼說,而且這還挺有趣);神經網路代表了一種可追溯到幾百年前的可靠統計方法的抽象。對於神經網路背後的統計學,我推薦閱讀超棒的這一章(http://page.mi.fu-berlin.de/rojas/neural/chapter/K9.pdf)。話雖如此,但我同意,一些從業者喜歡將神經網路看作是「黑箱」,這樣就可以在沒有花時間瞭解問題的本質和神經網路是否是合適的選擇的前提下,將神經網路應用於任何問題。在交易使用神經網路就是其中一例;市場是動態變化的,但是,隨著時間的過去,神經網路假設輸入模式的分佈仍然保持靜止。在《All Models are Wrong, 7 Sources of Model Risk》中可看到更詳細的討論。


3. 神經網路流行許多不同的架構


到目前為止,我們已經討論了最簡單的神經網路結構,也就是多層感知器(multi-layer perception)。還有很多不同的神經網路結構(太多了,以至於難以在此提及),而且,任何神經網路的效能,是其結構和權重的一個函式。如今在機器學習領域中取得的許多進步,並非源自重新思考感知器和最佳化演算法工作原理,而是創造性地思考如何融合這些組分。在下面,我會討論一些非常有趣且富創造性的神經網路結構,遞迴神經網路(RNN)——一些或所有的連線倒流,意味著反饋環路存在於網路中。人們相信,這些網路能夠在時間序列資料上表現得更好。照此說來,在金融市場的語境中,他們可能會特別相關。更多資訊,請參見這篇很棒的文章《The unreasonable performance of recurrent [deep] neural networks.》


這張圖表展示了三個流行的遞迴神經網路結構,即 Elman 神經網路,Jordan 神經網路與 Hopfield 單層神經網路。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理


一個更新近、有趣的遞迴神經網路結構是神經圖靈機器(Neural Turing Machine),結合了儲存器與一個遞迴神經網路。事實已經證明,這些神經網路是圖靈完全(Turing complete)的,並能夠學習分類演算法和其他計算任務。


Boltzmann 神經網路——最早的全連線神經網路之一,也就是 Boltzmann 機。這些網路是第一批能夠學習內部表徵、解決非常難的組合數學問題的網路。對 Boltzmann 機的一個解釋是這樣的:Hopfield 遞迴神經網路的蒙特卡洛版。儘管如此,很難訓練神經網路,但是,受到約束時,會比傳統神經網路更有效。給 Boltzmann 機施加限制,最流行的做法就是不准許隱藏神經元之間建立直接聯絡。這一特殊結構被稱為受限 Boltzmann 機(Restricted Boltzmann Machine),被用於深度受限 Boltzmann 機(Deep Botlzmann Machines)。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理

圖表展示了不同的波茲曼機(帶有不同節點連線),如何能顯著影響神經網路結果


深度神經網路——有著多層隱藏層的神經網路。近些年,深度神經網路已經成為最流行的網路,因為在影像和聲音識別方面,它們取得了前所未有的成功。深度神經網路架構數量正在迅速增長,一些最受歡迎的架構包括深度信任網路(Deep Belief Networks),卷積神經網路,深度受限波茲曼機,棧化自動編碼器,等等。深度神經網路最大問題之一,尤其是不穩定的金融市場環境下,是過度擬合。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理

多個隱藏層組成的深度神經網路


自適應神經網路(Adaptive Neural Networks)——能夠在學習中同時自適應、並最佳化自身結構的神經網路。實現這一點,要麼是靠發展結構(新增更多隱藏層)或壓縮結構(修剪不必要的隱藏層)。我相信,自適應神經網路是最適合金融市場的網路,因為市場具有動態性。之所以這麼說,是因為神經網路所讀取的特徵可能會隨著時間和市場的變化而有所加強或減弱。這意味著,過去收效很好的架構也需要修改,才能在今天達到最好的效果。


兩個不同型別的自適應神經網路結構。左圖是級聯神經網路(cascade neural network),右圖是自組織對映。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理


徑向基函式網路(Radial basis networks)——儘管從感知與連線上來說並不是一個不同型別的結構,徑向基函式網路利用徑向基函式作為它們啟用功能,這些是真實的重要功能,其輸出從一個特定的角度來看取決於距離。最常用的徑向基函式是高斯分佈。由於徑向基函式可以採用更加複雜的形式,他們最初用於執行函式插值。因此徑向基函式神經網路可以有一個更高的資訊能力。徑向基函式還用於支援向量機(Support Vector Machine)的核心。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理

利用徑向基函式,如何實現曲線擬合


總之,有數百個神經網路結構,而且一個神經網路效能可以會顯著優於另一個。有興趣使用神經網路進行量化分析的人,可能要測試多個神經網路結構,並結合它們的輸出一起考慮,要從總體上最大化他們的投資成績。利用神經網路進行交易之前,我建議先閱讀我寫的《All Your Models are Wrong,7 Sources of Model Risk》,因為裡面談到的不少問題仍然有用。


4. 規模很重要,但並不是越大越好


選擇了一個架構後,你還要決定神經網路的規模大小。多少輸入?應該使用多少隱藏神經元?又有多少要用的隱藏層(如果我們用的是深度神經網路的話)?多少輸出神經元?這些問題之所以十分重要是因為如果神經網路太大(或太小),神經網路可能會出現過度擬合(或擬合不夠),也就是說,網路無法順利泛化樣本。


該利用多少或哪些輸入?


輸入的數量取決於待決問題、可提供資料的數量和質量,或許還需要一些創造力。輸入是一些簡單的變數,我們相信,這些變數具有一些預測能力,可以根據被預測的因變數進行一些預測。如果不清楚某個問題的輸入,你可以系統地決定哪個變數應該被包括在內,方法就是觀察潛在自變數和因變數之間的相關性和互相關。這種方法在《What Drives Real GDP Growth?》中有詳細介紹。


利用相關性去選擇輸入變數,存在兩個問題。首先,如果你正在使用一個線性相關矩陣,你也許會不小心排除了有用的變數。第二,兩個相對不相關變數,結合在一起,可能會產生一個強相關變數。如果孤立觀察變數,你也許會錯失這一良機。為了克服第二種問題,你應該利用主成分分析去獲取有用的特徵向量(變數的線性結合),並將它們作為輸入。這裡的問題是,特徵向量也許不能很好地泛化,而且它們還假設輸入模式分佈是固定的。


選擇變數過程中會遇到的另一個問題,就是多重共線性。多重共線性是指,正被輸入到模型中的獨立變數中,有兩個或更多的獨立變數是高度相關的。在迴歸模型的語境下,這種情況可能會引發迴歸係數根據模型或資料的細微改變而不規律地變化。鑑於神經網路和迴歸模型是相似的,我懷疑神經網路也會存在這個問題。


最後,但並非不重要的是,當選擇變數是基於省略變數的偏見時,或許會引發統計學上的偏見。當建立一個模型,這個模型遺漏了一個或者更加重要的原因變數時,省略變數偏見會出現。


當模型透過過度或低估某個其他變數影響的方式,不正確地補償漏掉的變數時,也會製造偏見。比如,權重會變得過大,或SSE(誤差平方和)會過大。


我該使用多少隱藏神經元?


隱藏單元的最佳數目,是個細節問題。這也就是說,作為一條經驗法則,隱藏層越多,過度擬合風險越大。當神經網路並沒有學習資料的重要統計特徵,而是「記憶」模式與他們可能收集到的任何噪音,過度擬合就會發生。在樣本中,這個結果不錯,但是,離開樣本,這個結果沒有說服力。如何避免過度擬合?在產業領域,有兩種流行的方法:早期停止(early stopping)和規則化(regularization),而我個人最喜歡的方法——全程檢索。


早期停止,包括將訓練組分為主要訓練組和一個驗證組。然後,不是以固定的迭代量來訓練神經網路,而是訓練網路,直到它在驗證組上的表現成績開始惡化。本質上,這能防止神經網路使用所有可以接觸到的引數,並限制它簡單記憶每一個所見模式的能力。這幅圖顯示了兩個潛在的停止點(a 和 b)。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理

圖片展示了神經網路在a到b進行阻止後的效果與過度擬合


規範化是指,神經網路利用複雜結構時,對其進行懲罰。可以根據神經網路權重大小來衡量這一方法的複雜性。可以這樣實現規範化,新增一個條件(term),求平方誤差目標函式,這個函式取決於權重大小。這相當於新增一個先驗(prior),讓神經網路相信它正在逼近的函式是平滑的。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理

n是神經網路中的權重數值。引數α與β控制著神經網路過度擬合或擬合不足程度。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理


我最喜歡的技術,也是到目前為止計算最昂貴的,就是全程搜尋。在這一方法中,搜尋演算法被用來嘗試不同的神經網路結構,最終做出一個近乎最佳的選擇。人們經常使用基因演算法來實現這個。


什麼是輸出?


神經網路能被用於迴歸或分類。在迴歸模型中,一個簡單輸出值可能被會被隱射到一組真實數字,這意味著只需要一個輸出神經元。在分類模型中,針對模式可能被歸入的每個潛在類別,系統需要一個輸出神經元。如果類別是未知的,我們就要使用無監督神經網路技術,比如自組織對映。


總而言之,最好的辦法是遵守奧卡姆剃刀原理。奧卡姆剃刀原理主張,對於兩個效能相當的模型,自由引數更少的模型,其泛化效果越加。另一方面,絕不能透過犧牲效果,來選擇過度簡化的模型。類似地,人們不能去假設,僅僅因為神經網路有更多的隱藏層與隱藏神經元,它就一定優於更簡單的網路。不幸的是,在我看來,人們似乎太重視大型網路,很少強調做一個好的設計決策。就神經網路而言,規模更大並不意味著效果更好。


5. 神經網路的訓練演算法有很多種


神經網路的學習演算法不斷嘗試最佳化神經網路的權重,直到遇到必須停止的情況。這種情況通常發生在網路的誤差率降到了可接受水平時、驗證集的誤差率開始變差時、或指定的計算資源預算已被耗盡時。目前最常見的神經網路學習演算法是反向轉播(backpropagation)演算法,這種演算法使用了前文提到過的隨機梯度下降。反向轉播包括兩個步驟:


前向傳播——將訓練資料集透過網路,記錄下神經網路的輸出並計算出網路的誤差。


反向轉播——將誤差訊號反向透過網路,使用梯度下降最佳化神經網路的權重。


這種演算法存在一些問題:一次性調整所有權重將會導致權重空間中的神經網路出現明顯的變化、隨機梯度下降演算法非常慢、對區域性最小值敏感。對於一些特定的神經網路(包括所有的 product link 神經網路)區域性最小值是一個問題。反向轉播演算法的前兩個問題可以透過使用梯度下降演算法的變體來解決,例如動量梯度下降(QuickProp)、Nesterov 加速動量(NAG)梯度下降、自適應梯度演算法(AdaGrad)、彈性反向傳播(RProp)和均方根反向傳播(RMSProp)。下圖可以看到,變體演算法相比經典梯度下降演算法可以有明顯的提高。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理


需要指出的是,這些演算法並不能完全解決區域性最小值問題,而且在同時最佳化神經網路的架構和權重時用處也不大。為了得到所需的全域性最佳化演算法。兩種流行的全域性最佳化演算法是粒子群最佳化演算法(PSO)和遺傳演算法(GA)。下面是兩者可被用來訓練神經網路的方式:


神經網路向量表示—— 透過將神經網路編碼為權重向量,每一個向量代表神經網路中一個連線的權重,我們可以使用大部分元啟發式(meta-heuristic)搜尋演算法來訓練這種神經網路。因為向量會變得太,這種演算法在訓練深度神經網路上效果不佳。


下圖展示了將神經網路表示為向量並與搜尋空間或適應度曲面的概念相聯絡的方式:


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理

粒子群最佳化演算法(PSO)——使用 PSO 訓練神經網路可以構建一個這些神經網路的群體/叢集。每個神經網路都可表示為權重的向量,並根據它在全域性最優粒子中的位置和它自身最優的情況來進行調整。


在訓練資料集一次前向傳播之後,適應度函式將作為重構的神經網路的誤差平方和進行計算。這個方法主要考慮的是權重更新的波動性。因為如果權重調整的太快,神經網路的誤差平方和的變化將停滯,不會產生學習行為。


下圖示出了在單一群體的粒子群最佳化演算法中粒子是如何被其它粒子吸引的


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理


遺傳演算法——使用遺傳演算法訓練神經網路,首先構建一個表示神經網路的向量的群體。然後對群體應用三項遺傳因子以使其逐步進化成越來越好的神經網路。這三項遺傳因子是:


1.選擇——使用一次前向傳播之後的誤差平方和,對神經網路群體進行排序。群體中排名前 x %的神經網路可「生存」至下一輪,被用於雜交。


2.雜交——將排名前 x %的神經網路相互混合。這個過程生成了「子代」。這種情況下,每個後代都代表一個新的神經網路,其權重來自「親代」神經網路。


3.變異 ——這個過程是為了保持群體的基因多樣性。一小部分的群體被選中進行變異。這些神經網路的部分權重將在一個特定範圍內隨機調整。


下圖展示了選擇、雜交、變異遺傳因子應用至由向量表示的神經網路群體的過程:


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理


除了基於群體的元啟發式搜尋演算法,用來訓練神經網路的演算法還包括加入動量的反向傳播、差分進化法、Levenberg Marquardt 演算法、模擬退火法等。我個人推薦將區域性最優演算法和全域性最優演算法相結合,來克服兩者的短處。


6. 神經網路並不總是需要大量資料


神經網路可以使用的三種學習策略,包括監督學習策略、無監督學習策略、增強學習策略。監督學習需要至少兩個資料集,其中訓練集由輸入資料和預期輸出資料組成,測試集只包含輸入資料。這兩個資料集的資料必須有標記,即資料模式是已知的。無監督學習策略一般用在沒有標記的資料中以發現隱藏結構(例如隱藏的馬爾科夫鏈)。其行為模式與聚類演算法相似。增強學習基於對神經網路好的行為獎賞,對壞的行為懲罰這樣一個簡單前提。因為無監督學習和增強學習策略不需要帶有標記的資料,所以它們可以應用在正確輸出結果未知的非規範化問題上。


無監督學習


最流行的無監督神經網路架構之一是自組織對映(Self Organizing Map,也稱為 Kohonen 對映)。自組織對映本質上是一個多維量度技術,其可在儲存該資料集的拓撲結構的同時,構建一個基礎資料集 Z 的機率密度分佈函式的近似值。這是透過將資料集 Z 中的輸入向量 zi 對映到特徵對映 V 中的權重向量 vj (神經元)實現的。儲存拓撲結構意味著如果兩個輸入向量在 Z 中是相鄰的,那麼這些輸入向量用 V 所對映神經元也是相鄰的。

詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理

自組織對映的另一個有趣的應用是對股票交易的時間序列圖表進行上色。這是為了顯示在某一時間點的市場情況。


強化學習


強化學習策略由三個部分組成:一個指定神經網路如何進行決策的規則,例如使用技術分析和基本面分析;一個區分好壞的獎賞功能,例如掙錢 vs. 賠錢;一個指定長期目標的價值函式。在金融市場(和遊戲領域)環境中,強化學習策略特別有用,因為神經網路可以學習對特定量化指標進行最佳化,例如對風險調整收益的合適量度。


下圖展示了神經網路可以負面或正面增強。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理


7. 神經網路不能基於任何資料訓練


神經網路可能不能工作的一個最大的問題是使用者沒有對注入神經網路的資料做適當的預處理。資料標準化、冗餘資訊消除和異常點移除都應該被用以提高效能良好的神經網路的可能性。


資料標準化——神經網路由多層感知器組成,感知器由經過加權的連線相互連線。每個感知器包含一個擁有特定的「啟用範圍」的啟用函式( 徑向基函式除外)。進到神經網路的輸入需要被調整到啟用範圍內以使神經網路可以區分不同輸入模式的差別。


舉例來說,給定一個神經網路交易系統,該系統接收證券組合中提示需要售出或買入證券的輸入和輸出的指示資訊。其中一個輸入是證券的價格,我們使用 S 型啟用函式。然而,大多數證券的成本在每股 5 美元和 15 美元之間,在 S 型啟用函式輸出值接近1.0。這樣的話,所有證券的 S 型啟用函式的輸出值都將為1.0,所有的感知器都會失效,神經網路也無法學習。


透過未處理的資料獲得訓練的神經網路會產生類似「the lights are on but nobody's home(燈亮著但無人在家)」的模型。


異常點移除——一個異常點是指資料組中遠大於或遠小於其它資料的值。異常點會因為迴歸分析和曲線擬合等統計技術而出現問題,因為當該模型試圖「容納」異常值時,模型在所有其它資料上的表現都將下降。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理


上圖展示了試圖將異常值納入線性迴歸模型所導致的資料集的糟糕匹配。異常點對包括神經網路在內的線性迴歸分析模型的影響是相似的。因此將異常點移出訓練資料組是非常有必要的。


冗餘消除——當兩個或更多被注入神經網路的獨立變數高度相關時(多元共線性),這將對神經網路的學習能力產生負面影響。高度相關的輸入資料也說明了每個變數具有的獨特資訊是較少的,所以更無關緊要的輸入可以被移除。移除冗餘變數的另一個好處是更快的訓練時間。適應性的神經網路可以用來精簡冗餘的連線和感知器。


8. 神經網路需要被再訓練


假定你可以訓練一個在樣本中成功買進和賣出的神經網路,這個神經網路也可能會隨時間逐漸失效。這並非是神經網路的功能有限的體現,而是金融市場的準確反映。金融市場是複雜的自適應系統,這意味著它們是實時變化的,所以在過去有效的模型在未來可能就可能失效。這種特性被稱作非穩態或動態最佳化問題,神經網路並不很擅長於解決此類問題。


類似於金融市場的動態環境對神經網路而言是非常難以建模處理的。現有兩種解決的方式要麼是隨時間持續再訓練神經網路,要麼是使用動態神經網路。動態神經網路「跟蹤」環境隨時間產生的變化並相應地調整它們的架構和權值。它們是自適應變化的。對於動態問題,多重解的啟發式最佳化演算法可被用於追蹤本地最優解隨時間的變化。其中一個這樣的演算法是多叢集最佳化演算法(multi-swarm optimization algorithm),這是粒子群最佳化演算法衍生演算法。另外,增強了多樣性和記憶體的基因演算法在動態系統中被證明是穩健的。


下圖展示了基因演算法是如何隨時間演化而找到動態系統的最優解的。該圖也說明了模仿(從眾)交易群( mimic trade crowding)——市場參與者爭相選擇一個可觀的市場交易策略的情景,因此爭搶交易機會讓交易變得不那麼有利可圖。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理


9. 神經網路不是黑箱


神經網路本身並不是黑箱。這將問題拋給了那些想要使用神經網路工具的人,比如,基金經理不會知道一個神經網路如何做出交易決策,因此也不可能評估這個神經網路學習到的交易策略的風險。類似地,那些使用神經網路為信用風險建模的銀行也沒法合理說明為什麼一位客戶有著特殊的信用評級。這是一個監管要求。話雖如此,但最先進的規則提取演算法已被開發出來以透明化一些神經網路架構。這些演算法從作為數學公式、符號邏輯、模糊邏輯或決策樹的神經網路中提取知識。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理


數學規則——可以從神經網路中提取多重線性迴歸線的演算法已被開發出來。這些技術的問題在於,這些規則往往是很難理解的,因此這些方法還是沒有解決黑箱問題。


命題邏輯——命題邏輯是處理在離散值變數上完成的操作的數學邏輯的一個分支。這些變數, 比如 A  或者  B ,通常要麼為「真」,要麼為「假」;但它們能覆蓋一個離散範圍裡的值,如  {買進,持有,賣出}這樣的範圍。


邏輯運算可以被應用於那些變數,比如 OR, AND 以及 XOR 。這些結果被稱為謂詞(predicates),可以用量詞量化。這就是謂詞和命題邏輯的區別。如果有個簡單神經網路,其中,價格(P) , 簡單易懂均數 SMA,指數移動均數EM作為輸入,從命題邏輯神經網路中提取出一個遵從策略的趨勢,或許可以得到類似這樣的規則:


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理


模糊邏輯—模糊邏輯就是機率與命題邏輯相遇之處。命題邏輯的問題在於那是一種絕對處理。比如,買入或者出售,真或偽,0或1。 因此,交易者沒有辦法確定這些結果的可信度。模糊邏輯克服了這一侷限性,因為引入了從屬函式(membership function),詳細說明了一個變數多大程度上屬於某個特定域。比如,一家公司(谷歌)可能屬於一個域(買入)的可信度為0.7, 屬於另一個域(出售)的可信度為 0.3。將神經網路與模糊邏輯結合起來,就是神經—模糊系統。這種研究調查討論了各種模糊規則的提取技術。


決策樹——決策樹向我們展示了,給定資訊後,如何做出決策。決策樹推導是一個術語,指的是從神經網路中提取決策樹這個過程。


例如,使用決策樹來表示一個簡單的交易策略。三角型表示決策節點,可以是買入、持有或者出售一家公司。每個長方塊表示一個元組 <indicator, inequality,="" value="">。例如 <sma,>, 25> or <ema, <="," 30="">。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理


10. 神經網路不難實現


從經驗角度來說,白手起家進行編碼,這樣搭建神經網路很有挑戰性。幸運的是,現在有數以百計的開源和專有包,使得使用神經網路工作起來簡單多了。以下就是相關列表,數量分析專家可能會覺得對計量金融有用。


H20


H2O 並不只是提供機器學習的演算法包,也為使用大資料的智慧應用提供了一套處理速度更快,更具可擴充性的機器學習 API 。他們的 API 提供了深度學習模型,通用加速模型和通用線性模型以及更多人工智慧模型。


谷歌 TENSORFLOW


TensorFlow 是一項用於使用資料流圖的數值計算的開源軟體庫。資料流圖中的節點代表數學運算子,影像邊緣則代表著在此間流動的多維資料陣列(tensors)。這種靈活的架構幫助你在桌面電腦,伺服器以及移動裝置的 CPU 和 GPU 上部署計算任務,而不需要重寫程式碼以適應各平臺。


微軟 DMTK


DMTK 包括以下專案:DMTK 框架(Mutiverso)——分散式機器學習的引數伺服器框架。LightLDA ——可擴充,快速,輕量的大規模主題建模系統。分散式詞嵌入:詞嵌入的分散式演算法。分散式 skipgram 混合物:分散式多感知詞嵌入演算法。


微軟 Azure 機器學習


這個基於微軟雲服務機器學習/預測分析平臺,是一個完全託管的雲服務系統,可以幫助你輕鬆地建立,配置和分享預測分析解決方案。該軟體允許你拖放預設的元件(包括機器學習模型),用於操作流程中資料組的自定義元件。該流程圖之後將被編譯為可以配置為網際網路服務的程式。它和更早的 SAS 公司的資料探勘解決方案相似,除了它更現代化,更實用,支援深度學習模型,以及為客戶提供 Python 和 R 語言。


MXNET


MXNet是一為兼顧效率和靈活性而設計的深度學習框架。它允許使用者混合符號式程式設計和指令式程式設計的特點,最大化程式執行效率和你的生產效率。它的核心,是一個自動並行化符號和指令運算子的動態依賴排程器。構建在頂層的圖形最佳化層,使符號運算快速且節省記憶體。該演算法庫便攜且輕量化,並且適配多種 GPU 和多種機器。


Neon


Neon 是 Nervana 的基於深度學習框架的 Python 庫,在很多常見的如 AlexNet, VGG 以及 GoogLeNet 深度神經網路取得了最快速的運算表現。我們按照以下功能設計:1)支援常用模型和樣例: convnets, MLPs, RNNs, LSTMs, autoencoders。2)和用於fp16和fp32 (benchmarks)的基於 Maxwell 架構的 nervanaGPU 核心密切聯合。3)基本的自動微分支援。4)視覺化框架。5)可交換的硬體後端...


Theano


Theano 是一個允許使用者高效地定義、最佳化和評估包含多維陣列的數學表示式的 Python 庫。它可以利用 GPU來完成高效地符號區分。


Theano 和 TensorFlow 及 Torch 一樣,得到了比神經網路更加廣泛的應用:它是一個整合現存的或利用現成的資料結構以及演算法建立的機器學習模型的人工智慧框架。


Torch


Torch 是一個廣泛支援機器學習演算法的科學計算框架...其核心特性的摘要包括一個 N 維陣列,索引流程,切片,轉置,面向 C 的介面,透過 LuaJIT,線性代數流程,神經網路,基於能源的模型,數值加速例程,快速和高效的 GPU 支援,嵌入式,面向 iOS,Andriod 和 FPGA 的埠。


像Tensorflow 和 Theano,Torch 得到了比神經網路更加廣泛的應用:它是一個整合現存的或利用現成的資料結構以及演算法建立的機器學習模型的人工智慧框架。


SciKit Learn


SciKit Learn 是一個用於機器學習的 Python 包,非常受歡迎。基於NumPy, SciPy, 和 matplotlib 開源,而且用於各種機器學習模型的實施:分類,迴歸,聚類,降維,模型選擇和資料預處理等。


正如上文提及的,現在有數以百計的機器學習包和框架。討論解決方案之前,我建議做個適當分析,看看哪種開源或者專屬機器學習包或者軟體最適合你的應用案例。總的說來,在軟體工程以及針對計量金融的模型研發中,有一個需要遵循的好規則:不要重複造車輪。已經有了足夠先進的模型,就不要再寫自己的程式碼了。


結  論


神經網路是一種強大的機器學習演算法。建立在可靠的統計基礎上,多年來,已被成功用於金融模型以及交易策略。儘管如此,由於許多失敗的應用嘗試,這些演算法的名聲依然不好。在絕大多數案例中,我們可以將那些不成功的使用案例歸因於不合理的神經網路設計決策以及錯誤理解了這些網路的運作原理。這篇文章指出了這些誤解中的一部分。當你需要了解神經網路以及它們在金融模型和演算法交易中的作用時,可以看看這些書。


詳細解讀神經網路十大誤解,再也不會弄錯它的工作原理


相關文章