Nếu x là vector riêng ứng với giá trị riêng λ của ma trận vuông A thì k.x cũng là vector riêng ứng với λ.. Nếu λ là giá trị riêng của ma trận vuông A thì λn cũng là giá trị riêng của
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐHQG-HCM
Khoa Kỹ thuật Hóa học & Khoa học ứng dụng
BÁO CÁO BÀI TẬP LỚN Môn: Đại số tuyến tính
Chủ đề 4: Phương pháp phân tích Singular Value Decomposition (SVD) và một số ứng dụng
Giảng viên: TS Nguyễn Hữu Hiệp
Nhóm: L05_ĐSTT_18
TP Hồ Chí Minh, tháng 12 năm 2021
Trang 2Danh sách thành viên:
Trang 3MỤC LỤC
A Cơ sở lý thuyết 4
1 Hệ trực giao và hệ trực chuẩn: 4
Định nghĩa: 4
Tính chất: 4
1 Giá trị riêng, vector riêng của một ma trận: 4
Định nghĩa: 4
Tính chất: 4
Cách tìm trị riêng và vector riêng: 5
2 Chéo hóa ma trận: 5
Định Nghĩa: 5
Tính chất: 5
3 Singular Value Decomposition SVD): 6
5 Nguồn gốc tên gọi Singular Value Decomposition: 7
B Một số ứng dụng của SVD 9
1 Giảm chiều dữ liệu : 9
2 Nén ảnh : 9
3 PCA : 12
C Chương trình dùng để phân tích SVD của ma trận tùy ý và dùng để nén dữ liệu 12
1 Code: 12
2 Kết quả code: 13
*Đồ thị tính toán sai lệch khi nén ảnh: 19
D Nguồn tham khảo 19
Trang 4A Cơ sở lý thuyết
1 Hệ trực giao và hệ trực chuẩn:
Định nghĩa :
Vector x được gọi là vuông góc với vector y, ký hiệu x ⊥ y nếu (x,y) = 0
Vector x được gọi là vuông góc với tập hợp con M, ký hiệu là x ⊥ M nếu ∀ y ∈
M thì x ⊥ y
Một tập hợp con M được gọi là họ trực giao nếu ∀ x, y ∈M và x≠ y thì x ⊥ y
Một tập hợp con M được gọi là họ trực chuẩn, nếu M là họ trực giao và ∀ x ∈M
thì ‖x‖=1
Tính chất:
U-1 = UT : nghịch đảo của một ma trận trực giao chính là chuyển vị của nó
Nếu U là ma trận trực giao thì chuyển vị của nó UT cũng là một ma trận trực giao
2 Giá trị riêng, vector riêng của một ma trận:
Mỗi vector riêng có một giá trị duy nhất
Nếu x là vector riêng ứng với giá trị riêng λ của ma trận vuông A thì k.x cũng là vector riêng ứng với λ
Nếu λ là giá trị riêng của ma trận vuông A thì λn cũng là giá trị riêng của ma trận
An
Một ma trận đối xứng: A = AT, thì các vector riêng vuông góc với nhau
Giả sử ma trận đối xứng A có các vector riêng x,y ứng với các giá trị riêng phân biệt
λ, γ Khi đó:
Trang 5λ.xT.y = (λ.x)T.y = (A.x)T.y = xT.AT.y = xT.A.y = xT.γ.y=γ.xT.y
Ứng với mỗi λk, giải phương trình (A – λ0I).X = 0
¿> X ≠ 0là vector riêng của A ứng với λk
Định Nghĩa :
Ma trận vuông A gọi là đối xứng nếu: A T = A
Ma trận vuông P gọi là trực giao nếu: P−1=P T Điều này tương đương: P
Trang 6 Nếu ma trận A chéo hóa trực giao được, thì A là ma trận đối xứng.
Ma trận vuông A chéo hóa được khi và chỉ khi bội hình học của mọi trị riêng bằng với bội đại số của nó
Nếu A là ma trận đối xứng, thì: Trị riêng của A là các số thực
A luôn luôn chéo hóa trực giao được
Hai vector riêng ứng với các trị riêng khác nhau vuông góc với nhau
Phương pháp phân tích trị riêng (SVD- SingularValue Decomposition) là một đề tài rấtđược quan tâm của đại số tuyến tính Phương pháp này có nhiều ứng dụng thực tế Đặc điểmquan trọng của phương pháp này có thể áp dụng cho bất kỳ ma trận thực m x n nào Nội dungcủa nó là:
A =USVT (1)
*Trong đó: U và V là các ma trận trực giao và S là ma trận đường chéo Ma trận U là
ma trận gồm các vector riêng trái của A, ma trận V là ma trận gồm các vector riêng
phải của A và ma trận S là ma trận đường chéo, mỗi phần tử đường chéo là một trị
riêng của A Các trị riêng được sắp trên đường chéo chính theo thứ tự sau:
s1 > s 2 > > s r > s r +1 = = s p = 0
Để tìm các ma trận S, U, V ta thực hiện các bước như sau:
Bước 1: Tìm ma trận V Nhân A T vào hai vế của (1), ta có:
A T A = (USV T ) T USV T = V.S T U T U.S.V T
Do UT.U=I Như vậy, để tìm ma trận S và V, ta chỉ cần tìm các trị riêng và các
vector riêng của AT.A vì từ (1) ta thấy các trị riêng của AT.A chính là bình
phương các phần tử của S còn các vector riêng của AT.A chính là các cột của V
Bước 2: Tìm ma trận U Nhân hai vế của (1) với A T và sử dụng: VTV = I ta cũng có:
Trang 7A A T = U.S 2 U T
Vậy các cột của U chính là các vector riêng của A AT Cuối cùng, ta phân tích ma
5 Nguồn gốc tên gọi Singular Value Decomposition:
Tạm bỏ qua chiều của mỗi ma trận, từ (1) ta có:
A A T =US V T (USV T)T =US V T V S T U T
¿ US S T U T =US S T U−1( ¿ )
Dấu bằng cuối cùng xảy ra vì V T V =I do V là một ma trận trực giao.
Quan sát thấy rằng SS T là một ma trận đường chéo với các phần tử trên đường chéo là
λ 1, λ2 , … , λ r.Vậy (*) chính là Eigen Decomposition (phương trình đặc trưng) của A A T Thêm nữa λ1 , λ2 , … , λ rchính là các trị riêng của A A T Ma trận A A T luôn là ma trận nửa xác định dương nên các trị riêng của nó là không âm Các σ1 là căn bậc hai của các trị
riêng của A A T còn được gọi là Singular Values của A cái tên Singular Value
Decomposition xuất phát từ đây
Vd: Tim phân tich SVD cua ma trân sau A=(−
Trang 8+ Ưng vơi λ1 =3 ta đươc cơ sở E1=(1 ,1) T +
Ưng vơi λ2 =9 ta đươc cơ sởE2=(−1 , 1) T
Chia môi vector cho đô dai cua no va lâp ma trân trưc giao:
+ Ưng vơi λ1 =0 ta được cơ sở E1 ¿(2,1,−1) T
+ Ứng với λ2 =3 ta được cơ sở E2 ¿(0,1,1) T
+ Ưng vơi λ3 =9 ta được cơ sở E3 ¿(−7 ,1,−1) T
Chia mỗi vector cho độ dài của nó và lập ma trận trực giao
Trang 9Vậy phân tích SVD của ma trận A là A=USV T với U và V là ma trận ở trên và
S=√M=( √
03 0 0)
Trang 10B Một số ứng dụng của SVD
Ngoài các ứng dụng trong tối ưu cực trị rời rạc, lát cắt cực đại, K-meansClustering, Graph Partitioning,…SVD được sử dụng nhiều trong các lĩnh vực (nhất
là Machine Learning) ứng dụng cơ bản nhất là trong nén và xử lý hình ảnh
1 Giảm chiều dữ liệu :
- Các ma trận Ak gần khít với A và có hạng bằng k nên ta có thể dùng SVD để giảm chiều dữ liệu
- Việc giảm chiều dữ liệu giúp ta có khả năng biễu diễn bộ dữ liệu đó một cách kháchính xác trên đồ thị Giả sử ta có một tập dữ liệu 4 chiều và ta muốn biểu diễn tập dữliệu này trên đồ thị thì ta có thể dùng SVD để giảm chiều dữ liệu về 3
- Việc giảm chiều dữ liệu nhưng vẫn giữ được đặc trưng của bộ dữ liệu còn giúp số lượng tham số cần tính toán là ít hơn nên tính toán nhanh hơn
Cách thức dùng phương pháp SVD để nén ảnh như sau:
- Cho A là ảnh xám, hoặc một trong 3 thành phần ảnh màu, được biểu diễn bởi ma trận
m×n Sử dụng biến đổi SVD của A chúng ta có thể biểu diễn ma trận ảnh
với r là bậc của ma trận A và S là ma trận đường chéo m×n gồm các trị đơn của A,
Trong nén ảnh, ta không cần lưu trữ hay truyền toàn bộ dữ liệu ảnhnhưng vẫn lưu trữ hoặc truyền đủ những thông tin quan trọng giúp khôi phục được ảnh
Biến đổi SVD thích hợp với điều này vì ta có thể xấp xỉ A bằng cách bỏ đi các thành
phần ảnh tương ứng với các trị đơn có giá trị nhỏ, do đó ảnh sẽ không mất nhiềuthông tin khi thay chúng bằng 0 Từ đó, ảnh xấp xỉ được tạo ra như sau:
Điều đó có nghĩa là thay vì toàn bộ A, chúng ta có thể chỉ cần lưu trữ và truyền nhận
Trang 11- Hình 1: Minh họa việc sử dụng SVD để nén ảnh Ảnh ban đầu kích thước m×n, có thể
sử dụng biến đổi SVD cho ảnh kích thước m×n ở trên ta thu được 3 thành phần , S, ,
phần trắng của ma trận tượng trưng cho các phần tử không cần lưu trữ
=
Amn Umm Smn VnnT
Hình1 Mô tả cách thức SVD nén ảnh.
- Khi đủ nhỏ, ta sẽ có tổng số cần lưu là và nén ảnh bằng SVD
trở nên hiệu quả Chú ý rằng nếu ảnh A có hạng r nhỏ khiến cho
thì việc phân tích SVD sẽ làm giảm không gian lưu trữ mà không làm mất thông tinảnh
- Sử dụng phần mềm Matlab, thực hiện nén ảnh sử dụng biến đổi SVD với các giá trị khác nhau cho một tấm ảnh kích thước 1920 × 1080
- Kết quả thu được thể hiện ở Hình 2:
Hình gốc
Trang 12k=61
k=301
- Đồ thị mô tả sự sai số giữa ảnh gốc ban đầu và ảnh sau khi nén, cùng với đánh giá về
hiệu quả nén khi áp dụng SVD với các giá trị khác nhau, thể hiện ở Hình 3.
Hình 3.
Sai số giữaảnh nén vàảnh gốc với các giátrị khác nhau
Rõ ràng là khigiá trị càng
Trang 13lớn, ảnh khôi phục sau khi nén càng gần với ảnh gốc và ngược lại Điều này dễ hiểu vì khi càng lớn, thông tin mất đi càng ít, sai biệt với ảnh gốc cũng giảm đi Do tỉ lệ nén
bằng nên nó tỉ lệ thuận với như minh họa trong Hình 3 Ở những hình
có cấu trúc đặc biệt hơn như là có hạng nhỏ thì hiệu quả nén càng cao
- Ta thấy rằng, khi từ một tập điểm cho trước, việc giảm chiều cũng như là kẻ một siêuphẳng biểu diễn khít tập điểm đã cho Ta không thể dùng các ma trận Ak một cách trựctiếp được, vì các ma trận Ak biểu diễn một siêu phẳng đi qua góc tọa độ
- Ta có thể thấy rằng v1 biểu diễn phương mà tập điểm đó phân bố tập trung nhất khinhìn từ gốc tọa độ (‖A v1‖ đạt giá trị lớn nhất) Sau đó v2 lại biểu diễn phương vuông gócvới v1 mà phương đó tập điểm phân bố tập trung nhất cũng khi nhìn từ gốc tọa độ
Vậy một cách đơn giản, ta chỉ cần dời nó về trọng tâm của tập điểm và dùng SVD giảmchiều xuống
C Chương trình dùng để phân tích SVD của ma trận tùy ý và dùng để nén dữ liệu.
close all
clear all
clc
inImage=imread('L05_nhom18.png'); % doc file anh
inImage=rgb2gray(inImage); % chuyen anh mau sang 2
mau trang den
inImageD=double(inImage); % chuyen doi du lieu cua hinhanh
[U,S,V]=svd(inImageD); % phan tich hinh anh
% dung phuong phap SVD de phan tich va tao lai anh dispEr
= []; % tao ma tran rong dispEr
numSVals = []; % tao ma tran rong numSVals
for k=1:30:301 % cho k chay tu 1 den 301 voi buoc nhay la30
C = S; % gan du lieu ma ta muon giu lai cua ma tran
S vao C
Trang 14C(k+1:end,:)=0; % tu hang k+1 den het cho = 0
C(:,k+1:end)=0; % tu cot k+1 den het cho = 0
% => tao ma tran cheo C
D=U*C*V'; % dung lai anh bang viec phan tich anh
% xuat hinh anh ra man hinh va tinh toan loi
figure; % lam moi lai hinh anh
buffer = sprintf('Hinh anh moi xuat ra su dung %d
% xuat hinh anh o 8bit title(buffer); % xuat ten cua hinh anh duoc tao lai
voi gia tri k tuong ung
error=sum(sum((inImageD-D).^2)); % tinh toan laibang cong thuc (sai lech giua anh duoc tao lai va anh goc)
% luu gia tri de xuat len man hinh
dispEr = [dispEr; error]; %bieu dien gia tri laithanh ma tran 1 cot nhieu hang
numSVals = [numSVals; k]; % bieu dien gia tri laithanh ma tran 1 cot nhieu hang
end
% ve do thi tinh toan sai lech figure; % lam moi do thi
title('Do thi tinh toan sai lech khi nen anh'); % dat ten
do thi
plot(numSVals, dispEr); % ve do thi
grid on % ke luoi toa do
xlabel('So luong Singular Value duoc su dung'); % tao trucx
ylabel('Sai lech giua anh nen va anh goc'); % tao truc y
*Figure 1:
Trang 15*Figure 2:
*Figure 3:
Trang 16*Figure 4:
*Figure 5:
Trang 17*Figure 6:
*Figure 7:
Trang 18*Figure 8:
*Figure 9:
Trang 19*Figure 10:
*Figure 11:
Trang 20*Đồ thị tính toán sai lệch khi nén ảnh:
D Nguồn tham khảo
- Đại số tuyến tính nâng cao – Đặng Văn Vinh
- Singular Value Decomposition - Mathworks
- Matlab và ứng dụng trong viễn thông - TS Phạm Hồng Liên, Đặng Ngọc Khoa - TrầnThanh Phương
- Sử dụng Matlab trong đại số tuyến tính
- Giới thiệu về ứng dụng TF-IDF và SVD trong thu thập thông tin dữ liệu Website
- Tóm tắt luận văn thạc sĩ chuyên ngành Khoa học Máy tính – Phạm Hoàng Trương
- SVD trong nén ảnh (Khoa Điện – Điện tử, Đại học Duy Tân)