From f55a26319531d5e4ebc158a34e381d75a944d0de Mon Sep 17 00:00:00 2001 From: Dominik Farhan Date: Wed, 25 Feb 2026 08:10:49 +0100 Subject: [PATCH] Add slide explanining our vector + vector and matrix + vector conventions --- slides/01/01.md | 17 +++++++++++++++++ slides/01/broadcasting.png | Bin 0 -> 30519 bytes slides/01/broadcasting.png.ref | 1 + 3 files changed, 18 insertions(+) create mode 100644 slides/01/broadcasting.png create mode 100644 slides/01/broadcasting.png.ref diff --git a/slides/01/01.md b/slides/01/01.md index 144d650..be40ed6 100644 --- a/slides/01/01.md +++ b/slides/01/01.md @@ -265,6 +265,23 @@ class: section - $∇_{→x} f(→x)$: gradient of $f$ with respect to $→x$, i.e., $\left(\frac{∂f(→x)}{∂x_1}, \frac{∂f(→x)}{∂x_2}, \ldots, \frac{∂f(→x)}{∂x_n}\right)$ +--- +# Linear Algebra Conventions & Broadcasting + +## Vector Addition + +Linear algebra distinguishes between column vectors ($N\times 1$ matrices) and row vectors ($1\times N$ matrices), often treating the addition of a row and a column as undefined. + +~~~ +However, in deep learning, vectors that are outside of multiplication are treated simply as 1D arrays. Therefore, vector + vector is valid if their lengths match. +~~~ + +## Matrix-Vector Broadcasting + +When adding a matrix and a vector, we adopt broadcasting conventions common in NumPy and PyTorch. The vector is implicitly copied to match the matrix shape. + +![w=40%,h=center](broadcasting.png) + --- section: Random Variables class: section diff --git a/slides/01/broadcasting.png b/slides/01/broadcasting.png new file mode 100644 index 0000000000000000000000000000000000000000..be71afb0d4f3b4434b80697f6e879a921e833744 GIT binary patch literal 30519 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 bz4%Yy*h07Y7riy$<^-XmrLS3}ZWH`Jn???E literal 0 HcmV?d00001 diff --git a/slides/01/broadcasting.png.ref b/slides/01/broadcasting.png.ref new file mode 100644 index 0000000..18e7e2c --- /dev/null +++ b/slides/01/broadcasting.png.ref @@ -0,0 +1 @@ +Figure 2 of NumPy Broadcasting, https://numpy.org/doc/stable/user/basics.broadcasting.html