一文弄清深度學習、TensorFlow和張量之間的關係

2020-11-29 搜狐網

原標題:一文弄清深度學習、TensorFlow和張量之間的關係

圖:pixabay

「機器人圈導覽」關於深度學習系統,大家或多或少都有一些了解,可是你知道嗎?我們今天所用的許多深度學習系統都是基於張量代數的,比如谷歌的TensorFlow,但是張量代數與深度學習的關係到底如何?本文作者是Ted Dunning,MapR Technologies的首席應用架構師,機器人圈將文章編譯如下:

張量(Tensors)和諸如TensorFlow這樣的機器學習新工具都是當代的熱門話題,特別是在那些尋求深度學習方法的人之中,這都是非常受歡迎的。結果就是,當你瀏覽熱詞時,你會發現,真的有一些基礎強大的、有用的並且可用的方法,它們能夠充分利用張量所能提供的,而這不僅僅是針對深度學習而言的。這就是為什麼張量為什麼那麼受歡迎。

如果說計算也是有傳統特點的話,那麼使用線性代數的數值計算就是最受歡迎的計算之一了。像LINPACK測試以及後來的種種LAPACK軟體包,在現在看來都是很古老的了,但它們的功能還是很強大的。那麼,其核心是,線性代數是由相當簡單和非常有規律可循的操作組成的,包括對一維和二維數字數組(在本文中通常稱之為向量和矩陣)的重複乘法和加法運算,並且它是極其普遍的,許多問題都可以通過線性方法求解或近似。這些範圍涵蓋的領域非常廣闊,從計算機遊戲中圖像的渲染到核武器的設計,以及這些極端之間的其他大範圍的應用都是可以利用線性代數來進行運算的。

關鍵線性代數運算

線性代數在計算機上可實現的完全基本操作是兩個向量的點積。這個乘積只是兩個向量中相應元素的乘積之和。矩陣和向量的(左)乘積可以被視為具有向量的矩陣行的重複點積,並且兩個矩陣的乘積可以被視為矩陣的矩陣向量積和另一個矩陣的列的組合。通過單個值對所有元素進行逐元素加法和乘法,這些操作可以建立所有必需的線性代數機器。

部分原因是它們的規律性,以及它們可以通過大量的並行性操作得以實現,所以計算機可以以極高的速度評估使用線性代數編寫的程序。就原始潛力表現方面來說,從Cray-1計算機系統到今天的GPU的演進,其表現能力已經顯示出超過3萬次的改進,而當你考慮具有大量GPU的集群時,其性能潛力大概是百萬次,而這曾經是地球上最快的計算機,其成本只是總成本的一小部分

然而,歷史模式已經宣誓了一切,那就是我們必須向越來越高的抽象層次邁進,以便更好地利用新的處理器。Cray-1及其面向向量的後來者需要重寫程序以使用向量操作(如點積),從而實現全面的性能。而後來的機器已經要求在矩陣向量運算或甚至矩陣—矩陣運算方面來形成算法,以推動硬體以其最大的潛力運行。

而我們現在剛好處在門檻位置。不同之處在於,除了矩陣—矩陣運算之外,沒有其他方面可以著手進行。也就是說,使用線性代數沒有任何其他好途徑。

但是我們也不必把自己局限在線性代數中。事實證明,我們是可以提高數學食物鏈的。長期以來,在數學抽象的海洋中有比矩陣更大的「魚」存在的。而張量就是這樣一位可以肩此重任的候選人。張量在廣義相對論的數學基礎中佔據突出地位,同時它也是其他物理學科的基礎。但正如矩陣和向量的數學概念可以簡化為我們在計算機中使用的陣列一樣,張量也可以被簡化並表示為多維數組和一些相關的操作。不幸的是,事情並沒有想像中容易,它並不像矩陣和向量那樣簡單,主要是因為沒有一個明顯且簡單的操作集可以在張量執行,就像在矩陣和向量上那樣執行。

雖然如此,不過還是有一些真正的好消息的。即使我們不能在張量上只寫幾個操作,我們可以寫出一組在張量上的操作模式。然而,這還不夠,因為根據這些模式編寫的程序在寫入時無法按照預期目標有效執行。其餘的好消息是,雖然我們低效,但易於編寫一些程序,這些程序可以(幾乎)自動轉換到執行得非常有效的程序中去。

更好的是,這種轉換是可以輕鬆實現的,因此不必再建立另一種新的計算機語言。所做的就像是惡作劇一樣:在TensorFlow中,當我們編寫如下代碼時:

真正發生的是,構建了一個如下圖所示的數據結構:

上述代碼被轉換為可重構並轉換為機器可執行形式的數據結構。將代碼轉換為用戶可見的數據結構允許我們編寫的程序被重寫以便更有效的執行或允許計算導數,從而可以使用高級優化器。

這個數據結構實際上並沒有在我們上面提到的程序中執行。因此,在我們實際嘗試運行之前,TensorFlow有可能將數據結構重寫成更高效的代碼。這可能涉及到,我們認為的,要求電腦做的事情的小型或大型的結構化。它還可能涉及生成我們正在使用的機器的CPU的、或者我們正使用的集群的,或者我們已備好的任何GPU的實際可執行代碼。

這個很酷的事情就是,我們可以編寫非常簡單的程序能夠得到非常驚奇的結果。

但這僅僅是個開始。

做一些有用的東西(但要與眾不同)

TensorFlow和系統類似之處在於,它們都是關於採用描述機器學習架構(如深度神經網絡)的程序,並調整該架構的參數從而最小化某種誤差值。它們不僅通過創建代表我們的程序的數據結構來實現,而且還產生一個數據結構,表示相對於我們模型的所有參數的誤差值的梯度。而具有這樣的梯度函數使得優化變得更加容易。

你可以使用TensorFlow也可以使用Caffe,或者使用其他任何具有基本相同效果的系統編寫程序,但是你編寫的程序不需要優化機器學習功能。你可以編寫優化各種程序的程序,如果你編寫的程序使用的是你選擇的程序包提供的張量符號。自動差異化和最先進的優化器以及彙編到高效的GPU代碼仍然會對你有所幫助。

作為一個簡易有效的示例,下圖顯示了家庭能源使用情況的簡單模型。

家庭(圓圈)使用的日常能源作為水平軸上溫度函數圖。能源使用的分段線性模型已經疊加在使用數據上。模型的參數通常是一個矩陣,但是當我們談論一百萬個模型時,我們可以使用張量。

這個圖表顯示了一個家庭的能源消耗和一個用量消耗模型。要得到一個單一的模型不是什麼大不了的事情,但是要找到這個模型,我必須編寫一些真正的代碼,然後該代碼必須運行在數以百萬計的家庭中以獲取每個模型。使用TensorFlow,我們可以立即為所有房屋創建模型,我們可以使用比我原來使用的更高效的優化器來獲取此模型。結果是一萬個模型被一次性優化,效率高於我原來的程序。理論上來說,我可以手工優化我的代碼,並且可以手工導出一個派生函數,但是這麼做需要時間,更重要的是,調試結果所需的時間使我在做模型時不可能完成。

這樣的示例顯示了基於張量的計算系統,如TensorFlow(或Caffe或Theano或Mxnet或任何你最喜歡的)是如何用於與深度學習非常不同的優化問題中的。

最好的機器學習軟體(對你來說)最好是根本不要使用機器學習。

編譯自:KDnuggets Home

作者:Ted Dunning,MapR Technologies的首席應用架構師。目前擔任Apache基金會董事會成員,擔任大量項目的導師。他開發了用於估計極限分位數的t-digest算法。

文章做了不改變原意的修改返回搜狐,查看更多

責任編輯:

相關焦點

  • 深度學習的敲門磚:手把手教你TensorFlow初級入門
    向AI轉型的程式設計師都關注了這個號👇👇👇        人工智慧大數據與深度學習例如求解線性方程或計算兩個向量之間的距離。 當你安裝TensorFlow類庫的同時,其中還包括了非常知名的NumPy類庫,對Python編程中的數學操作非常有用。用Python編程時,不使用類庫(例如NumPy和TensorFlow)就像使用沒有自動對焦的相機:你雖然獲得了更多的靈活性,但你可能很容易犯錯。
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    那麼究竟哪種框架最適宜自己手邊的深度學習項目呢?本文作者從這兩種框架各自的功能效果、優缺點以及安裝、版本更新等諸多方面給出了自己的建議。如果你在讀這篇文章,那麼你可能已經開始了自己的深度學習之旅。如果你對這一領域還不是很熟悉,那麼簡單來說,深度學習使用了「人工神經網絡」,這是一種類似大腦的特殊架構,這個領域的發展目標是開發出能解決真實世界問題的類人計算機。
  • TensorFlow 攜手 NVIDIA,使用 TensorRT 優化 TensorFlow Serving...
    TensorFlow Serving 是應用於機器學習模型的靈活的高性能服務系統,而 NVIDIA TensorRT 則是一個用以實現高性能深度學習推理的平臺,將二者相結合後,用戶可以輕鬆地實現最佳性能的 GPU 推理。
  • 最熱門的深度學習框架TensorFlow入門必備書籍
    但進入機器學習和人工智慧領域並不是一件簡單的事情,目前市場上有許多大量的學習資源,許多開發者和想要進入的愛好者往往很難找到適合自己的發展路徑。其實,早在 2015 年底,谷歌就開源了內部使用的深度學習框架 TensorFlow 。眾多研究表明,Tensorflow 是研究深度學習的首選平臺。
  • tensorflow初級必學算子
    在之前的文章中介紹過,tensorflow框架的核心是將各式各樣的神經網絡抽象為一個有向無環圖,圖是由tensor以及tensor變換構成;雖然現在有很多高階API可以讓開發者忽略這層抽象,但對於靈活度要求比較高的算法仍然需要開發者自定義網絡圖,所以建議開發者儘量先學習tf1.x
  • 深度解讀TensorFlow,了解它的最新發展!
    Tensorboard是tensorflow內置的一個可視化工具,它通過將tensorflow程序輸出的日誌文件的信息可視化,使得tensorflow程序的理解、調試和優化更加簡單高效。Tensorboard的可視化依賴於tensorflow程序運行輸出的日誌文件,因而tensorboard和tensorflow程序在不同的進程中運行。
  • 5個簡單的步驟掌握Tensorflow的Tensor
    在這篇文章中,我們將深入研究Tensorflow Tensor的細節。我們將在以下五個簡單步驟中介紹與Tensorflow的Tensor中相關的所有主題:第一步:張量的定義→什麼是張量?我們經常將NumPy與TensorFlow一起使用,因此我們還可以使用以下行導入NumPy:import tensorflow as tfimport numpy as np張量的創建:創建張量對象有幾種方法可以創建tf.Tensor對象。讓我們從幾個例子開始。
  • 從框架優缺點說起,這是一份TensorFlow入門極簡教程
    隨著 TensorFLow 在研究及產品中的應用日益廣泛,很多開發者及研究者都希望能深入學習這一深度學習框架。而在昨天機器之心發起的框架投票中,2144 位參與者中有 1441 位都在使用 TensorFlow 框架,是所有框架中使用率最高的。但 TensorFLow 這種靜態計算圖有一定的學習成本,因此也阻擋了很多初學者入坑。
  • 作為TensorFlow的底層語言,你會用C++構建深度神經網絡嗎?
    很多人都知道 TensorFlow 的核心是構建在 C++之上的,但是這種深度學習框架的大多數功能只在 Python API 上才方便使用。當我寫上一篇文章的時候,我的目標是僅使用 TensorFlow 中的 C++ API 和 CuDNN 來實現基本的深度神經網絡(DNN)。在實踐中,我意識到在這個過程中我們忽略了很多東西。
  • 深度學習筆記8:利用Tensorflow搭建神經網絡
    作者:魯偉 一個數據科學踐行者的學習日記。
  • 玩轉TensorFlow?你需要知道這30功能
    ,它是 Google 開源的一款人工智慧學習系統。網址:https://www.tensorflow.org/guide/keras12)Tensor2TensorTensor2Tensor 是一個深度學習模型和數據集的開源軟體庫
  • TensorFlow極簡教程:創建、保存和恢復機器學習模型
    使用梯度下降(gradient descent)確定最適合數據的線的斜率和 y 截距的值。如果你不知道梯度下降,請查看維基百科:https://en.wikipedia.org/wiki/Gradient_descent創建所需的變量後,數據和線之間的誤差是可以被定義(計算)的。定義的誤差被嵌入到優化器(optimizer)中。
  • TensorFlow入門簡介,新手請看這裡!
    TensorFlow是跨平臺的,它幾乎可以運行在所有平臺上,比如GPU、CPU、移動和嵌入式平臺,甚至是張量處理單元[Tensor Processing Units (TPUs)]。谷歌推出過一款AlphaGo人工智慧圍棋程序,其工作原理就是基於「深度學習」,並且是第一個擊敗人類職業選手的人工智慧程序。
  • 教程| 如何用TensorFlow在安卓設備上實現深度學習推斷
    本文詳細介紹了部署和實現過程。對於個人和公司來說,存在許多狀況是更希望在本地設備上做深度學習推斷的:想像一下當你在旅行途中沒有可靠的網際網路連結時,或是要處理傳輸數據到雲服務的隱私問題和延遲問題時。邊緣計算(Edge computing)是一種在物理上靠近數據生成的位置從而對數據進行處理和分析的方法,為解決這些問題提供了方案。
  • 在Windows中安裝Tensorflow和Kears深度學習框架
    在命令提示符窗口輸入下列命令: 建立Tensorflow Anaconda虛擬環境 conda create --name tensorflow python=3.5 anaconda 執行後屏界面顯示如圖3-9所示。
  • TensorFlow極速入門
    作者孟曉龍,2016年加入Qunar,目前在去哪兒網機票事業部擔任算法工程師。熱衷於深度學習技術的探索,對新事物有著強烈的好奇心。一、前言目前,深度學習已經廣泛應用於各個領域,比如圖像識別,圖形定位與檢測,語音識別,機器翻譯等等,對於這個神奇的領域,很多童鞋想要一探究竟,這裡拋磚引玉的簡單介紹下最火的深度學習開源框架 tensorflow。
  • python應用之基於tensorflow的數據擬合:深度學習之預測入門篇
    實驗目的:1、了解python在深度學習領域的應用2、學習安裝python第三方依賴庫實驗環境:已正確安裝python3.5以及依賴庫tensorflow、matplotlib預測過程展示:1、應用領域python是一種高級面向對象的動態類型語言,具有開發高效,學習簡單的特點,主要應用於大數據、深度學習、
  • 最簡單的深度學習TensorFlow應用舉例!
    小編我的電腦很一般,沒有32G內存,也沒有1080,就windows上直接裝了23333windows+python 3.6+pycharm+tensorflow cpu話不多說,直接線性回歸,上圖。代碼截圖#接下來貼代碼#辰星樹洞import numpy as np #這是Python的一種開源的數值計算擴展,非常強大import tensorflow
  • TensorFlow 資源大全中文版
    (點擊上方藍字,快速關注我們)譯文:伯樂在線專欄作者 - Yalye英文:jtoy如有好文章投稿
  • 深度學習基礎:張量運算
    字幕組雙語原文:深度學習基礎:張量運算英語原文:Tensor Operations — Basic Building Blocks of Deep Learning翻譯:雷鋒字幕組(大表哥、Shangru)2012-至今:深度學習爆炸時代在2012年的Imagenet運動之後,深度學習取得了突飛猛進的發展。