Skip to content
Rain Hu's Workspace
Go back

[AI] 2-2. 張量 Tensor

Rain Hu

張量 Tensor 是神經網路的資料表示法。 在 Python,我們常用 NumPy 陣列來作為機器學習的基礎資料結構,說 NumPy 陣列也稱為張量。

張量的維、階、軸

1. 純量 (0D 張量)

純量是單一個數值,也稱為 0 維張量 (0D Tensor)

x = 5

2. 向量 (1D 張量)

向量是包含單一軸的數列,也稱為 1 維張量 (1D Tensor)

x = [1, 2, 3]

3. 矩陣 (2D 張量)

矩陣是二維的數據結構,也稱為 2 維張量 (2D Tensor)

x = [[1, 2, 3],
     [4, 5, 6]]

4. 3D 張量與高階張量

x = [[[1, 2, 3], 
      [4, 5, 6], 
      [7, 8, 9]],

     [[10, 11, 12], 
      [13, 14, 15], 
      [16, 17, 18]]]

5. 張量的屬性

張量擁有幾個關鍵屬性,用於描述其結構與內容:

  1. 軸 (Axes) 或 ndim
    張量的軸數量,也就是維度的數量。
    • 純量的軸為 0,向量為 1,矩陣為 2,依此類推。
  2. 形狀 (Shape)
    每個軸的元素數量,形狀用 tuple 表示。
    • 範例:矩陣 [[1, 2, 3], [4, 5, 6]] 的 shape 為 (2, 3)。
  3. 數據類型 (dtype) 張量中元素的資料類型,例如 float32、int32。
    • 範例:x = np.array([1, 2, 3], dtype=np.float32)。

6. batch 的概念

在深度學習中,為了加速訓練過程,通常將多筆資料合併為一個批次 (Batch),作為張量的第一維度。例如:

一個批次包含 32 張圖片 (每張圖片為 28x28 像素): shape = (32, 28, 28) 批次的概念允許高效處理資料,特別是在 GPU 上。

7. 張量運算

keras.layers.Dense(512, activation='relu) 的概念可以比擬成:

1. 平移(Translation)

平移是一種將空間中的點沿特定方向移動的操作。
在幾何上,平移不是線性運算,需要用齊次座標表示。
假設平移向量為 \(\mathbf{t} = \begin{bmatrix} t_x \\ t_y \end{bmatrix}\),則點 \(\mathbf{p} = \begin{bmatrix} x \\ y \end{bmatrix}\) 被平移後的位置為:

p=p+t=[xy]+[txty]=[x+txy+ty] \mathbf{p}' = \mathbf{p} + \mathbf{t} = \begin{bmatrix} x\\\\ y \end{bmatrix} + \begin{bmatrix} t_x\\\\ t_y \end{bmatrix} = \begin{bmatrix} x + t_x \\\\ y + t_y \end{bmatrix}

在齊次座標中,可以用矩陣形式表示為:

[xy1]=[10tx01ty001].[xy1] \begin{bmatrix} x' \\\\ y' \\\\ 1 \end{bmatrix} = \begin{bmatrix} 1 & 0 & t_x \\\\ 0 & 1 & t_y \\\\ 0 & 0 & 1 \end{bmatrix} . \begin{bmatrix} x \\\\ y \\\\ 1 \end{bmatrix}

2. 旋轉 (Rotation)

旋轉是將點繞某個固定點(通常是原點)旋轉一個角度的操作。
旋轉矩陣(以逆時針旋轉角度 \(\theta\) ) 為:

R=[cosθsinθsinθcosθ] \mathbf{R} = \begin{bmatrix} \cos\theta & -\sin\theta \\\\ \sin\theta & \cos\theta \end{bmatrix}

對於 對於點 \(\mathbf{p} = \begin{bmatrix} x \\ y \end{bmatrix}\),旋轉後的位置為:

p=Rp=[cosθsinθsinθcosθ].[xy] \mathbf{p}' = \mathbf{R} \cdot \mathbf{p} = \begin{bmatrix} \cos\theta & -\sin\theta \\\\ \sin\theta & \cos\theta \end{bmatrix} . \begin{bmatrix} x \\\\ y \end{bmatrix}

在齊次座標中表示為:

[xy1]=[cosθsinθ0sinθcosθ0001].[xy1] \begin{bmatrix} x' \\\\ y' \\\\ 1 \end{bmatrix} = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\\\ \sin\theta & \cos\theta & 0 \\\\ 0 & 0 & 1 \end{bmatrix} . \begin{bmatrix} x \\\\ y \\\\ 1 \end{bmatrix}

3. 縮放 (Scaling)

縮放改變點的大小,可以分別對 \(x\) 和 \(y\) 軸進行不同比例的縮放。

縮放矩陣為:

S=[sx00sy] \mathbf{S} = \begin{bmatrix} s_x & 0 \\\\ 0 & s_y \end{bmatrix}

對於點 \(\mathbf{p} = \begin{bmatrix} x \\ y \end{bmatrix}\),縮放後的位置為:

p=Sp=[sx00sy].[xy] \mathbf{p}' = \mathbf{S} \cdot \mathbf{p} = \begin{bmatrix} s_x & 0 \\\\ 0 & s_y \end{bmatrix} . \begin{bmatrix} x \\\\ y \end{bmatrix}

在齊次座標中表示為:

[xy1]=[sx000sy0001].[xy1] \begin{bmatrix} x' \\\\ y' \\\\ 1 \end{bmatrix} = \begin{bmatrix} s_x & 0 & 0 \\\\ 0 & s_y & 0 \\\\ 0 & 0 & 1 \end{bmatrix} . \begin{bmatrix} x \\\\ y \\\\ 1 \end{bmatrix}

4. 線性變換 (Linear Transformation)

線性變換是縮放、旋轉或剪切等操作的統稱,可以用矩陣表示。
一般的線性變換矩陣為:

A=[a11a12a21a22] \mathbf{A} = \begin{bmatrix} a_{11} & a_{12} \\\\ a_{21} & a_{22} \end{bmatrix}

對於點 \(\mathbf{p} = \begin{bmatrix} x \\ y \end{bmatrix}\),線性變換後的位置為:

p=Ap=[a11a12a21a22].[xy] \mathbf{p}' = \mathbf{A} \cdot \mathbf{p} = \begin{bmatrix} a_{11} & a_{12} \\\\ a_{21} & a_{22} \end{bmatrix} . \begin{bmatrix} x \\\\ y \end{bmatrix}

在齊次座標中:

[xy1]=[a11a120a21a220001].[xy1] \begin{bmatrix} x' \\\\ y' \\\\ 1 \end{bmatrix} = \begin{bmatrix} a_{11} & a_{12} & 0 \\\\ a_{21} & a_{22} & 0 \\\\ 0 & 0 & 1 \end{bmatrix} . \begin{bmatrix} x \\\\ y \\\\ 1 \end{bmatrix}

5. 仿射變換 (Affine Transformation)

仿射變換是線性變換加上平移的組合。
在齊次座標中,仿射變換可表示為:

T=[a11a12txa21a22ty001] \mathbf{T} = \begin{bmatrix} a_{11} & a_{12} & t_x \\\\ a_{21} & a_{22} & t_y \\\\ 0 & 0 & 1 \end{bmatrix}

對於點 \(\mathbf{p} = \begin{bmatrix} x \\ y \end{bmatrix}\),仿射變換後的位置為:

[xy1]=[a11a12txa21a22ty001].[xy1] \begin{bmatrix} x' \\\\ y' \\\\ 1 \end{bmatrix} = \begin{bmatrix} a_{11} & a_{12} & t_x \\\\ a_{21} & a_{22} & t_y \\\\ 0 & 0 & 1 \end{bmatrix} . \begin{bmatrix} x \\\\ y \\\\ 1 \end{bmatrix} y1=W1x+b1y2=W2y1+b2 \begin{align*} y_1 &= W_1 \cdot x + b_1 \\\\ y_2 &= W_2 \cdot y_1 + b_2 \end{align*}

將 \(y_1\) 代入 \(y_2\) 的公式:

y2=W2(W1x+b1)+b2y2=W2W1x+W2b1+b2 \begin{align*} y_2 &= W_2 \cdot (W_1 \cdot x + b_1) + b_2 \\\\ y_2 &= W_2 \cdot W_1 \cdot x + W_2 \cdot b_1 + b_2 \end{align*}

設 \(W = W_2 \cdot W_1\) 和 \(b = W_2 \cdot b_1 + b_2\),則:

y2=Wx+b y_2 = W \cdot x + b

Share this post on:

Previous
[AI] 2-3. 優化器 Optimizer
Next
[AI] 2-1. 初試神經網路-手寫辨識 mnist