Векторы и матрицы с нуля
Векторы
Вектор — упорядоченный список чисел $\mathbf{v} = (v_1, \dots, v_n)$. Геометрически — стрелка из начала координат.
| Операция | Как считается | Смысл |
|---|---|---|
| Сложение | поэлементно | сдвиг: «король − мужчина + женщина ≈ королева» |
| Умножение на число | каждый элемент × c | растяжение |
| Длина | $\lVert\mathbf{v}\rVert = \sqrt{v_1^2 + \dots + v_n^2}$ | Пифагор в n измерениях |
| Скалярное произведение | $\mathbf{a}\cdot\mathbf{b} = \sum a_i b_i$ | похожесть направлений |
Матрицы
Матрица — таблица чисел $m \times n$ ($m$ строк, $n$ столбцов). Умножение матрицы на вектор — каждая строка скалярно умножается на вектор:
$$ \begin{pmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{pmatrix} \begin{pmatrix} 10 \\ 1 \end{pmatrix} = \begin{pmatrix} 1\cdot10 + 2\cdot1 \\ 3\cdot10 + 4\cdot1 \\ 5\cdot10 + 6\cdot1 \end{pmatrix} = \begin{pmatrix} 12 \\ 34 \\ 56 \end{pmatrix} $$
Это ровно то, что делает слой нейросети: 2 входа → 3 выхода, каждая строка матрицы — веса одного нейрона.
Умножение матриц $C = AB$: элемент $C_{ij}$ — скалярное произведение $i$-й строки $A$ на $j$-й столбец $B$. Размерности: (m×k)·(k×n) → (m×n), внутренние должны совпасть.
import numpy as np
W = np.array([[1, 2], [3, 4], [5, 6]]) # слой: 2 входа → 3 нейрона
x = np.array([10, 1])
print(W @ x) # [12 34 56]
X = np.array([[10, 1], [0, 1], [1, 1]]) # батч из 3 примеров
print(X @ W.T) # каждый пример через слой: форма (3, 3)
Транспонирование, единичная и обратная матрицы
- $A^\top$ — строки становятся столбцами: размер $m \times n$ → $n \times m$.
- $I$ — единичная: $I\mathbf{x} = \mathbf{x}$.
- $A^{-1}$: $AA^{-1} = I$. Система $A\mathbf{x} = \mathbf{b}$ решается как $\mathbf{x} = A^{-1}\mathbf{b}$ (в коде —
np.linalg.solve(A, b)). - Обратная существует, только если определитель $\det A \ne 0$. Для матрицы $2\times2$:
$$ \det\begin{pmatrix} a & b \\ c & d\end{pmatrix} = ad - bc $$
🏋️ Практика Б11
Б11.1. Найдите длину вектора $(3, 4)$ и косинус угла между $(1, 0)$ и $(1, 1)$.
▶️ Ответ
$\sqrt{9 + 16} = 5$. $\cos = \frac{1}{1 \cdot \sqrt{2}} \approx 0.707$ — угол 45°.Б11.2. Какой формы будет результат: матрица $(32 \times 768)$ умножить на $(768 \times 3072)$?
▶️ Ответ
$(32 \times 3072)$ — батч из 32 токенов прошёл через расширяющий слой FFN трансформера.Б11.3. Решите систему $2x + y = 5$, $x - y = 1$ через матрицы.
▶️ Ответ
A = np.array([[2, 1], [1, -1]]); b = np.array([5, 1])
print(np.linalg.solve(A, b)) # [2. 1.]
$\det A = -2 - 1 = -3 \ne 0$ — решение единственное.