Синаптические веса в нейронных сетях – просто и доступно

Этой статьей начинается серия статей, рассказывающих просто и доступно о нейронных сетях и искусственном интеллекте.

d05e8ba95bb07e78d048a59ee7d2f0ff.jpg

Автоматические методы обучения искусственных нейронных сетей совершенствуются постоянно. Уже сейчас автоматизм достиг такого уровня, что начальные значения весов можно задавать любые. Действительно, компьютерная программа будет постепенно корректировать веса в сторону уменьшения ошибки, и откуда начинать — не так уж и важно. Чем дальше начальная совокупность от решения, тем больше времени пройдет, вот и вся разница. Все близко к тому, что нажал кнопку, пошел в бассейн, пришел — сеть обучена. Если сеть посерьезнее, то нажал кнопку, уехал в отпуск, приехал через две недели — сеть обучена. Перед нажатием кнопки нужно только архитектуру задать. Хотя программы могут уже сами корректировать архитектуру сети, все более и более автоматизируясь. Так, с некоторой точки зрения, совокупность весов, а также методы их подбора, могут быть некими черными ящиками, в которых что-то как-то происходит и на выходе получаем допустимый уровень ошибки. Есть случаи, когда никто и не ожидал наличия закономерностей, а черный ящик взял и нашел. Например, в сеть заложили параметры — рост и вес. И результат — мужчина/женщина. Сеть самообучилась и выявила закономерность, и смогла на тестовой выборке достаточно точно определять, это мужчина или женщина. Хотя до этого никто и не задумывался именно об этой закономерности. Так что в принципе, можно совсем не изучать этот вопрос, полностью полагаясь на математическую теорию и компьютерное моделирование.

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

В этой статье разберем суть синаптических весов на простом наглядном примере.

Прежде всего, освежим термины. Что есть нейронная сеть, синапсы и веса.

Термином «искусственная нейронная сеть» или просто «нейронная сеть» часто обозначают математическую модель, очень упрощенно описывающую общий алгоритм работы человеческой нервной системы.

Нервную систему человека можно рассматривать как трехступенчатую.

bb3c244fc80aa3360804c73b901116d2.jpg

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

Каждая нервная клетка, нейрон, отдельно работает по такой же трехступенчатой модели. У нервных клеток есть дендриты и аксоны. Дендриты — рецепторы, зоны приема — похожи на дерево, представляют собой неровную поверхность со множеством окончаний. Аксон же у каждой нервной клетки один и похож на кабель или линию электропередачи, по которой дальше передается некий сигнал, полученный в результате прохождения через клетку совокупности сигналов от дендритов. То есть все поступившие сигналы как бы смешиваются, «суммируются», и полученный «обработанный» сигнал передается дальше.

527b349a4489a7ecd1c1315cf93c4349.jpg

Синапсы — места соединения аксона одного нейрона с телом или отростком (дендритом или аксоном) другого нейрона. Через синапсы сигналы передаются от нейрона к нейрону.

396bc4f6569323de7c90c0f998d50c7e.jpg

У каждого синапса есть свой «вес», то есть как бы своя «важность», придаваемая значению сигнала, проходящего через данный синапс.

Получаем модель нейрона из трех элементов:

  1. Совокупность синапсов, каждый из которых характеризуется своим весом.

  2. Сумматор, складывающий входные сигналы, взвешенные относительно соответствующих синапсов нейрона. Математически, это просто сумма значений входных сигналов, умноженных на их вес («важность»).

  3. Функция активации.

feafa1a000d5330cde0194fc62f9f5cd.jpg99d2369d142a0f8e34b4ba68a0e4f2cf.jpg

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

b99f0bd2561590778dc0c27abd9fa8cd.jpg12130bf790d222e035c43e9a75f94515.jpg

Что все эти линии, кружочки и взвешенные суммы означают на практике?

Предположим, нужно определить, является ли объект автомобилем. Подходим, начинаем осматривать, заполняем чек-лист. Крыша есть — ставим галочку, добавляем баллы. Стекла есть, двери есть, щетки-дворники есть, четыре колеса есть — все это плюс баллы. При достижении заданного количества баллов считаем, что перед нами автомобиль. А вот если есть пропеллер, то это уже не автомобиль. Это может быть самолет, вертолет, какая-то специальная лодка, но не автомобиль. То есть важность наличия пропеллера такова, что сразу перечеркивает все «автомобильные» баллы до этого. В этом случае наличию пропеллера мы придадим большой «отрицательный» вес. Теперь посмотрим на крышу. Есть автомобили и без крыши. То есть наличие крыши не так важно для определения, что перед нами автомобиль, как, например, наличие колес. Наличие крыши скажет нам, что перед нами скорее автомобиль, чем котик или кружка, но не скажет точно, это автомобиль или нет. «Вес» наличия крыши будет меньше «веса» наличия колес. А если мы будем сравнивать автомобиль и телегу, то по наличию четырех колес можно и перепутать. Хорошо, что наличие мотора исправит ситуацию. Когда мы сложим все баллы, показывающие важность наличия данного пункта, мы определим, что баллов «автомобиль» больше, чем баллов «телега» или баллов «самолет». Вот так и определяется важность какого-либо параметра. Аналогично, для определения, что это котик важно наличие ушек, глаз, лап, усов, хвоста и так далее.

Дальше у нас сразу же встает задача «следующего слоя» — как определить, что есть крыша, есть колеса, есть ушки, лапки и прочее. Эти элементы раскладываются на составляющие и так происходит многократно, число слоев увеличивается до тех пор, когда кажется, что раскладывать дальше некуда.

Суть синаптических весов от этого не меняется. В сети в 200 слоев и в сети в 1 слой — суть остается той же. Поэтому рассмотрим простой наглядный пример.

Рассмотрим обычный 13-ти сегментный цифровой индикатор.

Задача — определить цифру по горящим сегментам.

91620e387335e0b130785588c03d2a36.jpg

 Каждый сегмент будем считать рецептором.

7d0cc5f051c7891d6eb38c31132d1c4a.jpg

Если сегмент горит, то его значение равно 1, если не горит, то 0.

Теперь, говоря научным языком, приступим к обучению нейронной сети, то есть подбору коэффициентов. Собственно говоря, все обучение и сводится к подбору коэффициентов различными способами.

 Составим таблицу где сторонами будут номер сегмента 1–13 и цифра 1–9.

4377774525755aacbed22b7632e56264.jpg

В нашем примере нужно заполнить таблицу коэффициентами таким образом, чтобы при построчном суммировании перемножений коэффициентов и значений сегментов (1 — горит, 0 — не горит) максимальная сумма была бы в строке, соответствующей горящей цифре.

db64f0e03ae58c6037db391da07b8319.jpg

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

aac089352cb8c63b7e1b50f221b7fbf3.jpg

Зададим первоначальные веса.

Там, где сегмент участвует в изображении цифры, зададим начальный вес 1, а там, где не участвует, зададим большой отрицательный вес. Смысл большого отрицательного веса в том, что если горит сегмент, который не участвует в изображении цифры, то слагаемое 1*(-100) = -100 уменьшит общую сумму в данной строке настолько сильно, что в этой строке сумма точно не будет максимальной.

c6c82bcd811d104e0b4d89ce73f718d4.jpg

Когда горят все сегменты, то максимальная сумма равна 13 и соответствует цифре »8».

57dff93ab9d54280635df45955a5a826.jpg

Отключим сегмент 13. Это соответствует цифре »0».

bb4ddbec03a0c324285cc5925f058217.jpg

 Видим, что максимальная сумма равна 12, но одновременно в двух строках — цифры »8» и »0». Нужно скорректировать коэффициенты таким образом, чтобы сумма 12 горящих сегментов цифры »0» превышала бы сумму 13 горящих сегментов цифры »8». В нашем случае коэффициент должен быть просто больше 13/12, например, 1.1.

Теперь видим, что если горят сегменты цифры »0», то сумма в строке цифры »0» максимальна.

111be53b83872afd1cf7261294ca2b51.jpg

Аналогичным образом обстоит дело с коэффициентами для цифр »6» и »9» — также 1.1.

Затем идут цифры »2»,»3»,»5» — 11 сегментов, коэффициенты 1.2.

Цифра »4» — 9 сегментов, коэффициенты 1.5.

Цифра »7» — 7 сегментов, коэффициенты 1.9.

Цифра »1» — 5 сегментов, коэффициенты 2.6.

 Таким образом получаем конечную совокупность весов.

74e822f619bef750f037ec1f378e555f.jpg

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

c67df496048b4b51e915e94208e16dfd.jpg

Задача решена.

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

© Habrahabr.ru