文/雷陽
(1.福建警察學院偵查系 福建省福州市 350003 2.福建警察學院犯罪學研究所 福建省福州市 350003)
人工智能(AI)的高速發展離不開數據“質”和“量”的提升,也離不開高性能計算平臺的發展,更離不開算法的不斷進步,深度學習則成為了推動算法進步的主力軍之一。Tensorflow 作為谷歌開源的深度學習框架,其中包含了谷歌近十年間對人工智能的探索及成功的商業應用。
深度學習帶來的技術革命影響深遠,學術界早也從中受益,將深度學習廣泛應用于各個科學領域。深度學習來源于神經網絡技術,這不僅標志著傳統神經網絡的再次發揚光大,也借助AlphaGo 在圍棋的對戰中戰勝人類,揭開了AI 迅速發展的幕布。機器學習為人工智能指明方向,而深度學習則讓機器學習穩扎穩打的進行下去。在近年來國內外互聯網大亨對未來的展望中能看出,伴隨著深度學習的人工智能將是下一個時代的頂梁柱。
在對一個未知文件做分析的時候,會使用到邏輯回歸算法。大部分情況下,當訓練數據達到一定數據之前,越多的訓練數據可以讓邏輯回歸算法分析得越準確。換句話說,邏輯回歸算法可以根據訓練數據提高在文件分析問題上的正確率。深度學習受神經科學的啟發,使得機器學習的研究者們常常會使用不同的算法完成不同的任務設計。而深度學習的通用性可以使研究者們跨越多個研究方向甚至在所有研究方向都有所進展。如今的深度學習已經發展到超越了神經科學的觀點,可以更廣泛地應用于各種不是從神經系統啟發而來的機器學習框架。深度學習領域更注重于搭建智能計算機系統,解決人工智能的問題。
在短短的幾年內,深度學習從最開始的圖像識別,推廣到了機器學習的各個領域,而且有著特別出色的表現,例如語音和圖像識別、音頻和自然語言的處理、化學和生物信息的處理、機器人、電腦游戲、搜索引擎、醫學、金融等各大領域。
Tensorflow 是由Jeff Dean 為主要開發者的谷歌團隊基于谷歌內部第一代深度學習系統DistBelief 改進而來的通用計算框架,在2011年開發的BistBelief 深度學習工具已經在Google 內部獲得巨大成功,但DistBelief 依賴于Google 內部系統框架,為了使深度學習軟件擁有較強的通用性,增加其計算速度和穩定性,也為了使其支持更多的計算平臺和更多的深度學習算法,2015年11月Google 發布了新的深度學習計算框架TensorFlow,到目前為止已經得到了廣泛的應用。
TensorFlow 借助數學運算和節點之間傳遞的多維數組(張量)的結構,通過API 將計算工作部署到桌面設備、服務器或者移動設備中的一個或者多個CPU 或GPU。Time Series 分析是統計學中動態數據處理的方法之一。通過使用Python 語言編程,將觀測到的Time Series 數據用圖線擬合的方式客觀地描述系統。在發布的TensorFlow 新版本中,引入了Time Series 模塊,現在可以用自回歸模型、Anomaly Mixture AR、LSTM三種模型對時間序列進行預測。對于時間序列可簡單的看成由觀測時間點和觀測值所組成。先通過NumPy 或者CSV 讀取數據,再通過已經建立的模型進行訓練、驗證和對時間序列的預測。

圖1:程序編寫步驟

圖2:LSTM 單元結構示意圖
通過Anaconda 安裝Python 語言與Jupyter 編譯器的交互環境,再安裝好TensorFlow,打開Jupyter 編譯器進行編程,步驟如圖1所示。
如圖1 中,編程要先通過import 導入各種程序包。例如一般會用“import tensorflow as tf”的形式載入TensorFlow,這樣在程序中就可以使用“tf”來代替“tensorflow”來作為模塊名稱,使得程序更簡潔。導入TensorFlow 是賦予Python 訪問TensorFlow 類、方法、符號的權限,導入NumPy 主要用于提取處理數據和進行計算,matplotlib 主要用于繪制結果圖。同樣也會使用“import numpy as np”和“import matplotlib.pyplot as plt”來簡化程序。
在設置參數時,通常會設置一些運算函數時需要使用的循環次數等的參數,還可能會定義一個或多個placeholder。Placeholder(占位符)是作為一個計算圖可以參數化的接受外部的輸入,它是允許程序后面再提供一個數值。
在定義函數、創建訓練集和神經網絡的時候需要根據不同情況進行編寫程序。例如比較常見的,在創建完一個模型之后需要對其進行訓練評估,這時候就會需要定義一個比較常用的函數——損失函數loss,這個函數度量當前模型和提供數據的距離,之后可以用梯度下降法等方法來減小損失函數,從而使得建立出來的模型與真實模型越來越接近。
最后的創建會話Session,循環迭代完成目標要求,用matplotlib 對結果進行畫圖。

圖3:LSTM 模型對sin 函數的擬合和預測結果
假設需要預測一個句子,這個句子的模型的所有信息都需要被考慮進去才能得出最后的結論,不能僅僅靠著最后的一個詞或幾個詞來完成這個預測。這也是對于循環神經網絡的一個很大的技術挑戰——長期依賴問題。LSTM 的誕生就是為了解決這個問題。這使得LSTM 在這些問題上比普通的循環神經網絡更加有優勢,也表現得更好。LSTM 還有一個重要的特點就是對序列的處理方式,LSTM 可以收集更多的信息和語境從而完成遠距離的信息處理問題和在復雜語言場景里循環神經網絡性能受到限制的問題。
與單一的tanh 循環體結構不同的,LSTM 擁有著三個“門”結構,如圖2 所示。
LSTM 靠著這些“門”結構讓信息有選擇性地影響循環神經網絡中每個時刻的狀態。將使用sigmoid 神經網絡作為激活函數的會輸出一個0 或1 的數值的全連接神經網絡層和按位乘法組合起來形成一個門結構。門打開時(sigmoid 神經網絡層輸出位1 時)所有信息都可以正常通過,反之,門關閉時(sigmoid 神經網絡層輸出位0 時)所有信息都無法通過。
LSTM 結構兩種門作為核心的存在,那就是“遺忘門”和“輸入門”。
遺忘門的公式定義為:

遺忘門的作用就是讓循環神經網絡忘記之前沒有用的信息。它根據當前的輸入值xt和上一個時刻的輸入值ht-1決定哪些信息需要被遺忘。
輸出門的公式定義為:

在遺忘門工作之后,循環神經網絡需要從當前的輸入中補充新的信息進入系統中。同理,它根據當前的輸入值xt和上一個時刻的輸入值ht-1決定哪些信息需要被補充進入循環神經網絡中。
首先,對sin 函數進行時間序列建模和測試:

定義的LSTM 模型為:


圖4:LSTM 模型對犯罪走勢的預測結果

每個時間點的觀測值都是一個單獨的數值,建立隱藏層大小為128 的LSTM。對前500 個觀測值進行輸入,向后預測200 個長度后,可以得到最后的預測如圖3。
對某地區犯罪時間序列進行預測。在預測前需要使用CSV 文件來讀取數據,使用“f=open(‘crime_dataset.csv’)”語句讀入犯罪數據,將數據按照日期先后排序后展示數據,如圖4 中藍線所示。先創建訓練集,設置步長為20,每次訓練60 個數據,輸入層及輸出層的維度取1。其次定義神經網絡變量weights 和biases 作為輸入層、輸出層的權重和偏置。定義LSTM 網絡,將二維張量運算結果作為隱藏層的輸入。最后再定義訓練模型和損失函數,設置訓練次數為10000,預測結果如圖4 紅線所示,獲得了較好的預測效果。