Mục lục
- Cách Dùng Bài Này
- Category 1 — ML Fundamentals (Q1–Q5)
- Category 2 — Model Evaluation (Q6–Q10)
- Category 3 — Regularization (Q11–Q15)
- Category 4 — Optimization (Q16–Q20)
- Category 5 — Deep Learning Specific (Q21–Q25)
- Category 6 — Practical (Q26–Q30)
- Cách Trả Lời Technical — Tips Thực Tế
- Common Pitfalls
- Tham Khảo Thêm
- Bài Tiếp Theo
Cách Dùng Bài Này
Technical round ở phỏng vấn AI Engineer thường đo ML foundations — không phải kiểm tra bạn thuộc công thức, mà muốn biết bạn hiểu concept và có thể lý luận từ đó.
Format câu trả lời hiệu quả gồm 3 phần:
- Định nghĩa concept — 1–2 câu súc tích.
- Intuition — tại sao nó hoạt động theo cách đó.
- Ví dụ cụ thể — từ project thực tế hoặc use case quen thuộc.
Bạn không cần trả lời hoàn hảo. Interviewer đánh giá cao người nói thẳng "Tôi không chắc về chi tiết, nhưng theo logic thì…" hơn là người im lặng hoặc đoán mò.
30 câu chia theo 6 category, mỗi category 5 câu:
- ML Fundamentals
- Model Evaluation
- Regularization
- Optimization
- Deep Learning Specific
- Practical
Mỗi câu có gợi ý trả lời ngắn. Dùng làm checklist ôn tập — không học thuộc nguyên văn.
Category 1 — ML Fundamentals (Q1–Q5)
Q1: Bias vs Variance trade-off là gì?
Gợi ý trả lời:
- Bias: sai số do model đưa ra giả định quá đơn giản về dữ liệu → underfit. Model không nắm được pattern.
- Variance: sai số do model quá nhạy với training data → overfit. Thêm 1 điểm mới là prediction sai.
- Trade-off: model phức tạp hơn thường giảm bias nhưng tăng variance, và ngược lại.
- Balance: cross-validation để detect, regularization để kiểm soát.
Ví dụ: Linear regression trên data hình parabol → high bias. Decision tree sâu vô hạn trên data nhỏ → high variance.
Q2: Overfitting là gì? Detect và giảm bằng cách nào?
Gợi ý trả lời:
- Model học quá khít training data, bao gồm cả noise → không generalize được trên data mới.
- Detect: train accuracy cao hơn val accuracy đáng kể; learning curve hai metric diverge theo epoch.
- Giảm:
- Regularization: L1/L2 penalty trên weights.
- Dropout: ngắt ngẫu nhiên neuron khi train.
- Early stopping: dừng khi val loss không cải thiện.
- Thêm data hoặc augmentation.
- Dùng model đơn giản hơn nếu data nhỏ.
Q3: Phân biệt Supervised, Unsupervised, Reinforcement Learning?
Gợi ý trả lời:
| Loại | Dữ liệu | Mục tiêu | Ví dụ |
|---|---|---|---|
| Supervised | Có label | Predict label cho input mới | Spam detection, price prediction |
| Unsupervised | Không label | Tìm cấu trúc ẩn trong data | Customer clustering, dimensionality reduction |
| Reinforcement | Reward signal | Học policy tối đa hóa reward tích lũy | AlphaGo, robot locomotion |
Q4: Khi nào dùng classification, khi nào dùng regression?
Gợi ý trả lời:
- Classification: target là giá trị rời rạc (class). Loss function: cross-entropy. Ví dụ: phân loại email spam/không spam, nhận diện chữ số 0–9.
- Regression: target là giá trị liên tục. Loss function: MSE hoặc MAE. Ví dụ: dự đoán giá nhà, dự đoán lượng mưa.
- Ranh giới mờ: age prediction có thể là regression (số tuổi) hoặc classification (nhóm tuổi) tùy bài toán.
Q5: Cross-validation là gì? K-fold hoạt động thế nào?
Gợi ý trả lời:
- Kỹ thuật đánh giá model generalization mà không phụ thuộc vào 1 lần split ngẫu nhiên cụ thể.
- K-fold: chia data thành K phần. Train K-1 phần, test 1 phần còn lại. Lặp K lần, mỗi lần 1 phần khác làm test. Output: mean ± std của metric.
- Khi nào dùng: dataset nhỏ hoặc trung bình, cần estimate generalization error chính xác hơn single split.
- Lưu ý: stratified K-fold khi data imbalanced — giữ tỉ lệ class trong mỗi fold.
from sklearn.model_selection import cross_val_score, KFold
from sklearn.linear_model import LogisticRegression
kf = KFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(LogisticRegression(), X, y, cv=kf, scoring='f1')
print(f"F1: {scores.mean():.3f} ± {scores.std():.3f}")
Category 2 — Model Evaluation (Q6–Q10)
Q6: Khi nào accuracy không đủ để đánh giá model?
Gợi ý trả lời:
- Imbalanced data: tập 95% class A, 5% class B → model dự đoán toàn class A đạt accuracy 95% mà không học được gì. Metric đó vô nghĩa.
- Dùng thay thế: Precision, Recall, F1-score, AUC-ROC, AUC-PR.
- Medical/fraud: false negative và false positive có chi phí rất khác nhau → accuracy không capture được sự bất cân xứng này.
Q7: Precision vs Recall — khi nào ưu tiên cái nào?
Gợi ý trả lời:
- Precision = TP / (TP + FP). Trong số những gì model predict là positive, bao nhiêu thực sự đúng.
- Recall = TP / (TP + FN). Trong số tất cả positive thực sự, model bắt được bao nhiêu.
- Ưu tiên Precision khi false positive có chi phí cao: ví dụ spam filter — đánh nhầm email quan trọng là spam thì xấu hơn để 1 email spam lọt qua.
- Ưu tiên Recall khi false negative có chi phí cao: ví dụ sàng lọc bệnh ung thư — bỏ sót bệnh nhân (false negative) nguy hiểm hơn nhiều so với cảnh báo thừa.
Q8: ROC AUC là gì? Hạn chế là gì?
Gợi ý trả lời:
- ROC curve: vẽ TPR (True Positive Rate) vs FPR (False Positive Rate) theo từng ngưỡng threshold.
- AUC (Area Under Curve): diện tích dưới đường ROC. AUC = 0.5 tương đương random guess; AUC = 1.0 là phân loại hoàn hảo.
- Ưu điểm: threshold-independent, robust với class imbalance ở mức vừa phải.
- Hạn chế: khi imbalance rất nặng (ví dụ 99%/1%), AUC-ROC có thể trông tốt nhưng model thực tế kém. Trong trường hợp đó dùng AUC-PR (Precision-Recall curve) cho thấy rõ hơn.
Q9: Confusion matrix — đọc và interpret thế nào?
Gợi ý trả lời:
- Ma trận 2×2 cho bài toán binary classification, với các ô: TP (True Positive), FP (False Positive), TN (True Negative), FN (False Negative).
- Từ confusion matrix tính được:
- Precision = TP / (TP + FP)
- Recall = TP / (TP + FN)
- Specificity = TN / (TN + FP)
- Multi-class: ma trận N×N, mỗi hàng là true class, mỗi cột là predicted class. Đường chéo = predict đúng.
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
cm = confusion_matrix(y_true, y_pred)
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=["Neg", "Pos"])
disp.plot()
Q10: Tại sao cần 3 phần Train / Val / Test, không phải 2?
Gợi ý trả lời:
- Train: fit model.
- Val (Validation): tune hyperparameter và chọn model. Mỗi lần thử hyperparameter là bạn "nhìn" vào val set — nếu dùng test set cho bước này, test set sẽ bị "leak" vào quá trình lựa chọn.
- Test: đánh giá cuối cùng, unbiased, chỉ dùng đúng 1 lần trước khi báo cáo kết quả.
- Split phổ biến: 70/15/15 hoặc 80/10/10. Với data lớn (>1M row), val/test nhỏ hơn cũng OK.
Category 3 — Regularization (Q11–Q15)
Q11: L1 vs L2 regularization — khác nhau thế nào?
Gợi ý trả lời:
- L1 (Lasso): thêm tổng |w| vào loss. Gradient của |w| là hằng số → kéo weight nhỏ về 0, tạo ra sparse weights. Dùng khi muốn feature selection ngầm.
- L2 (Ridge): thêm tổng w² vào loss. Gradient tỉ lệ với w → weights nhỏ dần nhưng không về 0. Phù hợp khi tất cả feature đều có ít nhiều đóng góp.
- Elastic Net: kết hợp L1 + L2, có hyperparameter điều chỉnh tỉ lệ.
from sklearn.linear_model import Lasso, Ridge, ElasticNet
lasso = Lasso(alpha=0.1) # L1
ridge = Ridge(alpha=1.0) # L2
enet = ElasticNet(alpha=0.1, l1_ratio=0.5) # L1 + L2
Q12: Dropout là gì và hoạt động thế nào?
Gợi ý trả lời:
- Khi training: mỗi neuron bị "tắt" (set activation = 0) với xác suất p (thường p = 0.1–0.5). Model buộc phải học nhiều path khác nhau.
- Khi inference: dùng toàn bộ network, nhân activation với (1 − p) để scale đúng magnitude (inverted dropout — cách PyTorch triển khai mặc định).
- Tác dụng: regularization, giảm co-adaptation giữa các neuron, tương tự ensemble nhiều sub-network nhỏ.
- Khi dùng: thường áp dụng cho fully-connected layer. Ít dùng sau convolutional layer vì feature map còn có spatial correlation.
Q13: Batch normalization làm gì?
Gợi ý trả lời:
- Normalize activation của layer theo mini-batch: trừ mean, chia std, sau đó scale/shift bằng learnable parameter γ và β.
- Tác dụng: ổn định gradient, cho phép dùng learning rate cao hơn, giảm sensitivity với weight initialization.
- Behavior khác nhau giữa train và eval: khi train dùng batch statistics; khi eval dùng running mean/variance tích lũy. Phải gọi
model.eval()đúng lúc trong PyTorch. - Paper gốc: Ioffe & Szegedy, "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift", arXiv:1502.03167, 2015.
Q14: Early stopping là gì?
Gợi ý trả lời:
- Monitor validation loss sau mỗi epoch. Nếu sau N epoch liên tiếp val loss không cải thiện, dừng training và load lại checkpoint tốt nhất.
- Tác dụng: tránh overfit khi train quá nhiều epoch; tiết kiệm compute.
- Patience: số epoch cho phép không cải thiện trước khi dừng — giá trị thường dùng: 5–20 tùy tốc độ converge.
from pytorch_lightning.callbacks import EarlyStopping
early_stop = EarlyStopping(
monitor="val_loss",
patience=10,
mode="min"
)
Q15: Data augmentation cho image — ví dụ và thư viện nào?
Gợi ý trả lời:
- Tạo thêm biến thể của training image mà không thay đổi label: flip ngang/dọc, rotation, random crop, color jitter (brightness/contrast/saturation), Gaussian noise.
- Tác dụng: tăng effective dataset size, model học được invariance với các biến đổi thực tế.
- Thư viện:
torchvision.transforms— chuẩn trong PyTorch pipeline.albumentations— nhanh hơn, nhiều transform hơn, tốt cho detection/segmentation.
import torchvision.transforms as T
train_transform = T.Compose([
T.RandomHorizontalFlip(),
T.RandomCrop(32, padding=4),
T.ColorJitter(brightness=0.2, contrast=0.2),
T.ToTensor(),
T.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]),
])
Category 4 — Optimization (Q16–Q20)
Q16: Gradient Descent, SGD, Mini-batch GD khác nhau thế nào?
Gợi ý trả lời:
| Variant | Dữ liệu mỗi bước | Ưu | Nhược |
|---|---|---|---|
| Batch GD | Toàn bộ dataset | Gradient ổn định | Chậm, không fit vào RAM với data lớn |
| SGD | 1 sample | Update nhanh, escape local minima | Gradient noisy, hội tụ không ổn định |
| Mini-batch GD | 32–512 sample | Cân bằng tốc độ và ổn định | Cần tune batch size |
Trong thực tế, "SGD" trong PyTorch/TensorFlow mặc định là mini-batch GD.
Q17: Tại sao Adam optimizer phổ biến?
Gợi ý trả lời:
- Adam (Kingma & Ba, arXiv:1412.6980, 2014) kết hợp 2 ý tưởng: momentum (lưu gradient trung bình theo thời gian) và adaptive learning rate per parameter (normalize bằng magnitude gradient).
- Converge nhanh hơn SGD thuần túy trong hầu hết task; ít nhạy cảm với learning rate mặc định.
- Hạn chế: trên một số task image classification lớn, SGD + momentum với learning rate schedule kỹ càng có thể cho generalization tốt hơn. Nghiên cứu (Wilson et al., 2017) chỉ ra adaptive method đôi khi generalize kém hơn.
Q18: Learning rate scheduling là gì? Các scheduler thường dùng?
Gợi ý trả lời:
- Learning rate lớn đầu quá trình training giúp thoát local minimum nhanh; giảm dần để model hội tụ ổn định.
- StepLR: giảm LR theo bước cố định (ví dụ mỗi 10 epoch nhân 0.1).
- CosineAnnealingLR: LR dao động theo cosine từ max xuống min — phổ biến vì smooth và hiệu quả.
- OneCycleLR: warmup rồi cosine decay — dùng nhiều với ResNet/ViT, recommend bởi fast.ai.
- Linear warmup + decay: chuẩn cho Transformer training (BERT, GPT).
Q19: Vanishing gradient — nguyên nhân và cách khắc phục?
Gợi ý trả lời:
- Vấn đề: khi backpropagation qua nhiều layer, gradient nhân dần các giá trị nhỏ hơn 1 → gradient ở layer đầu tiếp cận 0 → layer đó không học được.
- Nguyên nhân: activation sigmoid/tanh saturation — gradient của chúng gần 0 ở vùng bão hòa.
- Cách khắc phục:
- Dùng ReLU hoặc Leaky ReLU thay sigmoid/tanh.
- Residual connection (He et al., arXiv:1512.03385, 2015) — gradient đi tắt qua skip connection.
- Batch normalization — normalize activation, tránh saturation.
- He initialization cho ReLU, Xavier/Glorot cho sigmoid/tanh — khởi tạo weight hợp lý để variance ổn định qua layer.
Q20: Chọn loss function thế nào?
Gợi ý trả lời:
| Task | Loss function | Ghi chú |
|---|---|---|
| Binary classification | Binary cross-entropy | Output qua sigmoid |
| Multi-class classification | Categorical cross-entropy | Output qua softmax |
| Regression (ít outlier) | MSE | Nhạy với outlier do bình phương |
| Regression (có outlier) | MAE hoặc Huber loss | Huber = MSE gần 0, MAE xa 0 |
| Ranking | Pairwise hinge / margin | Triplet loss cho metric learning |
Category 5 — Deep Learning Specific (Q21–Q25)
Q21: CNN phù hợp với image vì lý do gì?
Gợi ý trả lời:
- Spatial locality: mỗi convolution filter chỉ nhìn vào vùng nhỏ (receptive field) — phù hợp vì pixel liền kề thường liên quan nhau.
- Translation invariance (qua pooling): feature được phát hiện bất kể ở vị trí nào trong ảnh.
- Parameter sharing: 1 filter dùng chung trọng số trên toàn ảnh → ít parameter hơn nhiều so với fully-connected.
- Pretrained model: ResNet, EfficientNet, ViT đã học feature phong phú từ ImageNet (1.2M ảnh) — transfer learning cho task mới thường hiệu quả với ít data.
Q22: RNN, LSTM, Transformer — vị trí của từng kiến trúc?
Gợi ý trả lời:
- RNN: xử lý sequence step by step, hidden state mang thông tin từ bước trước. Vấn đề chính: vanishing gradient → khó học long-range dependency.
- LSTM (Hochreiter & Schmidhuber, 1997): thêm gated cell state để chọn lọc thông tin nhớ/quên → giải quyết một phần vanishing gradient, handle sequence dài hơn RNN thuần.
- Transformer (Vaswani et al., arXiv:1706.03762, 2017): attention mechanism cho phép mỗi position attend trực tiếp đến tất cả positions khác — không sequential, train được song song, dominant từ 2017 đến nay cho NLP và nhiều domain khác.
Q23: Attention mechanism — intuition là gì?
Gợi ý trả lời:
- Mỗi position trong sequence tính Query, nhìn vào Key của tất cả positions, tính similarity (dot product), normalize (softmax) → trọng số attention. Rồi lấy weighted sum của Value.
- Có thể hiểu là "soft retrieval": thay vì tìm 1 key exact match, tính điểm similarity với tất cả key rồi blend value theo điểm đó.
- Self-attention: Q, K, V đều đến từ cùng 1 input sequence → mỗi token "nhìn" các token khác trong cùng câu.
- Multi-head attention: chạy nhiều attention head song song, mỗi head học cách attend khác nhau → biểu diễn phong phú hơn.
import torch
import torch.nn.functional as F
def scaled_dot_product_attention(Q, K, V):
d_k = Q.size(-1)
scores = torch.matmul(Q, K.transpose(-2, -1)) / (d_k ** 0.5)
weights = F.softmax(scores, dim=-1)
return torch.matmul(weights, V), weights
Q24: Transfer learning — hoạt động thế nào trong thực tế?
Gợi ý trả lời:
- Pretrain model lớn trên tập dữ liệu lớn (ImageNet, Common Crawl) → model học general representation.
- Fine-tune trên downstream task với dataset nhỏ hơn: thường freeze các layer đầu (low-level feature), chỉ train layer cuối hoặc một phần nhỏ.
- Computer Vision: ResNet, EfficientNet, ViT pretrained trên ImageNet.
- NLP: BERT, RoBERTa cho classification/extraction; GPT family cho generation.
- Khi nào không hiệu quả: domain quá khác biệt (ví dụ: medical imaging với ảnh X-quang vs ảnh tự nhiên) → cần pretrain lại trên domain data hoặc dùng domain-specific pretrained model.
Q25: Batch size ảnh hưởng đến training thế nào?
Gợi ý trả lời:
- Batch lớn (512+): gradient ổn định hơn, mỗi epoch nhanh hơn nếu GPU đủ bộ nhớ. Nhưng nghiên cứu (Keskar et al., arXiv:1609.04836, 2016) cho thấy batch quá lớn dẫn đến sharp minima → generalize kém hơn.
- Batch nhỏ (8–32): gradient noisy — tác dụng regularization, thoát local minima tốt hơn. Nhưng mỗi bước update mất nhiều thời gian relative.
- Sweet spot thực tế: 32–128 cho hầu hết task. Khi tăng batch size lên, nên scale learning rate lên theo (linear scaling rule: LR × batch_size / 256).
Category 6 — Practical (Q26–Q30)
Q26: Khi nào dùng XGBoost, khi nào dùng Neural Network?
Gợi ý trả lời:
- Tabular data, dataset nhỏ-vừa (< 100k row): XGBoost / LightGBM thường win. Ít cần feature engineering, train nhanh, interpret được qua feature importance.
- Unstructured data (image, text, audio): Neural Network dominate — CNN, Transformer đã học representation hiệu quả.
- Tabular lớn: Neural Network với embedding cho categorical feature cũng cạnh tranh được (ví dụ: TabNet, FT-Transformer).
- Baseline strategy: với bài toán mới trên tabular, thử XGBoost trước vì setup nhanh; chuyển sang NN nếu cần scale hoặc handle nhiều feature phức tạp.
Q27: Xử lý imbalanced data — các kỹ thuật chính?
Gợi ý trả lời:
- Resampling:
- Oversample minority: SMOTE tạo synthetic sample bằng interpolation giữa các điểm minority gần nhau.
- Undersample majority: random drop, hoặc Tomek Links (xóa cặp gần nhau khác class).
- Class weight: penalize loss của minority class nặng hơn. Trong sklearn:
class_weight='balanced'; PyTorch:pos_weighttrongBCEWithLogitsLoss. - Threshold tuning: sau khi train xong, chọn threshold tối ưu F1 (hoặc metric phù hợp) thay vì mặc định 0.5.
- Ensemble: BalancedBaggingClassifier, EasyEnsemble — resample trong từng tree/estimator.
Q28: Feature engineering vs feature learning — khi nào dùng gì?
Gợi ý trả lời:
- Feature engineering: hand-craft feature từ domain knowledge — tính tỉ lệ, lag, aggregation, interaction. Vẫn rất quan trọng với tabular data.
- Feature learning: model tự học representation từ raw data — CNN cho image, Transformer + tokenizer cho text.
- Ranh giới: với tabular data, kết hợp cả hai thường tốt nhất. Với unstructured data, feature learning dominate nhưng preprocessing đầu vào (resize ảnh, tokenizer) vẫn là một dạng engineering.
Q29: Khi nào fine-tune pretrained model, khi nào train from scratch?
Gợi ý trả lời:
- Default: fine-tune pretrained. Tiết kiệm compute đáng kể, generalize tốt khi domain tương tự với pretraining data.
- Train from scratch khi: domain rất khác (ví dụ: protein sequence, satellite imagery với spectral band đặc thù), hoặc có dataset cực lớn và pretraining data không relevant.
- Practical tip: thử fine-tune toàn bộ layer (full fine-tuning) vs chỉ linear probe (freeze backbone, chỉ train head) → so sánh kết quả trước khi quyết định chiến lược.
Q30: Production deployment khác biệt gì với quá trình training?
Gợi ý trả lời:
- Training: mục tiêu tối đa hóa accuracy/metric trên dataset. Có thể chậm, tốn GPU, chạy offline.
- Production: phải đảm bảo latency (p99 < SLA), throughput (request/giây), cost ($/inference), reproducibility, và monitoring khi data distribution thay đổi.
- Tools phổ biến:
- Model optimization: ONNX export, TensorRT quantization (FP16/INT8) — giảm latency 2–5x.
- Serving: FastAPI / Triton Inference Server / BentoML.
- Containerization: Docker + Kubernetes.
- Monitoring: drift detection, logging prediction distribution.
- Bài 30 trong Series 6 (MLOps) đi sâu hơn về serving pipeline và monitoring.
Cách Trả Lời Technical — Tips Thực Tế
- Định nghĩa trước, đào sâu sau. Bắt đầu bằng 1 câu định nghĩa rõ ràng trước khi giải thích chi tiết — tránh interviewer mất phương hướng.
- Show intuition trước khi nói công thức. Nếu nhớ công thức, nói; nếu không nhớ chính xác, giải thích ý tưởng toán học — thường được đánh giá ngang bằng.
- Quote ví dụ cụ thể từ project của bạn. "Trong project churn prediction của tôi, tôi gặp vấn đề imbalanced 90/10 và đã dùng class_weight='balanced'…" — thực chất hơn nhiều so với giải thích sách giáo khoa.
- "I don't know" là câu trả lời được chấp nhận — nếu đi kèm với reasoning. "Tôi chưa implement cụ thể, nhưng theo logic thì nó sẽ hoạt động như…" cho thấy bạn biết cách suy luận.
- Giữ câu trả lời dưới 2 phút cho câu hỏi concept. Interviewer sẽ hỏi thêm nếu muốn chi tiết — không cần dump toàn bộ kiến thức ngay lần đầu.
Common Pitfalls
| Pitfall | Vấn đề | Cách tránh |
|---|---|---|
| Trả lời dài 5 phút cho 1 câu khái niệm | Interviewer mất focus, không kiểm tra được nhiều câu | 2 phút cho concept, dừng lại hỏi "Bạn muốn tôi đi sâu vào phần nào không?" |
| Bỏ qua basic để khoe advanced | Interviewer giả định bạn không chắc nền tảng | Luôn bắt đầu từ định nghĩa cơ bản |
| Đọc thuộc paper citation | Nghe rehearsed, không tự nhiên | Nắm năm và ý tưởng chính — đủ để reference mà không cần đọc nguyên văn |
| Trả lời "Quora style" — generic, không ví dụ riêng | Không distinguish với candidate khác | Link về project thực tế của bạn bất cứ khi nào có thể |
| Buzzword stuffing | Dễ bị hỏi sâu hơn và lộ chỗ không biết | Chỉ dùng thuật ngữ bạn thực sự hiểu |
Tham Khảo Thêm
30 câu trên bao phủ phần lớn phỏng vấn AI Engineer entry–mid. Để chuẩn bị kỹ hơn:
- "Deep Learning Interviews" — Shlomo Kashani, 2021. Hơn 400 câu hỏi từ DL cơ bản đến advanced, có giải thích toán học.
- "Machine Learning Yearning" — Andrew Ng. Tập trung vào decision-making thực tế: khi nào train thêm data, khi nào tune hyperparameter, cách debug model.
- Glassdoor — company specific questions. Tìm tên công ty + "machine learning interview" để xem câu hỏi thực tế interviewer tại đó đã hỏi.
- Kaggle discussion forums. Nhiều competition solution writeup giải thích rõ decision-making — tốt để học cách nói về trade-off thực tế.
Bài Tiếp Theo
Tài liệu tham khảo
- Kingma & Ba, "Adam: A Method for Stochastic Optimization", arXiv:1412.6980, 2014
- Ioffe & Szegedy, "Batch Normalization", arXiv:1502.03167, 2015
- He et al., "Deep Residual Learning for Image Recognition", arXiv:1512.03385, 2015
- Vaswani et al., "Attention Is All You Need", arXiv:1706.03762, 2017
- Keskar et al., "On Large-Batch Training for Deep Learning", arXiv:1609.04836, 2016
- scikit-learn — Cross-validation documentation
- Albumentations — Fast image augmentation library
- imbalanced-learn — SMOTE and other resampling techniques
- Hands-on Machine Learning, 3rd ed. — Aurélien Géron, O'Reilly 2022
- Glassdoor — Company-specific interview questions
