О чём эта работа

Сеть хранит несколько образов сразу во всех связях между нейронами. Каждый пиксель картинки становится нейроном со значением плюс один или минус один, а веса связей считаются один раз по запоминаемым образам. Дальше сети подают зашумлённую картинку, и она шаг за шагом переключает нейроны, пока не придёт в устойчивое состояние. В удачном случае это состояние совпадает с одним из запомненных образов.

Главная физическая идея, которую стоит объяснить, это энергия. У каждого состояния сети есть числовая величина, которая при любом допустимом переключении только убывает. Поэтому процесс обязательно останавливается, а запомненные образы лежат на дне энергетических ям. Восстановление картинки и есть скатывание в ближайшую яму.

Из каких частей собрать проект

  • Данные. Возьми простые чёрно-белые образы, например буквы или геометрические фигуры на решётке от 8x8 до 16x16. Крупнее делать незачем, число связей растёт как квадрат числа пикселей.
  • Обучение. Веса считаются по правилу Хебба одной формулой без всякой итеративной подгонки. Обязательно занули связь нейрона с самим собой, иначе сеть залипает на входном состоянии и ничего не восстанавливает.
  • Восстановление. Реализуй последовательное обновление, когда за шаг пересчитывается один случайно выбранный нейрон. Параллельное обновление всех сразу тоже опиши, оно бывает зацикливается между двумя состояниями, и это хорошее наблюдение для работы.
  • Эксперимент с шумом. Портя от пяти до пятидесяти процентов пикселей, замерь долю успешных восстановлений на многих попытках. График «доля шума и доля успеха» это основной результат проекта.
  • Эксперимент с ёмкостью. Запоминай сначала один образ, потом два, три и так далее, и следи, когда сеть начинает ошибаться. Теория даёт грубый ориентир около пятнадцати процентов от числа нейронов, и сравнить свой результат с этой оценкой очень полезно.

Что оценит преподаватель

Первый вопрос почти наверняка будет про остановку. Почему процесс вообще заканчивается и не крутится вечно. Ответ про убывание энергии нужно уметь произнести своими словами. Второй вопрос про похожие образы. Две близкие буквы вроде O и Q сеть путает, и объяснение через перекрытие ям убедительнее, чем ссылка на шум. Третий критерий это статистика вместо единичных показов. Одна красивая восстановленная картинка ничего не доказывает, нужны сотни попыток и доли успеха.

Где брать материал

Теория описана в учебниках по нейронным сетям, обычно в главе про ассоциативную память, там же выведены правило Хебба и оценка ёмкости. Исходная работа Джона Хопфилда начала восьмидесятых годов доступна и читается тяжело, но ссылку на неё стоит привести. Готовые реализации на Python есть в учебных репозиториях, ими удобно сверить свой результат, а код для проекта пиши сам, иначе объяснять на защите будет нечего.

Типичная ошибка в этой теме

Обычно пытаются запомнить слишком много образов. Пять букв на решётке 8x8 это уже за пределами разумной ёмкости, сеть начинает выдавать мешанину, и проект выглядит неудачным, хотя ведёт себя ровно так, как предсказано теорией. Задай ёмкость расчётом заранее и сделай перегрузку отдельным экспериментом. Вторая частая ошибка это забытое обнуление диагонали весов.

С чего начать в первый день

Сделай решётку 5x5, запомни один крестик и попробуй восстановить его из картинки с тремя испорченными пикселями. Такую сеть можно проверить вручную на бумаге, и когда программа совпадёт с ручным расчётом, всё остальное станет вопросом масштаба.

Частые вопросы

Какой размер картинки выбрать

От 8x8 до 16x16. Больше означает медленный пересчёт весов без выигрыша в наглядности.

Нужна ли библиотека нейросетей

Нет, здесь достаточно массивов и обычной арифметики. Использование большой библиотеки скорее спрячет суть алгоритма.

Можно ли брать цветные изображения

Классическая сеть работает с двумя состояниями нейрона, поэтому картинку приводят к чёрно-белой. Расширение на градации серого возможно, но это уже другая модель, и её стоит упомянуть в разделе про развитие.