---
title: "Giải tích và tối ưu hóa cho AI Engineer - gradient, chain rule, autodiff, Hessian, gradient descent và Adam"
description: "Khóa học giải thích phần giải tích và tối ưu hóa trong mỗi bước train model, từ đạo hàm, chain rule, autodiff đến Hessian, gradient descent và Adam. Bạn sẽ tính tay các update rule, kiểm tra hàm backward tự viết, chọn learning rate có căn cứ và chẩn đoán chính xác nguyên nhân khi loss xuất hiện NaN."
canonical: "https://200lab.io/courses/calculus-and-optimization-for-ai-engineers"
type: "course"
course_type: "course"
learning_type: "free_form"
published: "2026-10-22T02:51:18Z"
students: 28
---

## Khóa học này mang lại gì cho bạn

Ở mỗi bước train model, thư viện tính loss, tính gradient của loss theo từng weight, rồi cập nhật weight theo update rule. Loss đo mức độ sai lệch của model, còn gradient cho biết loss đổi bao nhiêu khi nhích riêng từng weight. Khóa học giải thích phần giải tích và tối ưu hóa đứng sau cả ba thao tác ấy, từ đạo hàm của hàm một biến tới update rule của Adam, và chỉ rõ từng công thức cần điều kiện gì để bảo đảm kết quả đúng.

- **Đo độ nhạy bằng đạo hàm** — Bạn tính đạo hàm, đọc đúng đơn vị và dùng đạo hàm để ước lượng mức biến thiên của loss khi weight nhích một lượng nhỏ: với L(w) = w² tại w = 3, nhích w thêm **0,01** thì loss tăng xấp xỉ **0,06**, sát mức tăng thực tế **0,0601**. Bạn nhận biết điểm gãy như hàm ReLU tại 0 không có đạo hàm, và giá trị thư viện trả về tại đó là giá trị quy ước.
- **Đọc gradient của ma trận weight** — Bạn làm việc với gradient có cùng shape với ma trận weight, nơi mỗi ô là đạo hàm riêng theo đúng một weight. Khi loss khả vi tại điểm đang xét và gradient khác 0, bạn xác định được negative gradient là hướng làm loss giảm nhanh nhất quanh điểm ấy, so với mọi hướng có cùng độ dài.
- **Lần theo các nhánh qua chain rule** — Bạn áp dụng chain rule trên computational graph có rẽ nhánh bằng cách nhân các đạo hàm cục bộ dọc mỗi đường rồi cộng kết quả của các đường lại, và cộng dồn gradient ở nút dùng chung thay vì ghi đè. Bạn hiểu vì sao reverse mode cho ra gradient của toàn bộ weight chỉ sau đúng một lượt backward khi bài toán có một loss duy nhất.
- **Kiểm tra hàm backward tự viết** — Bạn so sánh kết quả do hàm backward trả về với central difference bằng sai lệch tương đối trên kiểu số float64. Bạn chọn ngưỡng tolerance có căn cứ, phân biệt truncation error với rounding error khi chọn bước h, và tránh đặt điểm kiểm tra rơi trúng điểm gãy.
- **Phân loại điểm dừng bằng Hessian** — Tại điểm có gradient bằng 0, bạn lập bảng đạo hàm riêng bậc hai kích thước **2** × **2** từ công thức của hàm loss. Bạn dựa vào dấu các eigenvalue để phân biệt cực tiểu cục bộ, cực đại cục bộ hay điểm yên ngựa, và ghi nhận chưa kết luận được khi xuất hiện eigenvalue bằng 0.
- **Tính tay các bước cập nhật của SGD và Adam** — Bạn tính từng bước gradient descent, xác định ngưỡng learning rate từ độ cong của hàm loss bậc hai, ước lượng độ nhiễu của gradient theo batch size, tính trọn vẹn một bước Adam có bias correction, và đọc lịch warmup cùng cosine decay.
- **Truy tìm nguyên nhân khi loss thành NaN** — Bạn xác định phép toán gây overflow, underflow hoặc sinh ra NaN, tính softmax ổn định bằng kỹ thuật log-sum-exp, và chẩn đoán lỗi dựa trên dữ liệu, hàm mục tiêu cùng update rule trước khi quyết định đổi kiểu số.

Khóa học trang bị nền tảng giải tích và tối ưu hóa cốt lõi, độc lập với framework bạn dùng khi train model trong thực tế.

## Khóa học cung cấp những nền tảng nào

Khi một weight nhích nhẹ, loss thay đổi bao nhiêu? Đạo hàm trả lời câu hỏi cốt lõi này, và toàn bộ bốn chương của khóa học được phát triển từ nền tảng ấy. Gradient gom các đạo hàm riêng theo từng weight thành một vector, chain rule xâu chuỗi các đạo hàm cục bộ qua từng phép tính, còn optimizer dùng gradient để điều chỉnh weight. Thông tin từ gradient chỉ có giá trị bảo đảm ở vùng lân cận điểm đang xét, nên khi weight di chuyển sang vị trí mới, gradient phải được tính lại.

Bạn có thể tham khảo thêm các tài liệu kinh điển: giáo trình mở [Calculus của Gilbert Strang trên MIT OpenCourseWare](https://ocw.mit.edu/courses/res-18-001-calculus-fall-2023/pages/open-textbook) về đạo hàm và gradient, bài báo tổng quan [Automatic Differentiation in Machine Learning: a Survey](https://arxiv.org/abs/1502.05767) của Baydin và cộng sự về computational graph cùng autodiff, và bài báo gốc [Adam của Kingma và Ba](https://arxiv.org/abs/1412.6980) về thuật toán Adam cùng các hệ số mặc định.

### 1. Đạo hàm, đạo hàm riêng và gradient

Một chiếc xe xuất phát từ trạng thái đứng yên và đi được quãng đường 2t² mét sau t giây. Từ giây thứ 3 đến giây thứ 4, xe đi thêm **14** m, nhưng đồng hồ tốc độ tại đúng giây thứ 3 chỉ **12** m/s. Khi khoảng thời gian h thu ngắn dần quanh mốc 3 giây, độ dốc dồn về đúng con số **12** m/s; đó chính là đạo hàm, mang đơn vị của đầu ra chia cho một đơn vị đầu vào.

Đạo hàm tồn tại khi độ dốc từ hai phía cùng dồn về một số duy nhất, do đó các hàm gãy góc như ReLU tại 0 không có đạo hàm theo định nghĩa toán học.

Khi chuyển sang hàm hai biến trên bản đồ địa hình, độ dốc theo từng trục đông-tây và bắc-nam là các đạo hàm riêng, ghép lại thành vector gradient. Trong model, gradient do thư viện trả về có cùng shape với ma trận weight, ví dụ **768** × **3.072**, trong đó mỗi ô là tốc độ thay đổi của loss khi nhích riêng một weight tương ứng.

### 2. Chain rule, computational graph và autodiff

Khi nhiệt độ tăng thêm **1**°C, tiền điện của một căn nhà tăng thêm **1.800** đồng qua máy điều hòa và **150** đồng qua tủ lạnh. Quy tắc chain rule nhân các độ nhạy dọc theo từng nhánh rồi cộng kết quả lại thành **1.950** đồng/°C; với biểu thức (3w + 1)² tại w = 1, weight nằm ở cả hai nhánh nên gradient là 12 + 12 = 24, nếu chỉ lần theo một nhánh thì giá trị bị thiếu mất một nửa.

Computational graph biểu diễn các phép tính thành mạng lưới các nút: lượt forward tính giá trị đầu ra, còn lượt backward truyền đạo hàm ngược về và cộng dồn gradient tại nút phân nhánh. Với ma trận weight kích thước **768** × **3.072**, forward mode cần **2.359.296** lượt tính riêng cho từng weight, trong khi reverse mode chỉ cần đúng một lượt backward duy nhất cho toàn bộ ma trận.

Để kiểm tra hàm backward tự viết, bạn dùng gradient check so sánh với central difference: sai lệch tương đối ở mức **0,5** vượt xa ngưỡng tolerance 10⁻⁵ sẽ báo hiệu hàm backward viết sai đạo hàm.

### 3. Hessian, gradient descent, SGD và Adam

Loss w₁² + 3w₁w₂ + w₂² có gradient bằng 0 tại gốc tọa độ (0, 0) và hai ô trên đường chéo của Hessian đều là 2. Tuy nhiên, ma trận Hessian này có hai eigenvalue là **5** và **−1**, cho thấy (0, 0) là điểm yên ngựa chứ không phải đáy: tại điểm (0,1; -0,1), loss đã hạ xuống mức **−0,01**, thấp hơn giá trị 0 tại điểm dừng.

Trong gradient descent, learning rate η điều khiển độ dài bước cập nhật: với loss 5w₁² + w₂² có độ cong lớn nhất bằng 10, ngưỡng hội tụ là 2 / 10 = 0,2; chọn η = 0,19 thì weight hội tụ theo đường zigzag, còn η = 0,21 khiến quá trình phân kỳ.

Khi chuyển sang mini-batch SGD, việc tăng batch size từ **32** lên **128** giúp giảm độ nhiễu gradient đi một nửa theo quy tắc căn bậc hai của số mẫu độc lập. Với Adam, thuật toán duy trì hai trung bình động hàm mũ cho gradient và bình phương gradient với các hệ số mặc định **0,9** và **0,999**, đồng thời áp dụng bias correction để bù trừ độ lệch khởi tạo bằng 0 trước khi cập nhật từng weight.

### 4. Hàm lồi, constraint và lỗi số học của số dấu phẩy động

Một chú chó bị xích bằng sợi dây **1** m tại gốc tọa độ, hướng về bát thức ăn tại điểm (3, 4). Giới hạn độ dài dây tạo thành constraint x² + y² ≤ 1, và tại vị trí mép gần bát nhất (0,6; 0,8), gradient của constraint cần nhân với nhân tử Lagrange bằng **4** để cân bằng với gradient của bình phương khoảng cách tới bát thức ăn.

Khi xét hàm loss (w₁w₂ — 1)², phép thử nối hai điểm cho thấy loss bằng 0 tại (1, 1) và (-1, -1) nhưng lại tăng lên 1 tại điểm giữa (0, 0), chứng minh loss có chứa tích các weight nói chung không lồi. Phạt L2 và weight decay trùng nhau khi dùng với SGD thông thường, nhưng khi dùng với Adam thì phần phạt L2 bị chia qua căn bậc hai của bình phương gradient, khiến AdamW phải tách riêng weight decay.

Bên cạnh đó, số thực fp16 chỉ lưu được giá trị tối đa là **65.504**; khi gặp các logit 10, 11, 12, số mũ e¹² xấp xỉ **162.755** sẽ gây overflow thành inf, buộc ta phải trừ logit lớn nhất để giữ phép tính softmax luôn ổn định.

## Vì sao 200Lab tạo ra khóa học này

Khi bạn train hoặc fine-tune một model deep learning, các framework hiện đại đã tự động hóa hầu hết các phép tính giải tích. Thư viện tự động xây dựng đồ thị tính toán để trả về gradient, các file mẫu điền sẵn learning rate cùng bộ tham số của Adam, giúp quá trình chạy thử nghiệm diễn ra thuận lợi mà không đòi hỏi bạn phải đặt bút tính một đạo hàm nào.

Tuy nhiên, sự trừu tượng hóa đó cũng tạo ra một khoảng trống khi model gặp sự cố trong lúc train. Khi loss dao động mạnh, phân kỳ hoặc đột ngột biến thành NaN, dòng log chỉ hiển thị kết quả cuối cùng chứ không chỉ ra phép toán nào phía sau đã gây ra lỗi. Nếu không nắm vững bản chất giải tích, phản xạ tự nhiên của kỹ sư thường là đổi vội một vài dòng cấu hình, tăng giảm batch size hoặc thay đổi optimizer rồi chờ đợi lượt chạy tiếp theo.

Cách tiếp cận thử sai ngẫu nhiên này làm tiêu tốn thời gian tính toán và tài nguyên phần cứng. Một lượt chạy sau trông có vẻ ổn định chưa chắc xuất phát từ việc nguyên nhân gốc rễ đã được xử lý, khiến lỗi tiềm ẩn có thể tái diễn ở những tập dữ liệu khác. Khi hiểu rõ công thức tính gradient, nguồn gốc của ngưỡng learning rate và các phép tính sinh ra giá trị bất định, bạn có thể phân tích ngược từ triệu chứng trên log về đúng bản chất phép toán để đưa ra quyết định xử lý chính xác.

200Lab xây dựng khóa học này nhằm đưa phần toán nền tảng trở lại vị trí công cụ làm việc thực tế của kỹ sư AI. Từng khái niệm giải tích và tối ưu hóa đều được bắt đầu từ việc tính tay trên những hàm số nhỏ vài tham số, giúp bạn nhìn thấu từng bước xử lý bên trong thư viện kèm theo các điều kiện cụ thể để mỗi công thức vận hành chính xác.

## Những vấn đề thường gặp khi tính gradient và cập nhật weight

Khi tiến trình train gặp trục trặc, phản xạ phổ biến là điều chỉnh cấu hình theo các kinh nghiệm truyền miệng quen thuộc. Những nhận định này có thể đúng trong một số tình huống riêng biệt, nhưng thường gây hiểu nhầm khi người dùng bỏ qua các điều kiện biên của phép toán.

- Gradient check đạt độ lệch nhỏ ở vài điểm dương và hàm backward được coi là đúng hoàn toàn — phép kiểm tra sai phân chỉ phản ánh tính đúng đắn tại các điểm đã thử, khiến các lỗi logic ở nhánh giá trị âm như 3x × |x| thay vì 3x² dễ bị bỏ sót.
- Weight dừng di chuyển khi gradient bằng 0 và được ghi nhận đã chạm đáy — gradient bằng 0 chỉ xác định đó là một điểm dừng, trong khi bề mặt loss tại đó có thể là điểm yên ngựa hoặc một điểm uốn không phải cực tiểu.
- Tăng learning rate để đẩy nhanh tốc độ hội tụ của loss — khi learning rate vượt qua ngưỡng hai chia cho độ cong lớn nhất của hàm loss bậc hai, khoảng cách tới đích bị nhân với hệ số có độ lớn lớn hơn 1, khiến weight dao động rồi phân kỳ.
- Tăng batch size lên gấp tám lần nhằm giảm độ nhiễu gradient tương ứng tám lần — khi các mẫu dữ liệu độc lập, độ lệch chuẩn của gradient trung bình chỉ giảm căn bậc hai của tám lần, tức xấp xỉ **2,83** lần, trong khi khối lượng tính toán mỗi bước tăng lên khoảng **8** lần.
- Giữ nguyên learning rate mặc định khi chuyển sang dùng Adam vì nghĩ optimizer này tự chọn độ dài bước — learning rate vẫn là hệ số nhân trực tiếp độ dài bước cập nhật, khiến bước nhảy của Adam ở các bước đầu tiên dài tương ứng với giá trị learning rate bạn đặt.
- Thêm phạt L1 vào loss với kỳ vọng chắc chắn triệt tiêu một số weight về đúng 0 — nghiệm tối ưu có đưa weight về 0 hay không phụ thuộc vào vị trí tương đối giữa đường đồng mức của hàm mục tiêu và các cạnh của hình vuông L1.
- Đổi kiểu số từ fp16 sang fp32 ngay khi loss xuất hiện NaN — giá trị NaN còn có thể phát sinh từ nhãn dữ liệu chứa NaN, từ phép tính logarit khi xác suất bằng 0 sinh ra dạng 0 × inf, hoặc từ learning rate quá lớn làm weight tăng dần tới mức tràn số.

Các bài học trong khóa sẽ giúp bạn kiểm tra tường tận từng điều kiện giả định phía sau các hiện tượng trên trước khi quyết định thay đổi mã nguồn hoặc cấu hình train.

## Bạn sẽ học theo cách nào

- **Dự đoán trực giác trước khi tính tay** — Mỗi bài học bắt đầu bằng một tình huống thực tế gần gũi như tốc độ xe chạy, núm vặn vòi sen hay nếm thìa canh để bạn ước lượng kết quả, sau đó tự tay tính trên số liệu nhỏ để kiểm chứng trực giác.
- **Tương tác trực quan và so sánh số liệu** — Bạn thao tác trên các widget tương tác để thay đổi khoảng cách h, xoay hướng đi trên bề mặt địa hình hay chỉnh thanh trượt learning rate, rồi đối chiếu hình ảnh trực quan với các giá trị vừa tính trên giấy.
- **Gắn liền định nghĩa toán học với điều kiện áp dụng** — Các công thức giải tích luôn đi kèm điều kiện biên cụ thể như tính khả vi, tính đối xứng của ma trận hay tính độc lập của mẫu dữ liệu, kèm theo hướng dẫn thực hành trên file log hoặc cấu hình thực tế.
- **Củng cố kiến thức bằng câu hỏi trắc nghiệm** — Trừ bài mở đầu định hướng, mỗi bài học đều có phần quiz ngắn ở cuối bài để bạn tự rà soát mức độ hiểu sâu các khái niệm trọng tâm.
- **Tích hợp hai bài nền tảng từ lộ trình toán** — Khóa học bố trí sẵn bài về hàm số và đồ thị trước phần đạo hàm, cùng bài về eigenvalue và độ cong trước phần Hessian; bạn sẽ thấy hai bài này được đánh dấu hoàn thành nếu đã học các khóa toán trước đó.

## Khóa học dành cho ai

1. **AI Engineer** — Bạn cần đọc hiểu các update rule trong paper mới, tự tay viết và kiểm tra gradient cho các layer tùy biến, hoặc chẩn đoán nguyên nhân khi quá trình train model bị phân kỳ hay xuất hiện lỗi NaN.
2. **Vibe coder muốn đi sâu** — Bạn muốn nắm vững ý nghĩa các chỉ số loss, learning rate và gradient norm khi theo dõi log fine-tune model thay vì chỉ thử nghiệm cấu hình một cách ngẫu nhiên.
3. **AI/Agent Builder** — Bạn cần làm chủ các công thức toán học về optimizer, cơ chế warmup và learning rate schedule khi tinh chỉnh model phục vụ các tác vụ chuyên biệt của agent.

## Những điều cần lưu ý

- **Phạm vi tính toán tập trung vào hàm số nhỏ** — Các bài tập tính tay đạo hàm, gradient và Hessian dừng lại ở hàm số tối đa hai biến và đồ thị vài nút tính toán; khóa học không đi sâu vào chứng minh giải tích thuần túy, tích phân hay lan truyền ngược qua toàn bộ mạng lớn, mà giúp bạn làm chủ chain rule và update rule dùng chung cho mọi kiến trúc.
- **Kiến thức chuẩn bị trước khi học** — Khóa học sử dụng các kiến thức nền tảng từ khóa “Toán học cơ bản cho AI Engineer”, bao gồm hàm mũ, logarit, softmax của ba điểm số, phép nhân ma trận cỡ nhỏ và cách đọc đồ thị hàm số.
- **Các khóa học bổ trợ không mang tính bắt buộc** — Khóa “Đại số tuyến tính cho AI Engineer” giúp bạn hiểu sâu hơn về eigenvalue, và khóa “Xác suất thống kê cho AI Engineer” bổ trợ trực giác về standard error; các khái niệm này đều được tóm lược ngắn gọn ngay tại bài học khi cần dùng tới.
- **Đọc hiểu logic mã nguồn thay vì lập trình chuyên sâu** — Bài học có các đoạn code Python và numpy mẫu minh họa cho gradient check và tính softmax ở fp16 để bạn đọc hiểu cơ chế; bạn không bắt buộc phải viết code hay chạy thử để hoàn thành nội dung.

## Bắt đầu từ đâu

Loss tăng bao nhiêu lần sau một bước cập nhật, và learning rate đạt mức nào ở bước thứ **500** của giai đoạn warmup? Bài mở đầu sẽ cùng bạn phân tích hai câu hỏi này trên một trang log train giả định có `lr=3e-4`, nơi loss nhảy từ **2,31** lên **7,95** rồi biến thành NaN: loss đã tăng xấp xỉ **3,44** lần, còn learning rate lúc đó đạt con số 7,5 × 10⁻⁵. Toàn bộ các phép tính trong bài đều có thể kiểm tra trực tiếp bằng giấy bút, giúp bạn làm quen ngay với các chỉ số giải tích trong quá trình train model.

## Chương trình

- Đạo hàm, gradient và các số liệu trong log train model (miễn phí)

### Đạo hàm, đạo hàm riêng và gradient

- Hàm số, đồ thị và những đường thẳng, đường cong bên trong model · quiz
- Đạo hàm và độ nhạy của loss khi một weight thay đổi (miễn phí) · quiz
- Đạo hàm riêng, gradient và hướng làm loss giảm nhanh nhất (miễn phí) · quiz

### Chain rule, computational graph và autodiff

- Chain rule và cách tính xem một weight ảnh hưởng tới loss bao nhiêu (miễn phí) · quiz
- Computational graph và reverse mode khi tính gradient cho hàng triệu weight · quiz
- Autodiff, gradient check và cách kiểm tra hàm backward bạn tự viết · quiz

### Hessian, gradient descent, SGD và Adam

- Eigenvalue, eigenvector, ma trận đối xứng và độ cong của bề mặt loss · quiz
- Xấp xỉ Taylor, Hessian và điểm yên ngựa trên bề mặt loss · quiz
- Gradient descent và learning rate làm loss giảm, dao động hoặc phân kỳ · quiz
- Stochastic gradient, mini-batch và độ nhiễu của gradient theo batch size · quiz
- Momentum, Adam và bước cập nhật riêng cho từng weight · quiz
- Learning rate schedule, warmup và quyết định dừng train · quiz

### Hàm lồi, constraint và lỗi số học của số dấu phẩy động

- Hàm lồi, constraint và regularization trong loss của model · quiz
- Overflow, underflow, NaN và log-sum-exp khi loss bỗng thành inf giữa lúc train · quiz
