㈠ 異常檢測有哪些主要的分析方法
1. 概率統計方法
在基於異常檢測技術的IDS中應用最早也是最多的一種方法。
首先要對系統或用戶的行為按照一定的時間間隔進行采樣,樣本的內容包括每個會話的登錄、退出情況,CPU和內存的佔用情況,硬碟等存儲介質的使用情況等。
將每次採集到的樣本進行計算,得出一系列的參數變數對這些行為進行描述,從而產生行為輪廓,將每次采樣後得到的行為輪廓與已有輪廓進行合並,最終得到系統和用戶的正常行為輪廓。IDS通過將當前採集到的行為輪廓與正常行為輪廓相比較,來檢測是否存在網路入侵行為。
2. 預測模式生成法
假設條件是事件序列不是隨機的而是遵循可辨別的模式。這種檢測方法的特點是考慮了事件的序列及其相互聯系,利用時間規則識別用戶行為正常模式的特徵。通過歸納學習產生這些規則集,並能動態地修改系統中的這些規則,使之具有較高的預測性、准確性。如果規則在大部分時間是正確的,並能夠成功地運用預測所觀察到的數據,那麼規則就具有高可信度。
3. 神經網路方法
基本思想是用一系列信息單元(命令)訓練神經單元,這樣在給定一組輸入後、就可能預測出輸出。與統計理論相比,神經網路更好地表達了變數間的非線性關系,並且能自動學習並更新。實驗表明UNIX系統管理員的行為幾乎全是可以預測的,對於一般用戶,不可預測的行為也只佔了很少的一部分。
㈡ 異常聚集檢測報警系統最大的作用是什麼
1.告警精確度高
智能視頻分析系統內置智能演算法,能排除氣候與環境因素的干擾,有效彌補人工監控的不足,減少視頻監控系統整體的誤報率和漏報率。
2.實時識別報警
基於智能視頻分析和深度學習神經網路技術,對監控區域內的人員異常聚集行為進行識別,報警信息可顯示在監控客戶端界面,也可將報警信息推送到移動端。
3.全天候運行 穩定可靠
智能視頻監控系統可對監控畫面進行7×24不間斷的分析,大大提高了視頻資源的利用率,減少人工監控的工作強度。
4.告警存儲功能
對監控區域內的人員異常聚集行為實時識別預警,並將報警信息存儲到伺服器資料庫中,包括時間、地點、快照、視頻等。
㈢ 用機器學習檢測異常點擊流
用機器學習檢測異常點擊流
本文內容是我學習ML時做的一個練手項目,描述應用機器學習的一般步驟。該項目的目標是從點擊流數據中找出惡意用戶的請求。點擊流數據長下圖這樣子,包括請求時間、IP、平台等特徵:
該項目從開始做到階段性完成,大致可分為兩個階段:演算法選擇和工程優化。演算法選擇階段挑選合適的ML模型,嘗試了神經網路、高斯分布、Isolation Forest等三個模型。由於點擊流數據本身的特性,導致神經網路和高斯分布並不適用於該場景,最終選擇了Isolation Forest。工程優化階段,最初使用單機訓練模型和預測結果,但隨著數據量的增加,最初的單機系統出現了性能瓶頸;然後開始優化性能,嘗試了分布化訓練,最終通過單機非同步化達到了性能要求。
1 演算法選擇
1.1 神經網路
剛開始沒經驗,受TensorFlow熱潮影響,先嘗試了神經網路。選用的神經網路是MLP(Multilayer Perceptron,多層感知器),一種全連接的多層網路。MLP是有監督學習,需要帶標簽的樣本,這里「帶標簽」的意思是樣本數據標注了哪些用戶請求是惡意的、哪些是正常的。但後台並沒有現成帶標簽的惡意用戶樣本數據。後來通過安全側的一些數據「間接」給用戶請求打上了標簽,然後選擇IP、平台、版本號、操作碼等數據作為MLP的輸入數據。結果當然是失敗,想了下原因有兩個:
1, 樣本的標簽質量非常差,用這些樣本訓練出來的模型性能當然也很差;
2, 輸入的特徵不足以刻畫惡意用戶。
數據的質量問題目前很難解決,所以只能棄用MLP。
1.2 高斯分布
然後嘗試其他模型。通過搜索發現,有一類ML模型專門用於異常檢測,找到了Andrew Ng介紹的基於高斯分布的異常檢測演算法:高斯分布如下圖所示:
這個演算法的思想比較簡單:與大部分樣本不一致的樣本就是異常;通過概率密度量化「不一致」。具體做法是:選擇符合高斯分布或能轉換為高斯分布的特徵,利用收集到的數據對高斯分布做參數估計,把概率密度函數值小於某個閾值的點判定為異常。
所謂的參數估計是指,給定分布數據,求分布的參數。對高斯分布來說,就是求μ和σ。用極大似然估計可以得到高斯分布參數的解析解:
得到高斯分布參數後,用下式計算概率密度:
X表示一個特徵輸入。若有多個特徵x0、x1、…、xn,一種簡單的處理方法是將其結果連乘起來即可:f(x) = f(x0)f(x1)…f(xn)。
然後選定一個閾值ε,把f(x) < ε的樣本判定為異常。ε值需根據實際情況動態調整,默認可設定ε = f(μ- 3σ)。
把這個模型初步應用於點擊流異常檢測時,效果還不錯,但在進一步實施過程中碰到一個棘手問題:樣本中最重要的一個特徵是操作碼,當前操作碼在微信後台的取值范圍是[101,1000],每個操作碼的請求次數是模型的基礎輸入,對900個特徵計算概率密度再相乘,非常容易導致結果下溢出,以致無法計算出精度合適的概率密度值。這個現象被稱為維度災難(Dimension Disaster)。
解決維度災難的一個常見做法是降維,降維的手段有多種,這里不展開討論了。在點擊流分析的實踐中,降維的效果並不好,主要原因有兩個:
1, 正常用戶和惡意用戶的訪問模式並不固定,導致很難分解出有效的特徵矩陣或特徵向量;
2, 降維的本質是有損壓縮,有損壓縮必定導致信息丟失。但在本例中每一維的信息都是關鍵信息,有損壓縮會極大破壞樣本的有效性。
高斯分布模型的維度災難在本例中較難解決,只能再嘗試其他模型了
1.3 Isolation Forest
Isolation Forest,可翻譯為孤異森林,該演算法的基本思想是:隨機選擇樣本的一個特徵,再隨機選擇該特徵取值范圍中的一個值,對樣本集做拆分,迭代該過程,生成一顆Isolation Tree;樹上葉子節點離根節點越近,其異常值越高。迭代生成多顆Isolation Tree,生成Isolation Forest,預測時,融合多顆樹的結果形成最終預測結果。Isolation Forest的基礎結構有點類似經典的隨機森林(Random Forest)。
這個異常檢測模型有效利用了異常樣本「量少」和「與正常樣本表現不一樣」的兩個特點,不依賴概率密度因此不會導致高維輸入的下溢出問題。提取少量點擊流樣本測試,它在900維輸入的情況下也表現良好,最終選擇它作為系統的模型。
2 工程優化
工程實現經歷了單機訓練、分布式訓練、單機非同步化訓練3個方案,下面內容介紹實現過程中碰到的問題和解決方法。
2.1 單機訓練
整個系統主要包括收集數據、訓練模型、預測異常、上報結果四個部分。
2.1.1 收集數據
剛開始嘗試該模型時,是通過手工方式從mmstreamstorage獲取樣本的:
1,通過logid 11357,得到手工登錄成功用戶的uin和登錄時間;
2,利用mmstreamstorage提供的介面,得到用戶登錄後10分鍾的點擊流;
但這樣做有兩個缺點:
1,上述步驟1是離線手工操作的,需要做成自動化;
2,mmstreamstorage的介面性能較差,只能提供2萬/min的查詢性能,上海IDC登錄的峰值有9萬/min。
改進辦法是復用點擊流上報模塊mmstreamstorage,增加一個旁路數據的邏輯:
1,手工登錄時在presence中記錄手工登錄時間,mmstreamstorage基於該時間旁路一份數據給mmguardstore。由於mmstreamstorage每次只能提供單挑點擊流數據,所以需要在mmguardstore中緩存;
2,mmguardstore做完數據清洗和特徵提取,然後把樣本數據落地,最後利用crontab定期將該數據同步到Hadoop集群中。
最終的數據收集模塊結構圖如下所示:
點擊流數據提供了IP、平台、版本號、操作碼等特徵,經過多次試驗,選定用戶手工登錄後一段時間內操作碼的訪問次數作為模型的輸入。
上面我們提到過點擊流的操作碼有900個有效取值,所以一個顯然的處理方法是,在mmguardstore中把用戶的點擊流數據轉化為一個900維的向量,key是cgi id,value是對應cgi的訪問次數。該向量刻畫了用戶的行為,可稱為行為特徵向量。
2.1.2 訓練模型
初起為了控制不確定性,只輸入1萬/分鍾的樣本給模型訓練和預測。系統的工作流程是先從Hadoop載入上一分鍾的樣本數據,然後用數據訓練Isolation Forest模型,最後用訓練好的模型做異常檢測,並將檢測結果同步到tdw。
在1萬/分鍾輸入下取得較好的檢測結果後,開始導入全量數據,全量數據數據的峰值為20萬/分鍾左右。出現的第一個問題是,一分鍾內無法完成載入數據、訓練模型、預測結果,單載入數據就耗時10分鍾左右。這里先解釋下為什麼有「一分鍾」的時間周期限制,主要原因有兩個:
1, 想盡快獲取檢測結果;
2, 由於點擊流異常檢測場景的特殊性,模型性能有時效性,需要經常用最新數據訓練新的模型。
解決性能問題的第一步是要知道性能瓶頸在哪裡,抽樣發現主要是載入數據和訓練模型耗時較多,預測異常和上報結果的耗時並沒有隨數據量的增加而快速上漲。
載入數據的耗時主要消耗在網路通信上:樣本文件太大了,導致系統從Hadoop同步樣本數據時碰到網路帶寬瓶頸。但由於樣本是文本類數據,對數據先壓縮再傳輸可極大減少通信量,這里的耗時比較容易優化。
訓練模型的耗時增加源於輸入數據量的增加。下圖是1萬樣本/min的輸入下,系統個階段的耗時:
其中:
載入程序: 2s
載入數據: 6s
訓練模型:11s
分類異常: 2s
保存結果: 4s
單輪總耗時:25s
需處理全量數據時,按線性關系換算,「訓練模型」耗時為:11s * 24 = 264s,約為4.4分鍾,單機下無法在1分鍾內完成計算。
最先想到的優化訓練模型耗時的辦法是分布式訓練。
2.2 分布式訓練
由於scikit-learn只提供單機版的Isolation Forest實現,所以只能自己實現它的分布式版本。了解了下目前最常用的分布式訓練方法是參數伺服器(Parameter Server,PS)模式,其想法比較簡單:訓練模型並行跑在多機上,訓練結果在PS合並。示意圖如下所示:
分布式訓練對演算法有一定要求,而Isolation Forest正好適用於分布式訓練。
然後嘗試在TensorFlow上實現Isolation Forest的分布式訓練版本。選擇TensorFlow的原因有主要兩個:
1, TensorFlow已經實現了一個分布式訓練框架;
2, TensorFlow的tf.contrib.learn包已經實現的Random Forest可作參考(Isolation Forest在結構上與Random Forest類似),只需對Isolation Forest定製一個Operation即可。
寫完代碼測試時,發現了個巨坑的問題:TenforFlow內部的序列化操作非常頻繁、性能十分差。構造了110個測試樣本,scikit-learn耗時只有0.340秒,29萬次函數調用;而TensorFlow耗時達207.831秒,有2.48億次函數調用。
TensorFlow性能抽樣:
Scikit-learn性能抽樣:
從TensorFlow的性能抽樣數據可以看到,耗時排前排的函數都不是實現Isolation Forest演算法的函數,其原因應該與TensorFlow基於Graph、Session的實現方式有關。感覺這里坑比較深,遂放棄填坑。
也了解了下基於Spark的spark-sklearn,該項目暫時還未支持Isolation Forest,也因為坑太深,一時半會搞不定而放棄了。
2.3 單機非同步化訓練
沒搞定分布式訓練,只能回到單機場景再想辦法。單機優化有兩個著力點:優化演算法實現和優化系統結構。
首先看了下scikit-learn中Isoaltion Forest的實現,底層專門用Cython優化了,再加上Joblib庫的多CPU並行,演算法實現上的優化空間已經很小了,只能從系統結構上想辦法。
系統結構上的優化有兩個利器:並行化和非同步化。之前的單機模型,載入數據、訓練模型、預測異常、上報結果在單進程中串列執行,由此想到的辦法是啟動4個工作進程分別處理相應的四個任務:非同步訓練模型、預測異常和上報結果,並行載入數據。工作進程之間用隊列通信,隊列的一個優勢是容易實現流量控制。
寫完代碼測試,卻發現YARD環境中的Python HDFS庫在多進程並發下直接拋異常。嘗試多個方法發現這個問題較難解決,暫時只能想辦法規避。經測試發現,直接從Hadoop同步所有壓縮過的樣本數據只需2秒左右,由此想到規避方法是:先單進程同步所有樣本數據,再多進程並發解壓、載入和預測。
按上述想法修改代碼測試,效果較好,處理所有樣本只需20秒左右,達到了1分鍾處理完所有樣本的要求。然後提交YARD作業線上跑,處理所有樣本耗時卻達到200~400秒:
咨詢YARD側同學,得知YARD對提交的離線作業有CPU配額的硬限制,分時段配額如下表:
00:00~09:00 80%
09:00~19:00 50%
19:00~23:00 15%
23:00~24:00 50%
晚高峰時段的配額只有15%。
與YARD側同學溝通,他們答應後續會支持scikit-learn庫的在線服務。目前通過手工方式在一台有scikit-learn的mmguardstore機器上運行在線服務,晚高峰時段處理全量數據耗時為20秒左右。
最終的系統結構圖如下圖所示:
模型訓練進程定期訓練最新的模型,並把模型通過隊列傳給預測進程。預測進程每分鍾運行一次,檢查模型隊列上是否有新模型可使用,然後載入數據、檢測異常,將檢測結果通過上報隊列傳給上報進程。上報進程block在上報隊列上,一旦發現有新數據,就根據數據類型執行上報監控、上報tdw等操作。
2.4 評估性能
安全側將異常用戶分為以下幾類:盜號、LBS/加好友、養號、欺詐、外掛/多開等。由於這些分類的異常打擊是由不同同學負責,不便於對Isolation Forest的分類結果做評估,因此需要在Isolation Forest的基礎上,再加一個分類器,標記「異常樣本」的小類。利用操作碼實現了該分類器。
接入全量數據後,每天准實時分析1億量級的樣本,檢測出500萬左右的異常,精確分類出15萬左右的惡意請求。惡意請求的uin、類型、發生時間通過tdw中轉給安全側。安全側通過線下人工分析和線上打擊,從結果看檢測效果較好。
2.5 持續優化
再回過頭觀察點擊流數據,我們使用的Isolation Forest模型只利用了操作碼的統計數據。可以明顯看到,點擊流是一個具備時間序列信息的時序數據。而自然語言處理(Natural LanguageProcessing,NLP)領域已經積累了非常多的處理時序數據的理論和實戰經驗,如LSTM、word2vec等模型。後續期望能引入NLP的相關工具挖掘出更多惡意用戶。
㈣ 什麼是BP神經網路
BP演算法的基本思想是:學習過程由信號正向傳播與誤差的反向回傳兩個部分組成;正向傳播時,輸入樣本從輸入層傳入,經各隱層依次逐層處理,傳向輸出層,若輸出層輸出與期望不符,則將誤差作為調整信號逐層反向回傳,對神經元之間的連接權矩陣做出處理,使誤差減小。經反復學習,最終使誤差減小到可接受的范圍。具體步驟如下:
1、從訓練集中取出某一樣本,把信息輸入網路中。
2、通過各節點間的連接情況正向逐層處理後,得到神經網路的實際輸出。
3、計算網路實際輸出與期望輸出的誤差。
4、將誤差逐層反向回傳至之前各層,並按一定原則將誤差信號載入到連接權值上,使整個神經網路的連接權值向誤差減小的方向轉化。
5、対訓練集中每一個輸入—輸出樣本對重復以上步驟,直到整個訓練樣本集的誤差減小到符合要求為止。
㈤ 急求BP神經網路演算法應用於異常數據識別,用java實現!!!
BP(Back Propagation)神經網路是86年由Rumelhart和McCelland為首的科學家小組提出,是一種按誤差逆傳播演算法訓練的多層前饋網路,是目前應用最廣泛的神經網路模型之一。BP網路能學習和存貯大量的輸入-輸出模式映射關系,而無需事前揭示描述這種映射關系的數學方程。它的學習規則是使用最速下降法,通過反向傳播來不斷調整網路的權值和閾值,使網路的誤差平方和最小。BP神經網路模型拓撲結構包括輸入層(input)、隱層(hidden layer)和輸出層(output layer)。
附件是一個應用BP神經網路進行數據分類的java例子,可供參考。
㈥ 人工神經網路概念梳理與實例演示
人工神經網路概念梳理與實例演示
神經網路是一種模仿生物神經元的機器學習模型,數據從輸入層進入並流經激活閾值的多個節點。
遞歸性神經網路一種能夠對之前輸入數據進行內部存儲記憶的神經網路,所以他們能夠學習到數據流中的時間依賴結構。
如今機器學習已經被應用到很多的產品中去了,例如,siri、Google Now等智能助手,推薦引擎——亞馬遜網站用於推薦商品的推薦引擎,Google和Facebook使用的廣告排名系統。最近,深度學習的一些進步將機器學習帶入公眾視野:AlphaGo 打敗圍棋大師李世石事件以及一些圖片識別和機器翻譯等新產品的出現。
在這部分中,我們將介紹一些強大並被普遍使用的機器學習技術。這當然包括一些深度學習以及一些滿足現代業務需求傳統方法。讀完這一系列的文章之後,你就掌握了必要的知識,便可以將具體的機器學習實驗應用到你所在的領域當中。
隨著深層神經網路的精度的提高,語音和圖像識別技術的應用吸引了大眾的注意力,關於AI和深度學習的研究也變得更加普遍了。但是怎麼能夠讓它進一步擴大影響力,更受歡迎仍然是一個問題。這篇文章的主要內容是:簡述前饋神經網路和遞歸神經網路、怎樣搭建一個遞歸神經網路對時間系列數據進行異常檢測。為了讓我們的討論更加具體化,我們將演示一下怎麼用Deeplearning4j搭建神經網路。
一、什麼是神經網路?
人工神經網路演算法的最初構思是模仿生物神經元。但是這個類比很不可靠。人工神經網路的每一個特徵都是對生物神經元的一種折射:每一個節點與激活閾值、觸發的連接。
連接人工神經元系統建立起來之後,我們就能夠對這些系統進行訓練,從而讓他們學習到數據中的一些模式,學到之後就能執行回歸、分類、聚類、預測等功能。
人工神經網路可以看作是計算節點的集合。數據通過這些節點進入神經網路的輸入層,再通過神經網路的隱藏層直到關於數據的一個結論或者結果出現,這個過程才會停止。神經網路產出的結果會跟預期的結果進行比較,神經網路得出的結果與正確結果的不同點會被用來更正神經網路節點的激活閾值。隨著這個過程的不斷重復,神經網路的輸出結果就會無限靠近預期結果。
二、訓練過程
在搭建一個神經網路系統之前,你必須先了解訓練的過程以及網路輸出結果是怎麼產生的。然而我們並不想過度深入的了解這些方程式,下面是一個簡短的介紹。
網路的輸入節點收到一個數值數組(或許是叫做張量多維度數組)就代表輸入數據。例如, 圖像中的每個像素可以表示為一個標量,然後將像素傳遞給一個節點。輸入數據將會與神經網路的參數相乘,這個輸入數據被擴大還是減小取決於它的重要性,換句話說,取決於這個像素就不會影響神經網路關於整個輸入數據的結論。
起初這些參數都是隨機的,也就是說神經網路在建立初期根本就不了解數據的結構。每個節點的激活函數決定了每個輸入節點的輸出結果。所以每個節點是否能夠被激活取決於它是否接受到足夠的刺激強度,即是否輸入數據和參數的結果超出了激活閾值的界限。
在所謂的密集或完全連接層中,每個節點的輸出值都會傳遞給後續層的節點,在通過所有隱藏層後最終到達輸出層,也就是產生輸入結果的地方。在輸出層, 神經網路得到的最終結論將會跟預期結論進行比較(例如,圖片中的這些像素代表一隻貓還是狗?)。神經網路猜測的結果與正確結果的計算誤差都會被納入到一個測試集中,神經網路又會利用這些計算誤差來不斷更新參數,以此來改變圖片中不同像素的重要程度。整個過程的目的就是降低輸出結果與預期結果的誤差,正確地標注出這個圖像到底是不是一條狗。
深度學習是一個復雜的過程,由於大量的矩陣系數需要被修改所以它就涉及到矩陣代數、衍生品、概率和密集的硬體使用問題,但是用戶不需要全部了解這些復雜性。
但是,你也應該知道一些基本參數,這將幫助你理解神經網路函數。這其中包括激活函數、優化演算法和目標函數(也稱為損失、成本或誤差函數)。
激活函數決定了信號是否以及在多大程度上應該被發送到連接節點。階梯函數是最常用的激活函數, 如果其輸入小於某個閾值就是0,如果其輸入大於閾值就是1。節點都會通過階梯激活函數向連接節點發送一個0或1。優化演算法決定了神經網路怎麼樣學習,以及測試完誤差後,權重怎麼樣被更准確地調整。最常見的優化演算法是隨機梯度下降法。最後, 成本函數常用來衡量誤差,通過對比一個給定訓練樣本中得出的結果與預期結果的不同來評定神經網路的執行效果。
Keras、Deeplearning4j 等開源框架讓創建神經網路變得簡單。創建神經網路結構時,需要考慮的是怎樣將你的數據類型匹配到一個已知的被解決的問題,並且根據你的實際需求來修改現有結構。
三、神經網路的類型以及應用
神經網路已經被了解和應用了數十年了,但是最近的一些技術趨勢才使得深度神經網路變得更加高效。
GPUs使得矩陣操作速度更快;分布式計算結構讓計算能力大大增強;多個超參數的組合也讓迭代的速度提升。所有這些都讓訓練的速度大大加快,迅速找到適合的結構。
隨著更大數據集的產生,類似於ImageNet 的大型高質量的標簽數據集應運而生。機器學習演算法訓練的數據越大,那麼它的准確性就會越高。
最後,隨著我們理解能力以及神經網路演算法的不斷提升,神經網路的准確性在語音識別、機器翻譯以及一些機器感知和面向目標的一些任務等方面不斷刷新記錄。
盡管神經網路架構非常的大,但是主要用到的神經網路種類也就是下面的幾種。
3.1前饋神經網路
前饋神經網路包括一個輸入層、一個輸出層以及一個或多個的隱藏層。前饋神經網路可以做出很好的通用逼近器,並且能夠被用來創建通用模型。
這種類型的神經網路可用於分類和回歸。例如,當使用前饋網路進行分類時,輸出層神經元的個數等於類的數量。從概念上講, 激活了的輸出神經元決定了神經網路所預測的類。更准確地說, 每個輸出神經元返回一個記錄與分類相匹配的概率數,其中概率最高的分類將被選為模型的輸出分類。
前饋神經網路的優勢是簡單易用,與其他類型的神經網路相比更簡單,並且有一大堆的應用實例。
3.2卷積神經網路
卷積神經網路和前饋神經網路是非常相似的,至少是數據的傳輸方式類似。他們結構大致上是模仿了視覺皮層。卷積神經網路通過許多的過濾器。這些過濾器主要集中在一個圖像子集、補丁、圖塊的特徵識別上。每一個過濾器都在尋找不同模式的視覺數據,例如,有的可能是找水平線,有的是找對角線,有的是找垂直的。這些線條都被看作是特徵,當過濾器經過圖像時,他們就會構造出特徵圖譜來定位各類線是出現在圖像的哪些地方。圖像中的不同物體,像貓、747s、榨汁機等都會有不同的圖像特徵,這些圖像特徵就能使圖像完成分類。卷積神經網路在圖像識別和語音識別方面是非常的有效的。
卷積神經網路與前饋神經網路在圖像識別方面的異同比較。雖然這兩種網路類型都能夠進行圖像識別,但是方式卻不同。卷積神經網路是通過識別圖像的重疊部分,然後學習識別不同部分的特徵進行訓練;然而,前饋神經網路是在整張圖片上進行訓練。前饋神經網路總是在圖片的某一特殊部分或者方向進行訓練,所以當圖片的特徵出現在其他地方時就不會被識別到,然而卷積神經網路卻能夠很好的避免這一點。
卷積神經網路主要是用於圖像、視頻、語音、聲音識別以及無人駕駛的任務。盡管這篇文章主要是討論遞歸神經網路的,但是卷積神經網路在圖像識別方面也是非常有效的,所以很有必要了解。
3.3遞歸神經網路
與前饋神經網路不同的是,遞歸神經網路的隱藏層的節點里有內部記憶存儲功能,隨著輸入數據的改變而內部記憶內容不斷被更新。遞歸神經網路的結論都是基於當前的輸入和之前存儲的數據而得出的。遞歸神經網路能夠充分利用這種內部記憶存儲狀態處理任意序列的數據,例如時間序列。
遞歸神經網路經常用於手寫識別、語音識別、日誌分析、欺詐檢測和網路安全。
遞歸神經網路是處理時間維度數據集的最好方法,它可以處理以下數據:網路日誌和伺服器活動、硬體或者是醫療設備的感測器數據、金融交易、電話記錄。想要追蹤數據在不同階段的依賴和關聯關系需要你了解當前和之前的一些數據狀態。盡管我們通過前饋神經網路也可以獲取事件,隨著時間的推移移動到另外一個事件,這將使我們限制在對事件的依賴中,所以這種方式很不靈活。
追蹤在時間維度上有長期依賴的數據的更好方法是用內存來儲存重要事件,以使近期事件能夠被理解和分類。遞歸神經網路最好的一點就是在它的隱藏層裡面有「內存」可以學習到時間依賴特徵的重要性。
接下來我們將討論遞歸神經網路在字元生成器和網路異常檢測中的應用。遞歸神經網路可以檢測出不同時間段的依賴特徵的能力使得它可以進行時間序列數據的異常檢測。
遞歸神經網路的應用
網路上有很多使用RNNs生成文本的例子,遞歸神經網路經過語料庫的訓練之後,只要輸入一個字元,就可以預測下一個字元。下面讓我們通過一些實用例子發現更多RNNs的特徵。
應用一、RNNs用於字元生成
遞歸神經網路經過訓練之後可以把英文字元當做成一系列的時間依賴事件。經過訓練後它會學習到一個字元經常跟著另外一個字元(「e」經常跟在「h」後面,像在「the、he、she」中)。由於它能預測下一個字元是什麼,所以它能有效地減少文本的輸入錯誤。
Java是個很有趣的例子,因為它的結構包括很多嵌套結構,有一個開的圓括弧必然後面就會有一個閉的,花括弧也是同理。他們之間的依賴關系並不會在位置上表現的很明顯,因為多個事件之間的關系不是靠所在位置的距離確定的。但是就算是不明確告訴遞歸神經網路Java中各個事件的依賴關系,它也能自己學習了解到。
在異常檢測當中,我們要求神經網路能夠檢測出數據中相似、隱藏的或許是並不明顯的模式。就像是一個字元生成器在充分地了解數據的結構後就會生成一個數據的擬像,遞歸神經網路的異常檢測就是在其充分了解數據結構後來判斷輸入的數據是不是正常。
字元生成的例子表明遞歸神經網路有在不同時間范圍內學習到時間依賴關系的能力,它的這種能力還可以用來檢測網路活動日誌的異常。
異常檢測能夠使文本中的語法錯誤浮出水面,這是因為我們所寫的東西是由語法結構所決定的。同理,網路行為也是有結構的,它也有一個能夠被學習的可預測模式。經過在正常網路活動中訓練的遞歸神經網路可以監測到入侵行為,因為這些入侵行為的出現就像是一個句子沒有標點符號一樣異常。
應用二、一個網路異常檢測項目的示例
假設我們想要了解的網路異常檢測就是能夠得到硬體故障、應用程序失敗、以及入侵的一些信息。
模型將會向我們展示什麼呢?
隨著大量的網路活動日誌被輸入到遞歸神經網路中去,神經網路就能學習到正常的網路活動應該是什麼樣子的。當這個被訓練的網路被輸入新的數據時,它就能偶判斷出哪些是正常的活動,哪些是被期待的,哪些是異常的。
訓練一個神經網路來識別預期行為是有好處的,因為異常數據不多,或者是不能夠准確的將異常行為進行分類。我們在正常的數據里進行訓練,它就能夠在未來的某個時間點提醒我們非正常活動的出現。
說句題外話,訓練的神經網路並不一定非得識別到特定事情發生的特定時間點(例如,它不知道那個特殊的日子就是周日),但是它一定會發現一些值得我們注意的一些更明顯的時間模式和一些可能並不明顯的事件之間的聯系。
我們將概述一下怎麼用 Deeplearning4j(一個在JVM上被廣泛應用的深度學習開源資料庫)來解決這個問題。Deeplearning4j在模型開發過程中提供了很多有用的工具:DataVec是一款為ETL(提取-轉化-載入)任務准備模型訓練數據的集成工具。正如Sqoop為Hadoop載入數據,DataVec將數據進行清洗、預處理、規范化與標准化之後將數據載入到神經網路。這跟Trifacta』s Wrangler也相似,只不過它更關注二進制數據。
開始階段
第一階段包括典型的大數據任務和ETL:我們需要收集、移動、儲存、准備、規范化、矢量話日誌。時間跨度的長短是必須被規定好的。數據的轉化需要花費一些功夫,這是由於JSON日誌、文本日誌、還有一些非連續標注模式都必須被識別並且轉化為數值數組。DataVec能夠幫助進行轉化和規范化數據。在開發機器學習訓練模型時,數據需要分為訓練集和測試集。
訓練神經網路
神經網路的初始訓練需要在訓練數據集中進行。
在第一次訓練的時候,你需要調整一些超參數以使模型能夠實現在數據中學習。這個過程需要控制在合理的時間內。關於超參數我們將在之後進行討論。在模型訓練的過程中,你應該以降低錯誤為目標。
但是這可能會出現神經網路模型過度擬合的風險。有過度擬合現象出現的模型往往會在訓練集中的很高的分數,但是在遇到新的數據時就會得出錯誤結論。用機器學習的語言來說就是它不夠通用化。Deeplearning4J提供正則化的工具和「過早停止」來避免訓練過程中的過度擬合。
神經網路的訓練是最花費時間和耗費硬體的一步。在GPUs上訓練能夠有效的減少訓練時間,尤其是做圖像識別的時候。但是額外的硬體設施就帶來多餘的花銷,所以你的深度學習的框架必須能夠有效的利用硬體設施。Azure和亞馬遜等雲服務提供了基於GPU的實例,神經網路還可以在異構集群上進行訓練。
創建模型
Deeplearning4J提供ModelSerializer來保存訓練模型。訓練模型可以被保存或者是在之後的訓練中被使用或更新。
在執行異常檢測的過程中,日誌文件的格式需要與訓練模型一致,基於神經網路的輸出結果,你將會得到是否當前的活動符合正常網路行為預期的結論。
代碼示例
遞歸神經網路的結構應該是這樣子的:
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder(
.seed(123)
.optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).iterations(1)
.weightInit(WeightInit.XAVIER)
.updater(Updater.NESTEROVS).momentum(0.9)
.learningRate(0.005)
.gradientNormalization(GradientNormalization.ClipElementWiseAbsoluteValue)
.(0.5)
.list()
.layer(0, new GravesLSTM.Builder().activation("tanh").nIn(1).nOut(10).build())
.layer(1, new RnnOutputLayer.Builder(LossFunctions.LossFunction.MCXENT)
.activation("softmax").nIn(10).nOut(numLabelClasses).build())
.pretrain(false).backprop(true).build();
MultiLayerNetwork net = new MultiLayerNetwork(conf);
net.init();
下面解釋一下幾行重要的代碼:
.seed(123)
隨機設置一個種子值對神經網路的權值進行初始化,以此獲得一個有復驗性的結果。系數通常都是被隨機的初始化的,以使我們在調整其他超參數時仍獲得一致的結果。我們需要設定一個種子值,讓我們在調整和測試的時候能夠用這個隨機的權值。
.optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).iterations(1)
決定使用哪個最優演算法(在這個例子中是隨機梯度下降法)來調整權值以提高誤差分數。你可能不需要對這個進行修改。
.learningRate(0.005)
當我們使用隨機梯度下降法的時候,誤差梯度就被計算出來了。在我們試圖將誤差值減到最小的過程中,權值也隨之變化。SGD給我們一個讓誤差更小的方向,這個學習效率就決定了我們該在這個方向上邁多大的梯度。如果學習效率太高,你可能是超過了誤差最小值;如果太低,你的訓練可能將會永遠進行。這是一個你需要調整的超參數。
㈦ BP神經網路建模後,想知道模型的RMSE(root mean squre error)不知道該怎麼做,請高手指教
如果是自己編寫神經網路代碼的話,只需要在迭代完成以後加入一步正向學習的過程,把樣本再輸入一遍算出來預測值,然後按照定義,同樣本輸出做一步范數求和就能算出來。
如果是使用已有的工具箱那麼很容易辦,你把matlab更新到2010b以後的版本,工具箱會自動給你畫出來。方法是訓練完成以後點擊performance,並且最佳收斂點也會給你自動標出來,同理,ROC曲線,錯誤直方圖,各類檢測概率漏報概率都會給你寫的一清二楚。
㈧ 機械編程還能自己檢測出BUG,機械編程帶來了哪些好處
首先,ControlFlag是完全自我監督的機器編程系統,不需要人類對其進行訓練及指導。ControlFlag的無監督模式識別方法使它可以在本質上學習適應開發者的風格。在要評估的控制工具的有限輸入信息中,ControlFlag可以識別編程語言中的各種樣式,不受代碼使用的編程語言限制。
第二,ControlFlag檢測bug的功能集成了機器學習、形式化方法、編程語言、編譯器和計算機系統。據悉,ControlFlag通過一個稱為異常檢測的功能來進行bug檢測,通過學習經驗證的例子來檢測正常的編程模式,並找出代碼中可能導致bug的異常。該工具將學會識別和標記這些風格選擇,並根據其見解進行自動的錯誤識別和建議解決方案,以便ControlFlag能夠盡可能地避免將兩個開發團隊之間的風格差異視為代碼錯誤。
圖:英特爾與麻省理工學院研究人員聯合發表的願景論文提出機器編程有三大支柱,分別是意圖(intention)、創造(invention)、適應(adaptation)
如前所述,異構系統非常復雜,能夠切實掌握異構系統編程技術的工程師少之又少,英特爾研究院機器編程研究正在開發某種機制,讓程序員或非程序員不僅能夠輕松訪問異構硬體,還能充分使用其他系統可用資源,以大幅降低異構編程難度。這也是英特爾機器編程的基本驅動力之一。
㈨ BP神經網路的原理的BP什麼意思
原文鏈接:http://tecdat.cn/?p=19936
在本教程中,您將學習如何在R語言中創建神經網路模型。
神經網路(或人工神經網路)具有通過樣本進行學習的能力。人工神經網路是一種受生物神經元系統啟發的信息處理模型。它由大量高度互連的處理元件(稱為神經元)組成,以解決問題。它遵循非線性路徑,並在整個節點中並行處理信息。神經網路是一個復雜的自適應系統。自適應意味著它可以通過調整輸入權重來更改其內部結構。
該神經網路旨在解決人類容易遇到的問題和機器難以解決的問題,例如識別貓和狗的圖片,識別編號的圖片。這些問題通常稱為模式識別。它的應用范圍從光學字元識別到目標檢測。
本教程將涵蓋以下主題:
神經網路概論
正向傳播和反向傳播
激活函數
R中神經網路的實現
案例
利弊
結論
神經網路概論
神經網路是受人腦啟發執行特定任務的演算法。它是一組連接的輸入/輸出單元,其中每個連接都具有與之關聯的權重。在學習階段,網路通過調整權重進行學習,來預測給定輸入的正確類別標簽。
人腦由數十億個處理信息的神經細胞組成。每個神經細胞都認為是一個簡單的處理系統。被稱為生物神經網路的神經元通過電信號傳輸信息。這種並行的交互系統使大腦能夠思考和處理信息。一個神經元的樹突接收來自另一個神經元的輸入信號,並根據這些輸入將輸出響應到某個其他神經元的軸突。
創建測試數據集
創建測試數據集:專業知識得分和溝通技能得分
預測測試集的結果
使用計算函數預測測試數據的概率得分。
現在,將概率轉換為二進制類。
預測結果為1,0和1。
利弊
神經網路更靈活,可以用於回歸和分類問題。神經網路非常適合具有大量輸入(例如圖像)的非線性數據集,可以使用任意數量的輸入和層,可以並行執行工作。
還有更多可供選擇的演算法,例如SVM,決策樹和回歸演算法,這些演算法簡單,快速,易於訓練並提供更好的性能。神經網路更多的是黑盒子,需要更多的開發時間和更多的計算能力。與其他機器學習演算法相比,神經網路需要更多的數據。NN僅可用於數字輸入和非缺失值數據集。一位著名的神經網路研究人員說:「神經網路是解決任何問題的第二好的方法。最好的方法是真正理解問題。」
神經網路的用途
神經網路的特性提供了許多應用方面,例如:
模式識別:神經網路非常適合模式識別問題,例如面部識別,物體檢測,指紋識別等。
異常檢測:神經網路擅長異常檢測,它們可以輕松檢測出不適合常規模式的異常模式。
時間序列預測:神經網路可用於預測時間序列問題,例如股票價格,天氣預報。
自然語言處理:神經網路在自然語言處理任務中提供了廣泛的應用,例如文本分類,命名實體識別(NER),詞性標記,語音識別和拼寫檢查。
最受歡迎的見解
1.r語言用神經網路改進nelson-siegel模型擬合收益率曲線分析
2.r語言實現擬合神經網路預測和結果可視化
3.python用遺傳演算法-神經網路-模糊邏輯控制演算法對樂透分析
4.用於nlp的python:使用keras的多標簽文本lstm神經網路分類
5.用r語言實現神經網路預測股票實例
6.R語言基於Keras的小數據集深度學習圖像分類
7.用於NLP的seq2seq模型實例用Keras實現神經機器翻譯
8.python中基於網格搜索演算法優化的深度學習模型分析糖
9.matlab使用貝葉斯優化的深度學習
㈩ 入侵檢測技術基礎的異常檢測技術
●概率統計異常檢測
原理:每一個輪廓保存記錄主體當前行為,並定時將當前輪廓與歷史輪廓合並形成統計輪廓(更新),通過比較當前輪廓與統計輪廓來判定異常行為。
優點:可應用成熟的概率統計理論
缺點:①由於用戶行為的復雜性,要想准確地匹配一個用戶的歷史行為非常困難,容易造成系統誤報和漏報;
②定義入侵閾值比較困難,閾值高則誤報率提高,閾值低則漏報率增高。
●神經網路異常檢測
原理:對下一事件的預測錯誤率在一定程度上反映了用戶行為的異常程度。
優點:①更好地表達了變數間的非線性關系,能更好地處理原始數據的隨機特徵,即不需要對這些數據做任何統計假設,並且能自動學習和更新;②有較好的抗干擾能力
缺點:網路拓撲結構以及各元素的權重很難確定