Приветствую, коллеги. Хочу предложить вниманию общественности методику обучения глубоких нейронных сетей без использования алгоритмов обратного распространения ошибки. Возможно, кроме меня, кото-то тоже так делает, но я в сети ничего об этом не нашел.
Основные особенности сетей, обученных при помощи данной методики:
- Требуют для обучения на порядок или два меньше вычислительных ресурсов.
- Полностью прозрачны и управляемы, никаких Черных ящиков не содержат.
- Имеют настройки.
- Устойчивы к шумам.
- Оптимизируются под различные задачи.
- Такие сети почти не склонны к переобучению.
Никакой Черной магии, только наука! По сути, я предлагаю аппроксимировать некоторые аналитические алгоритмы с помощью нейронки, и для этого Бэкпроп не нужен. Почему не применить аналитический подход влоб? Можно, и это тема для отдельной статьи.
Я экспериментировал с распознаванием образов и вот, что получил: многослойный перцептрон формирует набор признаков образов, предъявленных в обучающей выборке; при прогоне тестовой выборки, образы распознаются независимо от их масштаба и расположения.
Как это работает? Для начала находим очертания объекта. А что есть очертание объекта? Перепад яркости! Для обнаружения очертаний проводим Edge detection. Далее — оцениваем форму очерченного объекта, его пропорции. Набор пропорций распознаваемого объекта — это его уникальный отпечаток. Если мы запомнили форму объекта, нам не важно, где он в следующий раз появится и в каком масштабе. Вуаля!
На самом деле — еще не «Вуаля». Нас ждут проблемы, и к ним я еще вернусь в своем повествовании. Но концепт именно такой.
Я экспериментировал с аппроксимацией различных алгоритмов, но для начала нам достаточно парочки.
Edge detection. Как известно, это ни что иное, как нахождение ряда производных. Я предлагаю идею украсть, а реализацию извратить! Мы не будем находить аутентичную производную, мы будем находить разницу между точками, находящимися на некотором расстоянии. К этому расстоянию мы еще вернемся, оно нам важно! В итоге получаем «маску»: на границах объектов имеем большие значения, внутри объектов и за их пределами имеем малые значения.
Но в таком виде это работать не будет, реальные образы содержат шумы, на фоне могут располагаться малоконтрастные объекты и т. д. Поэтому мы будем сравнивать не точки, а средневзвешенную двух областей, прилегающих друг к другу. Чувствительность сети мы будем настраивать шириной этих областей. Edge detection готов.
Контуры определили, теперь пропорции. На первый взгляд — все проще пареной репы. Нужно оценить соотношение количества свободного пространства по обе стороны от детектированной кромки. Не совсем! С одной стороны от кромки у нас распознаваемый объект, а с другой стороны — пустота, уходящая за границы образа; или, того хуже, соседний объект. Но данные накапливать нужно. К решению этой проблемы я вернусь в следующих частях статьи. Есть и хорошая новость: мы можем определить пропорции ширины и высоты, и это нам куда как полезнее. На этом этапе можно отличить круглое от овального, прямоугольное от квадратного. Форму любой сложности можно описать набором пропорций. А мы ведь можем работать не только с двумерными данными, но и с любым количеством осей.
Читайте в следующих частях:
- Нейроны-мутанты.
- Что под капотом нечеловеческого разума?
Ссылки по теме:
Автор: pull