Khởi tạo ma trận trọng số trực giao qua phân rã QR (Orthogonal Initialization)
Trong mạng hồi quy (RNN/LSTM) và các mô hình sâu không có Residual connection, khởi tạo trực giao (Orthogonal Initialization) là kỹ thuật quan trọng nhất để bảo toàn độ dài vector…
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: xavier-glorot-initialization-variance.
Nội dung đề bài
Mô tả bài toán
Trong mạng hồi quy (RNN/LSTM) và các mô hình sâu không có Residual connection, khởi tạo trực giao (Orthogonal Initialization) là kỹ thuật quan trọng nhất để bảo toàn độ dài vector tín hiệu: WT W = I ⇒ |W x|2 = |x|2 Thuật toán sinh ma trận trực giao chuẩn:
- Sinh ma trận ngẫu nhiên A ∈ RM × N từ phân phối chuẩn tắc N(0, 1).
- Thực hiện phân rã QR: A = Q R với Q có các cột trực chuẩn.
- Hiệu chỉnh dấu (Phase Correction): để đảm bảo phân phối đều trên nhóm trực giao (Haar measure), nhân cột thứ i của Q với sign(Ri, i).
- Nhân với hệ số tỷ lệ
gain(ví dụ gain = 1.0 cho Linear, √(2) cho ReLU). - Cắt ma trận kích thước phù hợp với (M, N).
Hãy viết hàm orthogonal_init(shape: tuple[int, int], gain: float = 1.0, seed: int = 42) -> np.ndarray:
- Nhận
shape = (rows, cols)và hệ sốgain. - Trả về ma trận trực giao NumPy kích thước (rows, cols) kiểu
np.float64.
Input
- Hàm
orthogonal_init(shape,gain,seed): 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
orthogonal_init: 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: 6000ms.
- Giới hạn bộ nhớ: 512MB.
- 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
dim = 50
W = orthogonal_init((dim, dim), gain=1.0, seed=42)
prod = np.dot(W.T, W)Output
[[ 1., 0., -0., ..., -0., -0., -0.],
[ 0., 1., -0., ..., 0., 0., -0.],
[-0., -0., 1., ..., 0., -0., -0.],
...,
[-0., 0., 0., ..., 1., -0., 0.],
[-0., 0., -0., ..., -0., 1., 0.],
[-0., -0., -0., ..., 0., 0., 1.]]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
dim = 20
gain = 2.5
W = orthogonal_init((dim, dim), gain=gain, seed=123)
prod = np.dot(W.T, W)Output
[[ 6.25, 0. , 0. , -0. , -0. , -0. , -0. , -0. , 0. , -0. ,
-0. , 0. , -0. , -0. , -0. , 0. , 0. , 0. , -0. , -0. ],
[ 0. , 6.25, 0. , 0. , 0. , 0. , 0. , 0. , -0. , 0. ,
0. , 0. , -0. , 0. , -0. , 0. , -0. , 0. , 0. , -0. ],
[ 0. , 0. , 6.25, 0. , 0. , -0. , -0. , 0. , -0. , -0. ,
-0. , 0. , -0. , 0. , 0. , 0. , 0. , 0. , 0. , -0. ],
[-0. , 0. , 0. , 6.25, 0. , -0. , 0. , 0. , -0. , 0. ,
0. , -0. , 0. , -0. , -0. , 0. , -0. , 0. , -0. , 0. ],
[-0. , 0. , 0. , 0. , 6.25, 0. , -0. , -0. , 0. , -0. ,
-0. , 0. , -0. , -0. , -0. , 0. , 0. , -0. , 0. , 0. ],
[-0. , 0. , -0. , -0. , 0. , 6.25, 0. , -0. , -0. , -0. ,
0. , 0. , 0. , 0. , 0. , -0. , -0. , 0. , -0. , -0. ],
[-0. , 0. , -0. , 0. , -0. , 0. , 6.25, -0. , 0. , 0. ,
-0. , -0. , -0. , -0. , 0. , -0. , -0. , 0. , 0. , 0. ],
[-0. , 0. , 0. , 0. , -0. , -0. , -0. , 6.25, -0. , -0. ,
0. , -0. , 0. , -0. , -0. , -0. , 0. , 0. , 0. , -0. ],
[ 0. , -0. , -0. , -0. , 0. , -0. , 0. , -0. , 6.25, 0. ,
-0. , -0. , -0. , -0. , -0. , -0. , 0. , 0. , 0. , -0. ],
[-0. , 0. , -0. , 0. , -0. , -0. , 0. , -0. , 0. , 6.25,
-0. , -0. , -0. , 0. , -0. , 0. , 0. , 0. , 0. , -0. ],
[-0. , 0. , -0. , 0. , -0. , 0. , -0. , 0. , -0. , -0. ,
6.25, 0. , 0. , 0. , -0. , 0. , 0. , 0. , -0. , 0. ],
[ 0. , 0. , 0. , -0. , 0. , 0. , -0. , -0. , -0. , -0. ,
0. , 6.25, 0. , 0. , -0. , -0. , -0. , 0. , 0. , -0. ],
[-0. , -0. , -0. , 0. , -0. , 0. , -0. , 0. , -0. , -0. ,
0. , 0. , 6.25, -0. , 0. , 0. , -0. , 0. , 0. , 0. ],
[-0. , 0. , 0. , -0. , -0. , 0. , -0. , -0. , -0. , 0. ,
0. , 0. , -0. , 6.25, 0. , 0. , 0. , 0. , 0. , -0. ],
[-0. , -0. , 0. , -0. , -0. , 0. , 0. , -0. , -0. , -0. ,
-0. , -0. , 0. , 0. , 6.25, 0. , 0. , 0. , -0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , -0. , -0. , -0. , -0. , 0. ,
0. , -0. , 0. , 0. , 0. , 6.25, 0. , 0. , -0. , -0. ],
[ 0. , -0. , 0. , -0. , 0. , -0. , -0. , 0. , 0. , 0. ,
0. , -0. , -0. , 0. , 0. , 0. , 6.25, 0. , -0. , 0. ],
[ 0. , 0. , 0. , 0. , -0. , 0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. , 0. , 0. , 6.25, -0. , 0. ],
[-0. , 0. , 0. , -0. , 0. , -0. , 0. , 0. , 0. , 0. ,
-0. , 0. , 0. , 0. , -0. , -0. , -0. , -0. , 6.25, 0. ],
[-0. , -0. , -0. , 0. , 0. , -0. , 0. , -0. , -0. , -0. ,
0. , -0. , 0. , -0. , 0. , -0. , 0. , 0. , 0. , 6.25]]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.
