- Bài trước mình đã nói về LU Decomposition, ở bài này mình sẽ trình bày về Cholesky Decomposition. Phân tích này được đề xuất bởi nhà toán học André-Louis Cholesky, nó có nhiều ứng dụng trong tính ma trận nghịch đảo, giải hệ phương trình tuyến tính, tính định thức, Least Squares Problem hay trong Non-linear Optimization để phân tích ma trận Hessian,…
- Trước hết chúng ta cùng xem lại một số khái niệm cơ bản.
I. Các khái niệm cơ bản
1. Ma trận chuyển vị và ma trận Hermitian
- Cho , ta nói là chuyển vị của nếu .
- Nếu thì . Nếu , ta nói là một ma trận đối xứng (symmetric matrix).
- Cho , ta nói là chuyển vị liên hợp của nếu , trong đó là liên hợp phức của . Nếu chuyển vị liên hợp của một ma trận phức bằng với chính nó, tức là , thì ta nói ma trận đó là Hermitian.
2. Ma trận xác định dương
- Một ma trận vuông , được gọi là xác định dương (positive definite) nếu ma trận đối xứng () và thỏa mãn với mọi . Nói cách khác với mọi và khi và chỉ khi .
- Một ma trận vuông , được gọi là ma trận nửa xác định dương (positive semidefinite) nếu ma trận đó đối xứng và thỏa mãn .
- Nhận xét: Mọi ma trận xác định dương cũng là ma trận nửa xác định dương nhưng điều ngược lại không đúng, bởi vì ma trận xác định dương có ràng buộc khi và chỉ khi .
- Với ma trận vuông , ta có , với đối xứng, ta có thể viết .
- Ví dụ: Với ma trận ta có . Hơn nữa khi và chỉ khi . Do đó là ma trận xác định dương.
- Dễ thấy các phần tử trên đường chéo chính của ma trận xác định dương là các số dương. Thật vậy với ma trận xác định dương , xét với là unit vector thứ , ta có với .
3. Schur complement
- Cho là ma trận xác định dương, viết lại như sau:
.
Ma trận gọi là Schur complement của . - Bây giờ ta chứng minh cũng là ma trận xác định dương. Lấy vector . Đặt . Ta có và
.
Do là ma trận xác định dương nên do đó , vậy cũng là ma trận xác định dương.
4. Gram matrix
- Ma trận Gram là ma trận có dạng .
- Ma trận Gram thì nửa xác định dương vì với mọi .
- Ma trận Gram là xác định dương khi hay các cột của là độc lập tuyến tính.
II. Cholesky Decomposition
1. Định nghĩa
- Mọi ma trận xác định dương đều có thể được phân tích thành trong đó là ma trận tam giác trên (hoặc với là ma trận tam giác dưới) với các phần tử trên đường chéo chính là các số thực dương.
- Ví dụ với ma trận xác định dương
2. Thuật toán tìm Cholesky Decomposition
- Ta có thể viết lại như sau:
.
Từ đây ta suy , ,
.
Do đó là phân tích Cholesky của .
Để ý thấy biểu thức cuối là Schur complement của . Theo chứng minh ở phần I.3 thì đây là ma trận xác định dương kích thước . Cứ tiếp tục truy hồi đến phân tích Cholesky ta được kết quả. Ví dụ: Tìm phân tích Cholesky của ma trận
Để lập trình được, các phần tử trong ma trận được viết lại thành
- Code Python
import numpy as np def CholeskyDecomposition(A): n=A.shape[0] L=np.zeros((n,n)) for i in range(n): for j in range(i+1): if(i==j): temp=A[i,i]-np.sum(L[i,:i]*L[i,:i]) if temp<0.0: return 0.0 L[i][i]=np.sqrt(temp) else: L[i][j]=(A[i][j]-np.sum(L[i,:j]*L[j,:j]))/(L[j][j]) return L.T
Kết quả chạy
A=np.array([[25,15,-5],[15,18,0],[-5,0,11]])
R=CholeskyDecomposition(A)
print("R=",R)
print("Check")
print("A= ", R.T @ R)
R= [[ 5. 3. -1.]
[ 0. 3. 1.]
[ 0. 0. 3.]]
Check
A= [[25. 15. -5.]
[15. 18. 0.]
[-5. 0. 11.]]
Kết quả cho ra đúng với kết quả ta làm ở trên.
- Ta có thể dùng hàm cholesky trong thư viện .
Code Python:
R=np.linalg.cholesky(A)
print(L)
R_T=L.transpose()
print(R.dot(R_T))
Kết quả hoàn toàn giống.
III. Ứng dụng Cholesky Decomposition
1. Giải hệ phương trình tuyến tính
Giả sử hệ phương trình tuyến tính được biểu diễn dưới dạng ma trận trong đó là ma trận xác định dương, .
- Code Python
def CholeskyLinearEquation(A,b): #Find x with Ax=b L=np.linalg.cholesky(A) y=(np.linalg.inv(L)).dot(b) x=(np.linalg.inv(np.transpose(L))).dot(y) return x
A=np.array([[4,12,-16],[12,37,-43],[-16,-43,98]]) b=np.array([ -68 ,-191 , 364]) x=CholeskyLinearEquation(A,b) print("x=",x)
Kết quả chạy: Hệ có nghiệm
x= [ 1. -2. 3.]
2. Least Squares Problem trong Linear Regression
Tham khảo bài viết tại https://alexisalulema.com/2018/01/20/cholesky-decomposition-for-linear-regression-with-tensorflow/
IV. Cholesky Decomposition của ma trận Gram
- Cho ma trận có các cột độc lập tuyến tính.
Khi đó ma trận Gram là ma trận xác định dương. Có 2 cách để tính Cholesky Decomposition của .- Tính trực tiếp theo phương pháp ở trên.
- Tính QR Decomposition của , tức là , khi đó , cũng là ma trận trong cách tính .
Về phân tích QR mình sẽ trình bày ở bài sau.
V. Tài liệu tham khảo
- http://www.seas.ucla.edu/~vandenbe/133A/133A-notes.pdf
- https://alexisalulema.com/2018/01/20/cholesky-decomposition-for-linear-regression-with-tensorflow/
- Ebook Machine Learning cơ bản, Vũ Hữu Tiệp.
- https://www.geeksforgeeks.org/cholesky-decomposition-matrix-decomposition/
- http://www.seas.ucla.edu/~vandenbe/133A/lectures/chol.pdf