## Tưởng tượng R^n không cần vẽ **Không gian vectơ** \(\mathbb{R}^n\) là tập các danh sách có đúng \(n\) số thực: \(x=(x_1,x_2,\ldots,x_n)\). Mỗi số là một **tọa độ** hay thành phần. Với \(n=2\), bạn có thể thấy vectơ như mũi tên; nhưng mũi tên chỉ là một cách minh họa, không phải định nghĩa. Điều quan trọng là các quy tắc vẫn giống nhau ở mọi \(n\): cộng theo từng tọa độ và nhân mọi tọa độ với cùng một số. Ví dụ, trong \(\mathbb{R}^5\), \((1,0,-2,3,4)+(2,1,2,0,-1)=(3,1,0,3,3)\). Vì thế, hãy nghĩ về vectơ như một mảng số trong lập trình: độ dài mảng là \(n\), còn phép toán được áp dụng theo từng phần tử. <viz id="0"></viz> **Đổi số chiều từ 2 lên 5**, rồi **kéo vài tọa độ** của hai vectơ. Quan sát từng thành phần của vectơ tổng thay đổi đúng bằng tổng của hai thành phần tương ứng. Khi số chiều tăng, trực giác hình ảnh giảm đi, nhưng trực giác đại số lại đủ mạnh: bạn chỉ cần theo dõi các tọa độ. Đây là nền tảng để nói về tập các vectơ có thể tạo ra, kể cả trong \(\mathbb{R}^{100}\) hay biểu diễn đặc trưng của một mô hình học máy. Tiếp theo, ta sẽ dùng các hệ số để trộn vectơ và khảo sát **không gian sinh** trong <ref slide="2">Tổ hợp tuyến tính tạo ra gì</ref>. ## Tổ hợp tuyến tính tạo ra gì Một **tổ hợp tuyến tính** trộn các vectơ bằng phép nhân vô hướng rồi cộng: \(a\mathbf v+b\mathbf w\). Các số \(a,b\) là **hệ số**: chúng quyết định hướng và độ lớn đóng góp của từng vectơ. Tập mọi kết quả có thể có khi hệ số thay đổi được gọi là **không gian sinh**, ký hiệu \(\operatorname{span}(\mathbf v,\mathbf w)\). Có hai khả năng quan trọng trong \(\mathbb{R}^2\): nếu \(\mathbf v\) và \(\mathbf w\) không cùng phương, bạn có thể sinh ra toàn bộ mặt phẳng. Nếu chúng cùng phương, mọi tổ hợp vẫn mắc kẹt trên một đường thẳng. Đây là cách đại số trả lời câu hỏi: “Các thành phần hiện có bao phủ được bao nhiêu hướng thông tin?” <viz id="1"></viz> **Kéo hai vectơ để chúng không cùng phương**, rồi **điều chỉnh a và b**. Sau đó **đặt chúng cùng phương** và so sánh vết kết quả. Một hệ vectơ sinh được nhiều điểm không tự động là hệ tốt nhất: có thể có nhiều cách khác nhau tạo ra cùng một điểm. Để biểu diễn đáng tin cậy — chẳng hạn các hệ số đặc trưng trong một pipeline dữ liệu — ta cần biết liệu các hệ số có được xác định duy nhất hay không. Đó là vai trò của <ref slide="3">Độc lập tuyến tính là duy nhất</ref>. ## Độc lập tuyến tính là duy nhất Các vectơ \(\mathbf v_1,\ldots,\mathbf v_k\) **độc lập tuyến tính** nếu phương trình \(c_1\mathbf v_1+\cdots+c_k\mathbf v_k=\mathbf0\) chỉ có nghiệm tầm thường \(c_1=\cdots=c_k=0\). Nói ngắn gọn: không có cách “triệt tiêu nhau” bằng một tổ hợp khác không. Vì sao điều này quan trọng? Với một hệ độc lập, mỗi vectơ trong không gian sinh có **biểu diễn duy nhất** theo hệ đó. Ngược lại, khi hệ phụ thuộc, bạn có thể thay đổi hệ số mà kết quả không đổi — giống một mô hình có đặc trưng trùng lặp khiến tham số khó diễn giải. <viz id="2"></viz> **Thử đưa tổng về vectơ 0** ở cả hai bảng. Với cặp phụ thuộc, **di chuyển dọc họ nghiệm** và quan sát nhiều bộ hệ số khác 0 vẫn cho cùng kết quả. Đừng nhầm “có hai vectơ” với “có hai hướng thông tin”. Hai vectơ cùng phương có thể là hai bản ghi số khác nhau nhưng chỉ chứa một hướng. Khi một vectơ được tạo từ các vectơ còn lại, nó là thông tin thừa — chủ đề của <ref slide="4">Phụ thuộc là thông tin thừa</ref>. ## Phụ thuộc là thông tin thừa Một hệ là **phụ thuộc tuyến tính** khi tồn tại một vectơ trong hệ có thể viết bằng tổ hợp tuyến tính của các vectơ khác. Chẳng hạn, nếu \(\mathbf v_3=2\mathbf v_1-\mathbf v_2\), thì thêm \(\mathbf v_3\) không mở rộng không gian sinh: mọi thứ \(\mathbf v_3\) làm được, \(\mathbf v_1\) và \(\mathbf v_2\) đã làm được. Ta có thể đo mức “chưa được giải thích” bằng **phần dư** \(\mathbf r=\mathbf v_3-(a\mathbf v_1+b\mathbf v_2)\). Khi \(\mathbf r=\mathbf0\), vectơ thứ ba hoàn toàn dư thừa. Trong ngôn ngữ ma trận, đó là một cột có thể tạo từ các cột khác. <viz id="3"></viz> **Kéo \(\mathbf v_3\)** hoặc **điều chỉnh hai hệ số** cho đến khi phần dư bằng 0. Sau đó **bỏ \(\mathbf v_3\)** và kiểm tra vùng sinh có thay đổi không. Bỏ một cột dư không làm mất khả năng biểu diễn nào; ngược lại, nó làm hệ gọn hơn. Một tập vectơ vừa sinh được toàn bộ không gian cần thiết, vừa không có phần dư, được gọi là **cơ sở**. Bạn sẽ xây dựng cơ sở chuẩn trong <ref slide="5">Cơ sở: đủ và không thừa</ref>. ## Cơ sở: đủ và không thừa Một **cơ sở** của không gian vectơ là một tập vectơ đồng thời **sinh** ra không gian và **độc lập tuyến tính**. Hãy nhớ bằng hai tiêu chí: **đủ** để tạo mọi vectơ cần có, và **không thừa** để mỗi hệ số mang thông tin riêng. Trong \(\mathbb{R}^n\), cơ sở chuẩn là \(\mathbf e_1,\ldots,\mathbf e_n\), trong đó \(\mathbf e_i\) có `1` ở vị trí \(i\) và `0` ở mọi vị trí khác. Do đó, với \(\mathbf x=(x_1,\ldots,x_n)\), ta luôn có \(\mathbf x=x_1\mathbf e_1+\cdots+x_n\mathbf e_n\). Đây chính là lý do tọa độ của \(\mathbf x\) là các hệ số theo cơ sở chuẩn. <viz id="4"></viz> **Chọn \(n=5\)** và **thay đổi tọa độ của \(\mathbf x\)** để xem từng đóng góp. Sau đó **thay một vectơ cơ sở bằng vectơ trùng** và thử biểu diễn một mục tiêu có tọa độ ở hướng bị mất. Với cơ sở chuẩn trong \(\mathbb{R}^n\), luôn cần đúng \(n\) vectơ. Nhưng một tập cho trước có thể gồm nhiều vectơ hơn mức cần thiết, và ta cần một thủ tục cơ học để tìm các vectơ cần giữ. <ref slide="6">Số chiều và kiểm tra bằng Gauss</ref> sẽ cung cấp thủ tục đó. ## Số chiều và kiểm tra bằng Gauss Xếp các vectơ thành cột của ma trận rồi khử Gauss để tìm pivot. Số pivot là hạng và cũng là số chiều của không gian sinh. Khi chọn cơ sở, giữ **các cột gốc** ở vị trí pivot; các cột còn lại là phụ thuộc. Trong ví dụ 3×4 này, chỉ có hai pivot nên hạng bằng 2 và không gian sinh có số chiều 2. Quy trình này là cầu nối đến <ref slide="7">Tự kiểm tra các vectơ</ref>. ## Tự kiểm tra các vectơ Khi các vectơ được đặt thành các cột của một ma trận, **cột pivot** cho biết những hướng thông tin không thể bỏ đi. Các cột không có pivot không tạo thêm hướng mới: chúng là tổ hợp tuyến tính của những cột đi trước. Vì vậy, một cơ sở vừa phải **đủ để sinh** không gian đang xét, vừa phải **không thừa**. Trong thử thách này, bốn vectơ sống trong \(\mathbb{R}^3\), nhưng chỉ có ba hướng độc lập. Hãy đưa ra dự đoán trước: hạng của ma trận là số pivot, đồng thời là số chiều của không gian sinh. Đây là cách biến ý tưởng ở <ref slide="6">Số chiều và kiểm tra bằng Gauss</ref> thành một quy trình bạn có thể tự làm. <viz id="1"></viz> ### Thử thách **Chọn các cột bạn muốn giữ** để tạo một cơ sở. **Đặt số chiều bạn dự đoán** và **phân loại hệ bốn vectơ** trước khi bấm **Kiểm tra**. Phản hồi màu xanh/đỏ tách riêng ba quyết định, để bạn biết chính xác phần nào cần sửa. Sau đó, **bấm Bước Gauss** nhiều lần. Theo dõi vị trí pivot: ba pivot xác nhận hạng \(3\), còn cột cuối không có pivot là thông tin thừa. Quan hệ tuyến tính được nêu phía dưới cho thấy vì sao cột ấy không thể thuộc một cơ sở. Cuối cùng, **tạo ví dụ mới**. Dữ liệu thay đổi nhưng cấu trúc vẫn vậy: hãy tập nhận ra cơ sở bằng pivot, thay vì ghi nhớ các con số cụ thể.