Предиктивное кодирование: как мозг имитирует обратное распространение ошибки 0:00
Янник Килхер (Yannic Kilcher) в своем новом видеообзоре разбирает научную работу «Predictive coding approximates backprop along arbitrary computation graphs» (авторы: Baron Millage, Alexander Chance, Christopher L. Buckley). Ключевая идея исследования заключается в том, что алгоритм предиктивного кодирования (predictive coding) может аппроксимировать алгоритм обратного распространения ошибки (backprop) в произвольных вычислительных графах, используя исключительно локальные и геббиевские обновления, что делает его биологически правдоподобным кандидатом на модель процессов обучения в коре головного мозга.
Проблема биологической правдоподобности обучения 2:12
Традиционный алгоритм обратного распространения ошибки (backprop) является фундаментом современного глубокого обучения, позволяя эффективно вычислять градиенты для глубоких сетей. Однако, по мнению автора видео, он сталкивается с фундаментальной проблемой при попытке переноса на биологические нейронные сети:
- Направленность: В нейронных сетях (реализованных в фреймворках типа PyTorch или TensorFlow) градиент должен распространяться в обратном направлении (от выхода к входу) для обновления весов.
- Локальность: Нейроны в мозгу не являются двунаправленными в том смысле, как это требуется для классического backprop; они не могут эффективно «ждать» глобального синхронизированного сигнала ошибки, чтобы обновиться.
- Параллелизм: Процессы в мозгу должны происходить максимально параллельно и использовать только локальную информацию, в то время как backprop требует передачи глобального градиента.
Механизм предиктивного кодирования 9:21
В отличие от стандартного прямого прохода, предиктивное кодирование превращает обучение в своего рода «вариационную игру в угадайку». Основная логика работы алгоритма, как утверждает Янник Килхер, заключается в следующем:
- Генеративная модель: Каждый слой пытается предсказать (угадать) значение активации следующего слоя на основе своих входных данных.
- Итеративное уточнение: Прежде чем обновлять веса, алгоритм запускает внутренний цикл, в котором «догадки» о значениях скрытых слоев (v_i) уточняются, чтобы минимизировать ошибку.
- Локальные сигналы ошибки: Ошибка не транслируется как глобальный градиент, а распределяется локально: каждый слой корректирует свою «догадку», чтобы стать более согласованным с прогнозом следующего слоя.
- Обновление весов: Только после достижения равновесия в этих догадках происходит обновление параметров (весов), которое также является локальной операцией.
Эмпирические результаты и ограничения 7:32
Авторы исследования демонстрируют, что предложенный метод работает для различных архитектур: CNN, RNN и даже LSTM.
- Точность: Графики обучения показывают, что сети, обученные методом предиктивного кодирования, достигают практически тех же результатов, что и при использовании классического backprop.
- Вычислительная стоимость: Главный минус метода — он примерно в 100 раз медленнее, так как требует итеративного цикла сходимости (inference steps) для каждого прохода данных.
- Оговорка: Хотя авторы подчеркивают возможность параллелизации, Янник Килхер скептичен: по его мнению, необходимость многократной передачи сигналов между слоями (сзади наперед) всё равно делает алгоритм зависимым от глобального процесса «обратной развертки».
Геббиевское обучение в коде 36:21
При анализе кода авторы показывают, что если слой является линейным (с последующей поэлементной нелинейностью), то правила обновления весов становятся «геббиевскими» (Hebbian updates).
- Локальный градиент: Вычисляется как произведение активаций прямого прохода через производную нелинейной функции.
- Реализация: В коде это выражается в умножении активаций на локальную ошибку предсказания.
Янник Килхер заключает, что, хотя это не доказывает, что мозг использует именно этот метод, это весомый аргумент в пользу того, что биологические нейронные сети могут аппроксимировать градиенты backprop гораздо ближе, чем считалось ранее.