Дельта синхронизация без облака

Ранее мы показывали разные способы синхронизации криптодиска между ПК и Android-устройством.

Облачный хостинг VDS за 2 минуты

Настоящий облачный VDS-хостинг от UltraVDS: тестируем производительность

Смотрим плавность хода с помощью BMW Rheingold

Всем знакома ситуация, когда двигатель немного "троит", но пропусков зажигания нет...

Дельта-синхронизация крипто-дисков

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

Нервные клетки для компьютера


Колисниченко Денис, dhsilabs@mail.ru

В последнее время все чаще стали говорить о нейронных сетях. Развиваются целые отрасли математики, изучающие нейронные сети, в некоторых технических ВУЗах появился даже такой предмет – «Основы нейронных сетей» или же включают изучение нейронных сетей в другие курсы (например, в курс «Искусственный интеллект»). В этой статье мы поговорим об этих самых нейронных сетях, чтобы понять, действительно ли они так важны или о них больше просто говорят, чем их используют.

Я думаю, значит, я существую…

Именно такое заключение сделал один из философов. С появлением самых первых компьютеров ученые пытались научить компьютер «думать» (наверное, чтобы он существовал?) – они пытались создать искусственный интеллект. Как же заставить железо думать? Если пойти по минимальному пути сопротивления, то оптимальный вариант – «срисовать» по образу и подобию «центральный процессор» человека – его мозг.

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

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


Строение нейрона, стрелка – направление импульса

Вторая функция нашего «переходника» - это усиление сигнала (похож на ретранслятор, правда?). Синапс не просто передает импульс – он его усиливает, при прохождении через синапс сила импульса увеличивается в несколько раз. Множитель увеличения силы импульса будем называть весом синапса.

Что происходит, когда в нейрон поступают импульсы? Когда в нейрон по нескольким дендритам одновременно поступают импульсы, их импульсы суммируются. Если суммарный импульс превышает какое-то значение (точнее – порог – ведь мы говорим не о математике, а о живом организме), то нейрон возбуждается и посылает собственный импульс, который передается по аксону. Вес синапса – величина непостоянная, она может изменяться и в зависимости от этого изменяется и характер нашего нейрона. Представь себе спокойного человека – вес синапса довольно небольшой. Если тебе удастся вывести этого человека из «состояния равновесия», вес синапсов увеличится в несколько раз. Тогда малейшего раздражения хватит, чтобы человек «закипел». То же самое, но с рецепторами кожи. Погладь себя по руке – ты же ведь не чувствуешь боль? А теперь представь, что ты засунул руку в кипяток, а затем погладил себя по ожогу – даже если сам ожог уже не болит, малейшее прикосновение к поврежденному участку кожи вызовет боль.

Построим математическую модель нашего нейрона. Это будет функция, которой передается n параметров – это дендриты, Wn – это вес синапсов каждого дендрита. Для простоты будем считать, что дендритов у нас три. К синапсам поступают импульсы силы X1, X2, X3. После прохождения синапсов к нейрону поступают импульсы силы W1*X1, W2*X2, W3*X3. Суммарный полученный импульс равен S = W1*X1+ W2*X2+ W3*X3. Сила исходящего импульса задается некоторой функцией F(S) = F(W1*X1+ W2*X2+ W3*X3). Как видишь, с математической точки зрения все просто.


Математическая модель нейрона

Нейронная сеть

Откуда произошло название «нейронная сеть» и, какие принципы лежат в их основе, ты уже, наверное, догадался. Нейронная сеть – это набор нейронов, соединенных между собой. Функции всех нейронов сети постоянны, а веса и параметры (импульсы) – могут изменяться. Нейронная сеть имеет внешние входы и внешние выходы. Мы передаем сети информацию на внешние входы, а получаем преобразованную сетью информацию на внешних выходах. Выходит, что задача нейронной сети – это преобразование одного вектора в другой, причем в процессе преобразования принимают участие все нейроны сети. Ясно, что сейчас мы говорим о математической нейронной сети, а не биологической. Рассмотрим одну из самых распространенных и одну их самых нужных задач, решаемых нейронной сетью – это распознавание символа. Это один из самых важных мыслительных процессов, более сложная задача – распознавание образа и его ассоциация с чем-либо похожа на задачу распознавания символа, но только чуть сложнее. Итак, входная информация – изображение символа размером 30х30 точек. На выходе мы должны получить символ – сеть определит, изображение, какого символа мы ей передали, и возвратит всего один байт. Для простоты возьмем только английский алфавит, в котором 26 букв.

Наша сеть будет иметь 900 внешних входов и 26 внешних выходов. Если на входе – изображение буквы “D”, то максимальный сигнал будет на выходе “D” – аналогично для остальных букв.

Строим сеть

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

  1. Число входов и передаточные функции
  2. Как нейроны будут соединяться между собой внутри сети
  3. Количество выходов и что будет на каждом выходе

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


Архитектура перцептрон (однослойный)


Архитектура перцептрон (двухслойный)

Процесс обучение заключается в том, что ты должен подобрать значения весов так, чтобы сеть давала правильные ответы. Например, чтобы не получилось так, что на ходе – изображение буквы ‘L’, а сеть сообщает, что мы передали значение ‘G’. Обучение нейросети – это очень сложный процесс, поскольку на практике количество весов может составлять 10-20 тысяч. Практически для каждой архитектуры нейронной сети разработаны специальные алгоритмы обучения, которые позволяют относительно быстро подобрать веса сети. Например, для обучения сети перцептрона используется метод Error Back Propagation (EBP) – метод обтачного распространения ошибки.


Обучение сети

Как обучить нейронную сеть?

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

Вернемся к нашему примеру обучения сети английскому алфавиту. Пусть у нас есть база данных, содержащая картинки – наборы изображений букв. На вход нейронной сети мы передаем изображение буквы ‘D’, а ответ получаем какой-нибудь символ. Сначала ответ будет неправильным – это нормально, ведь сеть еще ничего не «знает». Мы знаем правильный ответ, а сеть – нет, поэтому мы должны сообщить ей, какую букву мы ей показали. Для этого на внешнем выходе, который ассоциируется с буквой ‘D’, устанавливаем максимальный уровень сигнала – (0,0,0,1,0,0…). Буква ‘D’ – четвертая в алфавите, поэтому четвертая компонента вектора будет равна 1, все остальные – 0. Можно так повторить все 26 раз, а можно использовать алгоритм EBP. Сначала вычисляем разницу между полученным ответом и правильным ответом (получим вектор ошибки), а затем, согласно алгоритма EBP, вводим необходимые поправки в веса сети. Одну и ту же букву можно повторять несколько раз, пока сеть не будет ее узнавать с вероятностью 100% - так мы будем тренировать сеть. После многократного повторения система весов сети стабилизируется, и сеть начинает давать правильные ответы на почти все вопросы. При работе с нейронными сетями нужно помнить, что сеть может ошибаться – это нормальное явления – ведь человек тоже ошибается. В процессе обучения суммарное количество ошибок постепенно уменьшается. Когда количество ошибок равно 0 (или очень близко к этому значению в процентном соотношении), сеть считается обученной - ее можно использовать.

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

Использование сети

Сразу после обучения сеть готова к использованию. И на данном этапе нужно понимать, что сеть – это не простая база данных, содержащая информацию из некоторой предметной области. Нейросеть, как и человеческий мозг, может «думать», то есть правильно реагировать на те ситуации, в которых она не была в процессе обучения. И, чем, полнее база данных примеров, тем больше вероятность правильных действий сети. Если нашей сети передать изображение буквы ‘D’, написанное другим шрифтом, сеть «додумается», что мы передали ей изображение буквы ‘D’, а не какой-нибудь другой. Система весов сети хранит довольно много информации о написании букв (и отклонениях от нормы), поэтому сеть может дать правильный ответ.


Использование сети

Тебе, наверное, интересно, как можно «пощупать» нейросеть – не писать же ее своими силами после прочтения этой стати? Компания Ward Systems Group разработала комплекс программ, предназначенный для обучения и использования нейросетей. Все эти программы используют библиотеку NeuroWindows. Каждая из программ позволяет задать набор примеров – обучить сеть, проверить примеры и предложить ей новые. Скачать данные программы можно по адресу https://www.neuroproject.ru/download.htm#dnwsgdemo На практике нейронные сети используются для решения трех типов задач: задач классификации, задач поиска зависимостей и задач прогнозирования.

Пример задачи классификации – это та же задача распознавания текста, которую мы рассматривали в статье. Распознавание текста – это самая тривиальна задача, которую может решить нейронная сеть. Более серьезное ее применение – это экспертные системы. Если в случае с распознаванием текста результат заранее нам известен (мы знаем заранее, какой текст получим в результате распознавания текста программой FineReader), то в случае с экспертной системой мы не знаем, что она нам сообщит. Экспертная система выступает в роли эксперта, с которым мы советуемся. В некоторых странах доктор не может назначить лечение, отличное от того, которое было предложено экспертной системой: он подает на вход системы симптомы болезни и результаты анализов больного и получает диагноз и указания о необходимом лечении. Кстати, медицинские диагностические системы – это тоже пример нейронной сети. Сеть учитывает множество входящий параметров, включая кардиограмму, энцефалограмму и т.д. Следующий пример нейронной сети, решающей задачу классификации, это программы определения перспективности предприятий – они используются, в основном, банками для определения степени риска при предоставлении предприятию кредита. Лично я при получении кредита столкнулся с такой программой, правда, для физических лиц она была намного проще, чем для предприятий.

Нейронные сети – это нечто среднее, между центральным процессором и человеческим мозгом (конечно, с перевесом в сторону CPU) – ведь сети могут не только быстро считать (CPU), но и принимать решения (мозг). Почему с перевесом в сторону CPU? Не потому, что сети лучше выполняют арифметические операции, чем «думают» - просто как-никак при создании сети не используется ни одна живая материя.

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

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

https://www.neuroproject.ru/

https://neuroschool.narod.ru/articles.html#abc

https://www.orc.ru/~stasson/neurox.html