一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>java源碼下載>

如何使用Keras框架來構(gòu)建LSTM RNN來對網(wǎng)絡(luò)請求進(jìn)行區(qū)分

大?。?/span>0.5 MB 人氣: 2017-09-27 需要積分:1

  向量機(jī)(SVM)、神經(jīng)網(wǎng)絡(luò)和無監(jiān)督模型。

  學(xué)術(shù)界和實(shí)際應(yīng)用領(lǐng)域目前正時刻關(guān)注著深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)的最新進(jìn)展。事實(shí)證明,深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)在圖像識別和自然語言處理(NLP)方面表現(xiàn)出眾。我們是否可以利用神經(jīng)網(wǎng)絡(luò)的NLP能力來處理這個分類問題呢?這就是我們想要測試的。

  我們通過模擬API給出JSON形式的訪問請求日志,如下所示:

  { “ timestamp”: 1502135820943, “ method”: “get”, “ query”: { “query”: “Lawn & Garden Buying Guides”}, “ path”: “/search”, “ statusCode”: 200, “ source”: { “remoteAddress”:“22.73.58.187”, “userAgent”: “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36”}, “route”: “/search”, “ headers”: { “host”: “l(fā)ocalhost:8002”, “connection”: “keep-alive”, “cache-control”: “no-cache”, “user-agent”: “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36”, “accept”: “*/*”, “accept-encoding”: “gzip, deflate, br”, “accept-language”: “en-US,en;q=0.8,es;q=0.6”}, “ requestPayload”: null, “ responsePayload”: “SEARCH”}

  JSON格式的數(shù)據(jù)是不能用作神經(jīng)網(wǎng)絡(luò)模型的輸入的。模型的輸入必須是數(shù)字,因此,需要對文本進(jìn)行預(yù)處理。由于請求日志的內(nèi)容包含各種字符串、符號和數(shù)字,因此,我們選擇將每個日志條目預(yù)處理為字符序列。

  將日志條目作為字符序列進(jìn)行處理,就是將請求日志文本中的每個字符映射到字典中的數(shù)字。相關(guān)聯(lián)的數(shù)字表示該字符出現(xiàn)的頻率。這個字典最初是用訓(xùn)練數(shù)據(jù)來創(chuàng)建和擬合的,這樣,后續(xù)的字符就可以映射到以前曾經(jīng)出現(xiàn)過的字符上去。例如,在字典中,“,”字符是訓(xùn)練數(shù)據(jù)集中第七個出現(xiàn)頻率最高的字符:

  { “ ”: 39, “(”: 77, “,”: 7, “0”: 8, “4”: 26, “8”: 28, “《”: 64, “D”: 71, “H”: 59, “L”: 61, 。。.

  字符序列學(xué)習(xí)的一個不錯的選擇是使用遞歸神經(jīng)網(wǎng)絡(luò)(RNN)。更具體點(diǎn)說,就是選擇使用RNNs的長短期記憶網(wǎng)絡(luò)(LSTM)變體,因?yàn)樗趯W(xué)習(xí)序列的應(yīng)用中被廣泛使用并取得了成功。 LSTM有點(diǎn)復(fù)雜,但這并不是這篇文章的重點(diǎn),不過如果在高層次上對此有一點(diǎn)了解的話,在修改模型時會有一些幫助。更多有關(guān)序列學(xué)習(xí)和LSTM的實(shí)踐可以在Andrej Karpathy編寫的RNNs的不合理有效性一文中找到。

  為了快速開發(fā)神經(jīng)網(wǎng)絡(luò)模型,我們選擇使用運(yùn)行在Tensorflow之上的高級Keras API,而不是直接使用Tensorflow。通過使用Keras為Tensorflow提供的樣板設(shè)置,我們能夠節(jié)約很多時間,并快速地構(gòu)建起模型原型。

  Keras的神經(jīng)網(wǎng)絡(luò)模型使用起來非常容易,只需實(shí)例化一個模型對象,然后就可以添加層了!初始的嵌入層指定了矢量輸入的預(yù)期維度,LSTM隱藏層則由64個神經(jīng)元以及單獨(dú)的壓差層來定義以減少方差,最后則是密集輸出層以產(chǎn)生分類置信度。

  model = Sequential() model.add(Embedding(num_words, 32, input_length=max_log_length)) # Prevent overfitting using dropout method of regularizationmodel.add(Dropout( 0.5)) model.add(LSTM( 64, recurrent_dropout= 0.5)) model.add(Dropout( 0.5)) # Condense to single binary output valuemodel.add(Dense( 1, activation= ‘sigmoid’)) model.compile(loss= ‘binary_crossentropy’, optimizer= ‘a(chǎn)dam’, metrics=[ ‘a(chǎn)ccuracy’]) # Training set automatically split 75/25 to check validation loss/accuracy at each epochmodel.fit(X_train, Y_train, validation_split= 0.25, epochs= 3, batch_size= 128, callbacks=[tb_callback]) # Evaluation of separate test dataset performed after trainingscore, acc = model.evaluate(X_test, Y_test, verbose= 1, batch_size= 128)訓(xùn)練

  使用LSTM RNN二元分類法則意味著是在模型上應(yīng)用監(jiān)督學(xué)習(xí)算法。因此,訓(xùn)練數(shù)據(jù)集中的每個日志條目都需要有一個附帶的標(biāo)簽來描述該記錄的請求是正常的還是嘗試注入攻擊的。

  0= Normal requestlogentry 1= Requestlogindicates attempted injection attack

  對于生成數(shù)據(jù)來訓(xùn)練模型,則可以使用模擬API來模擬一個非常簡單的電子商務(wù)應(yīng)用程序。例如,模擬出/login、 /search、/checkout等URL。由于我們并沒有真實(shí)用戶去訪問模擬API,因此我們需要引入一些運(yùn)行時選項(xiàng)來運(yùn)行服務(wù)器并自動執(zhí)行請求。我們將這些自動化的請求流量調(diào)整為每分鐘100次,這樣訓(xùn)練數(shù)據(jù)集的日志就能快速積累起來。

  通過將自定義的日志記錄器添加到服務(wù)器框架中,可以輸出指定格式的數(shù)據(jù)集。為了區(qū)分正常和惡意請求,需要在所有的惡意請求前添加一個“attack”頭。通過檢查是否存在“attack”頭來確定每個請求日志條目的標(biāo)簽。如果“attack”頭存在,則使用“1”來標(biāo)記日志,并在寫入日志之前刪除“attack”頭,否則將日志標(biāo)記為“0”。

  由于使用模擬API來生成訓(xùn)練數(shù)據(jù)集存在一些限制,并且為了確保得到一個更廣義的分類器,我們在預(yù)處理期間僅提取幾個必要的日志字段。這些屬性包括:“method”、“query”、“statusCode”、“path”、“requestPayload”。可以使用額外的數(shù)據(jù)、預(yù)處理和可能的單獨(dú)分類器來分析請求的內(nèi)容。

  自動化客戶會放那連續(xù)運(yùn)行了幾個小時,以積累一定數(shù)量的訓(xùn)練數(shù)據(jù)。為了快速訓(xùn)練模型,我們將使用AWS p2.xlarge深度學(xué)習(xí)EC2實(shí)例。 AWS的深度學(xué)習(xí)AMI預(yù)先安裝了大多數(shù)的流行AI庫和API,你可以使用GPU進(jìn)行大量的訓(xùn)練。這個EC2實(shí)例每小時90美分的成本不僅節(jié)省了在大量數(shù)據(jù)集上訓(xùn)練模型的時間,還節(jié)省了安裝和配置Tensorflow使之能夠在GPU上正常運(yùn)行的時間。我們發(fā)現(xiàn)在新機(jī)器上安裝和配置Tensorflow相當(dāng)?shù)睾臅r。

  為了減少偏差,生成的數(shù)據(jù)集中包含了大約50/50個正常和惡意的請求日志。該數(shù)據(jù)集分為75%的訓(xùn)練子集和25%的驗(yàn)證子集。經(jīng)過幾次迭代之后,該模型能夠獲得相當(dāng)高的精度。

  如何使用Keras框架來構(gòu)建LSTM RNN來對網(wǎng)絡(luò)請求進(jìn)行區(qū)分

  從大約23000個請求日志樣本得到的訓(xùn)練結(jié)果

  上圖中的準(zhǔn)確度和損失指標(biāo)也會通過Keras訓(xùn)練腳本中附帶的Tensorboard回調(diào)記錄在日志中。這些日志是訓(xùn)練期間檢查點(diǎn)的積累,這對于在訓(xùn)練期間和之后將模型的性能可視化非常有用。

  實(shí)現(xiàn)

  有了訓(xùn)練過的模型,現(xiàn)在是時候來實(shí)現(xiàn)SecuritAI用戶界面程序了,該應(yīng)用程序用于托管模型以進(jìn)行實(shí)時的預(yù)測。與模擬API一樣,我們堅(jiān)持使用自己最熟悉的Java語言。我們構(gòu)建了一個React UI,作為監(jiān)視來自請求日志流活動的儀表板。該請求日志流使用AWS Kinesis來管理,用于橋接模擬API和SecuritAI UI之間的通信。

  有一個小問題…… Keras是一個python庫,那么模型是如何在Java中進(jìn)行預(yù)測的呢?幸運(yùn)的是,有一個npm包可以用來實(shí)現(xiàn)這個需求,那就是keras-js! Keras-js允許Java應(yīng)用程序運(yùn)行在Tensorflow引擎上訓(xùn)練Keras模型。這個庫使得我們能夠在Node.js應(yīng)用服務(wù)器上運(yùn)行所有的東西。

  有關(guān)keras-js的更多信息,請參閱: https://github.com/transcranial/keras-js

  演示

  如何使用Keras框架來構(gòu)建LSTM RNN來對網(wǎng)絡(luò)請求進(jìn)行區(qū)分

  SecuritAI演示

  經(jīng)驗(yàn)教訓(xùn)與后期改進(jìn)

  總體而言,這是一個非常有趣的應(yīng)用程序,從開發(fā)過程中你可以學(xué)到有關(guān)在Keras中使用Tensorflow建模的知識。也許已經(jīng)有其他更加簡單的機(jī)器學(xué)習(xí)模型或平臺可以被用來代替LSTM RNN,但是如果沒有一點(diǎn)黑客精神的話,樂趣何在?在理想情況下,無監(jiān)控異常檢測模型可能更適合于本應(yīng)用。

  作為后期的改進(jìn),該模型可以轉(zhuǎn)換為僅依賴Tensorflow API來運(yùn)行、針對內(nèi)容更豐富的請求頭進(jìn)行訓(xùn)練,以及執(zhí)行多元分類以實(shí)現(xiàn)對可疑請求的分類。

  GitHub上的代碼:

  adamkusey/securitai-ui

  adamkusey/securitai-lstm-model

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?