Skip to content

Giải tích

This content is not available in your language yet.

Sau bài này, bạn sẽ:

  • Hiểu bản chất cốt lõi của đạo hàm (derivative) như tốc độ thay đổi tức thời và độ dốc của tiếp tuyến.
  • Mở rộng sang hàm nhiều biến với đạo hàm riêng (partial derivatives) và vectơ Gradient (∇f\nabla f) — “kim chỉ nam” định hướng tối ưu hóa mô hình.
  • Làm chủ Quy tắc chuỗi (Chain Rule) và hiểu rõ cách nó tạo nên thuật toán lan truyền ngược (Backpropagation) trong mạng nơ-ron sâu.
  • Hiểu ý nghĩa của khai triển xấp xỉ Taylor và ma trận Hessian (độ cong bậc hai), giải thích hiện tượng bùng nổ hoặc dao động gradient khi chọn tốc độ học không phù hợp.
  • Linear Algebra, in Math for AI(Not translated yet) (Learned)

Hãy tưởng tượng bạn đang bị bịt mắt và đứng trên đỉnh một ngọn núi sương mù dày đặc. Nhiệm vụ của bạn là phải tìm đường xuống đáy thung lũng an toàn và nhanh nhất có thể. Bạn sẽ làm thế nào?

Vì không thể nhìn thấy toàn cảnh, cách duy nhất là dùng chân cảm nhận độ nghiêng của mặt đất ngay tại vị trí bạn đang đứng:

  1. Bạn xoay người một vòng để tìm xem hướng nào làm mặt đất dốc xuống mạnh nhất.
  2. Bạn bước một bước nhỏ cẩn thận về hướng dốc xuống đó.
  3. Tại điểm mới, bạn lặp lại phép đo độ nghiêng và tiếp tục bước.

Trong học máy:

  • Ngọn núi sương mù chính là bề mặt hàm mất mát (loss surface) phức tạp nhiều chiều.
  • Độ nghiêng mặt đất dưới chân bạn chính là đạo hàm và vectơ Gradient.
  • Mỗi bước chân di chuyển chính là một bước cập nhật trọng số trong thuật toán Gradient Descent.

Giải tích chính là công cụ toán học giúp máy tính “cảm nhận độ dốc” để tự động bước về điểm cực tiểu tối ưu!

1. Đạo Hàm: Tốc Độ Biến Thiên Tức Thời

Phần tiêu đề “1. Đạo Hàm: Tốc Độ Biến Thiên Tức Thời”

Xét một hàm số một biến f(x)f(x). Khi ta thay đổi đầu vào một lượng nhỏ ϵ\epsilon, đầu ra thay đổi một lượng f(x+ϵ)−f(x)f(x + \epsilon) - f(x). Đạo hàm của hàm số tại điểm xx, ký hiệu là f′(x)f'(x) hay dfdx\frac{df}{dx}, là tỉ số biến thiên khi ϵ\epsilon tiến dần về 00:

f′(x)=lim⁡ϵ→0f(x+ϵ)−f(x)ϵf'(x) = \lim_{\epsilon \to 0} \frac{f(x + \epsilon) - f(x)}{\epsilon}

Ý nghĩa hình học: f′(x)f'(x) chính là hệ số góc (độ dốc - slope) của đường tiếp tuyến với đồ thị tại điểm xx:

  • Nếu f′(x)>0f'(x) > 0: hàm số đang đồng biến (tăng). Tăng xx sẽ làm tăng f(x)f(x); muốn giảm f(x)f(x), ta phải giảm xx.
  • Nếu f′(x)<0f'(x) < 0: hàm số đang nghịch biến (giảm). Tăng xx sẽ làm giảm f(x)f(x).
  • Nếu f′(x)=0f'(x) = 0: tiếp tuyến nằm ngang, điểm xx có thể là cực tiểu, cực đại hoặc điểm uốn.

Trong thực tế, mô hình AI có hàng ngàn hoặc hàng tỉ trọng số w1,w2,…,wnw_1, w_2, \dots, w_n. Hàm mất mát L(w)\mathcal{L}(\mathbf{w}) là một hàm nhiều biến.

Đạo hàm riêng của hàm ff theo biến xix_i, ký hiệu là ∂f∂xi\frac{\partial f}{\partial x_i}, đo lường mức độ biến thiên của ff khi ta chỉ thay đổi một mình biến xix_i và giữ nguyên toàn bộ các biến khác như những hằng số:

∂f∂xi=lim⁡ϵ→0f(x1,…,xi+ϵ,…,xn)−f(x1,…,xi,…,xn)ϵ\frac{\partial f}{\partial x_i} = \lim_{\epsilon \to 0} \frac{f(x_1, \dots, x_i + \epsilon, \dots, x_n) - f(x_1, \dots, x_i, \dots, x_n)}{\epsilon}

Khi gom tất cả các đạo hàm riêng của một hàm số thành một vectơ cột, ta được vectơ Gradient, ký hiệu là ∇f(x)\nabla f(\mathbf{x}):

∇f(x)=[∂f∂x1∂f∂x2⋮∂f∂xn]=[∂f∂x1,∂f∂x2,…,∂f∂xn]⊤\nabla f(\mathbf{x}) = \begin{bmatrix} \frac{\partial f}{\partial x_1} \\ \frac{\partial f}{\partial x_2} \\ \vdots \\ \frac{\partial f}{\partial x_n} \end{bmatrix} = \left[ \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \dots, \frac{\partial f}{\partial x_n} \right]^\top

Định lý quan trọng nhất của Gradient trong tối ưu hóa:

  1. Vectơ ∇f(x)\nabla f(\mathbf{x}) luôn trỏ về hướng mà giá trị hàm số tăng nhanh nhất.
  2. Độ dài ∥∇f(x)∥2\|\nabla f(\mathbf{x})\|_2 biểu thị mức độ dốc lớn nhất tại điểm đó.
  3. Vectơ ngược chiều −∇f(x)-\nabla f(\mathbf{x}) luôn trỏ về hướng mà giá trị hàm số giảm nhanh nhất (hướng giảm dốc nhất).

Chính vì vậy, quy tắc cập nhật tham số trong thuật toán Gradient Descent có dấu trừ:

θ←θ−η∇L(θ)\boldsymbol{\theta} \leftarrow \boldsymbol{\theta} - \eta \nabla \mathcal{L}(\boldsymbol{\theta})

Trong đó η>0\eta > 0 là tốc độ học (learning rate) điều khiển độ dài của mỗi bước bước chân.


3. Quy Tắc Chuỗi (Chain Rule) và Lan Truyền Ngược

Phần tiêu đề “3. Quy Tắc Chuỗi (Chain Rule) và Lan Truyền Ngược”

Một mạng nơ-ron sâu là một hàm hợp khổng lồ gồm nhiều tầng xếp chồng lên nhau: Đầu vào x⟶\mathbf{x} \longrightarrow Lớp 1 (z1z_1) ⟶\longrightarrow Lớp 2 (z2z_2) ⟶⋯⟶\longrightarrow \dots \longrightarrow Dự đoán y^⟶\hat{y} \longrightarrow Mất mát L\mathcal{L}.

Làm sao ta có thể tính đạo hàm của hàm mất mát cuối cùng L\mathcal{L} đối với một trọng số ww ở tận lớp đầu tiên?

Nếu biến zz phụ thuộc vào yy, và yy phụ thuộc vào xx (z=f(g(x))z = f(g(x))), thì tốc độ thay đổi của zz theo xx bằng tích các tốc độ thay đổi trung gian:

dzdx=dzdy⋅dydx\frac{dz}{dx} = \frac{dz}{dy} \cdot \frac{dy}{dx}

Với trường hợp biến trung gian nhiều nhánh: nếu z=f(y1,y2)z = f(y_1, y_2) và mỗi yj=gj(x)y_j = g_j(x), thì:

∂z∂x=∑j∂z∂yj⋅∂yj∂x\frac{\partial z}{\partial x} = \sum_{j} \frac{\partial z}{\partial y_j} \cdot \frac{\partial y_j}{\partial x}

Ứng Dụng Trong Lan Truyền Ngược (Backpropagation)

Phần tiêu đề “Ứng Dụng Trong Lan Truyền Ngược (Backpropagation)”

Xét một nơ-ron hồi quy đơn giản:

  1. Lan truyền tiến (Forward pass): y^=wx+b\hat{y} = w x + b L=(y^−y)2\mathcal{L} = (\hat{y} - y)^2
  2. Lan truyền ngược (Backward pass):
    • Đạo hàm của loss theo dự đoán: ∂L∂y^=2(y^−y)\frac{\partial \mathcal{L}}{\partial \hat{y}} = 2(\hat{y} - y)
    • Đạo hàm của dự đoán theo trọng số ww và bias bb: ∂y^∂w=x,∂y^∂b=1\frac{\partial \hat{y}}{\partial w} = x, \quad \frac{\partial \hat{y}}{\partial b} = 1
    • Áp dụng quy tắc chuỗi: ∂L∂w=∂L∂y^⋅∂y^∂w=2(y^−y)x\frac{\partial \mathcal{L}}{\partial w} = \frac{\partial \mathcal{L}}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial w} = 2(\hat{y} - y) x ∂L∂b=∂L∂y^⋅∂y^∂b=2(y^−y)\frac{\partial \mathcal{L}}{\partial b} = \frac{\partial \mathcal{L}}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial b} = 2(\hat{y} - y)

Nhờ quy tắc chuỗi, ta không cần giải phương trình đạo hàm phức tạp cho cả mạng nơ-ron cùng lúc. Thay vào đó, mỗi tầng chỉ cần tính đạo hàm cục bộ (local gradient) của phép toán của riêng nó, rồi nhân dồn ngược từ đầu ra về đầu vào.


Đạo hàm bậc nhất cho biết độ nghiêng (hướng dốc), nhưng không cho biết bề mặt đang phẳng hay uốn cong gấp khúc. Đạo hàm bậc hai đo lường mức độ uốn cong (độ cong - curvature) của hàm số.

Với hàm nhiều biến, tất cả các đạo hàm riêng bậc hai được gom thành ma trận Hessian H∈Rn×n\mathbf{H} \in \mathbb{R}^{n \times n}:

Hij=∂2f∂xi∂xj\mathbf{H}_{ij} = \frac{\partial^2 f}{\partial x_i \partial x_j}

Theo khai triển Taylor bậc hai:

f(x+Δx)≈f(x)+∇f(x)⊤Δx+12Δx⊤HΔxf(\mathbf{x} + \boldsymbol{\Delta x}) \approx f(\mathbf{x}) + \nabla f(\mathbf{x})^\top \boldsymbol{\Delta x} + \frac{1}{2} \boldsymbol{\Delta x}^\top \mathbf{H} \boldsymbol{\Delta x}
  • Nếu ma trận Hessian có trị riêng lớn nhất là LL (λmax⁡=L\lambda_{\max} = L), độ cong theo hướng đó rất dốc. Nếu chọn tốc độ học η>2L\eta > \frac{2}{L}, thuật toán Gradient Descent sẽ bị văng ra khỏi lòng chảo và phân kỳ (diverge).
  • Sự chênh lệch giữa độ cong lớn nhất và nhỏ nhất (tỉ số điều kiện κ=λmax⁡/λmin⁡\kappa = \lambda_{\max}/\lambda_{\min}) giải thích vì sao hàm mất mát dạng “thung lũng hẹp” khiến Gradient Descent dao động qua lại rất chậm chạp.
  • Điểm yên ngựa (Saddle points): Trong không gian hàng nghìn chiều, gradient bằng 00 thường rơi vào điểm yên ngựa (một chiều cong lên, một chiều cong xuống) thay vì đáy cực tiểu toàn cục.
  • Biến mất / bùng nổ gradient: Khi mạng nơ-ron có nhiều lớp, việc nhân liên tiếp hàng chục đạo hàm cục bộ có độ lớn nhỏ hơn 11 sẽ khiến gradient tiến dần về 00 (vanishing gradient) làm mô hình ngừng học; ngược lại nếu lớn hơn 11 sẽ gây bùng nổ gradient (exploding gradient).

Sơ đồ dưới đây minh họa sự khác biệt giữa đạo hàm giải tích và kiểm tra số trị bằng sai phân, cùng dòng chảy của quy tắc chuỗi trong lan truyền ngược:

1. SAI PHÂN HỮU HẠN KIỂM TRA ĐẠO HÀM (GRADIENT CHECKING):
Sai phân tiến (lệch một bên, sai số O(ε)):
f(x + ε) - f(x)
─────────────────────────
ε
Sai phân trung tâm (đối xứng hai phía, sai số O(ε²)):
f(x + ε) - f(x - ε)
───────────────────── ◄── Độ chính xác gấp hàng triệu lần!
2ε
2. DÒNG CHẢY QUY TẮC CHUỖI (BACKPROPAGATION):
Lan truyền tiến (Forward):
x ──► [ × w ] ──► z ──► [ + b ] ──► y_hat ──► [ Loss ] ──► L
Lan truyền ngược (Backward):
dL/dw ◄── [ * x ] ◄── dL/dz ◄── [ * 1 ] ◄── dL/dy_hat ◄── dL/dL (= 1)

Các ô dưới đây chạy độc lập và không phụ thuộc vào trạng thái trước đó.

Ô đầu tiên thực hiện kỹ thuật Gradient Checking: so sánh gradient giải tích (tính bằng công thức toán) với gradient số trị (tính bằng sai phân trung tâm) để đảm bảo không bị sai sót công thức.

Kiểm tra gradient giải tích bằng sai phân trung tâm

import numpy as np
# Hàm mục tiêu mẫu f(x) = x0^2 + 3*x0*x1 + 2*x1^2
def f(x):
return x[0]**2 + 3.0 * x[0] * x[1] + 2.0 * x[1]**2
# Gradient giải tích (analytical gradient)
def grad_analytical(x):
df_dx0 = 2.0 * x[0] + 3.0 * x[1]
df_dx1 = 3.0 * x[0] + 4.0 * x[1]
return np.array([df_dx0, df_dx1])
# Gradient số trị bằng sai phân trung tâm (central difference)
def grad_numerical(func, x, eps=1e-5):
grad = np.zeros_like(x)
for i in range(len(x)):
x_plus, x_minus = x.copy(), x.copy()
x_plus[i] += eps
x_minus[i] -= eps
grad[i] = (func(x_plus) - func(x_minus)) / (2.0 * eps)
return grad
# Điểm kiểm tra đạo hàm
point = np.array([2.0, -1.0])
g_ana = grad_analytical(point)
g_num = grad_numerical(f, point)
diff = np.linalg.norm(g_ana - g_num)
# In kết quả kiểm tra gradient (gradient checking)
print(f"Point (x) : {point}")
print(f"Analytical gradient : {g_ana}")
print(f"Numerical gradient : {g_num}")
print(f"Absolute difference : {diff:.8e}")
print(f"Gradient check pass?: {diff < 1e-7}")

The first run downloads Python, about 10 MB.

Kết quả chạy cho thấy:

  • Tại điểm kiểm tra x=[2.0,−1.0]\mathbf{x} = [2.0, -1.0], gradient giải tích tính ra đúng bằng [1.0,2.0][1.0, 2.0].
  • Gradient số trị tính bằng sai phân trung tâm với bước ϵ=10−5\epsilon = 10^{-5} cũng cho ra [1.0,2.0][1.0, 2.0].
  • Sai số tuyệt đối giữa hai phương pháp đạt mức cực nhỏ: 3.89×10−113.89 \times 10^{-11}. Phép kiểm tra diff < 1e-7 trả về True, xác nhận công thức đạo hàm đã được cài đặt chính xác tuyệt đối.

Ô thứ hai minh họa thuật toán lan truyền ngược từng bước (Backpropagation) cho một nơ-ron hồi quy đơn giản bằng cách áp dụng trực tiếp quy tắc chuỗi và đối chiếu với đạo hàm giải tích trực tiếp.

Cài đặt quy tắc chuỗi từng bước cho lan truyền ngược

# Giá trị đầu vào, nhãn và tham số ban đầu
x = 2.0
y = 7.0
w = 1.5
b = 0.5
# Lan truyền tiến (Forward pass): L = (w * x + b - y)^2
y_hat = w * x + b
loss = (y_hat - y) ** 2
# Lan truyền ngược từng bước bằng Quy tắc chuỗi (Chain Rule)
dL_dyhat = 2.0 * (y_hat - y)
dyhat_dw = x
dyhat_db = 1.0
# Kết hợp gradient theo quy tắc chuỗi: dL/dw = (dL/dy_hat) * (dy_hat/dw)
dL_dw = dL_dyhat * dyhat_dw
dL_db = dL_dyhat * dyhat_db
# Đạo hàm giải tích trực tiếp để kiểm chứng đối chiếu
direct_dL_dw = 2.0 * (w * x + b - y) * x
direct_dL_db = 2.0 * (w * x + b - y)
# In kết quả đối chiếu giữa lan truyền ngược và đạo hàm trực tiếp
print(f"Prediction (y_hat) : {y_hat:.4f}")
print(f"Loss (L) : {loss:.4f}")
print(f"dL/dw (chain rule) : {dL_dw:.4f}")
print(f"dL/dw (direct) : {direct_dL_dw:.4f}")
print(f"dL/db (chain rule) : {dL_db:.4f}")
print(f"dL/db (direct) : {direct_dL_db:.4f}")

The first run downloads Python, about 10 MB.

Kết quả in ra đối chiếu:

  • Với x=2.0x = 2.0, y=7.0y = 7.0, w=1.5w = 1.5, b=0.5b = 0.5, mô hình dự đoán y^=3.5\hat{y} = 3.5, dẫn tới hàm mất mát L=(3.5−7.0)2=12.25\mathcal{L} = (3.5 - 7.0)^2 = 12.25.
  • Bằng quy tắc chuỗi qua biến trung gian ∂L∂y^=−7.0\frac{\partial \mathcal{L}}{\partial \hat{y}} = -7.0, ta thu được ∂L∂w=−14.0000\frac{\partial \mathcal{L}}{\partial w} = -14.0000 và ∂L∂b=−7.0000\frac{\partial \mathcal{L}}{\partial b} = -7.0000.
  • Cả hai đạo hàm tính theo chuỗi đều trùng khớp hoàn toàn với công thức đạo hàm trực tiếp. Giá trị âm cho thấy nếu ta tăng ww và bb lên, y^\hat{y} sẽ tiến gần về 7.07.0 hơn và hàm mất mát sẽ giảm xuống.
Question 1 of 4 Vectơ gradient ∇f(x)\nabla f(\mathbf{x}) của một hàm số nhiều biến tại điểm x\mathbf{x} chỉ về hướng nào trên bề mặt hàm số?
Question 2 of 4 Xét hàm hợp mất mát của mạng nơ-ron: L=g(h(w))L = g(h(w)). Theo quy tắc chuỗi (Chain Rule), đạo hàm của LL theo trọng số ww được tính bằng biểu thức nào?
Question 3 of 4 Tại sao khi kiểm tra đạo hàm (gradient checking), người ta dùng sai phân trung tâm f(x+ϵ)−f(x−ϵ)2ϵ\frac{f(x+\epsilon) - f(x-\epsilon)}{2\epsilon} thay vì sai phân tiến f(x+ϵ)−f(x)ϵ\frac{f(x+\epsilon) - f(x)}{\epsilon}?
Question 4 of 4 Ma trận Hessian H\mathbf{H} trong giải tích nhiều biến là gì và nó cung cấp thông tin gì về bề mặt hàm mất mát?

Ý chính:

  • Đạo hàm đo tốc độ biến thiên tức thời; vectơ gradient tổng hợp các đạo hàm riêng và trỏ về hướng làm hàm số tăng dốc nhất.
  • Gradient Descent tối ưu hóa mô hình bằng cách bước ngược chiều gradient: θ←θ−η∇L(θ)\boldsymbol{\theta} \leftarrow \boldsymbol{\theta} - \eta \nabla \mathcal{L}(\boldsymbol{\theta}).
  • Quy tắc chuỗi (Chain Rule) là nền móng toán học cho phép thuật toán lan truyền ngược (Backpropagation) tính đạo hàm hiệu quả qua hàng trăm tầng mạng nơ-ron.
  • Đạo hàm bậc hai và ma trận Hessian quyết định độ cong của bề mặt mất mát và chi phối việc lựa chọn tốc độ học η\eta.

Đọc thêm:

  • Grant Sanderson (3Blue1Brown) (2017). Essence of Calculus, loạt video trực quan hóa trực giác giải tích vi tích phân xuất sắc.
  • Ian Goodfellow, Yoshua Bengio, Aaron Courville (2016). Deep Learning, Chương 4: Numerical Computation, phân tích gradient descent, điểm yên ngựa và ma trận Hessian.
  • Michael Nielsen (2015). Neural Networks and Deep Learning, Chương 2: How the backpropagation algorithm works, dẫn dắt 4 phương trình cơ bản của lan truyền ngược.
  • Christopher M. Bishop (2006). Pattern Recognition and Machine Learning, Mục 5.3 (Error Backpropagation).

Content licensed under CC BY-NC-SA 4.0. Code under the MIT license.About