Hàm Mất Mát & Đạo Hàm Skip-Gram với Negative Sampling (SGNS)
L = -ln σ(uwOT vwI) - ∑k=1K ln σ(-uwnkT vwI)
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: logistic-regression-bce-from-scratch.
Nội dung đề bài
Mục tiêu kiến thức
- Hiểu tại sao Mikolov et al. (2013) sử dụng Negative Sampling để thay thế mẫu số Softmax khổng lồ O(|V|) thành bài toán phân loại nhị phân O(K).
- Hàm mất mát cho 1 cặp từ trung tâm wI (vector vwI ∈ RD) và từ ngữ cảnh đích wO (vector uwO ∈ RD):
L = -ln σ(uwOT vwI) - ∑k=1K ln σ(-uwnkT vwI) Trong đó wnk là K từ mẫu âm tính (negative samples) được lấy mẫu ngẫu nhiên.
- Đạo hàm phân tích:
∂ L∂ vwI = (σ(uwOT vwI) - 1) uwO + ∑k=1K (1 - σ(-uwnkT vwI)) uwnk ∂ L∂ uwO = (σ(uwOT vwI) - 1) vwI ∂ L∂ uwnk = (1 - σ(-uwnkT vwI)) vwI = σ(uwnkT vwI) vwI
Yêu cầu
Viết hàm sgns_loss_and_grad(v_wi: np.ndarray, u_wo: np.ndarray, u_neg: np.ndarray) -> tuple[float, np.ndarray, np.ndarray, np.ndarray]:
- Đầu vào:
v_wi: Vector từ trung tâm shape (D,).u_wo: Vector từ ngữ cảnh dương tính shape (D,).u_neg: Ma trận các vector từ âm tính shape (K, D).- Trả về tuple:
(loss, grad_v_wi, grad_u_wo, grad_u_neg): loss: Giá trị vô hướng L.grad_v_wi: Gradient tương ứng với vwI shape (D,).grad_u_wo: Gradient tương ứng với uwO shape (D,).grad_u_neg: Gradient tương ứng với uneg shape (K, D).
Input
- Hàm
sgns_loss_and_grad(v_wi,u_wo,u_neg): 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
sgns_loss_and_grad: Trả về kết quả kiểutuple[float, np.ndarray, np.ndarray, np.ndarray]theo đú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: 2000ms.
- 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
D, K = (4, 3)
v_wi = np.array([1.0, 0.5, -0.5, 0.2])
u_wo = np.array([0.8, 0.4, -0.2, 0.1])
u_neg = np.random.randn(K, D) * 0.1
loss, g_v, g_wo, g_neg = sgns_loss_and_grad(v_wi, u_wo, u_neg)Output
(2.484029, [-0.0609, -0.1702, 0.0344, 0.0882], [-0.246 , -0.123 , 0.123 , -0.0492], [[ 0.4811, 0.2405, -0.2405, 0.0962],
[ 0.5196, 0.2598, -0.2598, 0.1039],
[ 0.5562, 0.2781, -0.2781, 0.1112]])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
D, K = (3, 2)
np.random.seed(42)
v_wi = np.random.randn(D)
u_wo = np.random.randn(D)
u_neg = np.random.randn(K, D)
loss, g_v, _, _ = sgns_loss_and_grad(v_wi, u_wo, u_neg)
eps = 1e-06
v_plus = v_wi.copy()
loss_plus, _, _, _ = sgns_loss_and_grad(v_plus, u_wo, u_neg)
v_minus = v_wi.copy()
loss_minus, _, _, _ = sgns_loss_and_grad(v_minus, u_wo, u_neg)
num_grad = (loss_plus - loss_minus) / (2 * eps)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.
