Ошибка в градиентном спуске почти никогда не роняет программу. Она молча заставляет модель учиться не туда, и заметить её часто можно только по поведению чисел.
Разные ошибки выглядят по-разному. При слишком большом шаге вес начинает перелетать через минимум: отклонение w − 3 меняет знак, а его модуль растёт. Если потерян минус в правиле обновления, вес в нашем примере уходит от минимума всё дальше в одну сторону. Очень медленное уменьшение |w − 3|, наоборот, может указывать на слишком маленький шаг.
Умение по поведению чисел предположить причину ошибки ещё до просмотра кода — полезный навык при отладке обучения.
Подробно: Длина шага.
Задание
В программе одна ошибка. Минимум функции находится в точке w = 3, но программа к нему не приближается.
w = 0
lr = 0.1
for step in range(10):
gradient = 2 * (w - 3)
w = w + lr * gradient
print(step, w)
Приведите исправленную программу.
Ниже программы в комментариях напишите:
- по какому признаку в выводе можно было заметить ошибку;
- чем этот признак отличается от поведения программы при слишком большом
lr.