深度學習基礎
神經網絡的數學基礎
神經網絡的“齒輪”:張量運算
張量變形
-
第三個重要的張量運算是張量變形(tensor reshaping)。張量變形是指改變張量的行和列,以得到想要的形狀。變形後的張量的元素總個數與初始張量相同。
>>> x = np.array([[0., 1.], [2., 3.], [4., 5.]]) >>> print(x.shape) (3, 2) >>> x = x.reshape((6, 1)) >>> x array([[ 0.], [ 1.], [ 2.], [ 3.], [ 4.], [ 5.]]) >>> x = x.reshape((2, 3)) >>> x array([[ 0., 1., 2.], [ 3., 4., 5.]])
-
經常遇到的一種特殊的張量變形是轉置(transposition)。對矩陣做轉置是指將行和列互換,使 x[i, :] 變爲 x[:, i]。
>>> x = np.zeros((300, 20)) # 創建一個形狀爲 (300, 20) 的零矩陣 >>> x = np.transpose(x) >>> print(x.shape) (20, 300)
張量運算的幾何解釋
-
對於張量運算所操作的張量,其元素可以被解釋爲某種幾何空間內點的座標,因此所有的張量運算都有幾何解釋。
-
通常來說,仿射變換、旋轉、縮放等基本的幾何操作都可以表示爲張量運算。舉個例子,要將一個二維向量旋轉 theta 角,可以通過與一個2×2矩陣做點積來實現,這個矩陣爲 R = [u, v],其中 u 和 v 都是平面向量:u = [cos(theta), sin(theta)],v = [-sin(theta), cos(theta)]。
深度學習的幾何解釋
-
神經網絡完全由一系列張量運算組成,而這些張量運算都只是輸入數據的幾何變換。 因此,你可以將神經網絡解釋爲高維空間中非常複雜的幾何變換,這種變換可以通過許多簡單的步驟來實現。
-
機器學習的內容:爲複雜的、高度摺疊的數據流形找到簡潔的表示。
-
深度學習特別擅長這一點:它將複雜的幾何變換逐步分解爲一長串基本的幾何變換,深度網絡的每一層都通過變換使數據解開一點點,許多層堆疊在一起,可以實現非常複雜的解開過程。