Alterna · учебный материал
05.3 Какие примеры участвовали в исправлении
Ошибка и градиент зависят от выбранных данных. Часть примеров может дать другое направление, чем весь набор.
Что в этом материале
- Не каждый градиент требует всех данных
Содержание и основные понятия
На предыдущей странице: небольшой шаг против роста ошибки.
Ошибка и градиент зависят от выбранных данных. Часть примеров может дать другое направление, чем весь набор.
Индивидуальные производные: [1,−1,−3,−5].
Для изменения рисунка включитеJavaScript; расчёт и теория доступны далее.
Не каждый градиент требует всех данных
Если L(θ)=N⁻¹ΣLᵢ(θ), полный g=N⁻¹Σ∇Lᵢ. Mini-batch выбирает подмножество B и использует его средний градиент. При равномерной случайной выборке подходящим способом это несмещённая оценка полного градиента. Шум зависит от выборки и структуры данных, не добавляется произвольным декоративным дрожанием линии.
g
B
=
1
∣
B
∣
∑
i
∈
B
∇
L
i
(
θ
)
.
g_B=\frac1{|B|}\sum_{i\in B}\nabla L_i(\theta).
g
B
=
∣
B
∣
1
i
∈
B
∑
∇
L
i
(
θ
)
.
Для Lᵢ(θ)=.5(θ−tᵢ)² и targets[−1,1,3,5] приθ=0 индивидуальные gradients[1,−1,−3,−5], полное среднее−2. Batch из первого и второго примеров даёт0, хотя общий g≠0. Batch из всех четырёх возвращает−2. Дляη=.1 полный шагθ_new=.2.
Эксперимент.
Меняйте размер batch1/2/4 при фиксированном seed. В панели видны выбранные индексы и их градиенты. Смена seed меняет выбор, не данные. Полный batch не должен зависеть от перестановки. Фиксированный seed обеспечивает воспроизводимый опыт, но сам по себе не доказывает статистическое свойство несмещённости.
В race-лаборатории используется
точный
градиент аналитической поверхности, поэтому первый метод называется GD, не SGD. Эта отдельная batch-лаборатория действительно выбирает примеры. Нельзя выдавать первую демонстрацию за стохастическое обучение только потому, что алгоритмы применимы к SGD.
Под капотом.
Больший batch часто лучше использует матричные вычисления, но требует больше памяти активаций. Уменьшение шума, качество переноса и скорость в секунду зависят от задачи; равенство «больше batch всегда лучше» не следует из формулы среднего.
targets = [-1,1,3,5]
theta = 0
gradients = [theta-t for t in targets]
assert sum(gradients)/4 == -2
assert sum(gradients[:2])/2 == 0
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
Градиент вычислен по данным, а не нарисован случайным шумом. Поэтому разные части данных могут давать разные шаги.
Учитываем прошлые исправления. Как этот вопрос продолжает полученный результат?
Python-примеры главы 05
Академическая база →