среда, 27 августа 2008 г.

Робототехника и ИИ: нейронные сети.

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

Я не раз заикался о том, что мне нейронные сети использовать не по нраву в большинстве робототехнических задач и задач машинного зрения. И вот сегодня я попытаюсь объяснить, какими соображениями руководствовался...

Итак, для начала нужно понять, что такое нейронная сеть, и каков общий принцип ее действия.

Всем, наверное, известно, что идея искусственной нейронной сети (ИНС) появилась в процессе исследования строения человеческого мозга. Биологические нейроны ведут себя не так уж и сложно: у каждого из них есть некоторое количество входов (синапсов), к которым могут присоединяться аксоны от других нейронов. Каждый вход имеет собственный "вес" (который может изменяться). Если сумма весов активных входов (активным считается вход, к которому присоединен аксон возбужденного нейрона) превышает некоторое число, нейрон возбуждается, и воздействует через собственный аксон на все входы нейронов, к которым он присоединен.

Благодаря тому, что вес каждого входа может изменяться, получаем функцию обучения, или настройки нейронной сети.

Понятно, что изначальными входами для всех нейронов человеческого мозга являются различные органы чувств. Зрение, слух, осязание, обоняние, вкус. Точно также, в искусственных нейронных сетях через "рецепторную матрицу" входов для первого слоя нейронов задается условие задачи, которую следует решить.

Тогда на выходе последнего в сети ряда нейронов мы получим решение.

Если известно, что решение неверно, значит и весы некоторых входов неверны. Таким образом, обучение нейронной сети - это настройка весов для каждого из нейронов.

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

Если бы меня спросили, что я понимаю под нейронной сетью, я бы сказал так: нейронная сеть - это система для поиска зависимостей между входными и выходными наборами данных.

Обратите внимание, поиск зависимостей между наборами данных. Между наборами данных. Наборами известных заранее, тестовых данных. Я как программист могу сказать, вот тестируешь, тестируешь, тестируешь программу - день, два, неделю - добиваешься чтобы она блестела, сияла и ну просто была идеальна. Приносишь ее заказчику. И она не хочет у него работать... :) И это не кривые руки, это тестовые наборы данных!

Неверные данные - неверные выводы. Это великая проблема нейронных сетей. И, в отличие от программы, я не могу заглянуть в исходный код нейронной сети, и предположить, что вот здесь используется тип Int32, а его вообще-то говоря маловато для тех чисел, которые могут здесь вдруг появиться.

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

Выводы:

  1. Нейронная сеть всегда может быть заменена более понятными алгоритмами или математическими расчетами.
  2. Нейронную сеть нереально отладить.
  3. В любой серьезной задаче нейронной сети с вероятностью в 99,9% будет обучена неполно или вообще неправильно.

Таким образом, применять нейронные сети для решения простых задач - неудобно из-за сложности в отладке. Для сложных задач - глобальной является проблема обучения. Конечно, где-то посерединке между сложными и легкими задачами - обязательно есть ниша для нейронных сетей. Но пожалуйста, не пытайтесь только на основе нейронных сетей построить искусственный интеллект. Не пытайтесь превращать нейронные сети в панацею. Не пытайтесь решить с их помощью глобальные проблемы. Используйте их с толком, и будет вам, господа читатели, счастье :)

6 комментариев:

  1. То, что на нейросети зачастую возлагают слишком большие надежды согласен. Особенно новички в этой области. Но то, что НС не оправдывают некоторых надежд связано с тем, что некоторые пытаются применять их бездумно, не соблюдая элементарных правил создания НС. То, что НС это аппарат, который устанавливает соответствие между входными и выходными данными - факт. Но зависимости эти нелинейные, и в общем случае динамические. А раз так, то в принципе ими можно реализовать любую систему. В конце концов человеческая жизнь это тоже некие выходные данные как реакция на входные. Так что НС может решать довольно широкий круг задач, где нужна адаптация и обучение.

    ОтветитьУдалить
  2. (случайно наткнулся и стало интересно)
    Огромный плюс НС в том что они могут самообучаться после чего с их помощью можно отслеживать практически любые динамические процессы с очень хорошей точностью

    ОтветитьУдалить
  3. НС при решении задачи не выбирает между тестовыми набрами данных. Прелесть ПРАВИЛЬНО обученной НС - это ее способность к ассоциации. Даже если таких данных небыло в тестовом наборе, благодаря ассоциативности сеть выработает решение. Естесственно с какой-то вероятность оно будет верным. Но мы ведь не просим ее: "скока вешать граммов". Чтобы человеку поднять ногу на ступеньку, ему совсем необязательно знать точную высоту ступеньки. Достаточно ее оценить. Поэтому НС хороши как раз как эстиматоры.

    ОтветитьУдалить
  4. Анонимный28 мая 2010 г., 12:43

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

    ОтветитьУдалить
  5. Анонимный30 июня 2010 г., 21:25

    Да способность НС к ассоциативным решениям это круто.))Появляется некоторая гибкость...))

    ОтветитьУдалить
  6. Хотя и старая статья, но в корне не согласен с автором.
    пытаться матмодель основанную на статистике, притянуть за уши на "более простые методы"... Братья, это разные применения и разные классы задач.

    ОтветитьУдалить

Внимание! Реклама и прочий спам будут беспощадно удаляться.