這些算法背后的數學和科學是在幾十年前開發的,但直到最近幾年,神經網絡驅動的人工智能才起飛。那么,究竟發生了什么使神經網絡能夠成功,而過去卻沒有達到目標呢?
通常情況下,有一個關鍵事件催化了任何技術從“利基”到“轉型”的相變。圖形處理單元(GPU)從圖形設備到通用計算機的重新構想是當前AI革命的核心。GPU 能夠加速一組特定的數學運算:矢量和矩陣變換。它們使我們能夠在實際時間內處理信息,但僅靠GPU不會將我們帶到這里。人工智能革命的發生是因為除了提供馬力的GPU之外,還有一個基礎設施 - 互聯網和開源開發人員社區 - 它促進了數千名研究人員和開發人員的協作,并創建了工具和庫的集合,這些工具和庫在當今的AI開發中無處不在。
如果沒有研究人員和開發人員大軍,那么加速神經網絡的 GPU 驅動的突破仍將是利基市場,他們創建了抽象出直接編程 GPU 的細微差別和困難的庫。這對于解決在各種用例中面臨的挑戰非常有效。但是,這些庫不遵循安全關鍵開發指南,而安全關鍵型開發指南正日益成為許多應用程序的基本要求。
當我們看到自動駕駛,以及依賴于安全性、確定性和可靠性的嵌入式行業時,我們發現自己又回到了相變的起點。我們有GPU,通過Khronos Group的Vulkan? SC,我們有一個API支持安全關鍵圖形和用于編程GPU的計算。現在,我們需要一個位于 Vulkan SC 安全層之上的圖書館補充集合,這些庫遵循安全關鍵準則和標準,將我們從利基帶到主流。
CoreAVI通過引入ComputeCore啟動了這場革命。ComputeCore是CoreAVI對線性代數(BLAS)API的實現。線性代數,尤其是向量,是為所有人工智能算法提供動力的燃料。立即選擇您最喜歡的 AI 引擎。該引擎運行速度很快,因為它有一個加速所有矢量操作的 BLAS 庫。ComputeCore 正是這樣做的,但它的實施是為了滿足航空電子、汽車和工業市場的功能安全認證標準(DO-178C、A 級、ISO 26262 ASIL D 和 IEC61508 SIL 3)。矢量和矩陣是人工智能和數據處理的核心。這經常被提及,但幾乎從未解釋過。一起來看看吧。
什么是數據處理?
當我們想到數據處理時,即廣義上的數據處理,即獲取某些信息并以某種方式對其進行轉換,有一種數據結構是任何和所有處理的核心,那就是向量。矢量到底有什么特別之處?
當我們談到數據處理時,我們指的是獲取信息并對其進行修改的能力。在某些情況下,我們希望轉換信息,以便我們可以從中提取知識。機器學習就是這種情況。我們可以拍攝圖像并以一種可以告訴我們場景中存在哪些對象的方式對其進行轉換。我們這樣做是為了計算機視覺,使自動駕駛汽車成為可能。我們還可以通過模糊、銳化或提取有關場景中結構的邊緣信息來轉換圖像。這些操作是強大的視覺管道中的常見步驟。
數據也可能是非視覺的。考慮一個天氣預報系統,我們希望該系統預測一年中給定日期的最高和最低溫度。在這種情況下,系統的輸入可能是描述過去十年中一天、給定位置的溫度范圍的歷史數據樣本集合。在任何情況下,數據樣本都是信息單元。分析圖像時,數據樣本是單個圖像。當分析患者的臨床病史以試圖預測該患者的心臟病風險時,數據樣本是單個患者。數據樣本由以某種方式描述樣本的特征列表組成。對于圖像,特征是構成圖像的像素。對于醫療患者,特征是描述該患者的屬性:年齡、性別、吸煙習慣、家族心臟病史以及與其臨床病史相關的其他信息。當我們將每個數據樣本視為特征的集合時,此視圖與向量的概念非常吻合。
將數據樣本轉換為向量
我們如何將圖像和患者轉換為載體?對于圖像,我們將每個像素的顏色解釋為數值,并構建像素值列表。例如,寬 2 像素、高 2 像素的圖像將生成具有 4 個值的矢量,可能如下所示:[10,0,245,50],其中每個值表示該像素的顏色強度。更高分辨率的圖像會產生更高維度的矢量,例如,256x256 像素的圖像會產生 65,536 個值的矢量。
患者信息也可以通過使用數字對每個特征的含義進行編碼來矢量化,例如 1 = 男性,0 = 女性,1 = 家族心臟病史,0 = 沒有心臟病等。將數據樣本轉換為向量在兩個非常重要方面很有用:它有助于以易于與每個單獨樣本相關聯的方式封裝特征列表,其次,以幾何方式解釋向量揭示有關數據集中樣本如何相互關聯的信息。例如,假設我們要創建一個算法,可以學習區分汽車和行人的圖像。我們首先將圖像解釋為矢量。從幾何上講,矢量可以被認為是空間中的箭頭,從坐標系的原點開始,穿過空間到達由每個維度中的矢量值定義的點,參見圖 1。
圖1.此圖說明了笛卡爾坐標系中的 3D 矢量 V1。向量是從原點開始,到由其 3 個分量定義的點結束的線:x、y、z。
雖然我們無法直觀地表示維度高于 3D 的向量,但在數學上我們仍然可以使用相同的方程來操作它們。向量之所以如此特別,是因為當我們從幾何角度解釋它們時,指向相似方向的向量具有相似的性質。例如,當我們將汽車和行人的圖像解釋為某個多維空間(稱為超空間)中的向量時,盡管我們無法可視化該向量指向的方向,但我們可以計算它,并且可以比較屬于汽車圖像的向量和屬于行人圖像的向量。事實證明,汽車圖像的矢量指向大致相同的方向,行人圖像的矢量指向與其他行人圖像相似的方向,但遠離汽車矢量。
要創建一種可以學習自動區分汽車和行人的算法,意味著以數學方式操縱這些向量,以了解它們指向的方向,并找到將汽車和行人向量所在的空間一分為二的線或超平面。一旦我們發現超平面,算法就可以簡單地通過知道它的向量落在線的哪一側,具有所有汽車矢量的一側或具有所有行人矢量的一側來對全新的圖像進行分類。
這就是為什么人工智能算法最終都會執行大量的矢量操作。這是因為輸入數據通常表示為向量,因為這樣做在幾何上是有利的。AI中經常使用的另一個數據結構是矩陣。其原因不應令人意外。向量是值的集合。矩陣只是將一個向量堆疊在另一個向量之上的集合。在某些情況下,將向量組合為矩陣很有用,這樣我們就可以同時處理一組向量,例如一組輸入樣本。
計算工具 – 內容、原因和方式
在這一點上,我們已經確定了人工智能對向量和矩陣的需求。現在我們需要一種方法來快速執行這些計算。
當我們想到自動化時——例如,在繁忙的高速公路上無人協助駕駛的汽車,或者在倉庫或工廠與人類一起工作的機器人——我們會想到實時執行的系統,并產生實時后果。當自動駕駛汽車未能檢測到行人并有足夠的時間避免碰撞時,人工智能算法本身可能不是故障的來源。事實上,該算法可能已經正確檢測到行人,但檢測可能只是花費了幾毫秒的時間。此示例有助于說明幾件事。首先,這些系統需要盡可能快地執行矢量和矩陣數學運算。其次,在安全關鍵應用中,這些操作需要在確定的時間內進行。也就是說,我們需要能夠計算執行算法的最壞情況執行時間,以便我們可以確定對于每個可預見的情況,系統是否有足夠的時間對該算法的執行結果做出反應。如果避開障礙物的機會之窗已經過去,那么發現障礙物就沒有什么用處。
為了解決這些問題,應用程序和解決方案開發人員需要兩件事。首先,他們需要一個可以加速向量和矩陣運算計算的工具。對于非安全關鍵用例,開源社區提供了大量免費提供的工具和框架。其中包括Tensorflow,Pytorch,Caffe和Scikit-learn等框架。
所有這些框架和庫都依賴于上面提到的稱為 BLAS 庫的關鍵組件,該組件提供了一組函數來加速矢量和矩陣操作。不幸的是,這些框架沒有按照功能安全標準實施。行業需要的是生產一套構建塊工具和框架,按照安全關鍵標準和實踐構建。這些框架必須包括保證確定性執行的 GPU 驅動程序實現。它們必須包括加速核心數學運算的工具 - 例如BLAS API的安全關鍵實現。工具和框架必須為計算機視覺和圖像處理的基本預處理和后處理任務提供安全關鍵(確定性)解決方案,而且還必須為通用機器學習任務提供安全關鍵(確定性)解決方案,以幫助強大的人工智能管道中的每個決策過程。換句話說,該行業必須提供與非安全關鍵市場中相同的解決方案,并且具有相同的復雜性水平,同時在嚴重受限的環境中解決確定性和資源管理的難題。
加速度
到目前為止,我們已經討論了處理向量和矩陣的必要性,并且以確定性的方式這樣做。我們還說過,為了快速執行這些操作,我們需要一個執行加速的工具。我們所說的加速度是什么意思?
通常,當我們想到軟件執行時,我們認為CPU是執行編程指令的終端設備。系統中的大多數軟件都在 CPU 上運行。事實上,我們可以使用 C 編程語言實現 BLAS 并在 CPU 上執行計算。這種方法的好處是,嵌入式領域的大多數程序員(實時設備、汽車、機器人)都熟悉 C 編程語言,并且有用 C 語言開發安全關鍵軟件的標準實踐。
這種方法的缺點是 CPU 擅長快速執行順序操作,但不擅長并行化工作。不幸的是,為大多數AI算法操作向量和矩陣所涉及的任務被稱為“令人尷尬的并行問題”。因此,在可以并行執行這些計算而不是按順序執行這些計算的機器上執行這些計算符合我們的最佳利益。
結論
過去十年對人工智能來說是偉大的。研究社區和開源工程社區已經開發了大量工具,為當今許多非安全關鍵產品提供支持。亞馬遜的Alexa或谷歌的家庭助理等產品由最先進的自然語言處理(NLP)算法提供支持。
對這些算法的突破性研究得益于工具生態系統,這些工具使工程師和科學家能夠相對輕松地開發和訓練復雜的神經網絡,并加速GPU設備上的操作。這些工具包括神經網絡框架,如TensorFlow和PyTorch,統計和數據分析工具,如Python科學庫scikit-learn,以及高性能計算框架,如CUDA?和SYCL。?
像OpenCV這樣的圖像處理庫通過為常用算法和技術提供內置功能,使工程師的工作更輕松。事實上,這些可用的框架是如此成功和無處不在,以至于當我們進入安全關鍵領域時,許多人還沒有意識到,在確定性和安全性很重要的情況下,這些工具是不可用的。但是,正如研究界使用超越CUDA或OpenCL?的工具生態系統一樣,安全關鍵行業需要建立一個安全關鍵工具和框架的生態系統。
BLAS 和 FFT 的安全關鍵型實施是朝著正確方向邁出的一步,但我們需要我們的合作伙伴以及整個嵌入式和自治社區幫助定義工具和安全關鍵 API,為未來所有可靠設備提供動力。開源社區已經展示了可以實現的目標,并為我們的產品和想法原型提供了一個很好的平臺,但我們知道 Python 庫不能確定地執行。自主意味著責任。負責任的系統必須安全可靠。行業越早意識到這一點,我們就能越早離開沙盒,建立一個基于嚴格的安全標準和指導方針的基礎設施,以促進安全自主的大規模部署。
審核編輯:郭婷
-
神經網絡
+關注
關注
42文章
4762瀏覽量
100541 -
gpu
+關注
關注
28文章
4701瀏覽量
128707 -
人工智能
+關注
關注
1791文章
46859瀏覽量
237582
發布評論請先 登錄
相關推薦
評論