Không gian không nhất thiết phải là một căn phòng
Có một chuyện khá kỳ quặc.
Chúng ta sống cả đời trong một thế giới có vẻ chỉ cho phép ba kiểu chạy trốn:
- chạy sang trái hoặc phải,
- chạy lên trước hoặc lùi lại,
- trèo lên trên hoặc rơi xuống dưới.
Hết.
Ba chiều.
Nghe như vũ trụ đã phát cho con người đúng ba cái nút điều khiển rồi khóa menu Developer lại.
Nhưng toán học thì không ngoan ngoãn như vậy.
Nó hỏi:
Nếu có thêm một hướng nữa thì sao?
Rồi chưa kịp để chúng ta trả lời, nó hỏi tiếp:
10 hướng thì sao?
100 hướng?
1000 hướng?
Một triệu hướng?
Và điều thú vị là toán học chẳng gặp vấn đề gì cả.
Con người mới là đứa gặp vấn đề.
Não chúng ta tiến hóa để nhìn quả xoài rơi xuống đất, né con hổ từ bên trái và tìm đường về nhà. Nó không được thiết kế để tưởng tượng một căn phòng 1000 chiều.
Nhưng điều đó không có nghĩa không gian 1000 chiều vô nghĩa.
Ngược lại.
Mỗi ngày, những hệ thống recommendation, search engine, computer vision và large language model đang chạy loanh quanh trong những không gian có hàng trăm, hàng nghìn, thậm chí hàng chục nghìn chiều.
Chúng ta không nhìn thấy chúng.
Nhưng máy tính thì sống ở đó rất khỏe.
Bắt đầu từ một con kiến
Giả sử có một con kiến rất nhỏ đang bò trên một sợi dây.
Đối với chúng ta, sợi dây nằm trong thế giới ba chiều.
Nhưng đối với con kiến, nếu nó bị buộc phải bò dọc theo sợi dây thì thế giới của nó chỉ cần một con số:
$$ x $$
Ví dụ:
10 -------- 1 -------- 2 -------- 3 -------- 4
2 🐜
Con kiến đang ở vị trí:
$$ x = 2 $$
Muốn mô tả toàn bộ vị trí của nó, chỉ cần một số.
Đây là không gian một chiều.
Bây giờ thả con kiến xuống sàn
Con kiến được tự do hơn.
Nó có thể đi trái phải và tiến lùi.
Muốn xác định vị trí của nó, chúng ta cần hai con số:
$$ (x,y) $$
Ví dụ:
$$ (3,5) $$
Nghĩa là đi 3 đơn vị theo một hướng và 5 đơn vị theo hướng còn lại.
Đây là không gian hai chiều.
1 y
2 ↑
3 |
4 | 🐜 (3,5)
5 |
6 |
7-----------------+----------------→ x
Rồi con kiến mọc cánh
Vì một lý do nào đó mà tác giả chưa nghĩ ra.
Bây giờ nó bay được.
Chúng ta cần thêm độ cao:
$$ (x,y,z) $$
Ví dụ:
$$ (3,5,2) $$
Ba con số.
Ba chiều.
Đó chính là không gian mà trực giác con người khá quen thuộc.
Nhưng ở đây có một chi tiết rất quan trọng:
mỗi chiều chẳng qua là một con số độc lập cần thiết để mô tả trạng thái của vật.
Và từ đây, cánh cửa bắt đầu mở.
Chiều thứ tư không nhất thiết là một cánh cửa bí mật
Nghe đến “chiều thứ tư”, chúng ta thường tưởng tượng một thứ rất ghê gớm.
Một khe nứt không-thời gian.
Một sinh vật 4D xuyên qua tường.
Một cánh cửa bí mật mà bước vào xong có khả năng gặp bản thân lúc 8 tuổi.
Nhưng về mặt toán học, mọi thứ bình thản hơn nhiều.
Một điểm trong không gian ba chiều là:
$$ (x_1,x_2,x_3) $$
Một điểm trong không gian bốn chiều đơn giản là:
$$ (x_1,x_2,x_3,x_4) $$
Ví dụ:
$$ (2,7,-1,5) $$
Xong.
Không có tia sét.
Không có cổng không gian.
Không có ai biến mất.
Chỉ thêm một con số.
Đây là một trong những điều đẹp nhất của toán học: thứ mà não người không thể nhìn thấy vẫn có thể được định nghĩa chính xác.
Nhưng chiều thứ tư nằm ở đâu?
Câu hỏi này hơi nguy hiểm.
Bởi nó khiến chúng ta mặc định rằng chiều thứ tư phải “nằm đâu đó” trong căn phòng hiện tại.
Thực ra không nhất thiết.
Hãy tưởng tượng một nhân vật trong game 2D.
Thế giới của nó chỉ có:
$$ (x,y) $$
Nếu chúng ta nói với nó rằng tồn tại một hướng thứ ba, vuông góc với cả hai hướng nó biết, sinh vật đó sẽ cực kỳ bối rối.
Nó sẽ hỏi:
Hướng đó nằm bên trái hay bên phải?
Không.
Phía trên à?
Cũng không.
Vậy nó ở đâu?
Đó chính là vấn đề.
Một sinh vật 2D không thể dùng trực giác 2D để hình dung đầy đủ chiều thứ ba.
Tương tự, chúng ta không nên quá ngạc nhiên khi bộ não 3D của mình gặp khó khăn với chiều thứ tư.
Chúng ta không cần nhìn được nó.
Chúng ta chỉ cần tính toán được nó.
Từ hình vuông đến hypercube
Có một trò khá vui để xây dựng các vật thể nhiều chiều.
Bắt đầu bằng một điểm.
1•
Đây là vật thể 0 chiều.
Kéo điểm đó theo một hướng, ta được đoạn thẳng:
1•────────•
Một chiều.
Lấy đoạn thẳng, sao chép nó rồi nối hai bản sao:
1•────────•
2| |
3| |
4•────────•
Ta được hình vuông.
Hai chiều.
Tiếp tục sao chép hình vuông theo một hướng mới rồi nối các đỉnh tương ứng:
1 •──────•
2 /| /|
3 •──────• |
4 | | | |
5 | •────|-•
6 |/ |/
7 •──────•
Ta được hình lập phương.
Ba chiều.
Bây giờ hãy làm điều tương tự thêm một lần nữa.
Sao chép cả khối lập phương theo một hướng không thuộc ba hướng hiện tại, sau đó nối tám đỉnh cũ với tám đỉnh mới.
Thứ xuất hiện gọi là tesseract, hay hypercube 4 chiều.
Ta không thể đặt nguyên vẹn một tesseract 4D lên màn hình 2D.
Thứ chúng ta thường nhìn thấy chỉ là một phép chiếu (projection), giống như cái bóng của một vật thể ba chiều.
Một hình lập phương có thể tạo ra cái bóng hai chiều kỳ quặc.
Tương tự, tesseract có thể tạo ra một “cái bóng 3D”.
Và cái bóng đó trông thường giống như:
1 +--------+
2 /| /|
3 +--------+ |
4 | +------|-+
5 |/ |/
6 +--------+
7
8 nằm trong
9
10 một khối lớn hơn
Nhìn hơi giống một cái hộp đang nuốt một cái hộp khác.
Nhưng đó chỉ là bóng.
Bản thân vật thể 4D phức tạp hơn.
10 chiều thì sao?
Đến đây có thể nảy sinh một suy nghĩ:
4 chiều còn tạm chấp nhận được. Nhưng 10 chiều nghe hơi quá rồi.
Không.
Toán học chỉ việc tiếp tục.
Một điểm 10 chiều là:
$$ x = (x_1,x_2,x_3,\ldots,x_{10}) $$
Ví dụ:
$$ x = (1,2,8,3,7,0,-2,9,4,6) $$
Khoảng cách giữa hai điểm vẫn có thể dùng phiên bản mở rộng của định lý Pythagoras.
Trong 2D:
$$ d=\sqrt{(x_1-y_1)^2+(x_2-y_2)^2} $$
Trong 3D:
$$ d=\sqrt{(x_1-y_1)^2+(x_2-y_2)^2+(x_3-y_3)^2} $$
Trong $n$ chiều:
$$ d(x,y)
\sqrt{ \sum_{i=1}^{n}(x_i-y_i)^2 } $$
Nhìn công thức này khá đáng yêu.
Vũ trụ có thể thêm 997 chiều nữa.
Công thức chỉ nhún vai rồi thêm vài số vào dấu tổng.
Một con người cũng có thể là một điểm nhiều chiều
Đây mới là lúc khái niệm này bắt đầu bước ra khỏi sách toán.
Giả sử chúng ta muốn mô tả một khách hàng.
Có thể dùng các thuộc tính:
1tuổi
2thu nhập
3số đơn hàng
4giá trị đơn trung bình
5số ngày từ lần mua gần nhất
6tỷ lệ mua online
7tỷ lệ mua tại cửa hàng
8số lần xem điện thoại
9số lần xem laptop
10số lần xem tivi
11...
Nếu có 100 thuộc tính, mỗi khách hàng trở thành một điểm:
$$ x \in \mathbb{R}^{100} $$
Tức là một điểm trong không gian 100 chiều.
Không có nghĩa khách hàng đang trôi lơ lửng trong vũ trụ 100 chiều.
Nó chỉ có nghĩa:
Ta cần 100 con số để mô tả người đó theo bài toán hiện tại.
Hai khách hàng có vector gần nhau có thể có hành vi tương tự.
Ví dụ đơn giản:
1Khách A = [0.9, 0.1, 0.8, 0.2]
2Khách B = [0.85, 0.12, 0.78, 0.25]
3Khách C = [0.1, 0.9, 0.2, 0.8]
A và B khá gần nhau.
C thì nằm tận đâu đó bên kia “vũ trụ”.
Thế là từ một khái niệm hình học tưởng như rất xa xôi, chúng ta bắt đầu có recommendation system.
Một bài hát có thể sống trong không gian 1000 chiều
Giả sử hệ thống nghe nhạc muốn hiểu các bài hát.
Thay vì lưu mỗi bài hát chỉ bằng tên ca sĩ hay thể loại, một model machine learning có thể biến nó thành vector:
$$ v \in \mathbb{R}^{1000} $$
Ví dụ tượng trưng:
1Bài A
2[0.12, -0.47, 0.91, ..., 0.33]
3
4Bài B
5[0.15, -0.44, 0.88, ..., 0.30]
Vector có 1000 số.
Không ai ngồi đặt tên:
1chiều 1 = độ buồn
2chiều 2 = tiếng guitar
3chiều 3 = nghe lúc thất tình
4...
Thường các chiều được model tự học.
Chúng có thể biểu diễn những cấu trúc rất trừu tượng mà con người không dễ đặt tên.
Nếu hai vector nằm gần nhau, hai bài hát có thể giống nhau theo một kiểu nào đó mà model đã học được.
Đây chính là tinh thần của embedding.
LLM cũng lang thang trong không gian nhiều chiều
Khi chúng ta nhập một câu:
1Con mèo đang nằm trên ghế.
máy tính không thực sự nhìn thấy “con mèo” giống như chúng ta.
Ở một bước nào đó, token được biến thành các vector.
Một vector embedding có thể có hàng nghìn chiều:
$$ x = (x_1,x_2,\ldots,x_d) $$
với $d$ chẳng hạn là vài nghìn.
Từ đây, mỗi từ không còn là một chữ viết đơn thuần.
Nó trở thành một vị trí.
“mèo” nằm ở một vùng nào đó.
“chó” nằm tương đối gần.
“xe tải” xa hơn.
“triết học hiện sinh” có lẽ đang lang thang ở một khu phố khác.
Không gian này không có cây.
Không có trời.
Không có đất.
Chỉ có những dãy số.
Nhưng bên trong những dãy số đó lại xuất hiện cấu trúc của ngôn ngữ.
Đó là một chuyện khá kỳ lạ.
Con người biến ý nghĩa thành số.
Rồi máy móc tìm thấy hình học bên trong ý nghĩa.
1000 chiều lớn đến mức nào?
Giả sử mỗi chiều chỉ có hai trạng thái:
$$ 0 $$
hoặc:
$$ 1 $$
Trong không gian một chiều, có:
$$ 2 $$
khả năng.
Hai chiều:
$$ 2^2=4 $$
Mười chiều:
$$ 2^{10}=1024 $$
Một trăm chiều:
$$ 2^{100} $$
Khoảng:
$$ 1.27\times10^{30} $$
Một nghìn chiều:
$$ 2^{1000} \approx 10^{301} $$
Đó là một con số có hơn 300 chữ số.
Để dễ hình dung, số nguyên tử trong vũ trụ quan sát được thường được ước lượng cỡ:
$$ 10^{80} $$
Như vậy, chỉ một chiếc hộp 1000 chiều mà mỗi chiều có đúng hai lựa chọn đã có số đỉnh khổng lồ đến mức số nguyên tử của vũ trụ trông như tiền lẻ.
Không gian nhiều chiều phình ra rất nhanh.
Và từ đây một con quái vật xuất hiện.
Lời nguyền số chiều
Tên tiếng Anh của nó là Curse of Dimensionality.
Nghe như phép thuật hắc ám.
Thực ra khá đúng.
Giả sử trong một đoạn thẳng dài 1 mét, ta đặt điểm cách nhau 10 cm.
Cần khoảng:
$$ 10 $$
điểm.
Trong hình vuông $1\times1$, để đạt cùng độ phân giải:
$$ 10^2=100 $$
điểm.
Trong hình lập phương:
$$ 10^3=1000 $$
điểm.
Trong không gian 10 chiều:
$$ 10^{10} $$
điểm.
Trong 100 chiều:
$$ 10^{100} $$
điểm.
Mỗi lần thêm chiều, không gian không chỉ lớn thêm một chút.
Nó nổ tung.
Đây là lý do nhiều thuật toán hoạt động rất ngon trong 2D hoặc 3D nhưng bắt đầu thở oxy khi dữ liệu có hàng trăm chiều.
Một hiện tượng kỳ quái: mọi thứ bắt đầu xa nhau
Trong không gian nhiều chiều, trực giác quen thuộc cũng bắt đầu hỏng.
Ở 2D, nếu thả nhiều điểm ngẫu nhiên xuống một tờ giấy, thường dễ thấy điểm gần và điểm xa.
Nhưng khi số chiều tăng rất lớn, khoảng cách giữa các điểm có xu hướng trở nên tương đối giống nhau hơn.
Nôm na:
1Điểm gần nhất: khá xa.
2Điểm xa nhất: cũng khá xa.
3Mọi người: thôi đứng cách nhau cho khỏe.
Đây là vấn đề lớn đối với các thuật toán nearest neighbor.
Nếu mọi người đều “xa”, khái niệm “hàng xóm gần nhất” bắt đầu mất dần sức mạnh.
Chính vì vậy, trong machine learning người ta thường phải suy nghĩ rất kỹ về:
- cách biểu diễn dữ liệu,
- distance metric,
- normalization,
- dimensionality reduction,
- approximate nearest neighbor.
Không phải cứ nhét thêm 10.000 feature là model lập tức giác ngộ.
Đôi khi chỉ tạo ra một đám sương mù 10.000 chiều.
Nhưng có một tin tốt: dữ liệu thường không thật sự dùng hết các chiều
Giả sử chúng ta chụp ảnh một cánh tay robot.
Một ảnh $1000\times1000$ pixel có một triệu pixel.
Nếu mỗi pixel là một chiều thì ảnh nằm trong không gian khoảng một triệu chiều.
Nghe khủng khiếp.
Nhưng cánh tay robot thực tế chỉ có vài khớp có thể quay.
Trạng thái thực của nó có thể chỉ phụ thuộc vào vài tham số:
1góc vai
2góc khuỷu tay
3góc cổ tay
4...
Nói cách khác, dữ liệu tuy nằm trong không gian một triệu chiều nhưng có thể chỉ tập trung quanh một cấu trúc thấp chiều hơn.
Khái niệm này liên quan đến manifold hypothesis.
Có thể hình dung như một tờ giấy.
Một tờ giấy là vật thể 2D.
Nhưng chúng ta có thể cuộn nó, vò nó và đặt nó trong căn phòng 3D.
Bề ngoài nó nằm trong 3D.
Nhưng nếu là một con kiến sống trên mặt giấy, nó vẫn chỉ cần hai tọa độ để xác định vị trí.
Dữ liệu cũng có thể như vậy.
Nó được nhúng trong không gian rất lớn, nhưng cấu trúc thực nằm trên một “tờ giấy cong” thấp chiều hơn.
PCA: ép một con quái vật xuống tờ giấy
Một kỹ thuật nổi tiếng là Principal Component Analysis (PCA).
Giả sử dữ liệu có 100 chiều:
$$ x\in\mathbb{R}^{100} $$
Nhưng phần lớn sự biến thiên có thể giải thích bằng khoảng 5 hướng chính.
PCA tìm những hướng đó rồi biến dữ liệu thành:
$$ x’\in\mathbb{R}^{5} $$
Có thể tưởng tượng một đám điểm 2D kéo dài theo đường chéo:
1 •
2 •
3 •
4 •
5 •
6 •
Hai tọa độ $x,y$ tồn tại.
Nhưng phần lớn thông tin chỉ thay đổi dọc theo một hướng.
Ta có thể nén từ 2 chiều xuống gần 1 chiều mà không mất quá nhiều thông tin.
Ở 1000 chiều cũng là cùng một ý tưởng.
Chỉ có điều không ai vẽ nổi cái hình nữa.
Làm sao nhìn thấy dữ liệu 1000 chiều?
Không thể trực tiếp.
Cho nên chúng ta ăn gian.
Các kỹ thuật như:
- PCA,
- t-SNE,
- UMAP
có thể biến dữ liệu từ hàng trăm hoặc hàng nghìn chiều xuống 2D hoặc 3D để con người nhìn.
Ví dụ:
11000D embedding
2 │
3 │ dimensionality reduction
4 ▼
5+----------------------------------+
6| • • • |
7| • • • • |
8| |
9| × × |
10| × × × × |
11| |
12| ▲ ▲ |
13| ▲ ▲ ▲ |
14+----------------------------------+
Nhìn hình này, ta có thể đoán rằng có ba cụm dữ liệu.
Nhưng cần nhớ một điều:
hình 2D chỉ là bản đồ. Nó không phải toàn bộ lãnh thổ.
Quá trình giảm chiều luôn có khả năng làm mất hoặc bóp méo một phần cấu trúc.
Khoảng cách trong không gian nhiều chiều
Không gian nhiều chiều không chỉ có Euclidean distance.
Một metric rất thường gặp với embedding là cosine similarity.
Cho hai vector $A$ và $B$:
$$ \text{cosine}(A,B)
\frac{A\cdot B} {|A||B|} $$
Nó quan tâm nhiều đến góc giữa hai vector hơn là độ dài tuyệt đối.
Nếu:
$$ \text{cosine}(A,B)\approx1 $$
thì hai vector hướng gần giống nhau.
Nếu gần 0, chúng tương đối khác hướng.
Ví dụ trong semantic search:
1"điện thoại chụp ảnh đẹp"
có thể được biến thành một vector.
Hàng nghìn sản phẩm cũng được biến thành vector.
Hệ thống tìm những vector có hướng gần vector câu hỏi nhất.
Ở tầng giao diện, người dùng chỉ thấy:
1Đang tìm kiếm...
Nhưng ở dưới đó, hàng nghìn chiều đang âm thầm đo góc với nhau.
Khá ngáo.
Nhưng chạy được.
Không gian 1000 chiều có thật không?
Câu này phụ thuộc vào chữ “thật”.
Nếu hỏi:
Có một căn phòng vật lý 1000 chiều ngoài kia để chúng ta bước vào không?
Chúng ta chưa có bằng chứng cho một nơi như vậy theo nghĩa đời thường.
Một số lý thuyết vật lý có sử dụng không gian với nhiều chiều hơn bốn, nhưng đó là một câu chuyện khác và cần phân biệt với không gian vector trong toán học hay machine learning.
Còn nếu hỏi:
Không gian 1000 chiều có phải một đối tượng toán học hoàn toàn hợp lệ không?
Có.
Rất hợp lệ.
Ta có thể:
- định nghĩa điểm,
- tính khoảng cách,
- tính góc,
- tìm hyperplane,
- tìm cluster,
- chiếu xuống không gian thấp chiều,
- tối ưu hàm trên nó.
Máy tính làm chuyện đó mỗi ngày.
Không gian nhiều chiều thay đổi cách nhìn về “chiều”
Điều quan trọng nhất có lẽ không phải tesseract.
Cũng không phải tưởng tượng một sinh vật 4D chui xuyên qua bức tường.
Điều thú vị hơn là:
“chiều” thực ra là số lượng biến độc lập cần để mô tả một thứ.
Một vị trí trên đường:
$$ 1D $$
Một vị trí trên bản đồ:
$$ 2D $$
Một vị trí trong căn phòng:
$$ 3D $$
Một khách hàng với 100 thuộc tính:
$$ 100D $$
Một embedding:
$$ 1000D $$
Một trạng thái vật lý cực kỳ phức tạp:
có thể cần hàng triệu chiều.
Và thế là từ một khái niệm tưởng như thuộc về hình học, “chiều” trở thành một thứ xuất hiện khắp khoa học máy tính, vật lý, thống kê và AI.
Một nghịch lý nhỏ của bộ não con người
Có một điều khá buồn cười.
Con người không thể tưởng tượng một vector 1000 chiều.
Nhưng chúng ta có thể viết:
$$ x\in\mathbb{R}^{1000} $$
rồi tính toán trên nó.
Điều này nói lên một sức mạnh hơi kỳ quặc của toán học.
Bộ não không cần nhìn thấy mọi thứ mà nó có thể hiểu.
Chúng ta không nhìn thấy số $10^{100}$ quả táo.
Không nhìn thấy không gian 1000 chiều.
Không nhìn thấy electron bằng mắt thường.
Không nhìn thấy trường vector bao phủ cả không gian.
Nhưng ký hiệu cho phép chúng ta xây chiếc cầu đi qua giới hạn trực giác.
Một đứa trẻ có thể đếm ba viên bi bằng mắt.
Một nhà toán học có thể nghiên cứu vật thể một triệu chiều mà chưa bao giờ nhìn thấy nó.
Không phải vì bộ não đột nhiên mọc thêm 999 con mắt.
Mà vì chúng ta phát minh ra một thứ mạnh hơn hình dung:
trừu tượng hóa.
Tổng kết
Không gian nhiều chiều nghe giống một thứ được lấy ra từ phim khoa học viễn tưởng, nhưng ý tưởng cơ bản lại đơn giản đến bất ngờ.
Một chiều tương ứng với một con số độc lập.
Một điểm 3 chiều cần ba số:
$$ (x,y,z) $$
Một điểm 1000 chiều cần 1000 số:
$$ (x_1,x_2,\ldots,x_{1000}) $$
Hết.
Cái khó không nằm ở định nghĩa.
Cái khó nằm ở việc trực giác con người chỉ quen với ba chiều, trong khi toán học chẳng quan tâm bộ não chúng ta quen cái gì.
Và cũng nhờ vậy, những hệ thống AI hiện đại có thể biến từ ngữ, hình ảnh, bài hát, sản phẩm và con người thành các điểm trong những không gian khổng lồ, rồi tìm cấu trúc bằng khoảng cách, góc và hình học.
Có lẽ đây là điều đẹp nhất của không gian nhiều chiều:
chúng ta không cần sống trong một thế giới 1000 chiều để sử dụng nó.
Chỉ cần một tờ giấy, vài ký hiệu, một ít đại số tuyến tính và sự liều lĩnh vừa đủ để chấp nhận rằng có những thứ hoàn toàn hợp lý dù bộ não mình không thể vẽ nổi.
Cảm ơn các bạn đã quan tâm và theo dõi bài viết, hẹn gặp lại ở các bài viết tiếp theo.
Tham khảo
- https://en.wikipedia.org/wiki/Euclidean_space
- https://en.wikipedia.org/wiki/Four-dimensional_space
- https://en.wikipedia.org/wiki/Tesseract
- https://en.wikipedia.org/wiki/Curse_of_dimensionality
- https://en.wikipedia.org/wiki/Dimensionality_reduction
- https://en.wikipedia.org/wiki/Principal_component_analysis
- https://en.wikipedia.org/wiki/Manifold_hypothesis
- https://en.wikipedia.org/wiki/Cosine_similarity
Bình luận