盡管預測結果總是存在爭議,但 Gartner 認為,在 2017 年,會有 84 億個互聯(lián)的 IoT 設備(不包括智能電話),而且一些分析師認為,到 2020 年,該數(shù)字將會是 500 億。就算該數(shù)字被高估,但 IoT 設備的數(shù)量很快就會超過全球人口數(shù)量。而且眾所周知,所有這些設備都在不斷生成數(shù)據;如果不對這些數(shù)據進行分析,它們將毫無用處。
認知系統(tǒng)提供了一組技術功能來幫助分析所有這些數(shù)據,這些功能包括人工智能 (AI)、自然語言處理、機器學習和高級機器學習。認知系統(tǒng)能自然地向人類學習并與人類交互,以便從數(shù)據中收集洞察,幫助人們制定更好的決策。在我的上一篇文章中,我曾提到過,認知計算不只是人機交互 (HCI),它還是一種受強大的算法(模型)和接近無限的數(shù)據處理功能驅動的高級機器學習。
要了解使用 IoT 傳感器和深度學習分析的認知系統(tǒng),首先需要了解從高級機器學習到神經網絡的跳躍式發(fā)展。在本文中,我會嘗試幫您了解這種跳躍。在未來幾周,我將通過 3 篇不同的教程介紹如何在 Apache Spark 上使用 Deeplearning4j、ApacheSystemML 和 TensorFlow (TensorSpark) 深度學習框架檢測時序數(shù)據上的異常,幫助您充分理解如何使用深度學習為異常檢測開發(fā)認知 IoT 解決方案。
從機器學習到神經網絡和深度學習
如果認知系統(tǒng)基于模型,那么您需要首先了解機器學習模型是什么。與通過數(shù)據訓練來學習隱藏模式的物理模型(白盒)相反,機器學習模型是一種統(tǒng)計模型(黑盒)。
參見 表 1。它包含不同參數(shù)的歷史數(shù)據、在一個制造管道上測量到的觀察結果,以及一個二元結果。
表 1. 機器學習模型
部件編號 | 最高溫度1 | 最低溫度1 | 最大震動 1 | 結果 |
---|---|---|---|---|
100 | 35 | 35 | 12 | 正常 |
101 | 36 | 35 | 21 | 正常 |
130 | 56 | 46 | 3412 | 故障 |
在這個高度人為的示例中,數(shù)字的含義不言而喻。您可能已經猜到,高溫度和高震動會導致部件故障。出現(xiàn)這種情況的根本原因可能是機器中的某個軸承壞了。
在這個示例中,(監(jiān)督式)機器學習算法能考慮所有這些數(shù)據(以及其他許多數(shù)據),以便從純數(shù)據中學習并預測故障。這樣一種算法生成的組件被稱為機器學習模型。
神經網絡是一種特殊類型的機器學習算法。它非常適合數(shù)據,而且能學習任何在數(shù)據和結果之間的隱藏數(shù)學函數(shù)。神經網絡的唯一缺陷在于,需要大量的計算資源和數(shù)據才能良好執(zhí)行。那么我為什么還要談論神經網絡呢?我們生活在一個 IoT 世界中,通過使用云,我們可以獲得海量的數(shù)據和(接近)無限的計算能力。這種情況使神經網絡對 IoT 數(shù)據處理特別有用。
神經網絡的靈感來源于人腦,深度學習網絡也是如此。神經網絡與深度學習網絡的主要區(qū)別在于添加了多個神經層。深度學習優(yōu)于傳統(tǒng)機器學習的最明顯例子是圖像識別。每個最先進的系統(tǒng)都會使用一種特殊類型的深度學習神經網絡(稱為卷積神經網絡)來執(zhí)行其任務。
例如,基于深度學習的圖像識別算法能區(qū)分制造管道中的正常部件與故障部件。我將此稱為機器智能,IBM Watson Visual Recognition Service中也這么稱呼它。對于這個特定的示例,機器可以像人類一樣準確完成相同的任務。機器的唯一優(yōu)勢在于,它從不睡覺,從不請病假,而且從不會受傷。此外,如果想讓生產量加倍,只需將硬件或云資源量加倍即可。但是,如果要對部件間或性故障進行根本原因分析,則仍是人類專家的領域。不過,認知解決方案可在這種場景中應用深度學習。
事實上,視覺識別服務返回的信息遠比 “正常” 或 “故障” 這樣的二元結果多得多。像人類一樣,該服務會檢測圖像中偏離標準的結構和區(qū)域。現(xiàn)在,如果想將所有聲音和震動傳感器數(shù)據與所有視覺識別數(shù)據相關聯(lián),我敢肯定這樣一個系統(tǒng)能夠像人類一樣有效地檢測故障根源,或者甚至比人類更有效。
人工神經網絡的工作原理
如果說與消息代理(比如基于 MQTT 的 IBM Watson IoT Platform)相連的 IoT 傳感器是認知解決方案的中樞神經系統(tǒng),那么深度學習就是大腦。要理解深度學習,需要對回歸、感知器、生物和人工神經網絡,以及隱藏層有基本的了解。
首先介紹線性和邏輯回歸
有許多介紹回歸的科學文獻,所以我將試著給出適合開發(fā)人員的簡短說明??紤] 表 2。它與 表 1 相同,但在這里我將結果轉換成了二進制表示。
表 2. 人工神經網絡數(shù)據
部件編號 | 最高溫度1 | 最低溫度1 | 最大震動 1 | 結果 |
---|---|---|---|---|
100 | 35 | 35 | 12 | 1 |
101 | 46 | 35 | 21 | 1 |
130 | 56 | 46 | 3412 | 0 |
很容易編寫一個軟件來實現(xiàn)分類。
def predict (datapoint):
if datapoint.MaxVibration1 》 100 :
return 0
else :
return 1
在這個白盒模型示例中,您的底層物理系統(tǒng)知識(或分析數(shù)據的領域專家知識)有助于創(chuàng)建一些規(guī)則。機器學習的理念是讓機器從數(shù)據中學習這些規(guī)則。完成此學習的方式是,使用一個框架 (skeleton),并使用優(yōu)化算法來填充該框架的缺失部分。我將使用這樣一個框架(線性回歸):
def predict (dp) :
return a + b * dp.MaxTemp1 + c * dp.MinTemp1 + d * dp.MaxVibration1
如您所見,如果我選擇參數(shù) b 和 c 為 0,a 為 1,d 為 -0.0002930832(也即 -1/3412),最終結果會非常接近我需要的結果。好消息是,參數(shù) a、b、c 和 d 可從算法中學習。結果:機器學習!
您可能注意到,結果并不是準確的 1 或 0,因為線性回歸是一個(嘗試預測浮點類型值的)連續(xù)模型。但我想要的是一個二元分類器。讓我們通過添加一個名為 sigmoid 的幫助器函數(shù),將此算法轉換為邏輯回歸模型。
import math
def sigmoid (x):
return 1 / (1 + math.exp( - x))
def predict (dp):
return sigmoid(a + b * dp.MaxTemp1 + c * dp.MinTemp1 + d * dp.MaxVibration1)
sigmoid 函數(shù)的唯一作用是將從負無窮大到正無窮大的區(qū)間縮小為 0 -1 的區(qū)間。我只需要定義一個閾值,例如將小于 0.5 的值轉換為 0,將大于 0.5 的值轉換為 1。
圖 1. sigmoid 函數(shù)映射區(qū)間
最簡單的神經網絡:感知器
您現(xiàn)在已經熟悉了最簡單的神經網絡:感知器。它類似于邏輯回歸模型 - 有一些可忽略不計的差異。但 “神經網絡” 這個詞要高深得多,對吧?參見 圖 2 中的感知器。
圖 2. 一個感知器
我為模型提供 x_1 到 x_n 的輸入,模型擁有 w_1 到 w_n 的參數(shù)。然后我對這些數(shù)值進行求和,并使用一個激活函數(shù)(例如sigmoid)將求和結果縮小。如果用稍微不同的方式編寫此模型,它看起來類似于:
out(x_1,x_2,…,x_n) = activation_function(w_0+w_1*x_1+w_2*x_2+…+w_n*x_n)
如果將 activation_function 替換為 sigmoid,則又回到了邏輯回歸。唯一的區(qū)別是……它現(xiàn)在看起來更像大腦的結構。但是人腦是什么樣子的?
從生物神經網絡到人工神經網絡
看看 圖 3 中的生物神經元。在數(shù)學術語中,樹突是 “輸入”,上游數(shù)據從這里傳入;細胞體(和突觸)計算總和并執(zhí)行 “激活函數(shù)”;“結果” 通過軸突發(fā)送到下游的后續(xù)神經元。
圖 3. 生物神經元
因為很有趣(至少對我而言),讓我們來看看 圖 4,它描繪了一個(以生化方式)將神經元連接在一起的生物突觸。這個圖中描繪了感知器中的 w_n 值的集合。
圖 4. 生物突觸
如果將多個神經元鏈接在一起,就會獲得一個如 圖 5 所示的大腦或人工神經網絡。
圖 5. 人工神經網絡
不同之處在于隱藏層
這個人工網絡與感知器的最大區(qū)別在于隱藏層。隱藏層是什么?它有用嗎?可能有用。至少在人腦中,隱藏層似乎很有用,因為我們的大腦中堆疊著數(shù)百個隱藏層。在圖 6 中的這個前饋神經網絡示例中,可以看到模型堆疊在一起。
圖 6. 堆疊神經網絡層來實現(xiàn)圖像識別
沒有看到?看看這個模型的編程語言表示形式。但在這么做之前,讓我告訴您一個秘密。一個被數(shù)學家用來嚇跑所有人的秘密。但這個秘密非常簡單。我講的是矢量乘法。矢量是什么?矢量就是一列數(shù)字,沒有別的。程序員可能稱之為數(shù)組。矢量乘法的定義稍有不同。它規(guī)定,如果有一個矢量 x=(x_1,x_2,。..,x_n) 和另一個矢量 w=(w_1,w_2,…,w_n),而且如果將它們相乘 x*w,那么結果是一個值:
w_1*x_1+w_2*x_2+…+w_n*x_n
此模型看起來熟悉嗎?如果不熟悉,讓我們再次看看線性回歸。我可以通過計算 sigmoid(x*w) 來計算一個神經元。而且因為 Python 不支持直接使用矢量乘法,所以我可以使用 numpy 庫來實現(xiàn)此目的。我將開始計算一個神經元:
import numpy as np
datapoint = {“ MaxTemp1 ”: 35 , “ MinTemp1 ”: 35 , “ MaxVibration1 ”: 12 }
#randomly initialize weights
w_layer1 = np.random.rand(4)
def neuron1 (dp):
x = np.array([ 1 ,dp[“ MaxTemp1 ”],dp[“ MinTemp1 ”],dp[“ MaxVibration1 ”]])
return sigmoid(x.dot(w_layer1))
print (neuron1 ( datapoint ) )
如果想要同時計算多個神經元(例如一個層的所有神經元),可以使用此函數(shù)多次。但是數(shù)學家發(fā)明了另一個概念來迷惑您(如果您沒有被矢量乘法弄暈):矩陣乘法。在神經網絡中,可以像線性回歸中一樣并行執(zhí)行不同次數(shù)的計算,而且可以通過這種形式將此過程編寫為矩陣乘法。
同樣地,我假設輸入包含在矢量 x=(x_1,x_2,。..,x_n) 中。但是現(xiàn)在我想同時計算隱藏層中的所有神經元。無需將 x 乘以一個權重矢量 w 來計算一個神經元,我將 x 乘以一個權重矩陣 w=
w_1_1, w_1_2,。., w_1_m
w_2_1, w_2_2,。., w_2_m
…
w_n_1, w_n_2,。., w_n_m
矩陣乘法將 w*x = 定義為
(w_1_1*x_1, w_1_2*x_2,。., w_1_m*x_n,
w_2_1*x_1, w_2_2*x_2,。., w_2_m*x_n,
…
w_n_1*x_1, w_n_2*x_2,。., w_n_m*x_n)
我的結果是一個浮點值矢量,然后可以將該矢量提供給下一層。這是 Python 中的相同代碼:
import numpy as np
#make sigmoid function applicable to vectors instead of scalars only
def sigmoid (z):
s = 1.0 / ( 1.0 + np.exp(- 1.0 * z))
return s
datapoint = {“ MaxTemp1 ”: 35 , “ MinTemp1 ”: 35 , “ MaxVibration1 ”: 12 }
#randomly initialize weights, now as a matrix for the four hidden layer neurons
w_layer1 = np.random.rand(4,4)
def layer 1 (dp):
x = np.array([ 1 ,dp[“ MaxTemp1 ”],dp[“ MinTemp1 ”],dp[“ MaxVibration1 ”]])
return sigmoid(x.dot(w_layer1))
print ( layer 1 ( datapoint ) )
如您所見,代碼段 x.dot(w_layer1) 沒有發(fā)生任何改變。但在內部應用了矩陣乘法而不是矢量乘法,因為 w_layer1 現(xiàn)在是一個矩陣而不是矢量。最后,我需要添加輸出層,并編寫了以下代碼:
w_layer2 = np.random.rand( 5 , 2 )
def layer2 (x):
x = np.concatenate(([ 1 ],x))
return sigmoid(x.dot(w_layer2))
print (layer2(layer1(datapoint)))
當然,權重矩陣 w 未經訓練,僅被隨機初始化。對神經網絡的訓練不屬于本文的討論范圍。
備注:這個隨機神經網絡輸出了兩個浮點數(shù)。這些數(shù)字是某個項屬于一個類或其他類的概率。同樣地,因為該神經網絡未經訓練,所以這些數(shù)字目前沒有任何意義。
[ 0.97435552 0.89144977]
深入了解隱藏層
隱藏層有何作用?就其本身而言,每一層都可以視為一個單獨的機器學習算法。上游層的輸出被用作輸入,它的輸出被傳遞到下一層,然后下一層使用該輸出作為輸入,依此類推。此行為意味著,當堆疊各種層和創(chuàng)建深度神經網絡時,系統(tǒng)會學習數(shù)據的中間表示,以幫助下游層更有效地完成其工作。最具有啟發(fā)性的示例是人腦的視覺系統(tǒng)。前幾層(感光器后的幾層)無法識別面部、汽車和貓,但能識別形狀,比如線、圓、矩形和點。越深入,一層能識別的東西就越多……直到最終識別整幅圖像。
因此,我在本節(jié)中得出以下結論:深度前饋神經網絡能學習任何數(shù)學函數(shù)(只要有足夠的數(shù)據和計算能力來訓練它)。
時序數(shù)據需要長期記憶網絡
希望您深信神經網絡非常強大。但不幸的是,對于時序數(shù)據(IoT 數(shù)據主要是時序數(shù)據),前饋網絡存在著缺陷。這些網絡很難識別順序,因為它們不會保留記憶。此問題的一個解決方案是添加反饋循環(huán)。
圖 7. 反饋循環(huán)
這些反饋循環(huán)從某種程度上解決了這個問題,因為網絡現(xiàn)在是能夠記憶的。但它只會臨時記住最近發(fā)生的事件。如果網絡要記住更久遠的事件,可向神經元添加記憶細胞來獲得長期記憶 (LSTM) 網絡,如 圖 8 所示。
圖 8. 長期記憶網絡
訓練需要計算能力
LSTM 網絡有何缺點?在使用神經網絡時,需要大量數(shù)據和計算能力才能獲得良好的性能。好消息是,目前的圖形處理單元 (GPU) 卡的計算能力已相當于 2009 年的一個 16.000 核心集群。此外,IBM 正準備 發(fā)布一種神經形態(tài)芯片 ,該芯片由 IBM Watson Group 提供,具有相同的計算能力,但功耗僅為 3 瓦。所以未來有望提高性能和節(jié)約能源。
LSTM 網絡可以學習任何算法
為什么我會在認知 IoT 場景中介紹所有這些內容?因為 LSTM 網絡是圖靈完備的。這意味著 LSTM 網絡能學習計算機可執(zhí)行的任何算法。就這么簡單。
而且這與許多用于時序預測和異常檢測的最先進機器學習算法形成了鮮明對比,這些算法是認知 IoT 所涉及的領域。在認知 IoT 應用中,您需要預測系統(tǒng)的未來狀態(tài)來提前采取調控措施,或者您想在某個部件發(fā)生故障時獲得通知。
那么最先進的算法有何問題?毫無問題。我說的是 LSTM 通常比最先進的算法表現(xiàn)得更好;有時會好很多,有時會好一點,很少比它們表現(xiàn)得差(尤其是在有足夠的數(shù)據來訓練系統(tǒng)時)。用額外的計算成本換取準確性的提升是否值得,這取決于具體用例。
演示用例:IoT 時序數(shù)據的異常檢測
請思考這個演示用例。這個用例是后續(xù)教程的基礎??紤]對測量軸承的震動傳感器(加速計)數(shù)據執(zhí)行異常檢測任務??梢詫⒁粋€傳感器附加到軸承上,如 圖 9 所示。
圖 9. 軸承上的加速計傳感器
加速計傳感器記錄了 3 個幾何軸 x、y 和 z 上的震動。更復雜的傳感器還會考慮旋轉運動模式,但對我們而言這個簡單模式就足夠用了,因為在每個智能電話中都能找到它。(如果想了解如何訪問和分析智能電話中的加速計,可以閱讀這篇 教程。)由于很難將這樣一個系統(tǒng)在此展示,我需要在 Node-RED 中實現(xiàn)一個模擬器,以便使用物理洛倫茨吸引子模型生成數(shù)據。我將在教程中使用生成的這些數(shù)據來檢測異常,主要預測軸承何時會損壞。
我可以在兩種狀態(tài)之間切換測試數(shù)據生成器:正常和故障。圖 10是一個相位圖,顯示了一個正常狀態(tài)下的一個時序上的 3 個震動維度。
圖 10. 正常狀態(tài)的相位圖
通過 圖 10 中的同一個相位圖,可以觀察到,只需稍微改動物理模型的參數(shù),即可獲得故障狀態(tài)。
圖 11. 故障狀態(tài)中的相位圖
如果不熟悉相位圖,圖 12 和 圖 13 給出了 3 個軸值(在正常和故障狀態(tài)下)的運行圖。
圖 12. 正常狀態(tài)中的運行圖
圖 13. 故障狀態(tài)中的運行圖
一種常見技術是,使用 DFT(離散傅立葉變換)或小波變換將此數(shù)據從時域轉換為頻域。圖 14 和 圖 15 中也給出了正常和故障狀態(tài)的 DFT。
圖 14. 正常狀態(tài)的離散傅里葉變換
圖 15. 故障狀態(tài)的離散傅里葉變換
可以清楚地看到,故障狀態(tài)消耗的能量更多,出現(xiàn)的頻率也更高。此數(shù)據足以用來訓練您前面學到的分類器。但我們可以做得更好。我們將構造一個能從數(shù)據中學習正常行為的系統(tǒng),而且在看到新的(未曾見過的)數(shù)據(或順序模式)后,它會發(fā)出警報。
圖 16 中所示的基于 LSTM 的自動編碼器就是這樣一個系統(tǒng)。
圖 16. LSTM 自動編碼器模型
這個系統(tǒng)通過神經瓶頸嘗試重建它看到的相同數(shù)據,從而壓縮大量數(shù)據,但同樣也會在使用瓶頸時,丟棄大量不相關數(shù)據。這樣一種神經網絡能學習系統(tǒng)的正常行為,而且只要看到新模式,它就很難重建數(shù)據并會發(fā)出警報。
-
神經網絡
+關注
關注
42文章
4781瀏覽量
101205 -
機器學習
+關注
關注
66文章
8442瀏覽量
133103 -
深度學習
+關注
關注
73文章
5516瀏覽量
121584
原文標題:介紹深度學習和長期記憶網絡
文章出處:【微信號:C_Expert,微信公眾號:C語言專家集中營】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論