Table of Content

Important

Tham khảo

I. Vector and Matrix

System of Linear Equations

Hệ phương trình tuyến tính mô tả mối quan hệ giữa đặc trưng (Features) và nhãn (Label) thông qua một mô hình tuyến tính. Trong ví dụ này, chúng ta dự đoán Sales dựa trên chi phí quảng cáo ở các kênh TV, Radio, và Newspaper. Mô hình tuyến tính Phương trình tổng quát: Trong đó:

  • a₁, a₂, a₃: hệ số ảnh hưởng của từng kênh quảng cáo
  • b: hằng số (intercept), ở đây giả sử b = 0 để đơn giản hóa Bảng dữ liệu mẫu: |TV|Radio|Newspaper|Sales| |---|---|---|---| |230.1|37.8|69.2|22.1| |44.5|39.3|45.1|10.4| |17.2|45.9|69.3|12.0| Dạng hệ phương trình Từ dữ liệu, ta có hệ: a₁T₁ + a₂R₁ + a₃N₁ = S₁ a₁T₂ + a₂R₂ + a₃N₂ = S₂ a₁T₃ + a₂R₃ + a₃N₃ = S₃ Trong đó:
  • Tᵢ: giá trị quảng cáo TV ở dòng i
  • Rᵢ: giá trị quảng cáo Radio ở dòng i
  • Nᵢ: giá trị quảng cáo Newspaper ở dòng i
  • Sᵢ: doanh số (Sales) ở dòng i

Biểu diễn ma trận Hệ trên được viết gọn lại: a₁[T₁, T₂, T₃]ᵀ + a₂[R₁, R₂, R₃]ᵀ + a₃[N₁, N₂, N₃]ᵀ = [S₁, S₂, S₃]ᵀ Hoặc: A · x = b Với:

  • A = ma trận đặc trưng

  • x = vector hệ số

  • b = vector kết quả [S₁, S₂, S₃]ᵀ image 57.png ⇒ Việc viết dưới dạng ma trận giúp ta có thể giải hệ nhanh bằng các phương pháp đại số tuyến tính (nghịch đảo ma trận, phương pháp khử Gauss, hoặc dùng NumPy).

Các cách giải

  1. Phương pháp Cramer

    Áp dụng cho hệ có số phương trình = số ẩn , ma trận khả nghịch.

    Công thức:

    • : ma trận thay cột thứ của bằng vector .
    • Thích hợp cho hệ nhỏ, nhưng tính determinant tốn kém khi lớn.
  2. Khử Gauss (Gaussian Elimination)

    Biến đổi ma trận mở rộng thành dạng tam giác trên, sau đó giải bằng thế lùi.

    Quy trình:

    1. Dùng phép biến đổi sơ cấp để đưa về dạng bậc thang.

    2. Giải từ phương trình cuối cùng lên trên.

    Ưu điểm: tính toán đơn giản, áp dụng được cho hệ vừa và lớn.

    Nhược điểm: dễ sinh sai số số học khi ma trận gần suy biến.

  3. Phân rã ma trận

    Matrix factorization

    • LU Decomposition:

      Với : ma trận tam giác dưới, : tam giác trên. Giải hệ bằng 2 bước thế tiến & lùi.

    • Cholesky Decomposition:

I.1. Introduction

Vector

  • là một số tự nhiên
  • là tập hợp các số thực
  • là vector có độ dài , mỗi phần tử là số thực
  • Ký hiệu: Vector là ma trận 1 cột, là khối xây dựng cơ bản của ma trận. Khi học máy, vector thường biểu diễn đặc trưng hoặc trọng số.

Matrix

  • Ma trận có hình chữ nhật (hàng × cột)
  • hàng và cột
  • Dùng chữ cái in hoa để biểu diễn
  • Ký hiệu: Trong học máy, ma trận thường biểu diễn tập dữ liệu: mỗi hàng là 1 mẫu (sample), mỗi cột là 1 đặc trưng (feature).

I.2. Vector Operations

Vector Addition – Cộng hai vector

Cho hai vector: Phép cộng được định nghĩa: Code Python:

def add_vectors(vector1, vector2):
    '''
    Add corresponding elements between two vectors
    vector1 and vector2 are lists
    '''
    return [v1 + v2 for v1, v2 in zip(vector1, vector2)]

NumPy:

import numpy as np
x = np.array([1, 2, 3, 4])
y = np.array([5, 6, 7, 8])
print("data x \n", x)
print("data y \n", y)
# Cách 1: toán tử +
print("method 1 \n", x + y)
# Cách 2: hàm np.add
print("method 2 \n", np.add(x, y))
Output:
data x
[1 2 3 4]
data y
[5 6 7 8]
method 1
[ 6  8 10 12]
method 2
[ 6  8 10 12]

NumPy tự động vector hóa các toán tử, giúp xử lý nhanh trên mảng lớn mà không cần vòng lặp.

I.3. Matrix Operations

Matrix-matrix multiplication

Cho hai ma trận:

  • Tích ma trận: Định nghĩa phần tử kết quả Phần tử trong ma trận kết quả được tính theo công thức: Tức là: hàng thứ i của nhân từng phần tử tương ứng với cột thứ j của . Biểu diễn tổng quát image 1 23.png Số cột của ma trận đầu tiên (A) phải bằng số hàng của ma trận thứ hai (B). Nếu không, phép nhân không xác định. Cài đặt Python:
def matrix_multiplication(matrix1, matrix2):
    '''
    Multiply matrix1 (m x n) with matrix2 (n x d)
    '''
    matrix1_nrows = len(matrix1)
    matrix1_ncols = len(matrix1[0])
    matrix2_nrows = len(matrix2)
    matrix2_ncols = len(matrix2[0])
    # Khởi tạo ma trận kết quả kích thước m x d
    result = [[0] * matrix2_ncols for _ in range(matrix1_nrows)]
    for i in range(matrix1_nrows):
        for j in range(matrix2_ncols):
            for k in range(matrix2_nrows):
                result[i][j] += matrix1[i][k] * matrix2[k][j]
    return result

Kiểm tra:

matrix1 = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
matrix2 = [
    [1, 1, 2, 1],
    [1, 2, 1, 1],
    [1, 1, 2, 2]
]
result = matrix_multiplication(matrix1, matrix2)
for row in result:
    print(row)

Kết quả:

[6, 8, 7, 9]
[15, 20, 19, 21]
[24, 32, 31, 33]

Cài đặt NumPy:

import numpy as np
X = np.array([[1, 2],
              [3, 4]])
Y = np.array([[2, 3],
              [2, 1]])

Lưu ý phân biệt:

  • Thứ tự hàng × cột rất quan trọng
  • Trong học sâu, cần chú ý thứ tự khi nhân weight matrix × input image 2 22.png

Transpose

Other Hadamard operations

argmin and argmax

Khi làm việc với vector hoặc ma trận, đôi khi ta không cần biết giá trị lớn nhất/nhỏ nhất, mà cần biết vị trí (index) của giá trị đó.

  • argmin: trả về chỉ số của phần tử nhỏ nhất
  • argmax: trả về chỉ số của phần tử lớn nhất Ví dụ: Tìm index nhỏ nhất:
import numpy as np
x = np.array([4, 7, 1, 5])
result = np.argmin(x)
print(result)  # Output: 2

image 3 21.png → Phần tử nhỏ nhất là 1, nằm ở vị trí chỉ số 2 Tìm index lớn nhất:

result = np.argmax(x)
print(result)  # Output: 1

image 4 17.png → Phần tử lớn nhất là 7, nằm ở vị trí chỉ số 1

III. Cosine Similarity

III.1. Dot Product

Tích vô hướng (dot product) là phép toán cơ bản giữa hai vector, trả về một số thực thể hiện mức “thẳng hàng” giữa chúng. Nó cũng chính là độ dài hình chiếu của một vector này lên một vector khác (nếu đã chuẩn hóa). Ví dụ đơn giản: Giả sử bạn có một học sinh được đánh giá qua 3 kỹ năng:

Kỹ năngĐiểm (x)Trọng số (w)
Kỹ năng đọc80.2
Kỹ năng viết60.3
Kỹ năng tính toán90.5
Tổng điểm trung bình có trọng số:
Đây chính là tích vô hướng giữa 2 vector:
⇒ Tích vô hướng cũng chính là điểm trung bình có trọng số.

Dạng cơ bản – Chiếu lên trục tọa độ

Cho:

  • Tích vô hướng: Khi chiếu lên trục cơ sở chuẩn như , tích vô hướng chính là tọa độ. image 5 15.png

Dạng tổng quát – Chiếu lên vector bất kỳ

Cho hai vector bất kỳ:

  • Với vector , ta tính: Nếu đã được chuẩn hóa, chính là độ dài hình chiếu của lên chúng. image 6 14.png

Ý nghĩa hình học của dot product

Với hai vector , công thức:

  • Nếu → dot product lớn nhất
  • Nếu → dot product = 0 (vuông góc)
  • Nếu → dot product âm Tích vô hướng giúp kiểm tra hướng (cùng chiều hay ngược chiều) và đo khoảng cách góc (nền tảng của cosine similarity).

Tính chất hình học

Nhân vô hướng và nhân vô hướng với vô hướng
Cho: image 7 12.png Màu đỏ: Phép nhân vô hướng giữ nguyên hướng, chỉ làm thay đổi độ dài. Màu tím: Phép cộng làm thay đổi góc.

Ví dụ

Trong ví dụ này, ta sẽ dùng cả đại số tuyến tínhhình học để tính tích vô hướng giữa hai vector: Định nghĩa toán học:

  • Algebra (đại số):
  • Geometry (hình học): Trong đó, , nên: Tính độ dài: Kết quả: image 8 12.png

Cài đặt bằng Python: Phép tính theo đại số

import numpy as np
x = np.array([0, 5])
y = np.array([3, 3])
dproduct = np.dot(x, y)
print(dproduct)  # Kết quả: 15

Phép tính theo hình học

x_length = np.linalg.norm(x)
y_length = np.linalg.norm(y)
cos_xy = np.cos(np.pi / 4)  # góc 45 độ
dproduct = x_length * y_length * cos_xy
print(dproduct)  # Kết quả: ~15.0

III.2. Cosine Similarity

Cosine similarity (cs) là độ đo phổ biến để so sánh mức độ tương đồng giữa hai vector, đặc biệt trong xử lý ngôn ngữ, truy xuất thông tin, và học máy.

Định nghĩa

Cho hai vector :

Tính chất

Property 1 – Bất biến theo scale: Chứng minh: Khi hai vector được nhân với hệ số dương, hướng không đổi, nên cosine không đổi.

Property 2 – Không bất biến theo dịch chuyển: Thêm hằng số vào các phần tử làm thay đổi góc, vì thay đổi hướng tương đối.

Ví dụ: Cho: Tính cs(x, y): Kiểm tra tính chất 1: nhân hệ số Tính: