Pull to refresh

Обучаем нейронные сети по-новому. Часть 1

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

Основные особенности сетей, обученных при помощи данной методики:

  • Требуют для обучения на порядок или два меньше вычислительных ресурсов.
  • Полностью прозрачны и управляемы, никаких Черных ящиков не содержат.
  • Имеют настройки.
  • Устойчивы к шумам.
  • Оптимизируются под различные задачи.
  • Такие сети почти не склонны к переобучению.

Никакой Черной магии, только наука! По сути, я предлагаю аппроксимировать некоторые аналитические алгоритмы с помощью нейронки, и для этого Бэкпроп не нужен. Почему не применить аналитический подход влоб? Можно, и это тема для отдельной статьи.

Я экспериментировал с распознаванием образов и вот, что получил: многослойный перцептрон формирует набор признаков образов, предъявленных в обучающей выборке; при прогоне тестовой выборки, образы распознаются независимо от их масштаба и расположения.

Как это работает? Для начала находим очертания объекта. А что есть очертание объекта? Перепад яркости! Для обнаружения очертаний проводим Edge detection. Далее — оцениваем форму очерченного объекта, его пропорции. Набор пропорций распознаваемого объекта — это его уникальный отпечаток. Если мы запомнили форму объекта, нам не важно, где он в следующий раз появится и в каком масштабе. Вуаля!

На самом деле — еще не «Вуаля». Нас ждут проблемы, и к ним я еще вернусь в своем повествовании. Но концепт именно такой.

Я экспериментировал с аппроксимацией различных алгоритмов, но для начала нам достаточно парочки.

Edge detection. Как известно, это ни что иное, как нахождение ряда производных. Я предлагаю идею украсть, а реализацию извратить! Мы не будем находить аутентичную производную, мы будем находить разницу между точками, находящимися на некотором расстоянии. К этому расстоянию мы еще вернемся, оно нам важно! В итоге получаем «маску»: на границах объектов имеем большие значения, внутри объектов и за их пределами имеем малые значения.

Но в таком виде это работать не будет, реальные образы содержат шумы, на фоне могут располагаться малоконтрастные объекты и т. д. Поэтому мы будем сравнивать не точки, а средневзвешенную двух областей, прилегающих друг к другу. Чувствительность сети мы будем настраивать шириной этих областей. Edge detection готов.

Контуры определили, теперь пропорции. На первый взгляд — все проще пареной репы. Нужно оценить соотношение количества свободного пространства по обе стороны от детектированной кромки. Не совсем! С одной стороны от кромки у нас распознаваемый объект, а с другой стороны — пустота, уходящая за границы образа; или, того хуже, соседний объект. Но данные накапливать нужно. К решению этой проблемы я вернусь в следующих частях статьи. Есть и хорошая новость: мы можем определить пропорции ширины и высоты, и это нам куда как полезнее. На этом этапе можно отличить круглое от овального, прямоугольное от квадратного. Форму любой сложности можно описать набором пропорций. А мы ведь можем работать не только с двумерными данными, но и с любым количеством осей.

Читайте в следующих частях:

  • Нейроны-мутанты.
  • Что под капотом нечеловеческого разума?

Ссылки по теме:

Edge_detection
LOWESS
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.