---
title: "Đại số tuyến tính cho AI Engineer - linear map, rank, least squares, eigenvalue, SVD và PCA"
description: "Khóa đại số tuyến tính cho AI Engineer, học sau khóa Toán học cơ bản cho AI Engineer, gồm linear map, rank, least squares, eigenvalue, SVD, PCA và condition number. Bạn tính tay trên ma trận nhỏ, rồi đọc layer, rank của LoRA, biểu đồ PCA và sai số khi giải hệ bằng fp16, kèm điều kiện để đọc đúng."
canonical: "https://200lab.io/courses/linear-algebra-for-ai-engineers"
type: "course"
course_type: "course"
learning_type: "free_form"
published: "2026-10-22T02:51:13Z"
students: 0
---

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

Ở khóa Toán học cơ bản cho AI Engineer, vector là dãy số và ma trận là bảng số có shape. Khóa học này đi tiếp từ chỗ đó: mỗi ma trận được xem là phép biến đổi vector, và bạn học cách đọc phép biến đổi ấy. Mỗi cách đọc đều đi kèm chỗ dùng của nó ở bước train, fine-tune hoặc đánh giá model.

- **Xem layer là linear map** — Bạn đọc shape **2.048** × **512** của layer `nn.Linear(512, 2048)` và kiểm tra shape khi nối hai layer. Bạn biết hai layer không có bias và không có ReLU hoặc hàm tương tự ở giữa thì gộp được thành một ma trận, còn layer có bias khác 0 là affine map.
- **Chọn thước đo khoảng cách** — Bạn chọn norm L1, norm L2 hoặc cosine theo đơn vị và điều kiện của dữ liệu, và biết rằng khoảng cách L2 và cosine xếp các embedding theo cùng một thứ tự gần xa khi mọi vector đã được đưa về độ dài 1.
- **Đếm tham số LoRA theo rank** — Với LoRA rank **8** trên ma trận trọng số **4.096** × **4.096**, bạn tính ra **65.536** tham số học thêm và biết số 8 trong cấu hình chỉ là mức trần cho rank của phần cập nhật.
- **Giải và đọc least squares** — Bạn tách vector thành hình chiếu và residual (phần còn lại), rồi giải normal equations để tìm đường thẳng khớp nhất với vài điểm dữ liệu. Khi các cột của ma trận dữ liệu phụ thuộc tuyến tính, bạn biết vì sao không nên đọc riêng từng trọng số mà thư viện trả về.
- **Đọc eigenvalue và SVD** — Bạn tính eigenvalue của ma trận **2** × **2**, đọc dấu các eigenvalue của ma trận độ cong của loss tại điểm dừng, và đọc SVD thành các hướng mà ma trận kéo dài hoặc co lại vector, kèm dãy singular value giảm dần.
- **Chọn số thành phần giữ lại** — Bạn chọn số singular value giữ lại khi nén ma trận, tính xem phải lưu bao nhiêu số và bản nén sai số bao nhiêu. Với PCA, bạn chọn số trục theo tỉ lệ explained variance cộng dồn và nói được những điều mà tỉ lệ ấy không cho bạn biết.
- **Ước lượng sai số khi giải hệ** — Bạn tính condition number từ singular value lớn nhất và nhỏ nhất, rồi tìm cận trên cho sai số tương đối của nghiệm khi giải hệ vuông (số phương trình bằng số ẩn) mà chỉ các số ở vế phải bị làm tròn khi lưu bằng fp32, fp16 hoặc bf16.

Khóa học thuộc nhánh toán cho nghề AI Engineer và không chứng minh định lý. Bạn làm phép tính bằng tay trên ma trận nhỏ, còn cách đọc thì dùng được cho ma trận trọng số, embedding và cấu hình fine-tune, miễn là điều kiện của từng cách đọc còn đúng.

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

Xuyên suốt bốn chương là một cách nhìn: ma trận là phép biến đổi vector. Rank cho biết các vector kết quả trải ra bao nhiêu chiều, còn singular value đo xem vector bị kéo dài hoặc co lại bao nhiêu theo những hướng nhất định. Layer, phần cập nhật của LoRA hay ma trận hiệp phương sai của embedding đều được đọc theo cách nhìn ấy.

Với hệ vuông có nghiệm duy nhất, tức ma trận của hệ có nghịch đảo, và vế phải khác vector 0, condition number cho biết sai số tương đối nhỏ ở vế phải có thể bị phóng to nhiều nhất bao nhiêu lần ở nghiệm. Đó là mức phóng to trong trường hợp xấu nhất, khi ma trận của hệ không có sai số, chỉ vế phải có sai số, và mọi sai số đều đo bằng độ dài vector (L2).

Ba nguồn đọc thêm đi cùng khóa là loạt video [Essence of Linear Algebra của 3Blue1Brown](https://www.3blue1brown.com/lessons/linear-transformations), bài giảng [phép chiếu và least squares của MIT 18.06](https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/resources/lecture-16-projection-matrices-and-least-squares/) và [paper LoRA của Hu và cộng sự](https://arxiv.org/abs/2106.09685).

### 1. Vector, norm và linear map

Lấy nhà bạn làm gốc tọa độ, tiệm A nằm ở (3, 4) khối, tức **3** khối theo chiều ngang và **4** khối theo chiều dọc, còn tiệm B nằm ở (6, 0) khối. Đi theo phố thì B gần hơn, **6** khối so với **7** khối; đo bằng thước kẻ thẳng thì A gần hơn, **5** khối so với **6** khối. Hai câu trả lời đến từ hai norm khác nhau, vì khoảng cách có thể đổi theo norm bạn chọn và theo đơn vị của từng chiều.

Giả sử mỗi khối dài **100 m**. Nếu trục ngang ghi bằng mét còn trục dọc vẫn ghi bằng khối, cách đo theo phố cho tiệm A con số 304, tức **300** m cộng **4** khối; con số trông hợp lý nhưng không mang đơn vị nào. Đo cả hai trục bằng mét rồi đi theo phố thì tiệm A cách nhà **700 m**, xa hơn tiệm B tới **100 m**.

Đằng sau dòng `max_grad_norm = 1.0` trong cấu hình train cũng chỉ là phép đo norm L2 và phép nhân vector với một số. Vector gradient (1,2; 1,6) có norm L2 bằng 2, vượt ngưỡng 1, nên được nhân với 1/2 mà vẫn giữ nguyên hướng.

Bản vẽ mặt bằng căn phòng bị kéo ngang và ép dọc trong một phép biến đổi, rồi xoay **90°** trong phép thứ hai, cho thấy ghép hai phép biến đổi là nhân hai ma trận. Đổi thứ tự hai phép thì điểm (1, 0) m được đưa tới hai chỗ khác nhau, một chỗ cách góc phòng **2 m**, chỗ kia chỉ **0,5 m**.

Từ đó, bạn đọc được hai layer liền nhau: layer đầu nhận **512** số và trả về **2.048** số, layer sau đưa về lại **512** số. Khi cả hai không có bias và giữa chúng không có ReLU hoặc hàm tương tự, hai layer gộp thành ma trận **512** × **512**, nên số trọng số giảm từ **2.097.152** xuống **262.144**.

### 2. Span, rank, phép chiếu và least squares

Bốn tuýp sơn là ví dụ cho span và basis: tuýp C pha được từ tuýp A và tuýp B, nên thêm C không cho thêm màu nào. Bảng dữ liệu train cũng có những cột thừa kiểu ấy, chẳng hạn cột điểm phạt bằng **2** lần số lỗi nặng cộng số lỗi nhẹ, hoặc ba cột one-hot cộng lại đúng bằng cột toàn số 1.

Cuốn sổ ghi số đo của **3** mảnh vườn có **3** cột là chiều dài, chiều rộng và nửa chu vi, nhưng rank của bảng chỉ là 2, vì nửa chu vi bằng chiều dài cộng chiều rộng. Rank của tích hai ma trận không vượt rank của từng ma trận, nên phần cập nhật của LoRA rank **8** trên ma trận **4.096** × **4.096** có rank tối đa là 8, dù nó có tới **16.777.216** ô.

Khi bạn đạp xe về hướng đông bắc, cơn gió (3, 4) m/s được tách thành hình chiếu lên đường đi, có độ dài xấp xỉ **4,95 m/s**, và residual vuông góc với đường đi. Cùng phép tính ấy giúp bạn bỏ một hướng ra khỏi vector embedding. Khi trọng số được chọn theo least squares, dự đoán của linear regression cũng là hình chiếu của cột nhãn lên không gian cột (span của các cột) của ma trận dữ liệu.

Bốn điểm ghi chiều cao **3**, **5**, **6**, **8** cm của cây đậu qua bốn tuần không cùng nằm trên một đường thẳng. Least squares chọn đường có độ dốc **1,6 cm/tuần**, và đoạn code numpy gọi `np.linalg.lstsq` làm lại đúng phép tính ấy. Chương khép lại bằng linear probe trên **5.000** embedding **768** chiều; ở đó, rank mà thư viện trả về cho bạn biết có đọc được từng trọng số hay không.

### 3. Eigenvalue, ma trận đối xứng và SVD

Mỗi đêm, **10%** số xe ở trạm A được chở sang trạm B và **20%** số xe ở B được chở về A. Với **300** xe, chia **200** xe ở A và **100** xe ở B thì phân bố giữ nguyên qua mọi đêm. Vector (200, 100) ấy là eigenvector ứng với eigenvalue 1, còn phần lệch khỏi nó bị nhân với 0,7 sau mỗi đêm.

Eigenvalue của ma trận **2** × **2** tính được từ tổng hai số trên đường chéo và định thức. Ma trận đối xứng có eigenvalue thực và có bộ eigenvector đôi một vuông góc, nhưng không phải ma trận nào cũng có eigenvector thực, chẳng hạn ma trận của phép xoay **90°**.

Với model, nếu ma trận độ cong của loss tại một điểm dừng có hai eigenvalue 3 và −1 thì điểm ấy là điểm yên ngựa, dù cả bốn ô của ma trận đều dương. Kết luận này cần loss trơn quanh điểm đó, tức bề mặt loss không có chỗ gấp khúc.

Chiếc vòng chun bán kính **1 cm** bị kéo thành hình elip là hình ảnh của SVD, vì ma trận **2** × **2** nào cũng chỉ xoay (có thể kèm lật), kéo hoặc co dọc hai trục vuông góc, mỗi trục một mức riêng, rồi xoay tiếp. Mức kéo dọc mỗi trục là singular value. Với ma trận kéo xiên có số lớn nhất trong bảng bằng 2, điểm xa tâm nhất lại cách tâm xấp xỉ **2,83 cm**.

Khi singular value lớn nhất của một layer đi từ 1,8 lên 5,4 qua hai checkpoint, mức kéo dài lớn nhất mà layer làm với vector tăng gấp **3** lần. Mức kéo dài theo các hướng khác thì phải đọc từ cả dãy singular value. Spectral normalization cũng dùng chính singular value lớn nhất ấy: nó chia ma trận trọng số cho con số này.

### 4. Low-rank approximation, PCA và condition number

Bức ảnh **3** × **3** điểm ảnh có mỗi hàng là bội của hàng (1, 2, 3) chỉ cần lưu **6** số thay cho **9** ô. Với ma trận có dãy singular value 10; 4; 1; 0,5, nếu giữ hai singular value lớn nhất thì bản nén còn xấp xỉ **98,9%** tổng bình phương các ô, nhưng sai số tương đối theo norm Frobenius vẫn xấp xỉ **10,3%**.

Nếu nén ma trận trọng số **4.096** × **4.096** bằng cách giữ **16** singular value lớn nhất thì cần lưu **131.088** số, và cách này chỉ đáng làm khi dãy singular value giảm nhanh. LoRA rank **16** trên cùng ma trận học **131.072** tham số mà vẫn giữ nguyên ma trận gốc, nên LoRA không nén ma trận trọng số.

Điểm Toán và điểm Lý của **4** thí sinh cho thấy PCA chọn trục thế nào: sau khi dữ liệu được dời về quanh trung bình, tức trừ trung bình của từng cột, trục chéo giữ **90%** phương sai. Đổi điểm Lý sang thang điểm 100 thì tỉ lệ của trục đầu lên xấp xỉ **99,6%**, dù thứ tự điểm của bốn thí sinh không đổi.

Trên biểu đồ PCA của **2.000** embedding, hai trục giữ **12%** và **7%** phương sai, nên các cụm bạn thấy trên biểu đồ chỉ dựa trên **19%** tổng phương sai.

Hai lần mua cam và quýt chỉ khác nhau **0,01** kg quýt. Khi bạn giải hệ phương trình từ hai lần mua để tìm giá từng loại, chỉ cần ghi nhầm tổng tiền **1** nghìn đồng thì giá cam tính ra đã rơi về **0 đồng**. Hệ phương trình ấy có condition number xấp xỉ **402**.

Trong báo cáo fine-tune giả định mà khóa dùng làm ví dụ, bước giải hệ vuông có condition number xấp xỉ **400**. Nếu chỉ vế phải bị làm tròn về số gần nhất lưu được ở fp16, và không có số nào quá lớn hay quá nhỏ so với giới hạn của kiểu số này, thì sai số tương đối của nghiệm có cận trên chừng **20%**.

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

Trong việc hằng ngày của một AI Engineer, đại số tuyến tính hiện ra ở những dòng rất cụ thể, như rank **8** trong cấu hình LoRA, singular value của ma trận trọng số trong paper hay hai con số phần trăm cạnh trục của biểu đồ PCA. Paper và model card dùng những thuật ngữ ấy như thể người đọc đã quen, còn báo cáo sau mỗi lần fine-tune không in ra điều kiện để đọc đúng từng con số.

Khi chưa có phép tính đứng sau, bạn dễ hiểu những thuật ngữ ấy theo nghĩa thường ngày. “Rank thấp” nghe như model kém, LoRA nghe như cách nén ma trận, hai cụm trên biểu đồ nghe như dữ liệu có hai nhóm.

Mỗi cách hiểu như vậy có thể dẫn tới một quyết định sai trong chính dự án của bạn, như chọn rank theo cảm giác, rút kết luận từ một biểu đồ chỉ giữ **19%** phương sai, hoặc đổi kiểu số ở bước không cần đổi mà bỏ sót bước cần đổi.

Nếu bạn mở giáo trình đại số tuyến tính ở đại học để tra rank, bạn sẽ gặp không gian vector trừu tượng và chứng minh trước khi gặp một ví dụ có số. Còn paper thì dùng rank, SVD và condition number mà không dừng lại giải thích. Giữa hai loại tài liệu ấy, hiếm ai chỉ cho bạn phép tính trên ma trận **2** × **2** trở thành cách đọc dòng cấu hình hay biểu đồ của model ra sao.

200Lab làm khóa học này để lấp đúng khoảng trống ấy. Với mỗi khái niệm, phép tính bạn làm trên bản đồ khu phố, cuốn sổ ghi số đo mảnh vườn hay chiếc vòng chun cũng chính là phép tính dùng cho ma trận trọng số và embedding. Đến lúc chọn rank cho LoRA, quyết định có tin một biểu đồ PCA hay không, hoặc chọn kiểu số cho bước giải hệ phương trình, bạn đã tự biết mỗi con số nói gì và cần điều kiện nào để đúng.

## Những vấn đề thường gặp khi đọc ma trận và vector trong model

Khi đọc con số về ma trận của model, người ta thường dựa vào tên gọi hoặc vào số lớn nhất trên bảng rồi kết luận ngay. Phép tính và điều kiện đứng sau con số bị bỏ qua, nên kết luận nói vượt quá những gì con số đo được.

- LoRA rank **8** trên ma trận trọng số **4.096** × **4.096** chỉ có **65.536** tham số, và ghi chú viết “LoRA nén ma trận còn xấp xỉ **0,39%**” — LoRA giữ nguyên đủ **16.777.216** tham số của ma trận gốc và học thêm phần cập nhật, nên **0,39%** là tỉ lệ tham số học thêm, không phải tỉ lệ nén.
- Số 8 trong cấu hình LoRA được ghi vào báo cáo là rank của phần cập nhật mà model học được khi fine-tune — số ấy chỉ là mức trần; phần cập nhật là tích của hai ma trận nhỏ, và theo paper LoRA, lúc bắt đầu fine-tune một trong hai ma trận ấy được đặt bằng 0, nên phần cập nhật khi đó có rank 0.
- Layer khai báo bằng `nn.Linear` có bias được gọi là linear map, và hai layer có ReLU ở giữa vẫn được coi là ma trận gộp — layer có bias khác 0 là affine map, còn khi có ReLU hoặc hàm tương tự ở giữa thì nói chung hai layer không gộp được thành một ma trận.
- Singular value lớn nhất của một layer tăng từ 1,8 lên 5,4, và báo cáo viết mọi vector qua layer ấy dài ra gấp ba — con số ấy chỉ nói về hướng bị kéo mạnh nhất, còn mức kéo dài theo các hướng khác phải đọc từ cả dãy singular value.
- Các chấm trên biểu đồ PCA của **2.000** embedding tụ thành hai cụm tách biệt rõ ràng, và kết luận ghi embedding chia dữ liệu thành hai nhóm — hai trục chỉ giữ **19%** phương sai, **81%** còn lại nằm theo những hướng không được vẽ, nên hai embedding có chấm sát nhau trên biểu đồ vẫn có thể cách xa nhau trong không gian **768** chiều.
- Trục đầu của PCA giữ xấp xỉ **99,6%** phương sai, và người đọc tin trục ấy giữ gần đủ thông tin cần cho task — tỉ lệ cao như vậy có thể chỉ do một cột ghi theo thang đo lớn hơn, và PCA chỉ nhìn độ trải của dữ liệu, không nhìn nhãn của task.
- Trọng số của cột số ngày lớn hơn trọng số của cột số tuần, và ghi chú kết luận số ngày quan trọng hơn — cột ngày bằng **7** lần cột tuần nên các cột phụ thuộc tuyến tính, least squares có vô số nghiệm, và từng trọng số riêng lẻ không cho biết cột nào quan trọng hơn.
- Bước giải hệ vuông bằng fp16 có condition number xấp xỉ **400**, và khi loss ra NaN, người đọc đổ lỗi ngay cho con số ấy — condition number nói về mức sai số có thể bị phóng to, còn NaN có thể đến từ tràn số khi giá trị vượt **65.504**, mức lớn nhất fp16 lưu được.

Mỗi mục ở trên đều có một bài để bạn tính lại từ ví dụ ngoài AI, trên ma trận đủ nhỏ để tự kiểm tra từng bước.

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

- **Tính tay trên ma trận nhỏ** — Mỗi bài khái niệm mở bằng một ví dụ đời thường, như hai tiệm trên bản đồ khu phố hay hai trạm xe đạp, và bạn tính tay trên ma trận chỉ vài hàng, vài cột. Model chỉ xuất hiện ở phần ứng dụng gần cuối bài.
- **Kéo hoặc bấm để xem** — Ở các chủ đề ghép hai phép biến đổi, phép chiếu, eigenvector, low-rank approximation, PCA và condition number, bạn kéo hoặc bấm để đổi một đại lượng rồi xem kết quả đổi theo.
- **Mỗi bài nói trọn một khái niệm** — Sau ví dụ là câu định nghĩa kèm điều kiện, rồi tới những cách đọc sai thường gặp kèm lý do người ta dễ đọc sai như vậy, cuối cùng là việc bạn làm ngay trên dữ liệu của mình.
- **Bài nền xen vào đúng chỗ** — Bài về vector và bài về ma trận của khóa Toán học cơ bản cho AI Engineer nằm ngay trước bài đầu tiên cần đến chúng. 200Lab sắp xếp như vậy có chủ ý: bạn nên học khóa đó trước, và nếu đã học, bạn sẽ thấy hai bài ấy đã hoàn thành sẵn và đi tiếp được ngay.
- **Quiz cuối mỗi bài** — Sau mỗi bài khái niệm có quiz ngắn, trong đó có câu mời bạn đoán trước rồi mới tính.

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

1. **AI Engineer** — Dù bạn là developer chuyển nghề hay sinh viên muốn theo nghề này, công việc đòi hỏi bạn đọc shape của layer, chọn rank cho LoRA, đọc biểu đồ PCA của embedding và hiểu vì sao train bằng fp16 có lúc mất độ chính xác.
2. **Vibe coder muốn đi sâu** — Khi app của bạn bắt đầu cần fine-tune hoặc embedding, khóa học giúp bạn đọc paper và model card về hai chủ đề ấy; chương 1 và chương 4 là hai chương bạn dùng tới nhiều nhất.
3. **AI/Agent Builder** — Khi chọn model, cấu hình fine-tune hoặc cách lưu và tìm embedding cho agent, bạn cần đọc được phần phương pháp trong paper và model card, kèm điều kiện của từng con số.

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

- **Chỉ gọi tên thuật toán phân rã** — Gram-Schmidt, QR hoặc Cholesky chỉ xuất hiện như tên gọi, và eigenvalue chỉ tính tay ở ma trận **2** × **2**; bù lại, bạn đọc được kết quả thư viện trả về và biết điều kiện để tin nó.
- **Cần nền vector và ma trận** — Bạn cần biết giải phương trình một ẩn, đọc đồ thị hàm số, tính tích vô hướng và cosine ở **2-3** chiều, nhân ma trận tới **3** × **3**, chuyển vị ma trận, tính phương sai của vài số và đọc lũy thừa của 10. Khóa Toán học cơ bản cho AI Engineer có đủ những việc ấy.
- **Hiệp phương sai chỉ được nhắc trong một câu** — Muốn hiểu đầy đủ hiệp phương sai, bạn có thể học khóa Xác suất thống kê cho AI Engineer; khóa ấy không bắt buộc, vì câu định nghĩa nhắc trong bài về PCA đã đủ để bạn dựng ma trận hiệp phương sai.
- **Code để đọc, số liệu giả định** — Đoạn code numpy ở phần least squares và phần PCA chỉ để đọc. Số liệu về model trong bài là số giả định, nhưng bạn thay số của mình vào cùng phép tính ấy được ngay.

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

Ở bài mở đầu, bạn đọc một báo cáo fine-tune giả định có bốn dòng số, từ LoRA rank **8** tới condition number xấp xỉ **400**, và tìm xem mỗi dòng cần đến khái niệm nào. Chỉ với phép nhân, chia và cộng, bạn tính ra **65.536** tham số LoRA học thêm và **19%** phương sai trên biểu đồ PCA. Bài này được đặt ở đầu vì nó chưa cần khái niệm mới mà đã cho thấy cả bốn chương đều dẫn tới việc đọc loại báo cáo ấy.

## Chương trình

- Đại số tuyến tính và số liệu trong báo cáo kết quả fine-tune (miễn phí)

### Vector, norm và linear map

- Vector, cosine và cách embedding search xếp hạng tài liệu · quiz
- Vector, norm và gradient clipping khi train model (miễn phí) · quiz
- Ma trận, phép nhân ma trận và số tham số của model · quiz
- Linear map, composition và cách các layer của model biến đổi vector (miễn phí) · quiz

### Span, rank, phép chiếu và least squares

- Span, basis và những feature không thêm thông tin cho model (miễn phí) · quiz
- Rank, null space và rank r trong LoRA · quiz
- Phép chiếu, residual và việc tách một hướng khỏi vector embedding · quiz
- Least squares và trọng số khớp dữ liệu nhất trong linear regression · quiz

### Eigenvalue, ma trận đối xứng và SVD

- Eigenvalue, eigenvector, ma trận đối xứng và độ cong của bề mặt loss · quiz
- SVD, singular value và các hướng mà ma trận trọng số kéo giãn vector · quiz

### Low-rank approximation, PCA và condition number

- Low-rank approximation và sai số khi nén ma trận trọng số · quiz
- PCA, explained variance và cách đọc biểu đồ PCA của embedding · quiz
- Condition number và độ nhạy của nghiệm khi tính bằng fp16 hoặc bf16 · quiz
