Chuyển đến nội dung chính

Giải mã các khái niệm Toán học cho Học sâu

Khám phá các khái niệm toán học cơ bản cho khoa học dữ liệu và học sâu như vô hướng và vectơ, định thức, phân rã giá trị kỳ dị, và nhiều hơn nữa.
Đã cập nhật 5 thg 10, 2026  · 11 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Khoa học dữ liệu là một lĩnh vực liên ngành sử dụng toán học và thống kê nâng cao để đưa ra dự đoán. Mọi thuật toán khoa học dữ liệu đều trực tiếp hoặc gián tiếp sử dụng các khái niệm toán học. Nền tảng toán học vững chắc sẽ giúp bạn phát triển các giải pháp khoa học dữ liệu sáng tạo như hệ thống gợi ý. Nếu bạn giỏi toán, việc chuyển sang khoa học dữ liệu sẽ dễ dàng hơn. Là một nhà khoa học dữ liệu, bạn phải vận dụng các khái niệm cơ bản của toán học để giải quyết vấn đề.

Bên cạnh toán học, bạn cũng cần kiến thức miền, kỹ năng lập trình, kỹ năng kinh doanh, kỹ năng phân tích và tư duy tò mò. Không có cách nào để né tránh toán học đối với một nhà khoa học dữ liệu. Bạn phải tự trau dồi và học các kiến thức cơ bản về toán và thống kê để trở thành một nhà khoa học dữ liệu.

Vô hướng và Vectơ

  • Vô hướng (Scalar): Vô hướng là một số đơn lẻ, tương tác với vectơ trong không gian thông qua phép nhân vô hướng.
  • Vectơ: Vectơ V là một tập hợp có thứ tự các phần tử. Vectơ là một mảng số có thể ở dạng hàng hoặc cột. Các vectơ có thể được cộng với nhau và có thể được nhân với một số thực gọi là vô hướng.
scalars vs vectors vs matrices

Nguồn ảnh

# Import numpy module
import numpy as np

# creating a vector
v = np.array([1, 2, 3, 4, 5])
print(v)
[1 2 3 4 5]
# Vector Operations
# Import numpy module
import numpy as np

# Create two vector
a = np.array([1, 2, 3, 4, 5])
b = np.array([1, 2, 3, 4, 5])

# adding two vectors
add = a + b
print("Addition:",add)

# Vector Subtraction
sub = a - b
print("Subtraction:",sub)

# Vector Multiplication
mul = a * b
print("Multiplication:",mul)

# Vector Division
div = a / b
print("division",div)
Addition: [ 2  4  6  8 10]
Subtraction: [0 0 0 0 0]
Multiplication: [ 1  4  9 16 25]
division [1. 1. 1. 1. 1.]

Ma trận và Tensor

  • Ma trận: Ma trận là một mảng N-chiều các số biểu diễn các phép biến đổi. Bạn có thể coi ma trận như một phép biến đổi như "co giãn", "xoay", "cắt xén" và "lật". Nó biến các điểm đơn lẻ trong không gian thành các điểm khác trong không gian.
# Import numpy module
import numpy as np

# create 2*2 matrix
a1=np.array([[1, 2], [3, 4]])
a2=np.array([[1, 2], [3, 4]])

# Dot Product
dot_product = np.dot(a1,a2)
print("Dot Product: \n",dot_product)

# Cross Product
cross_product = np.cross(a1,a2)
print("Cross Product: \n", cross_product)
Dot Product:
 [[ 7 10]
 [15 22]]
Cross Product:
 [0 0]

Tích vô hướng của hai vectơ biểu diễn phép chiếu của một vectơ lên vectơ kia, và tích có hướng của hai vectơ cho phép một vectơ xác định mặt phẳng mà cả hai vectơ có thể nằm trên đó.

  • Tensor: Đôi khi bạn sẽ cần một mảng có nhiều hơn hai chiều và với mỗi chiều khác nhau của từng mảng, được sắp xếp trong một lưới gọi là tensor. Số chiều của tensor được gọi là hạng (rank). Vô hướng và vectơ cũng là một dạng tensor. Tensor bậc 0 là vô hướng, và tensor bậc 1 là vectơ.
matrix vs vectors

Nguồn ảnh

Định thức

Định thức là một giá trị vô hướng biểu thị hệ số của một ma trận mà qua đó độ dài (1 chiều), diện tích (2 chiều), thể tích (3 chiều) có thể được khảo sát. Nếu định thức là 2, thì thể tích (trong 3 chiều) tăng gấp đôi, hoặc nếu định thức là 1, nó sẽ không ảnh hưởng đến thể tích (trong 3 chiều). Nếu định thức bằng 0, ma trận không có nghịch đảo vì nhân với 0 cho kết quả bằng 0.

determinant matrix

Tính chất:

  • Tích của các ma trận có định thức bằng tích các định thức: det (M1M2)=det (M1) det (M2).

  • Định thức của một ma trận bằng tích các trị riêng.

  • Nếu bạn nhân một ma trận với hằng số c thì định thức thay đổi theo det(cM)=c^N det (M). N là số chiều của ma trận.

Nếu ma trận của bạn biểu diễn một món đồ chơi co giãn, thì định thức của ma trận này cho thấy bạn đã kéo giãn món đồ chơi bao nhiêu.

# Import numpy module
import numpy as np

# Create 2*2 matrix
arr=np.array([[1,2],[3,4]])

# Compute Determinant of a matrix
arr_det=np.linalg.det(arr)

# Print the Computed Determinant
print("Determinant:",arr_det)
Determinant: -2.0000000000000004

Trị riêng và Vectơ riêng

Một vectơ riêng của ma trận vuông A là một vectơ khác không sao cho khi nhân với A thì chỉ thay đổi độ lớn (tỷ lệ) của v.

eigenvalues and eigenvectors

Nguồn ảnh

Vectơ riêng còn được gọi là vectơ đặc trưng. Đó là một vectơ khác không chỉ thay đổi theo hệ số vô hướng khi áp dụng phép biến đổi tuyến tính lên nó.

Vectơ riêng là các trục quay của phép biến đổi tuyến tính. Những trục này cố định về hướng, và trị riêng là hệ số tỷ lệ mà theo đó ma trận được phóng to hoặc thu nhỏ. Trị riêng còn được gọi là giá trị đặc trưng hoặc nghiệm đặc trưng. Nói cách khác, bạn có thể coi các vectơ riêng là đường thẳng hoặc mặt phẳng cố định giới hạn hành vi của phép biến đổi tuyến tính và các trị riêng của một phép biến đổi tuyến tính là hệ số méo.

Định thức cho bạn biết diện tích của các hình được phóng to hay thu nhỏ trong phép biến đổi tuyến tính. Đó là lý do tích các trị riêng bằng với định thức.

# Import numpy module
import numpy as np

# Create 2*2 matrix
arr=np.array([[1,2],[3,4]])

# Find eigenvalues and eigenvectors
eigenvalues, eigenvectors = np.linalg.eig(arr)

# print the eigenvalues and eigenvectors
print("Eigen Values: \n",eigenvalues)
print("Eigen Vectors:\n", eigenvectors)
Eigen Values:
 [-0.37228132  5.37228132]
Eigen Vectors:
 [[-0.82456484 -0.41597356]
 [ 0.56576746 -0.90937671]]

Hàm NORM

Đôi khi bạn muốn đo kích thước của một vectơ. Hàm norm giúp bạn đo kích thước của vectơ. Nó gán một độ dài dương nghiêm ngặt cho một vectơ trong không gian vectơ, ngoại trừ vectơ không. Nó bao gồm chuẩn L^p. Nó ánh xạ các vectơ tới các giá trị không âm. Đối với một vectơ và một ma trận, nó tương đương với khoảng cách Euclid. Nó bằng với giá trị kỳ dị lớn nhất.

NORM function formula
# import numpy module
import numpy as np

# Create 3*3 Matrix
a = np.array([[1,2,3],[4,5,6],[7,8,9]])

# Compute norm
a_norm = np.linalg.norm(a)

# print the norm of function
print(a_norm)
16.881943016134134

Phân tích nhân tử ma trận

Phân tích nhân tử ma trận, còn gọi là phân rã ma trận. Nó được dùng để tách một ma trận thành các thành phần cấu thành. Phân tích nhân tử ma trận tương tự như phân tích một số, chẳng hạn tách 10 thành 2 x 5. Nó được sử dụng để giải hệ phương trình tuyến tính.

Các kỹ thuật phân rã ma trận sau đây có sẵn:

  • Phân rã LU áp dụng cho ma trận vuông và phân rã ma trận thành các thành phần L và U.
  • Phân rã QR áp dụng cho ma trận m x n (không chỉ giới hạn ở ma trận vuông) và phân rã ma trận thành các thành phần Q và R. Nó không bị giới hạn ở ma trận vuông như phân rã LU.
  • Phân rã Cholesky được dùng để giải bình phương tối thiểu tuyến tính cho hồi quy tuyến tính, cũng như trong các phương pháp mô phỏng và tối ưu hóa.
  • Phân rã giá trị kỳ dị sẽ được giải thích ở phần tiếp theo.

Phân rã giá trị kỳ dị

Ở phần trước, chúng ta đã thấy phân rã riêng của một ma trận thành các vectơ riêng và trị riêng. Phân rã giá trị kỳ dị là một dạng phân rã ma trận, phân rã thành các vectơ kỳ dị và các giá trị kỳ dị. Nó có nhiều ứng dụng hữu ích trong xử lý tín hiệu, tâm lý học, xã hội học, khí hậu, khoa học khí quyển, thống kê và thiên văn học.

singular value decomposition formula
  • M là ma trận m×m
  • U là ma trận kỳ dị trái m×n
  • Σ là ma trận đường chéo n×n với các số thực không âm.
  • V là ma trận kỳ dị phải m×n
  • V* là ma trận n×m, là chuyển vị của V.
# Import numpy module
import numpy as np

# Create 3*3 matrix
a = np.array([[1, 3, 4], [5, 6, 9], [1, 2, 3], [7, 6, 8]])

# Decomposition of matrix using SVD
U, s, Vh = np.linalg.svd(a, full_matrices=False)

U,s,Vh
(array([[-0.27067357, -0.61678044,  0.69789573],
        [-0.65939972, -0.2937857 , -0.62152182],
        [-0.20244298, -0.3480035 , -0.06765408],
        [-0.67152413,  0.64200111,  0.34939247]]),
 array([18.0376394 ,  2.34360292,  0.38870323]),
 array([[-0.46961711, -0.51018039, -0.72053851],
        [ 0.87911451, -0.19502274, -0.43488368],
        [-0.08134773,  0.83766467, -0.54009299]]))
# Generate the initial matrix
new_a = np.dot(U, np.dot(np.diag(s), Vh))

# Print original matrix
print(new_a)
[[1. 3. 4.]
 [5. 6. 9.]
 [1. 2. 3.]
 [7. 6. 8.]]

Nghịch đảo giả Moore-Penrose

Nghịch đảo giả của một ma trận là sự khái quát của ma trận nghịch đảo. Nó được dùng để tính nghiệm bình phương tối thiểu. Nghịch đảo Moore-Penrose là dạng phổ biến nhất của nghịch đảo giả ma trận.

Moore-Penrose Pseudoinverse matrix
# Import numpy module
import numpy as np

# Create 3*3 matrix
a = np.array([[1, 3, 4], [5, 6, 9], [1, 2, 3], [7, 6, 8]])

# Compute the (Moore-Penrose) pseudo-inverse of a matrix.
inv=np.linalg.pinv(a)

# Print pseudo-inverse of a matrix.
print(inv)
[[-0.37037037  0.03703704 -0.11111111  0.18518519]
 [ 1.56296296 -1.2962963  -0.11111111  0.71851852]
 [-0.84444444  0.94444444  0.16666667 -0.57777778]]

Tích Hadamard

Tích Hadamard hay tích Schur là phép nhân theo từng phần tử của hai ma trận gốc cùng kích thước. Nó còn được gọi là phép nhân theo phần tử. Nó đơn giản hơn tích ma trận. Tích Hadamard được sử dụng trong các thuật toán nén mất dữ liệu JPEG. Tích Hadamard có tính giao hoán, kết hợp và phân phối. Nó giúp dễ dàng thu được ma trận nghịch đảo và đơn giản hóa việc tính lũy thừa ma trận.

Hadamard product matrices

Tích Hadamard được sử dụng trong nhiều lĩnh vực như sửa mã trong truyền dẫn vệ tinh, lý thuyết thông tin, mật mã, nhận dạng mẫu, mạng nơ-ron, ước lượng hợp lý cực đại, nén mất dữ liệu JPEG, phân tích thống kê đa biến và mô hình hóa tuyến tính.

# Import numpy module
import numpy as np

# Create 2*2 matrix a1 and a2
a1=np.array([[1, 2], [3, 4]])
a2=np.array([[1, 2], [3, 4]])

# Element wise multiplication
hadamard_product = np.multiply(a1,a2)

# Print hadamard distance
print("Hadamard Product: \n", hadamard_product)
Hadamard Product:
 [[ 1  4]
 [ 9 16]]

Entropy

"Entropy của một biến ngẫu nhiên là một hàm nhằm đặc trưng mức độ khó dự đoán của biến ngẫu nhiên đó." (Entropy and Mutual Information)" Nó được sử dụng để xây dựng cây quyết định tự động ở mỗi bước xây dựng cây; việc chọn đặc trưng được thực hiện dựa trên tiêu chí entropy. Việc chọn mô hình dựa trên nguyên lý entropy tối đa, theo đó trong số các mô hình xung đột, mô hình có entropy cao nhất là tốt nhất.

"Nếu một biến ngẫu nhiên X nhận giá trị trong tập χ={x1, x2,..., xn}, và được xác định bởi một phân phối xác suất P(X), thì ta sẽ viết entropy của biến ngẫu nhiên như sau," (Entropy and Mutual Information)

entropy formula

"Nếu log trong phương trình trên lấy cơ số 2, thì entropy được biểu diễn bằng bit. Nếu log là log tự nhiên, thì entropy được biểu diễn bằng nat. Thông dụng hơn, entropy được biểu diễn bằng bit." (Entropy and Mutual Information)

# Import scipy and numpy module
import scipy.stats
import numpy as np

# Create an array
a=np.array([1,1,2,3,1,3,4,2,5,6,3,2,4,3])


# Compute probability distribution
a_pdf=scipy.stats.norm.pdf(a)

# Calculate the entropy of a distribution for given probability values.
entropy = scipy.stats.entropy(a_pdf) # get entropy from probability values
print("Entropy: ",entropy)
Entropy:  1.6688066853941022

Độ lệch Kullback-Leibler

Độ lệch Kullback–Leibler là entropy tương đối của hai phân phối xác suất. Nó đo khoảng cách (mức tương đồng hay khác biệt) giữa một phân phối với một phân phối xác suất tham chiếu khác. Giá trị 0 của độ lệch Kullback–Leibler cho biết hai phân phối là giống hệt nhau. Nó có thể được biểu diễn như sau,

Kullback-Leibler divergence formula

Nó nghe có vẻ như một thước đo khoảng cách, nhưng thực ra không phải. Bởi vì nó có tính bất đối xứng, nghĩa là đại lượng này không giao hoán. Nói chung, bạn có thể nói D(p, q) ≠ D(q, p). KL divergence thường được sử dụng trong kỹ thuật học máy không giám sát “Biến phân Tự mã hóa” (Variational Autoencoders).

# Import scipy.stats and numpy module
import scipy.stats
import numpy as np

# Create numpy arrays
a=np.array([1,1,2,3,1,3,4,2,5,6,3,2,4,3])
b=np.array([1,1,3,4,2,4,5,2,5,6,3,2,4,3])

# Compute probability distribution
a_pdf=scipy.stats.norm.pdf(a)
b_pdf=scipy.stats.norm.pdf(b)

# compute relative entropy or KL Divergence
kl_div=scipy.stats.entropy(a_pdf,b_pdf)

print("KL Divergence: ",kl_div)
KL Divergence:  0.26732496641464365

Hạ gradient

Hạ gradient là một trong những thuật toán nổi tiếng nhất dùng để tối ưu hệ số và độ chệch cho hồi quy tuyến tính, hồi quy logistic và mạng nơ-ron. Đây là một quá trình lặp nhằm tìm giá trị nhỏ nhất của một hàm cho trước.

Gradient Descent illustration

Nguồn ảnh

Gradient Descent formula

Nguồn ảnh

Ba biến thể của thuật toán hạ gradient: toàn bộ lô, ngẫu nhiên và lô nhỏ. Hạ gradient toàn bộ lô dùng toàn bộ tập dữ liệu để tính gradient, trong khi hạ gradient ngẫu nhiên dùng một mẫu của tập dữ liệu để tính gradient. Hạ gradient theo lô nhỏ là sự kết hợp của cả hai. Tập huấn luyện được chia thành nhiều nhóm nhỏ gọi là batch. Các batch nhỏ này lần lượt tính hàm mất mát và lấy trung bình để ra kết quả mất mát cuối cùng.

Kết luận

Chúc mừng bạn đã hoàn thành bài hướng dẫn này!

Bạn đã học các khái niệm toán học cơ bản cho học sâu như vô hướng, vectơ, ma trận, tensor, định thức, trị riêng, vectơ riêng, hàm NORM, phân rã giá trị kỳ dị (SVD), nghịch đảo giả Moore-Penrose, tích Hadamard, Entropy, Độ lệch Kullback-Leibler và Hạ gradient.

Trong quá trình đó, bạn cũng đã thực hành các khái niệm này trong python bằng NumPy và SciPy.

Nếu bạn muốn học thêm về Python, hãy tham khảo các khóa học DataCamp sau:

Chủ đề
Học Sâu
Khoa học Dữ liệu
Python

Tìm hiểu thêm về Học sâu

Khóa học

Nhập môn Deep Learning với Python

4 giờ
264.8K
Tìm hiểu các kiến thức cơ bản về mạng nơ-ron và cách xây dựng mô hình học sâu bằng Keras 2.0 trong Python.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm