305 lines
9.3 KiB
Markdown
305 lines
9.3 KiB
Markdown
# Дифференциальное и матричное исчисление
|
||
|
||
## Зачем это нужно
|
||
|
||
Обучение модели обычно означает минимизацию функции потерь. Производная
|
||
отвечает на локальный вопрос: как изменится результат при малом изменении
|
||
параметра? Градиент обобщает ответ на много параметров, а матричное исчисление
|
||
позволяет записать вычисление без циклов по каждому весу.
|
||
|
||
## Предел, производная и локальная линейность
|
||
|
||
Производная функции \(f:\mathbb{R}\to\mathbb{R}\) в точке \(x\):
|
||
|
||
\[
|
||
f'(x)=\lim_{h\to0}\frac{f(x+h)-f(x)}{h}.
|
||
\]
|
||
|
||
Это не просто наклон касательной. Если производная существует, то при малом
|
||
\(h\)
|
||
|
||
\[
|
||
f(x+h)=f(x)+f'(x)h+o(h),
|
||
\]
|
||
|
||
где \(o(h)/h\to0\). Главная идея — гладкая функция локально ведёт себя как
|
||
линейная. Например, для \(f(x)=x^2\):
|
||
|
||
\[
|
||
\frac{(x+h)^2-x^2}{h}
|
||
=\frac{2xh+h^2}{h}=2x+h\to2x.
|
||
\]
|
||
|
||
Отсюда \(d(x^2)/dx=2x\).
|
||
|
||
## Правила дифференцирования
|
||
|
||
\[
|
||
(f+g)'=f'+g',\qquad
|
||
(fg)'=f'g+fg',\qquad
|
||
\left(\frac fg\right)'=\frac{f'g-fg'}{g^2}.
|
||
\]
|
||
|
||
Для композиции \(y=f(g(x))\) правило цепочки:
|
||
|
||
\[
|
||
\frac{dy}{dx}
|
||
=\frac{df}{dg}\frac{dg}{dx}.
|
||
\]
|
||
|
||
Пример: \(L(w)=(wx-y)^2\). Введём \(r=wx-y\), тогда
|
||
|
||
\[
|
||
\frac{dL}{dw}
|
||
=\frac{d(r^2)}{dr}\frac{dr}{dw}
|
||
=2r\,x
|
||
=2(wx-y)x.
|
||
\]
|
||
|
||
Промежуточная переменная делает структуру обратного распространения явной:
|
||
локальные производные перемножаются от выхода к входу.
|
||
|
||
## Частные производные и градиент
|
||
|
||
Для \(f:\mathbb{R}^d\to\mathbb{R}\) частная производная меняет одну координату,
|
||
фиксируя остальные. Градиент собирает их:
|
||
|
||
\[
|
||
\nabla_{\mathbf{x}}f=
|
||
\begin{bmatrix}
|
||
\partial f/\partial x_1\\
|
||
\cdots\\
|
||
\partial f/\partial x_d
|
||
\end{bmatrix}.
|
||
\]
|
||
|
||
Дифференцируемость означает
|
||
|
||
\[
|
||
f(\mathbf{x}+\Delta\mathbf{x})
|
||
=f(\mathbf{x})
|
||
+\nabla f(\mathbf{x})^\top\Delta\mathbf{x}
|
||
+o(\|\Delta\mathbf{x}\|).
|
||
\]
|
||
|
||
По неравенству Коши—Буняковского изменение первого порядка максимально при
|
||
\(\Delta\mathbf{x}\) в направлении градиента. Поэтому
|
||
\(-\nabla f\) — направление быстрейшего локального убывания при евклидовой
|
||
норме.
|
||
|
||
## Якобиан и многомерное правило цепочки
|
||
|
||
Для \(\mathbf{g}:\mathbb{R}^d\to\mathbb{R}^m\)
|
||
якобиан имеет размер \(m\times d\):
|
||
|
||
\[
|
||
(\mathbf{J}_{\mathbf{g}})_{ij}
|
||
=\frac{\partial g_i}{\partial x_j}.
|
||
\]
|
||
|
||
Если \(L=f(\mathbf{g}(\mathbf{x}))\), где \(f:\mathbb{R}^m\to\mathbb{R}\), то
|
||
|
||
\[
|
||
\nabla_{\mathbf{x}}L
|
||
=\mathbf{J}_{\mathbf{g}}(\mathbf{x})^\top
|
||
\nabla_{\mathbf{g}}f.
|
||
\]
|
||
|
||
Размерности дают проверку:
|
||
\((d\times m)(m\times1)=d\times1\).
|
||
|
||
## Гессиан и кривизна
|
||
|
||
Гессиан содержит вторые производные:
|
||
|
||
\[
|
||
\mathbf{H}_f=\nabla^2f,\qquad
|
||
f(\mathbf{x}+\Delta)
|
||
\approx f(\mathbf{x})+\nabla f^\top\Delta
|
||
+\frac12\Delta^\top\mathbf{H}_f\Delta.
|
||
\]
|
||
|
||
Если \(\mathbf{H}_f\succeq0\) во всей области, гладкая функция выпукла.
|
||
В стационарной точке положительно определённый гессиан указывает на строгий
|
||
локальный минимум, отрицательно определённый — на максимум, смешанные знаки
|
||
собственных значений — на седловую точку.
|
||
|
||
## Дифференциалы и матрицы
|
||
|
||
Дифференциал удобен тем, что подчиняется обычной алгебре:
|
||
|
||
\[
|
||
d(\mathbf{A}\mathbf{X}\mathbf{B})
|
||
=\mathbf{A}\,d\mathbf{X}\,\mathbf{B}
|
||
\]
|
||
|
||
для постоянных \(\mathbf{A},\mathbf{B}\), а
|
||
|
||
\[
|
||
d(\mathbf{X}^\top)=d\mathbf{X}^\top.
|
||
\]
|
||
|
||
Для скалярной \(f(\mathbf{X})\) приводим дифференциал к форме
|
||
|
||
\[
|
||
df=\operatorname{tr}\left(
|
||
(\nabla_{\mathbf{X}}f)^\top d\mathbf{X}\right).
|
||
\]
|
||
|
||
Полезны свойства следа:
|
||
|
||
\[
|
||
\operatorname{tr}(\mathbf{A}\mathbf{B})
|
||
=\operatorname{tr}(\mathbf{B}\mathbf{A}),\qquad
|
||
\operatorname{tr}(\mathbf{A}^\top d\mathbf{X})
|
||
=\langle\mathbf{A},d\mathbf{X}\rangle_F.
|
||
\]
|
||
|
||
## Вывод градиента линейной регрессии
|
||
|
||
Пусть
|
||
|
||
\[
|
||
L(\mathbf{w})
|
||
=\frac{1}{2n}\|\mathbf{X}\mathbf{w}-\mathbf{y}\|_2^2.
|
||
\]
|
||
|
||
Обозначим \(\mathbf{r}=\mathbf{X}\mathbf{w}-\mathbf{y}\). Тогда
|
||
|
||
\[
|
||
L=\frac1{2n}\mathbf{r}^\top\mathbf{r}.
|
||
\]
|
||
|
||
Последовательно:
|
||
|
||
\[
|
||
dL
|
||
=\frac1{2n}\left(d\mathbf{r}^\top\mathbf{r}
|
||
+\mathbf{r}^\top d\mathbf{r}\right)
|
||
=\frac1n\mathbf{r}^\top d\mathbf{r}.
|
||
\]
|
||
|
||
Поскольку \(d\mathbf{r}=\mathbf{X}\,d\mathbf{w}\),
|
||
|
||
\[
|
||
dL
|
||
=\frac1n\mathbf{r}^\top\mathbf{X}\,d\mathbf{w}
|
||
=\left(\frac1n\mathbf{X}^\top\mathbf{r}\right)^\top d\mathbf{w}.
|
||
\]
|
||
|
||
Следовательно,
|
||
|
||
\[
|
||
\boxed{\nabla_{\mathbf{w}}L
|
||
=\frac1n\mathbf{X}^\top(\mathbf{X}\mathbf{w}-\mathbf{y})}.
|
||
\]
|
||
|
||
Ещё одно дифференцирование даёт
|
||
\(\nabla^2L=\mathbf{X}^\top\mathbf{X}/n\succeq0\), поэтому задача выпукла.
|
||
|
||
## Производные часто встречающихся выражений
|
||
|
||
\[
|
||
\nabla_{\mathbf{x}}(\mathbf{a}^\top\mathbf{x})=\mathbf{a},
|
||
\qquad
|
||
\nabla_{\mathbf{x}}(\mathbf{x}^\top\mathbf{A}\mathbf{x})
|
||
=(\mathbf{A}+\mathbf{A}^\top)\mathbf{x}.
|
||
\]
|
||
|
||
Для симметричной \(\mathbf{A}\) последнее равно \(2\mathbf{A}\mathbf{x}\).
|
||
|
||
\[
|
||
d\log\det\mathbf{X}
|
||
=\operatorname{tr}(\mathbf{X}^{-1}d\mathbf{X}),
|
||
\qquad
|
||
\nabla_{\mathbf{X}}\log\det\mathbf{X}
|
||
=\mathbf{X}^{-\top}.
|
||
\]
|
||
|
||
Последняя формула требует обратимой матрицы; для вещественного логарифма
|
||
обычно предполагают \(\mathbf{X}\succ0\).
|
||
|
||
## Разобранный пример
|
||
|
||
Пусть
|
||
|
||
\[
|
||
\mathbf{X}=\begin{bmatrix}1&2\\2&0\end{bmatrix},\quad
|
||
\mathbf{w}=\begin{bmatrix}1\\-1\end{bmatrix},\quad
|
||
\mathbf{y}=\begin{bmatrix}0\\1\end{bmatrix}.
|
||
\]
|
||
|
||
Предсказания: \(\mathbf{Xw}=(-1,2)^\top\), остаток
|
||
\(\mathbf{r}=(-1,1)^\top\), \(n=2\). Тогда
|
||
|
||
\[
|
||
L=\frac1{4}(1+1)=0.5,
|
||
\]
|
||
|
||
\[
|
||
\nabla L
|
||
=\frac12\mathbf{X}^\top\mathbf{r}
|
||
=\frac12
|
||
\begin{bmatrix}1&2\\2&0\end{bmatrix}
|
||
\begin{bmatrix}-1\\1\end{bmatrix}
|
||
=\begin{bmatrix}0.5\\-1\end{bmatrix}.
|
||
\]
|
||
|
||
```python
|
||
import numpy as np
|
||
|
||
X = np.array([[1.0, 2.0], [2.0, 0.0]])
|
||
w = np.array([1.0, -1.0])
|
||
y = np.array([0.0, 1.0])
|
||
|
||
r = X @ w - y
|
||
loss = r @ r / (2 * len(y))
|
||
grad = X.T @ r / len(y)
|
||
print(loss) # 0.5
|
||
print(grad) # [ 0.5 -1. ]
|
||
```
|
||
|
||
## Численная проверка градиента
|
||
|
||
Центральная разность
|
||
|
||
\[
|
||
\frac{\partial f}{\partial x_j}
|
||
\approx\frac{f(\mathbf{x}+h\mathbf{e}_j)
|
||
-f(\mathbf{x}-h\mathbf{e}_j)}{2h}
|
||
\]
|
||
|
||
имеет ошибку усечения порядка \(O(h^2)\), но слишком малое \(h\) усиливает
|
||
ошибку округления.
|
||
|
||
```python
|
||
def finite_difference(f, x, h=1e-5):
|
||
grad = np.zeros_like(x, dtype=float)
|
||
for j in range(x.size):
|
||
step = np.zeros_like(x, dtype=float)
|
||
step[j] = h
|
||
grad[j] = (f(x + step) - f(x - step)) / (2 * h)
|
||
return grad
|
||
|
||
f = lambda v: np.sum(v**2)
|
||
print(finite_difference(f, np.array([1.0, -3.0])))
|
||
```
|
||
|
||
## Типичные ошибки
|
||
|
||
- Производная по вектору должна иметь проверяемую размерность.
|
||
- Поэлементное `*` не заменяет матричное `@`.
|
||
- \(\nabla(\mathbf{x}^\top\mathbf{A}\mathbf{x})=2\mathbf{Ax}\) только при
|
||
симметричной \(\mathbf{A}\).
|
||
- Нулевой градиент не гарантирует минимум.
|
||
- Градиент зависит от выбранной геометрии; утверждение о быстрейшем спуске
|
||
выше относится к евклидовой норме.
|
||
- Численная производная служит проверкой, а не точной заменой аналитической.
|
||
|
||
## Резюме
|
||
|
||
Производная — коэффициент локального линейного приближения. Градиент задаёт
|
||
чувствительность скаляра ко всем координатам, якобиан — чувствительность
|
||
вектора, гессиан — кривизну. Дифференциалы, след и контроль размерностей дают
|
||
надёжный способ выводить матричные градиенты.
|