О чём эта работа
Сеть хранит несколько образов сразу во всех связях между нейронами. Каждый пиксель картинки становится нейроном со значением плюс один или минус один, а веса связей считаются один раз по запоминаемым образам. Дальше сети подают зашумлённую картинку, и она шаг за шагом переключает нейроны, пока не придёт в устойчивое состояние. В удачном случае это состояние совпадает с одним из запомненных образов.
Главная физическая идея, которую стоит объяснить, это энергия. У каждого состояния сети есть числовая величина, которая при любом допустимом переключении только убывает. Поэтому процесс обязательно останавливается, а запомненные образы лежат на дне энергетических ям. Восстановление картинки и есть скатывание в ближайшую яму.
Из каких частей собрать проект
- Данные. Возьми простые чёрно-белые образы, например буквы или геометрические фигуры на решётке от 8x8 до 16x16. Крупнее делать незачем, число связей растёт как квадрат числа пикселей.
- Обучение. Веса считаются по правилу Хебба одной формулой без всякой итеративной подгонки. Обязательно занули связь нейрона с самим собой, иначе сеть залипает на входном состоянии и ничего не восстанавливает.
- Восстановление. Реализуй последовательное обновление, когда за шаг пересчитывается один случайно выбранный нейрон. Параллельное обновление всех сразу тоже опиши, оно бывает зацикливается между двумя состояниями, и это хорошее наблюдение для работы.
- Эксперимент с шумом. Портя от пяти до пятидесяти процентов пикселей, замерь долю успешных восстановлений на многих попытках. График «доля шума и доля успеха» это основной результат проекта.
- Эксперимент с ёмкостью. Запоминай сначала один образ, потом два, три и так далее, и следи, когда сеть начинает ошибаться. Теория даёт грубый ориентир около пятнадцати процентов от числа нейронов, и сравнить свой результат с этой оценкой очень полезно.
Что оценит преподаватель
Первый вопрос почти наверняка будет про остановку. Почему процесс вообще заканчивается и не крутится вечно. Ответ про убывание энергии нужно уметь произнести своими словами. Второй вопрос про похожие образы. Две близкие буквы вроде O и Q сеть путает, и объяснение через перекрытие ям убедительнее, чем ссылка на шум. Третий критерий это статистика вместо единичных показов. Одна красивая восстановленная картинка ничего не доказывает, нужны сотни попыток и доли успеха.
Где брать материал
Теория описана в учебниках по нейронным сетям, обычно в главе про ассоциативную память, там же выведены правило Хебба и оценка ёмкости. Исходная работа Джона Хопфилда начала восьмидесятых годов доступна и читается тяжело, но ссылку на неё стоит привести. Готовые реализации на Python есть в учебных репозиториях, ими удобно сверить свой результат, а код для проекта пиши сам, иначе объяснять на защите будет нечего.
Типичная ошибка в этой теме
Обычно пытаются запомнить слишком много образов. Пять букв на решётке 8x8 это уже за пределами разумной ёмкости, сеть начинает выдавать мешанину, и проект выглядит неудачным, хотя ведёт себя ровно так, как предсказано теорией. Задай ёмкость расчётом заранее и сделай перегрузку отдельным экспериментом. Вторая частая ошибка это забытое обнуление диагонали весов.
С чего начать в первый день
Сделай решётку 5x5, запомни один крестик и попробуй восстановить его из картинки с тремя испорченными пикселями. Такую сеть можно проверить вручную на бумаге, и когда программа совпадёт с ручным расчётом, всё остальное станет вопросом масштаба.
Частые вопросы
Какой размер картинки выбрать
От 8x8 до 16x16. Больше означает медленный пересчёт весов без выигрыша в наглядности.
Нужна ли библиотека нейросетей
Нет, здесь достаточно массивов и обычной арифметики. Использование большой библиотеки скорее спрячет суть алгоритма.
Можно ли брать цветные изображения
Классическая сеть работает с двумя состояниями нейрона, поэтому картинку приводят к чёрно-белой. Расширение на градации серого возможно, но это уже другая модель, и её стоит упомянуть в разделе про развитие.