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