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