人工智慧正在經歷一場變革,這要得益於機器學習的快速進步。在機器學習領域,人們正對一類名為「深度學習」演算法產生濃厚的興趣,因為這類演算法具有出色的大資料集效能。在深度學習中,機器可以在監督或不受監督的方式下從大量資料中學習一項任務。大規模監督式學習已經在影象識別和語音識別等任務中取得巨大成功。
深度學習技術使用大量已知資料找到一組權重和偏差值,以匹配預期結果。這個過程被稱為訓練,並會產生大型模式。這激勵工程師傾向於利用專用硬體(例如 gpu)進行訓練和分類。
隨著資料量的進一步增加,機器學習將轉移到雲。大型機器學習模式實現在雲端的cpu 上。儘管 gpu對深度學習演算法而言在效能方面是一種更好的選擇,但功耗要求之高使其只能用於高效能計算集群。因此,亟需一種能夠加速演算法又不會顯著增加功耗的處理平台。 在這樣的背景下,fpga似乎是一種理想的選擇,其固有特性有助於在低功耗條件下輕鬆啟動眾多並行過程。
讓我們來詳細了解一下如何在賽靈思fpga 上實現卷積神經網路 (cnn)。cnn是一類深度神經網路,在處理大規模影象識別任務以及與機器學習類似的其他問題方面已大獲成功。在當前案例中,針對在fpga 上實現 cnn做乙個可行性研究,看一下 fpga 是否適用於解決大規模機器學習問題。
卷積神經網路是一種深度神經網路 (dnn),工程師最近開始將該技術用於各種識別任務。影象識別、語音識別和自然語言處理是cnn 比較常見的幾大應用。
什麼是卷積神經網路?
卷積神經網路是一種深度神經網路 (dnn),工程師最近開始將該技術用於各種識別任務。影象識別、語音識別和自然語言處理是cnn 比較常見的幾大應用。
2023年,alexkrishevsky 與來自多倫多大學 (university of toronto) 的其他研究人員 [1] 提出了一種基於cnn的深度架構,贏得了當年的「imagenet大規模視覺識別挑戰」獎。他們的模型與競爭對手以及之前幾年的模型相比在識別效能方面取得了實質性的提公升。自此,alexnet 成為了所有影象識別任務中的對比基準。
alexnet 有五個卷積層和三個緻密層(圖1)。每個卷積層將一組輸入特徵圖與一組權值濾波器進行卷積,得到一組輸出特徵圖。緻密層是完全相連的一層,其中的每個輸出均為所有輸入的函式。
卷積層alexnet 中的卷積層負責三大任務,如圖2 所示:3d 卷積;使用校正線性單元 (relu) 實現啟用函式;子取樣(最大池化)。3d 卷積可用以下公式表示:
其中y (m,x,y) 是輸出特徵圖 m 位置(x,y)處的卷積輸出,s是 (x,y) 周圍的區域性鄰域,w 是卷積濾波器組,x(n,x,y)是從輸入特徵圖 n 上的畫素位置(x,y)獲得的卷積運算的輸入。
所用的啟用函式是乙個校正線性單元,可執行函式max(x,0)。啟用函式會在網路的傳遞函式中引入非線性。最大池化是alexnet 中使用的子取樣技術。使用該技術,只需選擇畫素區域性鄰域最大值傳播到下一層。
定義緻密層
alexnet中的緻密層相當於完全連線的層,其中每個輸入節點與每個輸出節點相連。alexnet中的第乙個緻密層有 9,216個輸入節點。將這個向量乘以權值矩陣,以在 4,096個輸出節點中產生輸出。在下乙個緻密層中,將這個 4,096節點向量與另乙個權值矩陣相乘得到4,096個輸出。最後,使用 4,096個輸出通過 softmax regression 為 1,000個類建立概率。
在fpga上實現cnn
隨著新型高階設計環境的推出,軟體開發人員可以更方便地將其設計移植到賽靈思fpga 中。軟體開發人員可通過從 c/c++ **呼叫函式來充分利用 fpga 與生俱來的架構優勢。auviz systems 的庫(例如 auvizdnn)可為使用者提供最佳函式,以便其針對各種應用建立定製cnn。可在賽靈思 sd-accel™這樣的設計環境中呼叫這些函式,以在 fpga 上啟動核心。
最簡單的方法是以順序方式實現卷積和向量矩陣運算。考慮到所涉及計算量,因此順序計算會產生較大時延。
順序實現產生很大時遲的主要原因在於cnn 所涉及的計算的絕對數量。圖 3 顯示了 alexnet 中每層的計算量和資料傳輸情況,以說明其複雜性。
因此,很有必要採用平行計算。有很多方法可將實現過程並行化。圖6 給出了其中一種。在這裡,將 11x11的權值矩陣與乙個 11x11的輸入特徵圖並行求卷積,以產生乙個輸出值。這個過程涉及 121 個並行的乘法-累加運算。根據fpga 的可用資源,我們可以並行對 512 抑或768 個值求卷積。
為了進一步提公升吞吐量,我們可以將實現過程進行流水線化。流水線能為需要乙個週期以上才能完成的運算實現更高的吞吐量,例如浮點數乘法和加法。通過流水線處理,第乙個輸出的時延略有增加,但每個週期我們都可獲得乙個輸出。
使用auvizdnn在 fpga 上實現的完整 cnn 就像從 c/c++ 程式中呼叫一連串函式。在建立物件和資料容器後,首先通過函式呼叫來建立每個卷積層,然後建立緻密層,最後是建立softmax 層,如圖 4 所示。
auvizdnn是 auviz systems 公司提供的一種函式庫,用於在fpga上實現cnn。該函式庫提供輕鬆實現 cnn所需的所有物件、類和函式。使用者只需要提供所需的引數來建立不同的層。例如,圖5 中的**片段顯示了如何建立 alexnet 中的第一層。
auvizdnn提供配置函式,用以建立 cnn 的任何型別和配置引數。alexnet 僅用於演示說明。cnn 實現內容作為完整位元流載入 fpga 並從 c/c++ 程式中呼叫,這使開發人員無需執行實現軟體即可使用auvizdnn。
fpga具有大量的查詢表 (lut)、dsp 模組和片上儲存器,因此是實現深度 cnn 的最佳選擇。在資料中心,單位功耗效能比原始效能更為重要。資料中心需要高效能,但功耗要在資料中心伺服器要求限值之內。
像賽靈思kintex® ultrascale™ 這樣的fpga 器件可提供高於 14 張影象/秒/瓦特的效能,使其成為資料中心應用的理想選擇。圖 6 介紹了使用不同型別的 fpga 所能實現的效能。
一切始於 c/c++
卷積神經網路備受青睞,並大規模部署用於處理影象識別、自然語言處理等眾多任務。隨著cnn 從高效能計算應用 (hpc) 向資料中心遷移,需要採用高效方法來實現它們。
fpga可高效實現 cnn。fpga 的具有出色的單位功耗效能,因此非常適用於資料中心。
auvizdnn函式庫可用來在 fpga 上實現 cnn。auvizdnn 能降低 fpga 的使用複雜性,並提供使用者可從其 c/c++程式中呼叫的簡單函式,用以在fpga上實現加速。使用 auvizdnn 時,可在 auvizdnn 庫中呼叫函式,因此實現 fpga加速與編寫 c/c++ 程式沒有太大區別。
圖 1 – alexnet 是一種影象識別基準,包含五個卷積層(藍框)和三個緻密層(黃)
圖 2 – alexnet 中的卷積層執行 3d卷積、啟用和子取樣
圖 3 – 圖表展示了 alexnet 中涉及的計算複雜性和資料傳輸數量
圖 4 - 實現 cnn 時的函式呼叫順序
圖 5 – 使用 auvizdnn 建立alexnet 的 l1 的**片段
圖 6 – alexnets 的效能因 fpga型別不同而不同
人工智慧, 語音識別, 工程師, 在雲端, 技術
**:
Azure 雲中的機器學習簡介
機器學習是一項資料科研技術,可以讓計算機根據現有的資料來 將來的行為 結果和趨勢。使用機器學習,計算機可以在不需顯式程式設計的情況下進行學習。可將機器學習視為人工智慧 ai 的子類別。機器學習的 可讓應用和裝置變得更聰明。在網上購物時,機器學習可根據購買的產品幫助推薦其他產品。刷信用卡時,機器學習可...
FPGA機器學習之學習的方向
我可能還有些不一樣的我感覺我能做到的人工智慧,不想去說機械人打敗人類,還有很多像科幻片裡面的機械人一樣的狀態,我沒那個本事。我想做的事情很簡單,讓機器的眼睛看懂普通事物,做一些簡單的事情就可以了。所以我主要的方向就是,機器視覺。那我計畫如何一步一步向前走呢?或者說我要學習哪些東西呢?我目前的內容都是...
FPGA機器學習之學習的方向
我可能還有些不一樣的我感覺我能做到的人工智慧,不想去說機械人打敗人類,還有很多像科幻片裡面的機械人一樣的狀態,我沒那個本事。我想做的事情很簡單,讓機器的眼睛看懂普通事物,做一些簡單的事情就可以了。所以我主要的方向就是,機器視覺。那我計畫如何一步一步向前走呢?或者說我要學習哪些東西呢?我目前的內容都是...