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

в 14:58, , рубрики: машинное обучение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Edge_detection
LOWESS

Автор: pull

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js