Как нейронная сеть распознает цифры

Продолжаем изучение нейронных сетей, и это занятие я хотел бы начать с небольшого исследования и попытаться ответить на вопрос: как нейросеть распознает рукописные цифры. Мы строили такую сеть на предыдущем занятии и видели, как она неплохо справляется с поставленной задачей. По крайней мере, на тестовых изображениях. Итак, за счет чего же происходит распознавание? Чтобы ответить на этот вопрос, я набросал вот такую простенькую программу. Она показывает изображения весов для выбранного нейрона. (Здесь чем светлее точка, тем выше вес связи, а темные точки образуют отрицательные связи). При выборе выходного нейрона мы видим активность (вклад) нейронов скрытого слоя и суммарный «портрет» весов от этих нейронов. (Здесь, опять же, чем светлее нейрон, тем выше его активность). Это пример уже обученной НС с 50-ю нейронами скрытого слоя и 10-ю – выходного слоя.

Смотрите, вот интересное распределение весов при распознавании цифры 3. Мы можем ее хорошо различить по белому следу. А вот эти темные области – это отрицательные веса. Они, наоборот, уменьшают активность нейронов скрытого слоя. То есть, мы здесь видим маску для выделения цифры 3 и эта маска формируется определенной активацией нейронов скрытого слоя. Подобные суммарные веса мы видим для цифр 5 и 6. А вот другие цифры не столь очевидно проступают на весовых коэффициентах. Но, в целом, общий принцип здесь понятен: веса НС для каждого класса образуют характерную маску и чем ближе изображение цифры соответствует той или иной маске, тот выходной нейрон и получает наибольшее выходное значение.

Давайте, ради интереса, распознаем наши собственные цифры. Например, 1, 2, 4, 7 и т.п. Как видим она далеко не всегда успешно их классифицирует и это не удивительно: 50 нейронов скрытого слоя недостаточно для решения этой задачи. Кроме того, здесь отсутствуют биасы (смещения). В общем, для своей архитектуры она дает приемлемые результаты.

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

Это, в нашем представлении, отдельные нейроны скрытого слоя. Когда приходит команда провести обучение конкретному предмету, активизируется соответствующий учитель и на выходном нейроне формируется свет знаний по соответствующей дисциплине. Однако, если тема занятия находится на стыке нескольких дисциплин, например, внутреннее устройство компьютера, то здесь активными становятся учителя по информатике, физике и математике:

Продолжим аналогию и предположим, что школу покинули учителя по биологии, химии и информатике:

Тогда оставшиеся педагоги должны будут взять на себя дополнительное бремя ушедших коллег и превратиться в учителей по «математике и информатике», «физике и химии», «географии и биологии». Повезло только учителю истории – его функция осталась неизменной. Точно также происходит и при изменении числа нейронов скрытого слоя: чем их меньше, тем более общими будут их функции, а чем больше – тем более специализированными они становятся. Что именно будет делать каждый из них определяется в процессе обучения НС.

Давайте теперь посмотрим как можно воспринимать число скрытых слоев НС на примере вот такой иерархической схемы развития знаний и технологий:

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

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

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

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

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

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

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

Видео по теме