Нейронные сети. Мифы и реальность.

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

 Первое знакомство

 Сейчас трудно вспомнить, но кажется впервые слова нейронная сеть я услышал от одного из знакомых аспирантов. Я не помню что именно он мне о них рассказал, но я хорошо помню мысль осевшую в памяти после разговора - нейронные сети, это такие "программы" которые могут обучаться. Я не слишком чётко представлял ни как, ни чему, ни зачем собственно эти сети умеют обучаться, но сама идея меня сильно впечатлила. Первое же что пришло в голову - можно сделать программу обучающуюся играть в крестики нолики. Собственно, это был мой первый "проект" которому так и не суждено было осуществиться. С интернетом в те времена было не просто, но я таки смог достать распечатки лекций Сергея Терехова "по теории и приложениям нейронных сетей" [1]. Вчитываясь в лекции я искал в них ответ на вопрос "как и чему может обучиться машина?".  Лекции, надо отдать дань автору, были написаны простым и понятным языком и проглотил я их содержание за несколько вечеров. Первое, что отложилось у меня в голове, это то, что нейронные сети являются некоторыми моделями алгоритма, способными с помощью некоторой методики обучения (то же алгоритма) "учиться" выполнению некоторой задачи. Задача, чтобы её решению можно было обучать нейронную сеть, должна представляется переводом одного вектора чисел в другой. Фактически, на том уровне понимания, мне казалось что нейронная сеть может позволить решить задачу отображения одних векторов чисел в другие, если настоящий, точный алгоритм неизвестен, но можно составить некоторый набор правильных примеров работы - пар вход-выход, обучающую выборку. Если и не всё, то уж точно большую часть в нашем мире можно так или иначе представить в виде чисел (долгожданный цифровой век наверное наступил уже тогда). Поэтому возможности нейронных сетей мне казались безграничными. Мне казалось, что скоро машины смогут обучаться решать любые задачи! Достаточно описать всё в виде преобразования векторов чисел и дело в шляпе. Не нужно часами сидеть и придумывать сложнейший точный алгоритм, которого может ещё и не существует - бери нейронную сеть побольше и задача решена.

 Первое плавание

 Где-то через пол года я начал выполнять учебно-исследовательские задачки на кафедре, куда хотел распределиться. Я взял себе задачу где требовалось распознать звучит ли в некотором небольшом сегменте звукового файла музыка или речь. То что я бы сейчас назвал задачей составления вектора признаков было уже решено до меня коллегой аспирантом и мне всего лишь требовалось запрограммировать какую-нибудь нейронную сеть. Задачку я кое-как решил, за что был награждён 5+ за курс, но в моём понимании нейронных сетей произошло серьёзное изменение. Теперь я понял, что главным свойством нейронных сетей является возможность обобщить информацию из ограниченной обучающей выборки на общую, вообще говоря, бесконечную совокупность всех возможных данных. В тот момент начали приходить неожиданные ранее вопросы: "а чем же это отличается от простой интерполяции/аппроксимации?", "как адекватно померить насколько хорошо нейронная сеть обобщает?", "как именно происходит это обобщение и отчего зависит то насколько качественно оно производиться?". Как ни странно, готовых ответов в доступной форме именно в литературе про сами нейронные сети я найти не мог. В итоге, я составил большой обзор изученных мной различных видов нейронных сетей, который вы можете найти изложенным в двух статьях в нашем журнале [2][3]. Период великих надежд прошёл, сменился на период замешательства, который сменился разочарованием. Из всей литературы стало ясно одно - всю магию нейронных сетей можно изложить на одной странице математического текста с парой теорем понятных второкурснику. Нейронная сеть - это просто модель для аппроксимации функции по замерам с помощью сигмоид (функций особого вида). Обучение (тот самый знаменитый алгоритм обратного распространения back propagation) - всего лишь метод минимизации ошибки системы на тренировочной выборке. Никакой магии обучения или её объяснения. Фактически, тот факт что нейронная сеть как-то разумно работает вне обучающей выборки не объяснялся никоим образом.

Магия обучения

 Но неужели, думал я, вся тайна обучения машин на этом и кончается? Мне хотелось увидеть строгую науку, дающую ответы на мои вопросы про возможность обучения алгоритмов, или, говоря вернее, машин. То, что нам читали на лекциях искусственному интеллекту ничуть не пролило света на эти вопросы. Курс был смесью классической кибернетики и простейшей теории игр (автоматы, грамматики, деревья решений). В то время на кафедре я в основном занимался задачами обработки изображений и поэтому перестал уделять этой теме много внимания, хотя и не потерял интерес к ней. Поворотным был момент, когда передо мной встала конкретная прикладная задача обнаружения некоторых предопределённых объектов на изображениях. Когда кто-либо говорил про практическое применение нейронных сетей то всегда приводил в пример именно распознавание объектов на изображениях. Собрав солидную подборку литературы я обнаружил, что самым передовым является подход основанный отнюдь не на нейронных сетях, а на доселе мне неведомом методе усиления слабых классификаторов [4]. Начав разбираться в нём я обнаружил что существует целая наука (совершенно не привязанная к нейронным сетям и даже не придающая им особого значения) занимающаяся обучением и, как ни странно, так и называющейся:  Machine Learning - машинное обучение. 

Взрослая наука Machine Learning

 Как выяснилось, ответы есть. И теории есть. И наука ого-го как не стоит в этом плане на месте.  Математический аппарат в этой области широк - в основном теория вероятностей и математическая статистика. Уже успели сформироваться целые научные школы и классические направления. Кстати, один из отцов основателей - Владимир Вапник, русский учёный в советские времена уехавший в Англию. Его основное достижение - получение теоретической оценки обобщающей способности (вероятности ошибки на всей совокупности данных) через ошибку на тренировочной выборке и сложности классификатора (размерности Вапника-Червоненкиса). Основные конференции области - ICML, COLT и NIPS (единственная, в которой в название есть слово neural). Кстати, на последнем ICML 2006 была представлена статья, где экспериментально было проведено сравнение методов обучения с учителем (supervised learning), и нейронные сети даже не попали в тройку лидеров. Вот так то. После достаточно подробного изучения данный области мой понимание феномена нейронные сети стало до безобразия простым и даже в чем-то скучным. Этого всего лишь ещё один метод, притом не самый удачный, и не более того. Да, это даже не теория и не взгляд на проблему. Когда я читал материалы к зарубежным курсам по машинному обучению, то заметил что в большинстве случаев нейронные сети фигурируют там в качестве примера примитивных методов на которых очень удобно демонстрировать различные проблемы обучения (нейронные сети "больны" почти всеми возможными болезнями обучающихся систем).

Кто виноват?

 Но почему же, спрашиваю я себя, почему большая часть российских людей занимающихся распознаванием образов знают только о нейронных сетях и о большем и слышать не хотят? Попробуем докопаться до правды. Любая научная или научно-инженерная область это не просто набор определений и теорем, а главным образом сообщество людей, занимающихся этой областью. Это культура, в прямом смысле этого слова. Что же такое нейросетевая культура в России? Мой мнение - это что-то вроде секты. Она заманивает магическим названием, околдовывает тайнами, завораживает обещаниями, а потом каким-то непонятным образом связывает по рукам и ногам. Все люди, которые активно увлекались нейронными сетями и с которыми мне довелось общаться очень агрессивно реагируют на все заявления о том, что наука уже ушла вперёд и им нужно расширить свой кругозор. На форумах на вопрос, почему никто не пробует работать современными методами,  основанными на математической статистике, можно вообще получить "сногсшибательный ответ" вроде: "Математическая статистика (мат. статистика) разработана главным образом для анализа одной переменной". Нейросетевая культура замкнулась в себе и не хочет смотреть вокруг, видимо опасаясь своей несостоятельности. К тому же, отсутствие каких-либо приличных ресурсов по машинному обучению на Русском языке в интернете только усугубляет ситуацию. 

Что делать?

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

Ссылки

  1. С. Терехов. Лекции по теории и приложениям нейронных сетей // (http://alife.narod.ru/lectures/index.html)
  2. Вежневец A. П. Популярные нейросетевые архитектуры // Электронный журнал «Графика и Мультимедиа». 2003. (http://cgm.graphicon.ru/metodyi/populyarnyie_neyrosetevyie_arhitekturyi.html)
  3. Вежневец А.П. Нестандартные нейросетевые архитектуры // Электронный журнал «Графика и Мультимедиа» 2003.  (http://cgm.graphicon.ru/metodyi/nestandartnyie_neyrosetevyie_arhitekturyi.html)
  4. Вежневец А.П. Вежневец В.П. Boosting - Усиление простых классификаторов // Электронный журнал «Графика и Мультимедиа» 2006  (http://cgm.graphicon.ru/content/view/112/66/)

Комментарии

Как?

Как можно (в двух словах) распознать человеческую речь без нейронной сети?

Материалы на русском

Вот тут есть http://www.basegroup.ru/library/analysis/ есть описания на русском некоторых из современных алгоритмов машинного обучения. Каюсь, нейросети тоже представлены, но как один из методов. :)

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

Здравствуйте.

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

Интересная

Интересная статья. Спасибо!

Спасибо за статью. Действительно люди (с которыми мне приходилось общаться), увлекающиеся нейронными сетями, применяли их даже там, где существуют "нормальные" вполне хорошо работающие алгоритмы. Например,ИМХО, не стоит применять нейронные сети для решения квадратных уравнений. :-)

Re:

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

RE:

"Упоминаемая сеть back propagation - это на самом деле многослойная нейронная сеть прямого распространения, back propagation - алгоритм обучения. Ктати не важно как именно нейросеть обучают - важны сами коэффициенты, которые можно хоть придумать - это никого не волнует."

Тут вы не правы. Во первых, для нейросетей не существует алгоритмов настройки ищущих глобальный минимум, пусть даже для эмпирического риска (например для SVM находиться глобальных минимум, притом не только эмпирического риска, но и оценки общего). Во вторых, все методы настройки - чистая минимизация эмпирического риска без учёта VCD или отступов, таким образом нейросети безумно склонны к переобучению. В третьих, вы говорить "важны сами коэффициенты, которые можно хоть придумать" - это вообще очень странное утверждение, ведь вся соль всех методов машинного обучения именно в настройке, а не в модели (моделей можно сотни придумать). Вопрос именно ведь в том, как придумать параметры? Там и вся наука начинается - размерность Вапника-Червоненкиса, максимизация отступа и т.п. Без этого это всё пальцем в небо и чистая эвристика.

"Эта нейросеть - это классификатор векторов, когда модель процесса неизвестна, но можно дать достаточно представительный набор примеров. Главное достоинство - это возможность правильной классификации, если форма кластеров в признаковом пространстве достаточно сложная, но классы хорошо разделимы."

То что вы описали - это классическая постановка задачи машинного обучения с учителем без априорной информации о классах (agnostic learning). Boosting или Random Forest в таком случае будет работать намного надёжней нейросетей. К тому же, они будут неплохо работать и при выской Байесовской ошибке (классы плохо разделимы), в то время как у нейросетей сразу пойдёт переобучение. Посмотрите, например, статью где все эти алгоритмы сравниваются как раз на подобных задачах:

Rich Caruana, Alexandru Niculescu-Mizil "An Empirical Comparison of Supervised Learning Algorithms". ICML 2006.

Все хорошо к месту, нейросети - алгоритм с вполне определенной о

Упоминаемая сеть back propagation - это на самом деле многослойная нейронная сеть прямого распространения, back propagation - алгоритм обучения. Ктати не важно как именно нейросеть обучают - важны сами коэффициенты, которые можно хоть придумать - это никого не волнует.
Эта нейросеть - это классификатор векторов, когда модель процесса неизвестна, но можно дать достаточно представительный набор примеров. Главное достоинство - это возможность правильной классификации, если форма кластеров в признаковом пространстве достаточно сложная, но классы хорошо разделимы.
Использовать эту сеть вне такого класса задач и говорить, что плохо работает - это то же самое, что утверждать что алгоритм quicksort плохой классификатор - конечно, он для этого и не предназначен!
А мистики вокруг нейросетей действительно слишком много, надо реальнее смотреть на вещи.

Там вообще-то внизу написано :) Powered by Azrul's Jom Comment

Подскажите пожалуйста, что за движок комментариев у вас такой красивый?

Хех...

Открытие нейронных сетей и их недостатков происходило в том-же порядке =)

Еще воспоминания...

Я термин "нейросети" услышал (прочел) в первый раз, когда на 4 курсе отправился работать и сел писать ИИ для поведения автомобилей (c водителями) в игрушке для Буки (так и не вышедшей). Было это, соответственно, в 1998 году.

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

Дааа... Эх, были деньки.

Все не так пессимистично у нас, мне кажется...

Вполне появляются нормальные ресурсы и курсы по машинному обучению. Те же лекции Воронцова, Местецкого...

http://www.ccas.ru/voron/teaching.html (там есть ссылки на оба курса)