Machine Learning: Deep Learning, Architectures, the Ecosystem, and Training at Scale¶
Part 2 of 4 of the Machine Learning reference (plugin
machine-learning), covering §4–§8. Sibling skills:ml-framing-data-and-classical(§0–§3),ml-evaluation-serving-mlops-and-safety(§9–§14),ml-reference(§15–§20). Section numbers are shared across the set; a reference written as §N →skillpoints into that sibling skill.Currency: Verified August 2026. See §17 →
ml-referencefor the currency snapshot and what goes stale first.How to read this. Reference, not tutorial. Sections are independent. Three markers: - [DURABLE] — statistics, optimization theory, or a lesson the field has relearned every few years. Does not expire. - [VERSIONED] — framework versions, hardware, library APIs. Moving fast; verify. - [CONTESTED] — practitioners genuinely disagree.
⚠️ GOTCHA boxes mark the mistakes that produce a model that looks great offline and fails in production — which is the characteristic failure of this field.
The three framings that organize everything below: 1. Your data is the model. Architecture choices matter far less than data quality, quantity, and whether your evaluation measures the thing you care about. Most time on a real project goes to data, and most catastrophic failures originate there (§2 →
ml-framing-data-and-classical). 2. The default failure mode is a number that lies. Leakage, distribution shift, a metric that doesn't match the objective, a test set you tuned against. A model that looks too good almost always is — and finding out why is the core skill. 3. Almost everything you'll build should not be a neural network. For tabular data — which is most business data — gradient-boosted trees remain the strongest default (§3.1 →ml-framing-data-and-classical). Reach for deep learning when you have perceptual data, sequences, very large datasets, or a pretrained model to adapt.
§4. Deep Learning Fundamentals¶
4.1 The machinery¶
forward pass → loss → BACKPROP (reverse-mode autodiff) → optimizer step
↑
the chain rule, applied over a computation graph
detach()/stop_gradient does what it does.
4.2 Optimization¶
| Optimizer | Notes |
|---|---|
| SGD + momentum | Still competitive for vision; often generalizes better than adaptive methods |
| Adam / AdamW | The default. ⚠️ Use AdamW, not Adam, whenever you use weight decay — Adam's L2 penalty is not equivalent to weight decay, and this measurably hurts |
| Adafactor / 8-bit Adam | Memory-efficient for large models — optimizer state is often the largest memory consumer (§7.3) |
| Muon, Shampoo, second-order | Active area; real wins reported at scale, less settled than the marketing |
Learning rate is the hyperparameter that matters most, by a wide margin. Practices that consistently pay: warmup (especially with transformers and large batches), cosine or linear decay, and an LR-range test to find the scale. [DURABLE] If you can tune only one thing, tune the learning rate.
Batch size interacts with LR (linear scaling rule as a starting heuristic), affects generalization, and is often set by memory rather than by choice. Gradient accumulation simulates a large batch on small hardware.
4.3 The things that make training work¶
- Initialization — Xavier/Glorot for tanh-family, He/Kaiming for ReLU-family. Getting this wrong causes vanishing or exploding activations before you write a single training loop.
- Normalization — BatchNorm (⚠️ batch-size dependent, and it behaves differently in train vs. eval — a classic bug source), LayerNorm (the transformer standard), RMSNorm (cheaper, now widely preferred in LLMs), GroupNorm.
- Residual connections — the innovation that made deep networks trainable at all.
- Activations — ReLU, GELU, SiLU/Swish, and SwiGLU (the modern LLM FFN default).
- Regularization — weight decay, dropout (⚠️ largely fallen out of favour in large transformers), early stopping, data augmentation (the most effective regularizer in vision), label smoothing, and mixup/cutmix.
- Gradient clipping — by global norm. Cheap insurance against loss spikes.
4.4 The bias-variance picture, updated¶
[DURABLE, but the classical story is incomplete.] The textbook U-curve — underfit, sweet spot, overfit — is real for classical models. Double descent complicates it: past the interpolation threshold, test error can decrease again as you keep adding capacity, which is part of why enormously overparameterized networks work at all. Practical implication: "the model is too big, it will overfit" is not a reliable argument for deep networks, and regularization plus data scale matters more than parameter count.
§5. Architectures¶
5.1 Transformers¶
[DURABLE] The dominant architecture, and worth understanding mechanically rather than by analogy.
tokens → embeddings + POSITIONAL INFORMATION
→ N × [ self-attention → residual+norm → FFN → residual+norm ]
→ output head
attention(Q,K,V) = softmax(QKᵀ/√d_k) V
The modern variants you'll meet: RoPE (rotary position embeddings — now standard),
GQA / MQA (grouped/multi-query attention — fewer KV heads, dramatically smaller KV
cache, §11.2 → ml-evaluation-serving-mlops-and-safety), FlashAttention (IO-aware exact attention — not an approximation; it
avoids materializing the n² matrix in HBM), MoE (mixture of experts — many parameters,
few active per token), sliding-window and other sparse attention, and SSMs/Mamba
as the main non-attention contender.
5.2 The rest¶
CNNs — still the right choice for many vision tasks, especially with limited data and compute; ConvNeXt showed a modernized CNN matches ViTs. Convolution's inductive bias (locality, translation equivariance) is a feature when data is scarce. Vision Transformers — win at scale, need more data or heavy augmentation. Diffusion models — the generative image/video/audio default; iterative denoising, with flow matching as the cleaner modern formulation. GNNs — for genuinely graph-structured data. ⚠️ Often beaten by feature engineering plus a GBDT; verify the graph structure actually carries signal. Encoder-decoder vs. decoder-only — decoder-only won for general LLMs; encoder models (BERT-family) remain excellent and much cheaper for classification and retrieval, and are badly underused because attention moved elsewhere. Embedding models — the workhorse of retrieval, RAG, semantic search, and dedup, and often the highest-value-per-FLOP thing you can deploy.
§6. The Ecosystem¶
6.1 PyTorch¶
[VERSIONED] PyTorch 2.13 is current (July 2026), with a roughly quarterly cadence. The parts that matter:
torch.compile — the headline feature since 2.0. Traces your model (TorchDynamo),
lowers it (TorchInductor), and generates fused Triton (or now CuTeDSL) kernels.
Typically a substantial speedup for free. ⚠️ Watch for graph breaks — Python
constructs Dynamo can't trace force it to fall back, silently costing you the speedup;
torch._dynamo.error_on_graph_break() makes that loud rather than silent.
Recompilation on changing shapes is the other tax — mark dynamic dimensions explicitly.
Other things worth knowing: torch.export is the unified capture path (legacy
torch.jit and old ONNX flows are deprecated or removed); weights_only=True is the
default for torch.load since 2.6 — a genuine security improvement, since pickle
deserialization is arbitrary code execution; FlexAttention for custom attention
patterns without writing kernels; AOTInductor for ahead-of-time compilation.
6.2 The rest of the stack¶
| Layer | Tools |
|---|---|
| Frameworks | PyTorch (dominant in research and increasingly production), JAX (functional, jit/grad/vmap/pmap, strong on TPU, favored for large-scale research), TensorFlow/Keras (legacy-heavy but alive), MLX (Apple Silicon) |
| Training loops | Lightning, HF Accelerate, torchtune, raw loops (fine, and often clearer) |
| Models and data | Hugging Face transformers, datasets, tokenizers, peft, trl — effectively the industry's default distribution channel |
| Classical | scikit-learn, XGBoost, LightGBM, CatBoost, statsmodels |
| Numerics | NumPy, pandas, Polars (faster, saner API, increasingly the default for new work), DuckDB, Arrow |
| Kernels | Triton (write GPU kernels in Python), CUDA, FlashAttention, FlashInfer |
| Experiment tracking | Weights & Biases, MLflow, TensorBoard, Aim |
| Serving | vLLM, SGLang, TensorRT-LLM, Triton Inference Server, Ray Serve, llama.cpp/Ollama (§11 → ml-evaluation-serving-mlops-and-safety) |
| Orchestration | Ray, Kubeflow, Airflow, Prefect, SLURM (still the HPC standard) |
[DURABLE] Pin your versions and record them. The ML stack breaks compatibility constantly, and "it worked last month" is a real and frequent failure.
§7. Training at Scale¶
7.1 The parallelism taxonomy¶
| Strategy | Splits | Use when |
|---|---|---|
| Data parallel (DDP) | The batch | The default. Model fits on one GPU |
| FSDP / ZeRO | Parameters, gradients, optimizer state | Model doesn't fit. The mainstream large-model answer |
| Tensor parallel | Individual matrices, within a layer | Very large layers; needs fast interconnect (NVLink) |
| Pipeline parallel | Layers across devices | Very deep models; ⚠️ introduces bubbles |
| Expert parallel | MoE experts | MoE models |
| Context/sequence parallel | The sequence dimension | Very long context |
[DURABLE] Real large-scale training composes several of these ("3D parallelism" and beyond), and the composition is chosen against your interconnect topology, not in the abstract. Communication is usually the bottleneck, which is why NVLink/InfiniBand topology drives the design.
[VERSIONED] PyTorch's FSDP2 now supports overlapping reduce-scatter and all-gather via separate process groups (opt-in), which increases throughput; and torchcomms is a new communications backend for PyTorch Distributed aimed at fault tolerance, scalability, and debuggability on large clusters — with plans to make it the default, including breaking changes to how ProcessGroups operate (eager initialization, single backend device). If you run large distributed jobs, that migration is on your horizon.
7.2 Mixed precision¶
[DURABLE] Train in low precision, keep a master copy and accumulations in higher precision. - FP16 — needs loss scaling (gradients underflow otherwise). - BF16 — same exponent range as FP32, less mantissa. No loss scaling needed. The default on modern hardware, and the right choice. - FP8 — real on Hopper and Blackwell; needs careful scaling; increasingly used in production training. - [VERSIONED] NVFP4 / MXFP4 — 4-bit formats with hardware support on Blackwell, now appearing in both training and inference paths.
7.3 Memory¶
[DURABLE] Know where the memory goes, because "CUDA out of memory" is the most common obstacle in practice:
parameters + gradients + OPTIMIZER STATE + activations + fragmentation
↑
Adam keeps 2 extra copies — often the largest single term
The levers: gradient checkpointing (recompute activations — trades ~30% compute for
large memory savings), gradient accumulation, 8-bit or fused optimizers, FSDP
sharding, nn.LinearCrossEntropyLoss (a 2026 PyTorch addition fusing the final
projection and loss — cuts peak memory by up to 4× for large-vocabulary LM training,
where the logits tensor is genuinely enormous), and simply reducing sequence length.
§8. Fine-Tuning and Adaptation¶
[DURABLE] The order to try things, cheapest first:
1. Prompting / few-shot ← no training. Try this first, seriously
2. Retrieval (RAG) ← when the problem is missing knowledge
3. PEFT / LoRA ← when the problem is behaviour or format
4. Full fine-tuning ← when you have real data and real budget
5. Continued pretraining ← new domain, large corpus
6. Training from scratch ← almost never the right answer
LoRA — freeze the base, train low-rank adapters (W + BA). Tiny memory footprint,
swappable adapters, near-full-fine-tuning quality on most tasks. QLoRA adds 4-bit
quantization of the frozen base, putting single-GPU fine-tuning of large models within
reach. Other PEFT: prefix tuning, prompt tuning, IA³, DoRA.
Post-training / alignment: SFT (supervised fine-tuning on demonstrations), then preference optimization — RLHF/PPO (powerful, complex, unstable), DPO (much simpler, no reward model, now the common default), and GRPO and relatives for reasoning work. [DURABLE] Data quality dominates method choice here — a small, carefully curated SFT set routinely beats a large noisy one.
⚠️ Catastrophic forgetting is real. Fine-tuning on a narrow task degrades general capability. Mix in general data, use lower learning rates, prefer PEFT, and evaluate on capabilities you didn't train on — not just the target task.
Plugin: machine-learning · View SKILL.md on GitHub