Tensorflow中流動的tensor究竟是什麼?
本公眾號以技術性、原創性為特色,已推送的原創文章(部分):
...
Tensorflow、以及最近Google公布的面向深度學習的TPU(tensor processing unit)處理器,都離不開一個名詞,即tensor,似乎它代表著一種技術方向。tensor,即張量,並非新概念,然而對張量的一系列運算,特別是張量分解確實是逐漸成為大家關注的焦點。
1、什麼是張量
關於tensor,各行業有不同角度和不同看法。在計算機科學中,為了方便把N維數組都統稱tensor,即N階張量。
當N=0,0階張量是標量,即單個數值,稱scalar(標量)。
當N=1,1階張量就是一維數組,稱為Vector(向量);
當N=2,2階張量就是二維數組,稱為Matrix(矩陣);
當N=3,3階張量就是三維數組;三維及以上簡稱張量;
(來自網路)
顯然,張量可以表示高維數據,時間序列、圖像、視頻、文本以及社交媒體信息都是典型的張量數據。目前我們用向量空間表示文本時實際上廣泛採用向量形式,這種表示方法簡單,但是無法區分標題、文章不同段落上的辭彙。張量表示法可以解決這個問題,例如用一個N維數組,文本、標題、段落1、段落2...構成了一個多維數組。因此,張量自身具有一定的結構。
2、張量分解
我們知道對於給定的矩陣,有多種矩陣分解(MF)演算法,例如SVD、NMF等等。以下SVD分解的例子,通過保留對角矩陣中少數的元素,可以實現樣本空間的降維,也就是相當於把樣本表示在一個低維空間中,因此通常用於特徵提取。
這種優良的性質自然也希望拓展到張量中,對張量進行類似的分解,以期獲得樣本新的表示方法。張量的分解比矩陣分解要難得多,也有很多種分解方法。目前主要的方法有:、CANDECOMP/PARAFAC (CP分解) 、Tucker分解。最近幾年也發展出一些新的張量分解方法,比如TT/QTT: Tensor Train Decomposition,Quantics Tensor Train Decomposition、 Tensor Network等。
張量分解主要的任務是對張量進行降,轉化為矩陣。在張量的矩陣展開過程中,是對組成張量的所有階按交錯次序採樣,實現了張量不同階特徵值之間的傳遞和融合,因此能提取不同維度上潛在因子,進行特徵提取。
Tucker分解將一個張量分解成一個核心(core)張量C和各維因子矩陣Ui的乘積,其中C是對角的,Ui是正交的,和SVD很像。
(來自網路)
雖然Tucker分解比較靈活,但是結果矩陣的物理含義並不明確(和SVD一樣),同時對於同一個張量,Tucker分解的結果並不唯一。因此,更有效的方法是採用CP分解。CP是Tucker分解的一種特殊形式,它將一個張量表示成有限個秩一張量之和,CP分解的結果是唯一的。
(來自網路)
不管是Tucker、還是CP分解,都可以在分解後的矩陣中得到樣本新的表示,當然也是一個高維空間表示,不過已經不是原來的特徵空間了。
3、張量分解的工具
目前主要有matlab下的tensor toolbox;Python中的PyTensor、Tensorly《TensorLy: Tensor Learning in Python》,框架包含有最經典的CP分解和Tucker分解。
作者編著的《互聯網大數據處理技術與應用》專著(清華大學出版社,2017)、同名公眾號,專註於大數據技術的相關科學和工程知識傳播,同時也為讀者提供一些拓展閱讀材料。關注後可閱讀以前推送的原創文章。歡迎選用本書做大數據相關的教材,有相關教學資源共享。

