Huấn luyện mạng MLP 2 tầng hoàn chỉnh từ đầu bằng NumPy (2-Layer MLP Backprop)
Hãy cài đặt một mạng nơ-ron truyền thẳng 2 tầng (2-Layer Multi-Layer Perceptron) hoàn chỉnh bằng NumPy:
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: linear-layer-forward-backward-numpy, fused-softmax-cross-entropy-loss.
Nội dung đề bài
Mô tả bài toán
Hãy cài đặt một mạng nơ-ron truyền thẳng 2 tầng (2-Layer Multi-Layer Perceptron) hoàn chỉnh bằng NumPy:
- Kiến trúc:
- Tầng ẩn: Z1 = X W1 + b1 ∈ RB × H
- Kích hoạt: A1 = ReLU(Z1) = max(0, Z1) ∈ RB × H
- Tầng đầu ra: Z2 = A1 W2 + b2 ∈ RB × C
- Hàm mất mát: Fused Softmax Cross-Entropy Loss: L = -log py với p = softmax(Z2).
- Lan truyền ngược:
- ∂ L∂ Z2 = dZ2 = 1B (p - yonehot)
- dW2 = A1T dZ2, db2 = ∑b=0B-1 dZ2, b
- dA1 = dZ2 W2T
- dZ1 = dA1 ⊙ IZ1 > 0
- dW1 = XT dZ1, db1 = ∑b=0B-1 dZ1, b
Hãy viết lớp TwoLayerMLP:
__init__(self, in_features: int, hidden_dim: int, num_classes: int)forward(self, X: np.ndarray, y: np.ndarray = None) -> tuple[np.ndarray, float | None]: trả về(logits, loss). Nếu y làNone,losslàNone.backward(self) -> dict: tính và trả về{"dW1": dW1, "db1": db1, "dW2": dW2, "db2": db2}.
Input
- Lớp
TwoLayerMLP(in_features,hidden_dim,num_classes): Khởi tạo đối tượng với các tham số, trọng số hoặc cấu hình tương ứng.
Output
- Các phương thức của
TwoLayerMLP: Trả về kết quả tính toán hoặc cập nhật trạng thái nội bộ của đối tượng.
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
mlp = TwoLayerMLP(4, 8, 3)
mlp.W1 = np.random.randn(4, 8)
mlp.W2 = np.random.randn(8, 3)
X = np.random.randn(5, 4)
y = np.array([0, 1, 2, 0, 1])
logits, loss = mlp.forward(X, y)
grads = mlp.backward()Output
{
'dW1': [[-0.0247, -0.2734, 1.3052, 0.3278, 0. , 0. , -0.8848, 0.2637],
[-0.051 , 0.0015, -0.029 , -0.2023, 0. , 0. , 0.5446, -0.2112],
[-0.0399, -0.0399, 0.1459, -0.0528, 0. , 0. , 0.641 , -0.1689],
[-0.0228, -0.0254, -0.1077, 0.2402, 0. , 0. , 0.3846, -0.1353]],
'db1': [-0.0376, 0.1184, -0.381 , -0.5629, 0. , 0. , 0.9981, -0.2879],
'dW2': [[-0.1697, 0.0015, 0.1682],
[-0.3662, -0.1573, 0.5236],
[ 0.0029, -0.1761, 0.1732],
[-0.1112, -0.0002, 0.1113],
[ 0. , 0. , 0. ],
[ 0. , 0. , 0. ],
[-1.2943, -0.8112, 2.1055],
[-0.0927, -0.6749, 0.7677]],
'db2': [-0.2193, -0.3094, 0.5287]
}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
mlp = TwoLayerMLP(2, 3, 2)
mlp.W1 = np.random.randn(2, 3)
mlp.W2 = np.random.randn(3, 2)
X = np.random.randn(2, 2)
y = np.array([0, 1])
_, loss = mlp.forward(X, y)
grads = mlp.backward()
h = 1e-06
_, l_plus = mlp.forward(X, y)
_, l_minus = mlp.forward(X, y)
num_grad = (l_plus - l_minus) / (2 * h)Output
0Giả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.
