Nén Ma Trận Bằng SVD Hạng Thấp (Low-Rank Approximation)
Mỗi ma trận trọng số W ∈ Rm × n có thể xấp xỉ bởi:
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: singular-value-decomposition-truncated-svd.
Nội dung đề bài
Mục tiêu kiến thức
Mỗi ma trận trọng số W ∈ Rm × n có thể xấp xỉ bởi: W ≈ Uk Sigmak VkT
Trong đó chỉ giữ k giá trị kỳ dị lớn nhất. Tham số gốc: m × n. Tham số sau nén: k(m + n) (với Uk, Sigmak hợp nhất).
Compression ratio: m · nk(m + n)
Tiêu chí chọn k theo tỷ lệ phương sai giải thích: k = min k' : ∑i=1k' σi2∑i=1r σi2 ≥ explained_var
Yêu cầu
def svd_compress(W: np.ndarray, rank: int = None, explained_var: float = 0.95) -> tuple:
# Returns (U_k, sigma_k, Vt_k, compression_ratio)
pass
def reconstruct(U_k, sigma_k, Vt_k) -> np.ndarray:
passInput
- Hàm
svd_compress(W,rank,explained_var): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng. - Hàm
reconstruct(Uk,sigma_k,Vt_k): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm
svd_compress: Trả về kết quả kiểuAnytheo đúng đặc tả kỹ thuật và kích thước quy định. - Hàm
reconstruct: Trả về kết quả kiểunp.ndarraytheo đúng đặc tả kỹ thuật và kích thước quy định.
Ràng buộc
- Thời gian chạy tối đa: 3000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
np.random.seed(42)
W = np.random.randn(20, 10)
U_k, sigma_k, Vt_k, ratio = svd_compress(W, rank=3)Output
([[ 0.2212, 0.0751, -0.2744],
[-0.4268, 0.1652, -0.035 ],
[-0.2724, 0.165 , 0.1482],
[ 0.0044, 0.1369, -0.1286],
[-0.3495, 0.0103, -0.2064],
[ 0.1588, -0.1635, 0.2823],
[-0.1106, 0.023 , 0.2949],
[-0.3069, -0.3999, -0.4258],
[ 0.0245, 0.2425, -0.1854],
[-0.061 , 0.083 , -0.2433],
[ 0.073 , 0.0896, -0.0477],
[ 0.312 , -0.4618, -0.095 ],
[-0.2026, 0.0411, 0.4816],
[-0.1643, -0.4269, 0.0847],
[-0.0324, -0.3376, 0.1509],
[ 0.19 , 0.2113, -0.2464],
[-0.0395, 0.2889, 0.0193],
[ 0.3739, 0.0964, 0.2223],
[-0.1441, -0.1026, -0.0469],
[-0.2579, 0.0315, 0.122 ]], [6.2953, 5.6058, 5.332 ], [[-0.1916, -0.105 , -0.0002, 0.4392, 0.3647, -0.0665, 0.3324, -0.0211,
0.0458, 0.7134],
[ 0.1531, -0.0812, 0.3197, -0.5826, 0.2092, -0.341 , 0.2828, 0.379 ,
-0.3491, 0.1511],
[ 0.0014, -0.3174, -0.0287, -0.3768, 0.4585, 0.5262, -0.4548, -0.0098,
0.1465, 0.2025]], 2.222222)Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Ví dụ 2
Input
W = np.random.randn(10, 8)
U_k, sigma_k, Vt_k, _ = svd_compress(W, rank=8)
W_hat = reconstruct(U_k, sigma_k, Vt_k)Output
[[ 0.3578, 0.5608, 1.0831, 1.0538, -1.3777, -0.9378, 0.515 , 0.5138],
[ 0.515 , 3.8527, 0.5709, 1.1356, 0.954 , 0.6514, -0.3153, 0.759 ],
[-0.7728, -0.2368, -0.4854, 0.0819, 2.3147, -1.8673, 0.6863, -1.6127],
[-0.4719, 1.089 , 0.0643, -1.0777, -0.7153, 0.6796, -0.7304, 0.2165],
[ 0.0456, -0.6516, 2.1439, 0.6339, -2.0251, 0.1865, -0.6618, 0.8524],
[-0.7925, -0.1147, 0.505 , 0.8658, -1.2003, -0.3345, -0.4749, -0.6533],
[ 1.7655, 0.405 , -1.2609, 0.9179, 2.1222, 1.0325, -1.5194, -0.4842],
[ 1.2669, -0.7077, 0.4438, 0.7746, -0.9269, -0.0595, -3.2413, -1.0244],
[-0.2526, -1.2478, 1.6324, -1.4301, -0.44 , 0.1307, 1.4413, -1.4359],
[ 1.1632, 0.0102, -0.9815, 0.4621, 0.1991, -0.6002, 0.0698, -0.3853]]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
