13
雷鋒網按:本文作者文海寧,銀行算法工程師。
深度學習的神經網絡訓練方法有除了典型的反向傳播,也有被Deepmind青睞的正向傳播,以及以BAM網絡背后的雙向傳播,本文將對這些訓練方法進行簡單的探討,如果你有興趣,歡迎留言。
1. 典型的BAM網絡
深度學習目前非常火爆,追蹤溯源,深度學習源于神經網絡。BP神經是反向誤差訓練的典例。因為反向傳播需要計算每個參數的梯度,從而能夠使用各種梯度下降方法來更新參數。
但是,相比于正向傳播,反向傳播能解決大部分問題,統領深度學習的天下嗎?
雙向傳播,其中最為典型的還屬BAM網絡。下圖是其簡單原理的展現。
當向其中一層加入輸入信號時,另一層可得到輸出。由于初始模式可以作用于網絡的任一層,信息可以雙向傳播,所以沒有明確的輸入層或輸出層。可將其中的一層稱為X層,有n個神經元節點;另一層稱為Y層,有m個神經元節點。兩層的狀態向量可取單極性二進制0或1,也可以取雙極性離散值1或-1。如果令由X到Y的權矩陣為W,則由Y到X的權矩陣便是其轉置矩陣。

誠然雙向傳播要有應用的領域,才能更好地檢測它的用途,同時也促進自身的發展。那么,場景來了,在IT運維等服務領域,雙向網絡是大顯身手的時候。在介紹雙向網絡之前,先賣個關子,我們先對反向傳播訓練和正向傳播訓練娓娓道來。
反向傳播算法簡稱即BP神經網絡,是監督算法(數據給出標簽)。其目標是:通過更新網絡中的每一個權重,使得最終的輸出接近于groundtruth,這樣就得到整個網絡的誤差作為一個整體進行了最小化。其中輸出層的鏈式法則的示意圖如下:
其中代表輸出網絡。下圖偏導數方程是用delta規則顯示的改變可以多大程度上影響總的誤差。表示不同神經元的權重。

金無足赤,反向傳播網絡也有缺點。因為它是對非線性可微分函數進行權值訓練的多層網絡。此算法可以使網絡權值收斂到一個解,但并不能保證所求為誤差超平面的,由此可能是一個局部最小解。
何為正向傳播呢?假設上一層結點i,j,k,…等一些結點與本層的結點w有連接,結點w的值如何算?即通過上一層的i,j,k等結點以及對應的連接權值進行加權和運算,最終結果再加上一個偏置項(圖中為了簡單省略了),最后在通過一個非線性函數(即激活函數),如sigmoid函數,最后得到的結果就是本層結點w的輸出。不斷迭代此運算,得到輸出層結果。如下圖:

話說2016年李世石與AlphaGo的圍棋大戰吸引了世界人的目光,其實Google 旗下的 DeepMind 早已成為 AI 領域的明星,它將其算法應用到醫療保健行業,還打造了一個分布式的大型深度強化學習系統并將其命名為Gorila,該系統利用Google Cloud平臺大幅提高了訓練效率,已開始為谷歌的個性化推薦系統服務。
DeepMind實驗室有很多應用正向傳播的實例。例如強化學習(涉及熟悉的試錯學習項目),連續控制問題,如機器人操作和運動。還有很多深度強化學習方法配合正向傳播方法使用,可很好的解決螞蟻踢球、棋類博弈等問題。
生活在大數據時代的小伙伴們,軟件開發已經百花齊放、百家爭鳴了,而基礎的運維行業因為大數據高并發的壓力,日趨需要引入更加完善的AI等算法來給基礎機器集群提供更好地服務,給到客戶更優質的體驗。IOT的發展鏈接了軟硬件,并在智能物聯領域發揮著自己獨特的作用。其他領域暫且不聊,我們聊聊比較容易入門的運維行業中雙向傳播的應用。
雙向神經網絡的預測功能目前是大勢所趨。實時告警的精髓在于在告警信息沒有發出時,預測到相關集群跑的應用的異常,即指標異常。下圖反映的是集中監控平臺基線告警的實例。時間粒度為每10分鐘預測異常,其中紅色為A指標實際值,藍色為B指標實際值。藍色區間為基線。
此處注明基線的含義,是包含了上基線和下基線,即一個區間。大多數小伙伴采用的方法是離線計算,用置信區間即可以確定一個范圍。但是此方法無法做到實時告警。下圖就是利用雙向神經網絡的威力,做到的10分鐘粒度實時告警。
以一個交易類型的指標為例,用R語言做一個簡單的實例,并說明雙向神經網絡是如何工作的。如圖7.1—7.4日和8.2-8.3日的總機基線數據缺失,8.9日(七夕)總機基線值達到13252.0,屬于節假日類爆發性數據。

單獨看看某銀行類手機銀行業務的總機交易量的數據,如下圖:

看到這么有規律的數據,是不是躍躍欲試呢?想知道原理嗎?
下圖是神經網絡最基本的規則:輸入層、隱含層、輸出層。當我們把銀行交易量的數據拿到手后,根據自己的需要進行維度的分析與處理,分別解析入庫存儲完。輸入的標簽維度即為輸入層,輸出層據實際需要維度而定。隱含層就是技巧了。

雙向傳播在單程的基礎上,通過前預測后,后預測前,建立一一對應,互相驗證的結構。可以將隱含層數目和隱含因子數目調節的更加精準。
首先展示一下具體預測值(綠線)與實際值(黑線)的對比

其次是平穩性波動區間:黑色圓圈是實際值,綠線是上下基線。采集數據時正常的工作日1天,144個10分鐘預測值合成的總1天的預測值。

最后是爆發性波動區間

注: 以上所有圖橫軸是時間轉為的時間戳,縱軸是交易量數據。
雙向神經網絡的訓練過程很有趣,首先要找到某些特定的神經元再進行權值處理,我們稱這些神經元為獲勝神經元。獲勝神經元在輸入神經元中找,若輸入神經元構成的向量未歸一化,可用歐氏距離度量相似度;若歸一化即可使用內積法。對獲勝神經元權值進行調整時,遵循一下公式:
,w其中是權值,α是系數,為調整的自變量。
訓練次數與調整個神經元權值的原理如下圖:

每次更新權值,在幾何意義里就是旋轉一定的角度。確定好輸入層,隱含層采用雙向傳播訓練出的參數作為輸入,就遞送給輸出層輸出結果啦。
神經網絡模式學習訓練不再需要同步,可以異步。獨立的模式使得可以根據實際情況優化調控每個模塊的調用時間。這樣當集群壓力大的時候,可以動態負載分配資源。這是這個成果最大的意義,將能夠因此構建出完全不一樣的神經網絡模型,訓練方式發生完全的改變。
例如各種銀行券商都很關注運維的人力問題,如何從24小時值班一刻不離,轉換為分清楚機器的生命周期(大致分為上線、部署、投產、下線),從而針對性對投產的機器做重點監控,是一個非常有收益的話題。在如今大部分互聯網企業引進六西格瑪管理方法來,節約成本已收效顯著。用雙向傳播訓練可以進一步在預測領域為監控定為運維服務做的更好。
大家都可以注意到,我們做出的是一個波動區間。輸入的維度與輸出的維度決定整個問題的目標,隱含層決定了準確度。預想告警告的準確,必然先將數據采集的準確。但是此度無法很好的衡量。大家都處于大數據試水階段。
在優化過程中,我們會繼續考慮維度因素對準確度的影響,減少誤報漏報等告警故障。同時銀行各套業務系統都是有N個9的準確度衡量的,全年告警時長不超過十幾分鐘。我們的任務很艱巨。
雙向神經網絡值得改進探索的地方很多,大家快來加入大數據時代,有別于蓬勃競爭激烈的軟件開發之外,基礎而充滿挑戰的IT運維歡樂大家庭吧。
雷鋒網注:本文為雷鋒網獨家約稿文章,未經授權,拒絕轉載。
雷峰網原創文章,未經授權禁止轉載。詳情見轉載須知。