Checkpoint: loss, gradient và numerical stability
Quiz
- Với logits z = [1000.0, 1001.0, 1002.0] ở float32, vì sao softmax naive (không trừ max) trả về nan?
- Vì phép chia trong softmax không hỗ trợ số lớn hơn 1000.
- Vì exp(1000) underflow về 0, mẫu số bằng 0 nên 0/0 = nan.
- Vì float32 không biểu diễn được số 1000.
- Vì exp(1000) tràn thành inf, sau đó inf / inf = nan.
- Sau khi trừ max, vì sao mẫu số của softmax luôn nằm trong khoảng [1, C]?
- Vì softmax chuẩn hóa mẫu số về đúng bằng C.
- Vì phần tử lớn nhất sau khi dịch bằng 0 nên exp của nó bằng 1, và mỗi hạng tử còn lại nằm trong (0, 1].
- Vì mọi exp(z_i - m) đều bằng 1 sau khi trừ max.
- Vì NumPy tự kẹp mẫu số vào khoảng [1, C] khi dùng float32.
- Những phát biểu nào đúng về log-sum-exp và log_softmax? (chọn tất cả đáp án đúng)
- log_softmax(z) = z - logsumexp(z), tính trực tiếp không qua bước softmax.
- Đạo hàm của logsumexp theo z bằng softmax(z).
- logsumexp(z) = m + log(tổng exp(z_i - m)) với m = max(z).
- Nên tính log(softmax(z)) thay vì log_softmax(z) để đơn giản code.
- Khi viết softmax cho batch logits shape (N, C), những lỗi nào sau đây gây sai kết quả âm thầm hoặc nan? (chọn tất cả đáp án đúng)
- Quên kiểm tra z.dtype, để logits float32 vượt ngưỡng tràn exp khoảng 88.7.
- Lấy log lên đầu ra của softmax thay vì dùng log_softmax.
- Trừ max theo từng hàng với keepdims=True trước khi lấy exp.
- Dùng z.max(axis=1) không có keepdims=True, khiến NumPy broadcasting trừ theo cột thay vì theo hàng.
- Với nhãn one-hot y và p = softmax(z), đạo hàm của cross-entropy theo vector logits là ____ (viết dạng biểu thức theo p và y).
- Trên mini-batch N mẫu, với G = p - y shape (N, C) và H là activation đầu vào shape (N, D), gradient theo weight của lớp tuyến tính cuối là ____ (viết dạng biểu thức ma trận).
- Với sigmoid, đạo hàm lớn nhất bằng ____, nên sau 10 lớp tích gradient còn cỡ 9.5e-7.
- Gradient check bằng central difference nên chạy ở độ chính xác nào và vì sao?
- float64, vì machine epsilon của float32 (khoảng 1.19e-7) cùng bậc với sai số sai phân nên kết quả gần như vô nghĩa.
- float32, vì float64 quá chậm và không cần thiết.
- Không cần quan tâm dtype, miễn là h chọn đủ nhỏ.
- float16, vì tiết kiệm bộ nhớ và sai số sai phân cũng nhỏ.
- Những phát biểu nào đúng về chẩn đoán vanishing/exploding gradient và cách xử lý? (chọn tất cả đáp án đúng)
- Vanishing gradient là hệ quả của tích các Jacobian có norm nhỏ hơn 1 qua nhiều lớp.
- Gradient clipping theo norm giữ nguyên hướng cập nhật và chỉ rescale khi norm vượt ngưỡng.
- Gradient clipping có thể chữa được công thức backward bị sai.
- He initialization với Var(W) = 2/n_in phù hợp cho ReLU.
- Hãy tự đánh giá mức độ nắm vững của bạn về việc cài đặt softmax ổn định, cross-entropy và gradient checking cho mạng 2 lớp trong capstone.
Sign in to submit answers.