導航:首頁 > 源碼編譯 > google深度學習演算法

google深度學習演算法

發布時間:2023-05-16 08:55:08

1. 行星不發光,科學家是如何發現太陽系外的行星的

科學家有很多方法來尋找地外行星,比如行星凌日法、徑向速度法、直接測量法、引力攝動法,重力微透鏡法、脈沖星計時法、相對論法等等;其中凌日法是最有效的,目前人類發現大約5000顆地外行星中,有70%都是利用凌日法發現的。


但是這個方法對觀測設備的要求極高,還要求行星的尺寸不能太小,距離地球越近越好,同時行星也不能距離母恆星太近,目前天文學家用這種方法發現了數十顆系外行星。

以上七種探測系外行星的方法,都是各有各的優缺點,比如行星凌日法雖然效率非常高,但是當行星的公轉軌道垂直於地球方向時,這個辦法就失效了,而且行星凌日法不反應行星的大氣數據,只有各種方法相輔相成,才能讓我們發現更多的地外行星唯迅。

2. Google 人工智慧引擎 TensorFlow 開源會帶來哪些影響

最直接的影響就是明年又會有一大批"自出創新型"科技項目要上馬了。
說一點感想。。。

一是現在很多大公司都越來越重視DL,所以趕緊多了解了解DL無論是對於相關領域的工作,還是對於未來自己的發展都有好處

二是DL現在一大硬傷在於運算復雜度太高導致的計算時間太長,所以GPU加速這一塊未來也會越來越重要。現在和DL關系比較密切的加速手段也主要就是CUDA,所以CUDA相關的東西也可以多了解了解,未來肯定只會用的越多而不是越少

今年CVPR2015和ICCV2015,不少使用DL的工作識別精確度暴增10%,使得未來如果不是工作上有巨大創新的話,基本上所有人都會向著DL的方向去做了

而且這是一條很難回頭的路,因為實驗結果只能越來越好而不是越來越差,如果你不用DL,那麼你的結果比不過別人,所以很多人雖然心裡不怎麼情願,但也是不得不用DL來做自己的一些工作

3. 谷歌bard是什麼意思

"谷歌Bard"是指由Google推出的人工智慧聊天機器人。這個項目是在2019年由Google的研究團隊發起的,旨在探索人工智慧在自然語言處理、問答、對話等方面的技術。Bard的設計是基於神經語言模型,可以理解並生成人類語言的自然文本。

盡管Bard在許多方面表現出了很高的智能,但仍然存在一些局限性。例如,它可能會出現錯誤的理解、生成不正確的回答或者重復已經出現過的信息。此外,由於Bard是基於大量數據進行訓練的,它在某些特定領域的知識可能不如專業人士豐富。

總的來說,谷歌Bard是人工智慧領域的一項創新嘗試,旨在推動自然語言處理技術的發展。盡管Bard還存在一些局限性,但它展示了人工智慧在理解和生成人類語言方面寬好的巨大潛力。隨著技術的不斷發展,Bard有望在未來為我們提供更加智能、高效和有趣的交流體驗。

4. 如何評價Google發布的第二代深度學習系統TensorFlow

評價Google發布的第二代深度學習系統TensorFlow:

在尚未確定能否發布分布式彎罩版本之前,把一個單機工具描述成」Todaywe』--oursecond-」,」",這樣的claim是否過大?不管是工業界還是學術界,都應該珍惜機器學習(或者人工智慧)今天這來之不易的局面,在宣傳與推廣自己工作的時候實事求是,不給公眾造成誤導。

仔細研讀了TensorFlow的開源代碼文檔和slides,總體印象是:一個新的單機深度學習工具包,沒有明顯的理論和系統創新,開源版本不支持分布式,所以對大規模深度學習沒有太大益處。

1、編程模式。採用了一種稱作「computationgraph」的數據流編程模式,這種模式在之前很多系統中已有實現,如微軟Dryad[1],Spark。

2、數據表示。稱作為」Tensor「,統一來表示向量、矩陣、三維及以上張量。類似的抽象在之前很多系統與工具中已有。大部分機器學習操作的對象(數據或者參數)都是以向量、矩陣的形式存在,少部分是張量。統一表徵成"tensor"沒有問題,但在創新性上貢獻有限。

3、開源版本不支持分布式。單機的深度學習工具已經不下10個,Google沒有提供測評數據顯緩鬧鍵示TensorFlow相比這些擾巧工具在性能上有優勢。市面上真正缺乏的是能夠支持大規模深度學習的分布式框架或系統,而TensorFlow開源版本並沒有提供。

希望TensorFlow能夠開源分布式版本。如果不方便開源的話,希望在以後的宣傳中清晰指出開源版本是一個單機深度學習工具,而不是支持大規模深度學習的系統,這二者有本質的區別。

5. 如何評價Google發布的第二代深度學習系統TensorFlow

參考鏈接:https://www.hu.com/question/37243838/answer/71634545

個人的一點看法:
1. TensorFlow是採用的DataFlow的數據流模型,不過我不覺得和Dryad有太多相似之處,此外Dryad也不是第一個提出DataFlow模型的地方,要說最早可以參考MIT TaggedToken
machine裡面的static dataflow 和dynamic dataflow architecture[2]的資料. 在一個大規模機器學習系統上全面、可靠的支持DataFlow的feature本不是一件容易的事情,但是Tensorflow做到這一點,支持control_dependence, merge, condition,for-loop/while-loop, iteration。1. 就像LSTM的unrolling,原來需要predefine unroll,現在用for-loop去做展開(內部維持狀態的變化) 2. 還有比如一些演算法需要對不同的input example做不同的訓練(不同的gradient,更新不一樣的variables),以前需要hack很多東西(至少在DistBelif上是),現在只需要一個ConditionOp就解決了。3. 比如不同的variables用不同的optimizer,SGD/AdaGrad/FTRL/Momentum等。有了ControlFlow的支持,tensorflow graph更像是一種語言的抽象(variables, tensors, controlflow, compile[這個是指會rewrite整個graph, send/recv node, un-reference, graph partition, dynamic placement], parallelism,functional programming等),從這個角度講還是有不少新東西在裡面。
2. 是否用Dataflow和BSP並無直接對應關系,Dataflow只是tensor/token的流動,怎麼 schele和控制流動是別的部分的事情(session 如何drive)。事實上,Tensorflow提供的靈活性用戶很容易在上層做BSP(如果你含帆非常喜歡這樣做的話,這種模型最大的缺點是fault tolerance很難做),SSP(如果非要把這個概念引入的話) 或者parameter server的結構(事實上我從來不認為這是一種通用的結構,只是ps被centralized起來存有狀態的variables而已, 5年前的DistBelief就是這種架構),有了這個框架的抽象,然後進一步你可以做Synchronous or Asynchronous training。所以說Dataflow只能做BSP,這個是很沒有緣由的。
3. 數據表示成tensor/token,單單這一點非要說這個有多少的創新確實也談不上。不過基於tensor的每一個single op怎麼做實現就有考究了,從Eigen開始到每一個kernels op基本都有micro-benchmark來保證單個op的performance達到最優,既然是kernel級的tensorflow的框架支持用戶可以隨便擴展GPU、CPU甚至即使是CPU的可以針對不同的指令級做優化和定製。當然任何事情有得就有失,大的系統的設計本身就是trade-off,比如你本來所有的東西揉斗弊在一起操作指針、inplace內存讀寫就可以,但現在抽象成多個各個粒度的operators,operators之間讀寫難免有很多overhead(當然graph rewrite已經最大限度的避免)。所以概括而言TensorFlow採用(目標)的設計其實是是空老族proction級的performance/成熟度和research flexibility的trade-off。從Google內部的各種產品線(Search/inbox/Photo等)的使用看,這個系統無論從各個方面都是經受住了考驗(performance/scalability/flexibility/usability等)。Ps: TensorFlow絕不是只能做deep learning, shallow/wide model 以及傳統的ML都可以基於這個系統來做(當然一些operators並不現成,需要去實現)。
4. 最後說一下多機版本的開源問題。有各種復雜的因素導致了這次release的版本沒有多機在裡面,比如並沒有很好的job shele和高性能的RPC系統的支持。這個問題不深入講但是希望不久的將來這些障礙都會排除。說到和DistBelief的性能比較,各種大大小小的task表明Tensorflow比DistBelief的性能提高不少(我不會說幾X的這樣的number,顯然不同的tasks這個number的variance會很大. Tensorflow比DistBelief擴展性和靈活性的優勢自然不用多少)要說開放出來比較數據更是沒有意義,因為DistBelief本身並沒有開源。
5. 再來說一下distributed version support的問題,如果你仔細研究一下Tensorflow的framework就會發現再當前的基礎上加一個分布式的支持是相當容易的,你可以用Zeromq/MPI 任何一種高效的通信框架來做,結合當前的Graph rewrite的functionality,只需要增加一些通信的節點就可以。
6. 最後關於詳細情況請參考Tensorflow writepaper[3],歡迎試用。
[1]: Arvind and David E. Culler. Annual review
of computer science vol. 1, 1986. chapter
Dataflow Architectures, pages 225–253. 1986 http://www.dtic.mil/cgi-bin/GetTRDoc?Location=U2&
doc=GetTRDoc.pdf&AD=ADA166235.
[2]: Arvind and Rishiyur S. Nikhil. Executing a program
on the MIT tagged-token dataflow architecture.
IEEE Trans. Comput., 39(3):300–318, 1990.
http://dl.acm.org/citation.cfm?id=78583.
[3]: TensorFlow:
Large-Scale Machine Learning on Heterogeneous Distributed Systems

6. 2019年十大最佳深度學習框架

作者 | python語音識別

來源 | 濤哥聊Python

雖然我們大多數人都驚嘆為什麼DL這么好?在使用大量數據進行訓練時,它在准確性方面非常出色。近幾年隨著深度學習演算法的發展,出現了很多深度學習的框架,這些框架各有所長,各具特色。下面將為大家介紹2019年最受歡迎的十大深度學習框架。

TensorFlow

谷歌的Tensorflow可以說是當今最受歡迎的深度學習框架。Gmail,Uber,Airbnb,Nvidia以及其他許多知名品牌都在使用。TF是目前深度學習的主流框架,Tensorflow主要特性:

TensorFlow支持python、javaScript、C ++、Java和Go,C#和Julia等多種編程語言。 TF不僅擁有強大的計算集群,還可以在iOS和Android等移動平台上運行模型。 TF編程入門難度較大。初學者需要仔細考慮神經網路的架構,正確評估輸入和輸出數據的維度和數量。 TF使用靜態計算圖進行操作 。也就是說我們需要先定義圖形,然後運行計算,如果我們需要對架構進行更改,我們會重新訓練模型。選擇這樣的方法是為了提高效率,但是許多現代神經網路工具能夠在學習過程中考慮改進而不會顯著降低學習速度。在這方面,TensorFlow的主要競爭對手是PyTorch 。

TensorFlow優點:

它非常適合創建和試驗深度學習架構,便於數據集成,如輸入圖形,SQL表和圖像。 它得到谷歌的支持,這就說明該模型短期內不會被拋棄,因此值得投入時間來學習它。 PyTorch

Tensorflow之後用於深度學習的主要框架是PyTorch。PyTorch框架是Facebook開發的,已被Twitter和Salesforce等公司使用。

PyTorch基本特性:

與TensorFlow不同,PyTorch庫使用動態更新的圖形進行操作 。這意味著它可以在流程中更改體系結構。 在PyTorch中,您可以使用標准調試器 ,例如pdb或PyCharm。

PyTorch優點:

訓練神經網路的過程簡單明了。同時,PyTorch支持數據並行和分布式學習模型,並且還包含許多預先訓練的模型。 PyTorch更適合小型項目和原型設計。 Sonnet

Sonnet深度學習框架是建立在TensorFlow的基礎之上。它是DeepMind用於創建具有復雜架構的神經網路。

Sonnet基本特性:

面向對象的庫,在開發神經網路(NN)或其他機器學習(ML)演算法時更加抽象。 Sonnet的想法是構造對應於神經網路的特定部分的主要Python對象。此外,這些對象獨立地連接到計算TensorFlow圖。分離創建對象並將其與圖形相關聯的過程簡化了高級體系結構的設計。

Sonnet優點:

Sonnet的主要優點是可以使用它來重現DeepMind論文中展示的研究,比Keras更容易,因為DeepMind論文模型就是使用Sonnet搭建的。 Keras

Keras是一個機器學習框架,如果您擁有大量數據和/或你想快速入門深度學習,那麼Keras將非常適合學習。Keras是TensorFlow高級集成APi,可以非常方便的和TensorFlow進行融合。這是我強烈推薦學習的一個庫。

Keras基本特性:

除了Tensorflow之外,Keras還是其他流行的庫(如Theano和CNTK)的高級API。 在Keras中更容易創建大規模的深度學習模型,但Keras框架環境配置比其他底層框架要復雜一些。

Keras優點:

對於剛剛入門的人來說,Keras是最好的深度學習框架。它是學習和原型化簡單概念的理想選擇,可以理解各種模型和學習過程的本質。 Keras是一個簡潔的API。 可以快速幫助您創建應用程序。 Keras中代碼更加可讀和簡潔。 Keras模型序列化/反序列化API,回調和使用Python生成器的數據流非常成熟。

順便說一下TensorFlow和Keras的對比:

PS:Tensorflow處於底層框架:這和MXNet,Theano和PyTorch等框架一樣。包括實現諸如廣義矩陣 - 矩陣乘法和諸如卷積運算的神經網路原語之類的數學運算。

Keras處於高度集成框架。雖然更容易創建模型,但是面對復雜的網路結構時可能不如TensorFlow。

MXNet

MXNet是一種高度可擴展的深度學習工具,可用於各種設備。雖然與TensorFlow相比,它似乎沒有被廣泛使用,但MXNet的增長可能會因為成為一個Apache項目而得到提升。

MXNet基本特性:

該框架支持多種語言,如C ++,Python,R,Julia,JavaScript,Scala,Go,甚至Perl。 可以在多個GPU和許多機器上非常有效地並行計算。

MXNet優點:

支持多個GPU(具有優化的計算和快速上下文切換) 清晰且易於維護的代碼(Python,R,Scala和其他API) 快速解決問題的能力(對於像我這樣的深度學習新手至關重要)

雖然它不像TF那麼受歡迎,但MXNet具有詳細的文檔並且易於使用,能夠在命令式和符號式編程風格之間進行選擇,使其成為初學者和經驗豐富的工程師的理想選擇。

GLUON

Gluon是一個更好的深度學習框架,可以用來創建復雜的模型。GLUON基本特性:

Gluon的特殊性是具有一個靈活的界面,簡化了原型設計,構建和培訓深度學習模型,而不會犧牲學習速度。 Gluon基於MXNet,提供簡單的API,簡化深度學習模型的創建。 與PyTorch類似,Gluon框架支持使用動態圖表 ,將其與高性能MXNet相結合。從這個角度來看,Gluon看起來像是分布式計算的Keras非常有趣的替代品。

GLUON優點:

在Gluon中,您可以使用簡單,清晰和簡潔的代碼定義神經網路。 它將訓練演算法和神經網路模型結合在一起,從而在不犧牲性能的情況下提供開發過程的靈活性。 Gluon可以定義動態的神經網路模型,這意味著它們可以動態構建,使用任何結構,並使用Python的任何本機控制流。 SWIFT

當你聽到Swift時,您可能會考慮iOS或MacOS的應用程序開發。但是如果你正在學習深度學習,那麼你一定聽說過Swens for Tensorflow。通過直接與通用編程語言集成,Swift for TensorFlow可以以前所未有的方式表達更強大的演算法。SWIFT基本特性:

可以輕松獲得可微分的自定義數據結構。 下一代API 。通過實踐和研究獲得的新API更易於使用且更強大。 在TensorFlow的基礎上 ,Swift API為您提供對所有底層TensorFlow運算符的直接調用。 基於Jupyter、LLDB或者Swift in Colab的編程工具提高了您的工作效率。

SWIFT優點:

如果動態語言不適合您的任務,那麼這將是一個很好的選擇。當你訓練運行了幾個小時,然後你的程序遇到類型錯誤,那麼使用Swift,一種靜態類型語言。您將看到代碼錯誤的地方。 Chainer

直到CMU的DyNet和Facebook的PyTorch出現之前,Chainer是動態計算圖或網路的領先神經網路框架,它允許輸入數據長度不一致。chainer基本特性:

Chainer代碼是在Numpy和CuPy庫的基礎之上用純Python編寫的, Chainer是第一個使用動態架構模型的框架。

Chainer優點:

通過自己的基準測試,Chainer明顯比其他面向Python的框架更快,TensorFlow是包含MxNet和CNTK的測試組中最慢的。 比TensorFlow更好的GPU和GPU數據中心性能。最近Chainer成為GPU數據中心性能的全球冠軍。 DL4J

那些使用Java或Scala的人應該注意DL4J(Deep Learning for Java的簡稱)。DL4J的基本特性:

DL4J中的神經網路訓練通過簇的迭代並行計算。 該過程由Hadoop和Spark架構支持。 使用Java允許您在Android設備的程序開發周期中使用。

DL4J優點:

如果您正在尋找一個良好的Java深度學習框架,這會是一個非常好的平台。 ONNX

ONNX項目誕生於微軟和Facebook,旨在尋找深度學習模型呈現的開放格式。ONNX簡化了在人工智慧的不同工作方式之間傳遞模型的過程。因此ONNX具有各種深度學習框架的優點。

ONNX基本特性:

ONNX使模型能夠在一個框架中進行訓練並轉移到另一個框架中進行推理。ONNX模型目前在Caffe2,Microsoft Cognitive Toolkit,MXNet和PyTorch中得到支持,並且還有許多其他常見框架和庫的連接器。

ONNX優點:

對於PyTorch開發人員來說,ONNX是一個好的選擇。但是對於那些喜歡TensorFlow的人來說,Keras等可能好一點。 總結

那麼您應該使用哪種深度學習框架?下面是幾點建議:

如果你剛剛開始學習,那麼最好的選擇是Keras 。 出於研究目的,請選擇PyTorch 。 對於生產,您需要關注環境。因此對於Google Cloud,最好的選擇是TensorFlow ,適用於AWS - MXNet和Gluon 。 Android開發人員應該關注D4LJ ,對於iOS來說, Core ML會破壞類似的任務范圍。 最後, ONNX將幫助解決不同框架之間的交互問題。

7. 為什麼深度學習大勢超過傳統機器學習

人工智慧風靡一時!突然之間,每一個人,無論是否理解,都在談論它。人工智慧的發展趨勢似乎勢不可擋,但它真正歸結為兩個非常流行的概念:機器學習和深度學習。但最近,深度學習越來越受歡迎,因為它在用大量數據訓練時的准確性方面至高無上。

通常,由於大量的參數,深度學習演算法需要很長時間進行訓練。最受歡迎的ResNet演算法需要大約兩周的時間才能完全從頭開始訓練。傳統的機器學習演算法需要幾秒到幾個小時來訓練,這個場景在測試階段完全相反。在測試時,深度學習演算法花費的時間少得多。然而,如果將其與最近鄰演算法(一種機器學習演算法)進行比較,則測試時間會隨著數據大小的增加而增加。雖然這不適用於所有機器學習演算法,但其中一些演算法的測試時間也很短。

可解釋性是為什麼許多行業在深度學習中使用其他機器學習技術的主要問題。我們舉個例子吧,假設我們使用深度學習來計算文檔的相關性分數。它提供的性能非常好,接近人類的表現。但是有一個問題,它沒有揭示為什麼它給出了這個分數。事實上,你可以在數學上找出深層神經網路的哪些節點被激活,但我們不知道神經元應該建模什麼,以及這些神經元層共同做了什麼。所以我們不能解釋結果。這不是機器學習演算法,如決策樹,邏輯回歸等。

何時使用深度學習或不使用?

1.深度學習如果數據量很大,則執行其他技術。但由於數據量較小,傳統的機器學習演算法更為可取。

2.深度學習技術需要有高端基礎設施來在合理的時間內進行培訓。

3.當對特徵內省缺乏領域理解時,深度學習技術超越了其他領域,因為你不必擔心特徵工程。

4.深度學習在圖像分類、自然語言處理和語音識別等復雜問題方面真正發揮出色。

8. 如何看待中科院計算所的Cambricon-X稀疏深度學習處理器

在Google I/O 2016的主題演講進入尾聲時,Google提到了一項他們這段時間在AI和機器學習上取得的成果,一款叫做Tensor Processing Unit(張量處理單元)的處理器,簡稱TPU。

根據TPU團隊主要負責人介紹,TPU專為Google機器學習應用TensorFlow打造,能夠降低運算精度,在相同時間內處理更復雜、更強大的機器學習模型並將其更快地投入使用。Google數據中心早在一年前就開始使用TPU,其性能把摩爾絕缺定律往前推進到7年之後。之前打敗李世乭的AlphaGo就是採用了TPU做了運算加速。
根據Google所言,TPU只在特定應用中作為輔助使用,公司將繼續使用CPU和GPU。並且Google並沒有對外銷售TPU的打算。因此,TPU雖好,但僅限Google內部,而且即便使用TPU,也是用作輔助CPU和 GPU。
谷歌並沒有公布TPU是怎麼設計的,因此似乎很難對其一探究竟。不過,要知道谷歌的TPU並不是什麼黑科技,只不過是正常的一款專用加速晶元。而且,這也不是世界上第一款用來做深度學習的專用晶元。IBM和我國中科院其實都有類似成果。
IBM 在2014年研發出脈沖神經網路晶元TrueNorth,走的是「類腦計算」路線。類腦計算的假設是,相似的結構可能會出現相似的功能,所以假如用神經電子元件製造與人腦神經網路相似的電子神經網路,是否可能實現人腦功能呢?這其實有點像人類研究飛行器的過程。我們都知道鳥會飛是因為有翅膀,人沒有。所以假如給人也弄一對翅膀,人是不是也能飛?
早先人類其實有這么一個探索過程。如今人類要探索大腦,但是大腦何其復雜?IBM的這款晶元就是通過打造類腦的晶元架構,來期望得到大腦同樣的功能,就算達不到,能模擬一下也很有意義。大意如此,當然實際上復雜多了。目前這款晶元理念很超前,還處於深入研究階段,算得上是黑科技。
今天要重點講的其實是中科院的這款「寒武紀」晶元。2016年3月,中國科學院計算技術研究所發布了全球首個能夠「深度學習」的「神經網路」處理器晶元,名為「寒武紀」。該課題組負責人之一、中科院計算所陳天石博士透露,這項成果將於今年內正式投入產業化。在不久的未來,反欺詐的刷臉支付、圖片搜索等都將更加可靠、易用。下圖是「寒武紀」的晶元板卡。

之所以重點講,是因為Google的TPU晶元並沒有公開設計細節,連是誰代工的都沒有公開。但是沒攔同樣作為深度學習的晶元,有理由相信中科院的「寒武紀」與Google的TPU在設計理念上是相同的。在講這個之前,先簡單科普一下人工智慧和深度學習。
1981年的諾貝爾醫學獎,頒發給了David Hubel和Torsten Wiesel,以及Roger Sperry。前兩位的主要貢獻是,發現了人的視覺系統的信息處理是分級的。如下圖所示:從原始信號攝入開始(瞳孔攝入像素),接著做初步處理(大腦皮層某些細胞發現邊緣和方向),然後抽象(大腦判定眼前物體的形狀,比如是橢圓形的),然後進一步抽象(大腦枯宏胡進一步判定該物體是張人臉),最後識別眼前的這個人。

而深度學習(Deep Learning),恰恰就是模仿人腦的機制來解釋數據。通過組合低層特徵形成更加抽象的高層特徵(或屬性類別)。例如,在計算機視覺領域,深度學習演算法從原始圖像去學習得到一個低層次表達,例如邊緣檢測器、小波濾波器等,然後在這些低層次表達的基礎上,通過線性或者非線性組合,來獲得一個高層次的表達。此外,不僅圖像存在這個規律,聲音也是類似的。比如,研究人員從某個聲音庫中通過演算法自動發現了20種基本的聲音結構,其餘的聲音都可以由這20種基本結構來合成!
對於深度學習來說,其思想就是堆疊多個層,上一層的輸出作為下一層的輸入。深度神經網路由一個輸入層,數個隱層,以及一個輸出層構成。每層有若干個神經元,神經元之間有連接權重。每個神經元模擬人類的神經細胞,而結點之間的連接模擬神經細胞之間的連接。

當然了,以上這些原理都不是重點。我們只需要明白深度神經網路模擬了大腦的神經網路,上圖的每個圈圈都類似大腦的一個神經元。通過採用專用晶元進行神經元的運算加速,相比於採用CPU這種通用運算器,可以大大提高神經網路的性能。根據「寒武紀」晶元的介紹,它可以一條指令完成多個神經元的並行處理。據此推斷,Google的TPU很有可能也是這么設計的,也就是說,支持一條指令完成神經元的多次計算。
「寒武紀」專用處理器還有配套的指令集,叫Cambricon。我們知道,指令集乃是一個處理器架構的核心。知道了一款處理器實現了哪些指令,其實也就知道了這款處理器適合做什麼,也大概知道了這款處理器的硬體設計。

Cambricon指令集的特點是單指令可以做完一次向量或矩陣運算,因此假如我們知道了深度學習的具體演算法,那麼其實也就知道了每個神經元可以規約為何種向量或矩陣運算,其實也就推斷出了Cambricon的指令集。以此類推,如果我們知道了Google的深度學習演算法,假設也是每條指令實現多個神經元相關的向量或矩陣運算,那麼其實也能推斷出TPU的指令集。這種假設應該是很有道理的,畢竟把一個神經元的計算打包成一條指令,是非常科學合理的專用加速器設計方案。
可以看到,整個系統連接了兩塊圖像感測器,感測器採集到的圖像通過Camera Serial Interfaces(CSI)介面連接到Video pipeline處理單元,進行Bayer重建、白平衡、降噪、壓縮等等圖像處理。

而ShiDianNao則在該系統中進行深度學習的模式識別,它內部實現了一個深度神經網路,經訓練之後具有類似人類大腦一樣的識別能力,可以從圖像中識別出有一隻貓,然後將識別出「貓」的信息通過GPIO/I2C介面輸出給主機。整個系統用一款微處理器做控制,協調各個部件的運行。整個系統的數據存儲,使用了256KB的SRAM,為了節省功耗,並提高性能,並沒有使用DRAM。
下圖給出了ShiDianNao處理器的深度神經網路的架構。根據文獻介紹,NBin是輸入神經元的緩存,NBout是輸出神經元的緩存,SB是突觸的緩存。核心部件是NFU(neural functional unit)單元,它負責實現一個神經元的功能。ALU是數值運算單元,IB(decoder forinstructions)是指令解碼器。

之前講過,深度神經網路加速晶元的最大特點就是單指令可以完成多個神經元的計算。因此神經元計算單元的實現,就是這款加速晶元的核心。根據文獻介紹,每個NFU又是一個陣列,包含一堆PE單元。每個NFU單元實現了16bit x 16bit的定點整數乘法,相比於浮點乘法,這會損失一部分運算精度,但是這種損失可以忽略不計。

由此,我們就自上而下的看完了整個ShiDianNao的架構設計。由於Google並沒有公布TPU的設計,中科院和寒武紀公司亦沒有公開商用的寒武紀晶元的具體架構,因此我們只能大概根據中科院前些年與法國和瑞士的合作者在學術界公開發表的ShiDianNao架構進行推斷(我們假設寒武紀商用晶元和前些年的學術工作ShiDianNao在架構上有一脈相承之處,畢竟中科院計算所陳天石團隊的成員都是主要架構師或論文的第一作者)。

根據ShiDianNao架構的論文描述,結合之前的論述,我們可以大致得出以下猜測:
(1)Google的TPU很有可能也是單指令完成多個神經元的計算。

(2)知道了Google的機器學習演算法,就可以推斷出TPU支持的指令集。

(3)根據Google對TPU的描述「能夠降低運算精度」,猜測TPU內部可能也是採用更低位寬的定點或浮點乘法,雖然具體位寬未知。

(4)乘累加單元搭建的向量或矩陣指令仍然是基礎運算的核心。

(5)Google強調TPU有領先7年的性能功耗比(十倍以上的提升),據此猜測,TPU可能也沒有使用DRAM做存儲,可能仍然使用SRAM來存儲數據。但從性能功耗比提升量級上看,還遠未達到專用處理器的提升上限,因此很可能本質上採用的是數據位寬更低的類GPU架構,可能還是具有較強的通用性。

9. 如何評價Google發布的第二代深度學習系統TensorFlow

google頭一次讓人莫名地失望, 總覺得有些華而不實, 或搞了噱頭但有意地抽掉關鍵功能
這里跟另一個我用的框架比較 deeplearning4j 及其分開的數值庫 nd4j 也是支持張量的

1. 雖然已實作的網路種類很廣, 但不少都是那種只要框架本身架構好些, 就挺容易自行擴展實現的, 對任何有自行編程擴展能力的人來說, 這不能算是個好處. 因為深度學習架構日新月異, 更重要的是實作新架構的彈性, 這點tensorflow目前略勝, 用Java還是有點痛苦的. 但若是用其他支持設計DSL的JVM語言如Scala或Groovy等, 也是大有可為. 已經有人用Scala或Groovy的DSL搞出一個Dataflow或甚至reactive的範式用於界面設計, 雖還沒人用在深度學習架構上, 但這只是有沒人要做的問題. python C++ 不支持DSL, 沒辦法自然地嵌入其他範式, 硬做成dataflow還是有些難看的

2. 暫時不支持分布式, 不知道要等到猴年馬月才會釋出, 說不定根本不會釋出, 用了說不定就被Google服務給綁架了, 說綁架是情緒化些, 但這確實是Google常用的商業模式, 用所謂的開源軟體搭配閉源且很關鍵的服務. 現在應用場景的數量級一個比一個大, 沒分布式只能玩玩具. 但此時已經有兩個用java寫的框架支持分布式, 似無必要作此賭注. 其中一個是我沒用過的SINGA, 及我用的 deeplearning4j

3. deeplearning4j 後端可抽換, 有 spark 後端支持分布式, 還有更輕量的 Akka 分布式後端, 另外Spark後端支持在每台主機上用Cuda加速, 甚至還貌似很容易的加上了有zookeeper跟這個我不知道是什麽的分布式後端, 若第1點講的是語言界面前端的彈性, 這第3點就是講後端的彈性了, 兩端的可攜性都強到一定境界. 若是Tensorflow也要增加新後端, 恐怕是到處都在定義 Protocolbuf, 這點 另 Tensorflow 相形見絀

4. Tensorflow把能在其他cpu架構隱蠢上跑當作賣點, 但很不巧 deeplearning4j 選上寬銀了JVM, 不用什麽調整就能在手機上跑慎攜宴, 只要你用不依賴原生函式庫的純Java後端像是JBlas

閱讀全文

與google深度學習演算法相關的資料

熱點內容
軟通動力程序員節2021 瀏覽:845
安卓系統如何卸載安裝包 瀏覽:870
簡訊刪除助手文件夾 瀏覽:688
java辦公自動化 瀏覽:340
php中超鏈接 瀏覽:253
linux默認路由設置 瀏覽:36
linux如何掛載iso 瀏覽:432
vs程序換文件夾後不能編譯 瀏覽:557
安卓源碼編譯輸入腳本沒反應 瀏覽:47
phpmysql自增 瀏覽:167
把ppt保存為pdf 瀏覽:533
汽車密封件加密配件 瀏覽:887
黑馬程序員15天基礎班 瀏覽:560
java調整格式 瀏覽:521
香港雲伺服器租用價 瀏覽:78
linuxsublime3 瀏覽:560
imac混合硬碟命令 瀏覽:278
沈陽用什麼app租房車 瀏覽:857
00後高中生都用什麼app 瀏覽:239
戴爾塔式伺服器怎麼打開獨立顯卡 瀏覽:808