Các thuật toán decomposition (phân rã) cho ma trận là một trong những thuật toán quan trọng nhất trong Machine Learning nói chung và toán ứng dụng nói riêng. Những phép phân rã này không những giúp ta giảm độ phức tạp và chi phí khi thực hiện các phép tính với các ma trận lớn mà còn có những ứng dụng đặc biệt khác.
Ở bài viết này, chúng ta sẽ cùng tìm hiểu về QR Decomposition (Phân rã QR) là gì và chi tiết cách tính bằng Gram-Schmidt Process (Chu trình Gram-Schmidt).
Khái niệm
QR Decomposition (Phân rã QR) là một phương pháp phân rã một ma trận bất kì thành tích của hai ma trận Q và R, trong đó Q là một Orthonormal Matrix (Ma trận Trực chuẩn) và R là một Upper Triangular Matrix (Ma trận Tam giác trên).
⚠️ Lưu ý
Thuật ngữ Orthonormal Matrix hiếm khi được sử dụng mà thay vào đó, những ma trận như vậy sẽ được gọi là Special Orthogonal Matrix (Ma trận Trực giao Đặc biệt). Tuy nhiên, trong bài viết này, chúng ta sẽ sử dụng thuật ngữ Orthonormal Matrix để phân biệt với Orthogonal Matrix một cách tường minh và dễ hiểu hơn.
Nhắc lại
Ma trận
Ma trận là một tập hợp các unit vector (vector đơn vị) được sắp xếp theo hàng hoặc cột. Một ma trận A∈Rm×n có thể được biểu diễn như sau:
Các unit vector đóng vai trò định nghĩa lại một không gian mới bằng tổ hợp tuyến tính của chúng. Ví dụ như không gian 3 chiều cơ bản được định nghĩa bởi 3 unit vector i=(1,0,0), j=(0,1,0) và k=(0,0,1):
R3=[ijk]=100010001
Ý nghĩa hình học của ma trận là nó biểu diễn một phép biến đổi tuyến tính, hay nói cách khác nó giống như một phép biến đổi một không gian này sang một không gian khác mà phép biến đổi này có thể là tổ hợp của các phép rotate (quay), stretch (co giãn), trượt (shear),...
Ma trận A∈Rm×n biểu diễn một phép biến đổi từ không gian Rn sang không gian Rm.
Linearly Dependent và Linearly Independent
Linearly Dependent
Một tập hợp các vector v1,v2,…,vn được gọi là Linearly Dependent (Phụ thuộc Tuyến tính) nếu tồn tại nghiệm là một tập hợp các hệ số c1,c2,…,cn không đồng thời bằng 0 sao cho:
c1v1+c2v2+⋯+cnvn=0(2)
Điều này có nghĩa là một trong các hệ số phải khác 0, giả sử nếu c1=0 thì:
Lúc này, ta có thể thấy v1 đã không tạo ra một chiều không gian mới mà nó chỉ nằm trong không gian của các vector khác. Nói cách khác, v1 đã phụ thuộc tuyến tính vào các vector còn lại.
Linearly Independent
Ngược lại với linear dependence, một tập hợp các vector v1,v2,…,vn được gọi là Linearly Independent (Độc lập Tuyến tính) nếu phương trình (2) chỉ có một nghiệm duy nhất là c1=c2=⋯=cn=0.
Vì lúc này các vector đều độc lập tuyến tính với nhau và phương trình chỉ bằng 0 khi và chỉ khi tất cả các hệ số đều đồng thời bằng 0.
Orthogonal Matrix và Orthonormal Matrix
Orthogonal Matrix
Hai vector u và v được gọi là Orthogonal (Trực giao) khi và chỉ khi chúng vuông góc với nhau, tức là uTv=0.
Một Orthogonal Matrix (Ma Trận Trực giao) là một tập hợp các vector mà mọi cặp unit vector trong đó đều orthogonal với nhau.
Gọi A là một orthogonal matrix khi đó:
ATA=I=AAT⟹A−1=AT(4)
Orthonormal Matrix
Hai vector u và v được gọi là Orthonormal (Trực chuẩn) khi và chỉ khi chúng là orthogonal và đồng thời có độ dài bằng 1, tức là uTv=0 và ∣∣u∣∣=∣∣v∣∣=1.
Một Orthonormal Matrix (Ma trận Trực chuẩn) là một trường hợp đặc biệt của orthogonal matrix khi nó bị ràng buộc bởi điều kiện rằng mọi unit vector trong đó đều có độ dài bằng 1.
Vì các tính chất trên, nếu A là một orthonormal matrix thì nó sẽ thỏa mãn toàn bộ tính chất của một orthogonal matrix và det(A)=1.
Vector Projection
Cho trước hai vector u và v, ta có thể tính được vector projection (vector chiếu) của v lên u bằng công thức:
proju(v)=⟨u,u⟩⟨u,v⟩u(5)
Trong đó:
⟨u,v⟩: inner product (tích vô hướng) của u và v.
proju(v): vector projection (hình chiếu) của v lên u.
Cách tính
Có hai phương pháp để thực hiện bài toán này là Gram-Schmidt Process (Chu trình Gram-Schmidt) và Householder Reflection (Phản chiếu Householder).
Chúng ta sẽ được giới thiệu về Gram-Schmidt Process trong bài viết này.
Cho trước ma trận linearly independent A∈Rm×n có các unit vector a1,a2,…,an:
Chúng ta sẽ dùng Gram-Schmidt Process để tìm ra hệ trực giao là ma trận V∈Rm×n từ A. Quá trình trực giao hóa từng vector của A được thực hiện như sau:
Lấy a1 làm chuẩn, đây sẽ unit vector đầu tiên của V, các unit vector khác sẽ được trực giao hóa dựa trên a1.
v1=a1(6)
v2 sẽ được trực giao dựa trên v1 bằng cách lấy a2 trừ đi hình chiếu của chính nó lên v1. Điều này sẽ giúp v2 vuông góc với v1.
v2=a2−projv1(a2)(7)
Tương tự với v3, tuy nhiên để đảm bảo vector này vuông góc với tất cả các vector trước đó, nó sẽ phức tạp hơn một chú vì ta sẽ phải trực giao nó dựa trên cả v1 và v2 (sau khi đã trực giao với v1, ta sẽ lấy nó đi trực giao tiếp với v2).
v3=a3−projv1(a3)−projv2(a3)(8)
Cuối cùng, ta có công thức tổng quát cho vector thứ k:
vk=ak−j=1∑k−1projvj(ak)(9)
Bước 2: Trực chuẩn hóa không gian vừa tính được
Ta đã có ma trận V là một ma trận trực giao, tuy nhiên nó chưa phải là một ma trận trực chuẩn. Để trực chuẩn hóa nó, ta sẽ chia mỗi vector cột của V cho độ dài chính nó để đưa độ dài này về 1.
Lúc này, ta tìm được ma trận Q là từ các vector đã được chuẩn hóa của V.
qk=∣∣vk∣∣vk(10)
Bước 3: Tìm ma trận R
Ta có thể tìm được ma trận R bằng cách nhân ma trận QT với A.
Chứng minh:
AQTAQTAR=QR=QTQR=IR=QTAxem lại (4)(11)
Ngoài ra, ta cũng có thể tìm được ma trận R bằng cách tính inner product của các unit vector từ ma trận Q với các unit vector từ ma trận A.
Từ đây ta có thể hiểu được lí do R là một ma trận tam giác trên vì trong quá trình trực giao hóa, chúng ta cho vector vk trực giao với toàn bộ các vector i<k, dẫn đến các inner product của chúng bằng 0, xem lại (9).
⟺⟨vk,ai⟩=0⟨qk,ai⟩=0∀i<k(13)
Ví dụ
Hãy thực hiện QR Decomposition cho ma trận A được tạo bởi 3 vector a1, a2 và a3 như sau: