Alterna · учебный материал

03.3 Собираем чувствительности в вектор

Производные по отдельным координатам можно собрать вместе. Полученный градиент показывает направление локального роста функции.

Что в этом материале

Содержание и основные понятия

На предыдущей странице: меняем одну причину за раз.
Производные по отдельным координатам можно собрать вместе. Полученный градиент показывает направление локального роста функции.
f=x²+3y²; точка [2,1].
Координаты и расчёт геометрического примера приведены в тексте. Для изменения пространственного рисунка включитеJavaScript.
Частные производные образуют линейный функционал
Для дифференцируемой скалярной функции
f
:
R
n
→
R
f:\mathbb R^n\to\mathbb R
f
:
R
n
→
R
градиент в столбцовом соглашении равен
∇
f
(
x
)
=
[
∂
f
/
∂
x
1
⋮
∂
f
/
∂
x
n
]
∈
R
n
×
1
.
\nabla f(x)=
\begin{bmatrix}
\partial f/\partial x_1\\
\vdots\\
\partial f/\partial x_n
\end{bmatrix}
\in\mathbb R^{n\times1}.
∇
f
(
x
)
=
​
∂
f
/
∂
x
1
​
⋮
∂
f
/
∂
x
n
​
​
​
∈
R
n
×
1
.
Он кодирует первый порядок для любого малого
δ
\delta
δ
:
f
(
x
+
δ
)
≈
f
(
x
)
+
∇
f
(
x
)
T
δ
.
f(x+\delta)\approx f(x)+\nabla f(x)^T\delta.
f
(
x
+
δ
)
≈
f
(
x
)
+
∇
f
(
x
)
T
δ
.
У
f
(
x
,
y
)
=
x
2
+
3
y
2
f(x,y)=x^2+3y^2
f
(
x
,
y
)
=
x
2
+
3
y
2
в точке
(
2
,
1
)
(2,1)
(
2
,
1
)
:
g
=
∇
f
(
2
,
1
)
=
[
4
,
6
]
T
,
∥
g
∥
2
=
52
.
g=\nabla f(2,1)=[4,6]^T,
\qquad \|g\|_2=\sqrt{52}.
g
=
∇
f
(
2
,
1
)
=
[
4
,
6
]
T
,
∥
g
∥
2
​
=
52
​
.
Gradient имеет shape входа, а не shape
[
n
,
n
]
[n,n]
[
n
,
n
]
. Для loss с
P
P
P
параметрами это
P
P
P
чувствительностей, по одной на координату текущего parameter state.
Направленная производная сравнивает единичные движения
Для направления
u
u
u
единичной евклидовой длины
D
u
f
(
x
)
=
∇
f
(
x
)
T
u
,
∥
u
∥
2
=
1.
D_uf(x)=\nabla f(x)^Tu,
\qquad \|u\|_2=1.
D
u
​
f
(
x
)
=
∇
f
(
x
)
T
u
,
∥
u
∥
2
​
=
1.
Вдоль осей получаем 4 и 6. Но вдоль
u
=
g
/
∥
g
∥
2
u=g/\|g\|_2
u
=
g
/∥
g
∥
2
​
:
D
u
f
=
g
T
g
∥
g
∥
2
=
∥
g
∥
2
=
52
≈
7.2111.
D_uf=g^T\frac g{\|g\|_2}=\|g\|_2=\sqrt{52}\approx7.2111.
D
u
​
f
=
g
T
∥
g
∥
2
​
g
​
=
∥
g
∥
2
​
=
52
​
≈
7.2111.
Неравенство Коши–Буняковского
g
T
u
≤
∥
g
∥
2
∥
u
∥
2
=
∥
g
∥
2
g^Tu\le\|g\|_2\|u\|_2=\|g\|_2
g
T
u
≤
∥
g
∥
2
​
∥
u
∥
2
​
=
∥
g
∥
2
​
доказывает максимальность этого локального роста при ограничении
∥
u
∥
2
=
1
\|u\|_2=1
∥
u
∥
2
​
=
1
. Слово «наискорейший» зависит от выбранной нормы: при другом ограничении множество допустимых направлений будет другим.
Антиградиент задаёт направление, но не безопасную длину
Шаг gradient descent имеет вид
x
n
e
w
=
x
−
η
∇
f
(
x
)
.
x_{\mathrm{new}}=x-\eta\nabla f(x).
x
new
​
=
x
−
η
∇
f
(
x
)
.
При
η
=
0.1
\eta=0.1
η
=
0.1
:
[
2
,
1
]
T
−
0.1
[
4
,
6
]
T
=
[
1.6
,
0.4
]
T
,
[2,1]^T-0.1[4,6]^T=[1.6,0.4]^T,
[
2
,
1
]
T
−
0.1
[
4
,
6
]
T
=
[
1.6
,
0.4
]
T
,
f
(
1.6
,
0.4
)
=
2.56
+
0.48
=
3.04
<
7.
f(1.6,0.4)=2.56+0.48=3.04<7.
f
(
1.6
,
0.4
)
=
2.56
+
0.48
=
3.04
<
7.
Но при
η
=
0.5
\eta=0.5
η
=
0.5
тот же gradient даёт
[
2
,
1
]
T
−
0.5
[
4
,
6
]
T
=
[
0
,
−
2
]
T
,
f
(
0
,
−
2
)
=
12
>
7.
[2,1]^T-0.5[4,6]^T=[0,-2]^T,
\qquad f(0,-2)=12>7.
[
2
,
1
]
T
−
0.5
[
4
,
6
]
T
=
[
0
,
−
2
]
T
,
f
(
0
,
−
2
)
=
12
>
7.
Направление
−
g
-g
−
g
гарантирует убывание только для достаточно малого шага в гладкой локальной области. Оно не выдаёт подходящий learning rate автоматически.
В точке
(
0
,
0
)
(0,0)
(
0
,
0
)
gradient этой положительной квадратичной функции равен нулю, и точка является глобальным минимумом. Для произвольной функции
∇
f
=
0
\nabla f=0
∇
f
=
0
означает лишь стационарность: далее нужны сведения о кривизне или поведении функции.
Перебор конечных разностей по всем
P
P
P
параметрам требует порядка
P
P
P
дополнительных forward evaluations. Reverse-mode automatic differentiation для скалярного loss повторно использует вычислительный граф и получает все компоненты gradient в одном backward traversal. Это не делает вычисление бесплатным: нужно хранить или восстанавливать промежуточные значения.
В лаборатории сравните
η
=
0.1
\eta=0.1
η
=
0.1
и
0.5
0.5
0.5
при одном старте. Новый эксперимент должен восстанавливать исходную точку: нельзя выдавать последовательность разных настроек за одну trajectory.
x, y, eta = 2, 1, .1
g = [2*x, 6*y]
next_point = [x - eta*g[0], y - eta*g[1]]
next_value = next_point[0]**2 + 3*next_point[1]**2
assert all(abs(a - b) < 1e-12 for a, b in zip(next_point, [1.6, .4]))
assert abs(next_value - 3.04) < 1e-12
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
Каждую причину сначала меняем отдельно. Градиент объединяет чувствительности; малый шаг в обратную сторону уменьшил значение именно в этом примере.
Много входов и много выходов. Как этот вопрос продолжает полученный результат?
Python-примеры главы 03
Академическая база →

Структурная карта учебников