Макет нейрона как сделать

Добавил пользователь Владимир З.
Обновлено: 05.10.2024

Эту статью могут комментировать только участники сообщества.
Вы можете вступить в сообщество одним кликом по кнопке справа.

Доктор физико-математических наук А. ЖДАНОВ, заведующий Отделом имитационных систем Института системного программирования РАН.

Устройство управляющей системы как модели нервной системы. Такое устройство вынужденно вытекает из принятых нами в качестве исходных условий четырех свойств нервной системы. В биологических нейронах входные сигналы — нервные импульсы — поступают к нейрону (1) через контакты-синапсы, расположенные на отростках-дендритах (2), число которых может достигать тысячи. Схема нейрона, используемого в традиционных нейросетях. Модель нейрона, разработанная для метода автономного адаптивного управления.


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

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

Разрабатываемую нами имитационную модель нервной системы мы называем системой автономного адаптивного управления (ААУ).

НЕРВНАЯ СИСТЕМА КАК АВТОНОМНАЯ АДАПТИВНАЯ СИСТЕМА УПРАВЛЕНИЯ

Договоримся о терминах. Обычно при моделировании нервных систем в точных науках пользуются следующими синонимами биологических объектов.

Кибернетические объекты Биологические объекты
Среда Объект управления (ОУ)
Управляющая система (УС) Датчики
Исполнители Окружающая среда
Организм Нервная система и мозг
Рецепторы Эффекторы


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

1. Автономность.

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

2. Дискретность.

3. Начальная приспособленность.

4. Минимум исходных знаний.

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

КАК РАБОТАЕТ НЕРВНАЯ СИСТЕМА

Итак, выходим на связь с Демоном.

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

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

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

Разумно. Но может ли Демон обнаружить закономерности в беспорядочном мелькании входных сигналов? Может, если он в состоянии заметить в них неслучайные совпадения. Если в какой-то момент ему покажется, что некоторую комбинацию сигналов он видит уже не в первый раз — значит, он сформировал образ.

Ну вот, уже два образа сформированы — номер 1 и номер 2. Это первые составляющие эмпирического знания нашей управляющей системы. Демон может занести их в свою Базу Знаний.

Сформированные образы (иначе их еще называют таксонами, паттернами, классами объектов) управляющая система может распознать в те моменты, когда в поле зрения датчиков появляются их прообразы.

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

Ну вот, в данном случае первыми сформировались эмоциональные оценки образов. База Знаний пополнилась новой информацией.

Вот управляющая система и получила первое знание: в каких условиях, каким действием и с какой вероятностью вызывается (или вытесняется) определенный образ. Назовем нажатие на кнопку номер 47 действием номер 1.

Демон постепенно расширяет свою Базу Знаний, обнаруживая новые действия и уточняя найденные ранее.

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

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

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

а) в руках у Демона уже довольно пухлая тетрадь, содержащая обширную Базу Знаний,

б) он умеет распознавать множество образов,

в) почти в каждый момент он знает, как ему поступать в соответствии с обстоятельствами,

г) принимая решения, Демон уже учитывает их последствия, но далеко не все, хотя бы потому, что не успевает это сделать,

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

УСТРОЙСТВО УПРАВЛЯЮЩЕЙ СИСТЕМЫ

Каждая подсистема решает свою задачу, учитывая результаты работы других подсистем.

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

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

МОДЕЛИ ИСКУССТВЕННЫХ НЕЙРОНОВ

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

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

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

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

СИСТЕМА АВТОНОМНОГО АДАПТИВНОГО УПРАВЛЕНИЯ

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

Важно то, что в системе ААУ качество управления неуклонно растет, причем происходит это автоматически.

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

ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ — АВТОНОМНЫЙ И ПОДЧИНЕННЫЙ

Есть одно, на первый взгляд, странное обстоятельство. Предположим, сильно размечтавшись, что создана некая замечательная система автономного адаптивного управления, не уступающая по своим функциям пусть не человеку, не кошке, но хотя бы мышке (пока что и эта задача совершенно недостижима). Какую же практическую пользу мы сможем извлечь из такой мышки? Заставим ее копать нору? Она скажет: отпустите меня, я хочу есть, пить, гулять и меньше всего хочу работать на вас. И она будет права, так как цель описанной управляющей системы — улучшение своего (а не нашего) состояния.

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

Моделирование процессов выживания и оптимизации ресурсов нейрона как элемента нейронных структур

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

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

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

Более перспективным направлением, представляется попытаться понять проанализировать первопричины, по которым нейроны объединяются в группы, слои, и затем формируют отделы мозга, и попытаться создать модели нейронов и нейронных сетей, функционирующие по сходным принципам. Иными словами необходимо попытаться то движущее начало, которое формирует нейронные структуры и их заставляет работать. Одним из таких фундаментальных свойств в живой природе является принципиальная неустойчивость биологической системы во времени – т.е. неизбежное старение организма. Борьбу с этим свойством можно считать одним из основных аспектов функционирования живой материи [2].

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

1. Интеллектуальная квазибиологическая система

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

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

1. Нейрон нуждается в питании. Если нейрон не получает требующегося ему количества питания, то он погибает.

2. Нейрон стареет. Состояние нейрона зависит от его возраста. Основным свойством является рост потребностей в питании по мере увеличения возраста.

3. Разряд в нейроне приводит к снижению возраста и к снижению потребностей в питании.

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

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

6. У нейрона имеются собственные внутренние резервы питания. По их величине и тенденции определяется "самочувствие" нейрона.

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

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

bakhshiev_neuronlifemodeling_pic1_01.jpg

2. Формулировка задачи работы

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

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

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

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

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

3. Функциональная схема комплексной модели нейрона

Ниже представлена функциональная схема, объединяющая в себе модель нейрона как преобразователя импульсных потоков [3,4,5] и как живого объекта (рис 3.1).

bakhshiev_neuronlifemodeling_pic3_01.jpg

Рис 3.1 Функциональная схема комплексной модели нейрона

Моделируя процессы жизнеобеспечения нейрона, мы абстрагируемся от химии и физиологии протекающих процессов, аналогично моделированию процессов преобразования импульсных потоков. Нас интересует моделирование качественных свойств нейрона, обеспечивающих выживание клетки в условиях симбиоза и конкурентной борьбы внутри нейронной сети. Опираясь на работу [2] введем два следующих базовых параметра:

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

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

Износ нейрона H определяет эффективность функционирования модели. Увеличение степени износа (старение нейрона) ведет к снижению эффективности расхода энергии на генерацию импульса. Процесс генерации импульса ведет к функциональному обновлению клетки, т.е. снижению степени износа. Таким образом этот параметр определяет потребность клетки в симбиозе с другими клетками для экономии ограниченного запаса энергии.

4. Модель процессов жизнеобеспечения нейрона

[См. полную версию статьи]

5. Интегральные характеристики нейронной сети

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

Суммарный износ системы равен сумме износов всех нейронов.

При образовании новых нейронов, общий износ увеличивается, при гибели нейрона, износ нейронной сети уменьшается.

Суммарное самочувствие равно сумме самочувствий всех нейронов, оно характеризует качество работы системы.

Суммарный расход энергии равно сумме расходов энергии каждого нейрона.

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

6. Правила организации нейронных связей

[См. полную версию статьи]

7. Многослойные сети

В нашей модели используются многослойные сети.

Число нейронов в слое определяется числом генераторов (все нейроны 1го слоя получаются подключенными к своему генератору), а общее число слоев = число нейронов сети/число генераторов. При этом связаны нейроны следующим образом:

У каждого нейрона есть координата в двухмерном пространстве сети.

X – координата вдоль слоя,

Y - координата вдоль списка слоев.

При этом каждый нейрон связан только с теми, расстояния между которыми Исследования Бионика Моделирование процессов выживания и оптимизации ресурсов нейрона как элемента нейронных структур

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

Сегодня наиболее мощные системы искусственного интеллекта используют машинное обучение, которое называется глубоким. Обучение их алгоритмов осуществляется за счёт того, что огромные объёмы данных идут через глубокие нейронные сети — скрытые слои взаимосвязанных узлов. Уже по названию этих сетей видно, что на их создание учёных вдохновили естественные нейронные сети головного мозга, что узлы глубоких сетей смоделированы по аналогии с естественными нейронами — или, по меньшей мере, в соответствии с научными представлениями о нейронах в 50-х годах ХХ века, когда появился перцептрон — модель нейронной сети, оказавшая большое влияние на развитие нейронаук. С тех пор наши знания о вычислительной сложности единичных нейронов стали значительно шире, и нам известно, что биологические нейроны сложнее, чем искусственные. Но насколько?

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

Чтобы определить сложность функции ввода-вывода биологического нейрона, авторы статьи учили искусственную глубокую нейронную сеть имитировать выполнение этой функции. Они начали с создания крупномасштабной модели функции ввода-вывода пирамидального нейрона из коры крысиного головного мозга — нейрона с различными ответвлениями дендритов вверху и внизу. Затем они ввели эту модель в глубокую нейронную сеть, имевшую до 256 искусственных нейронов в каждом слое. Учёные постепенно увеличивали количество слоёв, пока точность измерения отношения между входом и выходом смоделированного нейрона на миллисекундном уровне не стала 99-процентной. Глубокая нейронная сеть научилась успешно предсказывать значения функции ввода-вывода нейрона, имея от пяти до восьми искусственных слоёв. Для большинства сетей это означает, что одному биологическому нейрону соответствует почти тысяча искусственных.

Сегодня нейронауке известно, что вычислительная сложность одного нейрона, подобного пирамидальному нейрону, изображённому слева, зависит от дендритных ответвлений, бомбардируемых входными сигналами. Эти сигналы вызывают изменения локального напряжения, представленные изменениями цвета (красный означает высокое напряжение, синий — низкое). Они идут до той поры, пока нейрон не решит, следует ли отправлять свой собственный сигнал (спайк). Данный нейрон отправил спайк трижды, о чём говорят представленные справа следы активности отдельных ветвей, где цвет соответствует месторасположению дендритов (для верхних — красный цвет, для нижних — синий).

Авторы статьи раскрыли свой код для других исследователей, чтобы побудить их найти умное решение с меньшим количеством слоёв. Но, поскольку создать глубокую нейронную сеть, способную подражать нейрону с 99-процентной точностью, оказалось невероятно трудно, авторы уверены, что полученный ими результат всё же позволяет проводить такое сравнение, которое весьма значимо для дальнейших исследований. По мнению Лилликрэпа, на основе этого результата можно разработать новый способ сравнения с головным мозгом сетей для классификации изображений, где число слоёв нередко доходит до пятидесяти. Если каждый биологический нейрон подобен пятислойной искусственной нейронной сети, то, возможно, сеть для классификации изображений с 50 слоями эквивалентна 10 естественным нейронам биологической сети.

Но некоторые специалисты сомневаются, что такое нововведение поможет создателям систем ИИ.

Помимо применения в сфере создания систем ИИ данная научная статья может содействовать прогрессу в деле изучения нейронов, предоставляя дополнительные аргументы в пользу набирающей силу гипотезы, согласно которой дендритные деревья, а стало быть и отдельные нейроны, обладают огромной вычислительной мощью. Ещё в 2003 году трое нейроучёных с помощью двухслойной искусственной нейронной сети, выступавшей в роли модели пирамидального нейрона, продемонстрировали, что дендритное древо этого нейрона выполняет сложные вычисления. В рассмотренной нами новой статье её авторы показали те особенности пирамидального нейрона, которые подвигли их использовать в качестве модели гораздо более сложную нейронную сеть, от пяти до восьми слоёв. Учёные объяснили полученный ими уровень сложности свойствами дендритных деревьев и специфического рецептора на поверхности дендритов, который принимает химические сигналы. Это заключение соответствует выводу, сделанному в предыдущем исследовании на данную тему.


С помощью статьи PhD Оксфордского университета и автора книг о глубоком обучении Эндрю Траска показываем, как написать простую нейронную сеть на Python. Она умещается всего в девять строчек кода и выглядит вот так:

from numpy import exp, array, random, dot
training_set_inputs = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])
training_set_outputs = array([[0, 1, 1, 0]]).T
random.seed(1)
synaptic_weights = 2 * random.random((3, 1)) — 1
for iteration in xrange(10000):
output = 1 / (1 + exp(-(dot(training_set_inputs, synaptic_weights))))
synaptic_weights += dot(training_set_inputs.T, (training_set_outputs — output) * output * (1 — output))
print 1 / (1 + exp(-(dot(array([1, 0, 0]), synaptic_weights))))

Чуть ниже объясним как получается этот код и какой дополнительный код нужен к нему, чтобы нейросеть работала. Но сначала небольшое отступление о нейросетях и их устройстве.

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


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

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

Вы могли заметить, что вывод всегда равен значению левого столбца. Так что ответом будет 1.

Процесс тренировки

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

  1. В качестве входных данных мы возьмем примеры из тренировочного набора. Потом мы воспользуемся специальной формулой для расчета выхода нейрона, которая будет учитывать случайные веса, которые мы задали для каждого примера.
  2. Далее посчитаем размер ошибки, который вычисляется как разница между числом, которое нейрон подал на выход и желаемым числом из примера.
  3. В зависимости от того, в какую сторону нейрон ошибся, мы немного отрегулируем вес этого примера.
  4. Повторим этот процесс 10 000 раз.

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

Формула для вычисления выхода нейронной сети

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

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


Если мы нарисуем график этой функции, то он будет выглядеть как кривая в форме буквы S (рис. 4).


Подставив первое уравнения во второе, мы получим итоговую формулу выхода нейрона.

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

Машинное обучение и нейросети

Комплект продвинутых курсов для освоения машинного и глубокого обучения от классических моделей до нейронных сетей. Дополнительная скидка 5% по промокоду BLOG.

Формула корректировки весов

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

Давайте поймем почему формула имеет такой вид. Сначала нам нужно учесть то, что мы хотим скорректировать вес пропорционально размеру ошибки. Далее ошибка умножается на значение, поданное на вход нейрона, что, в нашем случае, 0 или 1. Если на вход был подан 0, то вес не корректируется. И в конце выражение умножается на градиент сигмоиды. Разберемся в последнем шаге по порядку:

  1. Мы использовали сигмоиду для того, чтобы посчитать выход нейрона.
  2. Если на выходе мы получаем большое положительное или отрицательное число, то это значит, что нейрон был весьма уверен в том или ином решении.
  3. На рисунке 4 мы можем увидеть, что при больших значениях переменной градиент принимает маленькие значения.
  4. Если нейрон уверен в том, что заданный вес верен, то мы не хотим сильно корректировать его. Умножение на градиент сигмоиды позволяет добиться такого эффекта.

Градиент сигмоиды может быть найден по следующей формуле:

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

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

Как написать это на Python

Хотя мы не будем использовать специальные библиотеки для нейронных сетей, мы импортируем следующие 4 метода из математической библиотеки numpy:

  • exp — функция экспоненты
  • array — метод создания матриц
  • dot — метод перемножения матриц
  • random — метод, подающий на выход случайное число

Теперь мы можем, например, представить наш тренировочный набор с использованием array():

training_set_inputs = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])=
training_set_outputs = array([[0, 1, 1, 0]]).T

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


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

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

Итак, вот полноценно работающий пример нейронной сети, написанный на Python:

from numpy import exp, array, random, dot

class NeuralNetwork():
def __init__(self):
Задаем порождающий элемент для генератора случайных чисел, чтобы он генерировал одинаковые числа при каждом запуске программы
random.seed(1)

Мы моделируем единственный нейрон с тремя входящими связями и одним выходом. Мы задаем случайные веса в матрице размера 3 x 1, где значения весов варьируются от -1 до 1, а среднее значение равно 0.
self.synaptic_weights = 2 * random.random((3, 1)) — 1

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

def __sigmoid(self, x):
return 1 / (1 + exp(-x))

Производная от функции сигмоиды. Это градиент ее кривой. Его значение указывает насколько нейронная сеть уверена в правильности существующего веса.
def __sigmoid_derivative(self, x):
return x * (1 — x)

Мы тренируем нейронную сеть методом проб и ошибок, каждый раз корректируя вес синапсов.
def train(self, training_set_inputs, training_set_outputs, number_of_training_iterations):
for iteration in xrange(number_of_training_iterations):
Тренировочный набор передается нейронной сети (одному нейрону в нашем случае).
output = self.think(training_set_inputs)

Вычисляем ошибку (разницу между желаемым выходом и выходом, предсказанным нейроном).
error = training_set_outputs — output

Корректируем веса.
self.synaptic_weights += adjustment

Заставляем наш нейрон подумать.
def think(self, inputs):
Пропускаем входящие данные через нейрон.
return self.__sigmoid(dot(inputs, self.synaptic_weights))

Инициализируем нейронную сеть, состоящую из одного нейрона.
neural_network = NeuralNetwork()

Тренировочный набор для обучения. У нас это 4 примера, состоящих из 3 входящих значений и 1 выходящего значения.
training_set_inputs = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])
training_set_outputs = array([[0, 1, 1, 0]]).T

Обучаем нейронную сеть на тренировочном наборе, повторяя процесс 10000 раз, каждый раз корректируя веса.
neural_network.train(training_set_inputs, training_set_outputs, 10000)

Этот код также можно найти на GitHub. Обратите внимание, что если вы используете Python 3, то вам будет нужно заменить команду “xrange” на “range”.

Несколько финальных замечаний

Попробуйте теперь запустить нейронную сеть, используя в терминале эту команду:

Результат должен быть таким:

Random starting synaptic weights:
[[-0.16595599]
[ 0.44064899]
[-0.99977125]]

New synaptic weights after training:
[[ 9.67299303]
[-0.2078435 ]
[-4.62963669]]

Considering new situation
[1, 0, 0] -> ?: [ 0.99993704]

Ура, мы построили простую нейронную сеть с помощью Python!

Сначала нейронная сеть задала себе случайные веса, затем обучилась на тренировочном наборе. После этого она предсказала в качестве ответа 0.99993704 для нового примера [1, 0, 0]. Верный ответ был 1, так что это очень близко к правде!

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

Конечно, мы создали модель всего лишь одного нейрона для решения очень простой задачи. Но что если мы соединим миллионы нейронов? Сможем ли мы таким образом однажды воссоздать реальное сознание?

Читайте также: