Введение в нейросети

Введение

С появлением глубокого обучения “компьютерное зрение” перешло на новую ступень развития. На смену разрозненным значениям пикселей и ограниченному количеству созданных вручную признаков пришли способы сделать машинное распознавание деталей изображения более простым и понятным — это привело к смене парадигмы в этой области. Сегодня в привычных нам вещах из сфер производства и торговли используется множество самых современных приложений для компьютерного зрения. Недавний прорыв в сфере глубокого обучения в компьютерном зрении привнёс колоссальные изменения в нашу повседневную жизнь. Вы могли даже не заметить, как именно в каких-то вещах используется компьютерное зрение. Вот несколько любопытных примеров: автопилот в автомобилях Tesla, разблокировка с помощью Face ID, Animoji и продвинутый функционал камеры в iPhone, эффект боке в режиме портретной съёмки, фильтры в мессенджерах Snapchat и Facebook и т. д.

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

Особенности и должностные обязанности специалиста

Перед тем, как выбрать курсы data science, нужно оценить все особенности профессии. В работе с данными применяются различные способы:

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

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

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

Препроцессинг

  1. Создание векторного пространства признаков, где будут жить примеры обучающей выборки. По сути, это процесс приведения всех данных в числовую форму. Это избавляет нас от категорийных, булевых и прочих не числовых типов.
  2. Нормализация данных. Процесс, при котором мы добиваемся, например того, чтобы среднее значение каждого признака по всем данным было нулевым, а дисперсия — единичной. Вот самый классический пример нормализации данных: X = (X — μ)/σ
  3. Изменение размерности векторного пространства. Если векторное пространство признаков слишком велико (миллионы признаков) или мало (менее десятка), то можно применить методы повышения или понижения размерности пространства:
    • Для повышения размерности можно использовать часть обучающей выборки как опорные точки, добавив в вектор признаков расстояние до этих точек. Этот метод часто приводит к тому, что в пространствах более высокой размерности множества становятся линейно разделимыми, и это упрощает задачу классификации.
    • Для понижения размерности чаще всего используют PCA. Основная задача метода главных компонент — поиск новых линейных комбинаций признаков, вдоль которых максимизируется дисперсия значений проекций элементов обучающей выборки.

One-Hotстатьей о вкусовой сенсорной системе

class: red: green: blue: bitter: sweet: salti: sour: weight: solid:
1 1 0.23 1
1 1 -0.85
1 1 1 0.14 1
1 1 1 0.38
1 1 -0.48

Таблица 2 — Пример данных обучающей выборки после препроцессингаkk

Оценка качества модели

  • TP (True Positive) — истиноположительный. Классификатор решил, что клиент купит, и он купил.
  • FP (False Positive) — ложноположительный. Классификатор решил, что клиент купит, но он не купил. Это так называемая ошибка первого рода. Она не так страшна, как ошибка второго рода, особенно в тех случаях, когда классификатор — тест на какое-нибудь заболевание.
  • FN (False Negative) — ложноотрицательный. Классификатор решил, что клиент не купит, а он мог купить (или уже купил). Это так называемая ошибка второго рода. Обычно при создании модели желательно минимизировать ошибку второго, даже увеличив тем самым ошибку первого рода.
  • TN (True Negative) — истиноотрицательный. Классификатор решил, что клиент не купит, и он не купил.

Рис. 13 — Сравнение результатов классификации разных моделей

Немного теории

Нейронная сеть Хопфилда (англ. Hopfield network) — полносвязная нейронная сеть с симметричной матрицей связей. Такая сеть может быть использована для организации ассоциативной памяти, как фильтр, а также для решения некоторых задач оптимизации.

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

Структурная схема нейросети Хопфилда

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

Алгоритм работы сети:

  1. ИнициализацияВеса нейронов устанавливаются по следующей формуле:где — количество образов  — — ый и — ый элементы вектора — ого образца.

  2. На входы сети подается неизвестный сигнал. Фактически его ввод осуществляется непосредственной установкой значений выходов:

  3. Рассчитывается выход сети (новое состояние нейронов и новые значения выходов):где — пороговая активационная функция с областью значений ; — номер итерации; — количество входов и нейронов.

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

Для теоретиков

Эмулятор работы нейросети основан на представлениях схемотехнической
основ природных нейросетей.

Есть особенности, которые стоит учитывать при
конструировании нейросетей.

1. У нейронов задан фиксированный порог в 5 условных единиц
активности (воздействие синапса в эмуляторе от 0 до 10, что соответствует
небольшой градации проводимости синапсов в природе)

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

2. Для природных нейросетей не характерно, чтобы от одного
нейрона следовали синапсы разных видов (и возбуждающие и тормозные). Характерно
наличие “вставочных” нейронов, предназначенных для торможения при своем
возбуждении. Поэтому не стоит в схемах от одного нейрона вести связи и
возбуждающие, и тормозные, а следует вставлять промежуточные нейроны. Поэтому
организовывать взаимное торможение, нужно не проводя встречные связи (они
сольются в одну полоску, что и означает неверный прием), а вставляя
дополнительные тормозные нейроны.

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

LET’S ENHANCE

Нейросеть, которая поможет улучшить качество изображений.

Бывало ли у вас такое, что понравилась картинка и очень хочется залить её в свой профиль или на сайт, а она ужасно плохого качества? Эту проблему решили опытные разработчики из Украины! Теперь больше не нужно мучиться из-за ужасных фотографий и картинок низкого разрешения, только шикарные сгенерированные с нуля High Resolution изображения! Генеративная нейросеть способна увеличивать до 512 мегапикселей, улучшая разрешение и чёткость изображений.

Сервис платный, но при регистрации у вас будет возможность протестировать его до 5 раз!

Лайфхак! Привязки к ip у сервиса нет, следовательно, вы можете постоянно регистрироваться на нём для получения дополнительных 5 бесплатных увеличений изображения.

Шикарный инструмент, в котором нейросеть сама определяет и вырезает необходимые объекты всего за 5 секунд. Если нужно что-то вырезать, а времени мало — REMOVE.BG в помощь!

Программа работает как в онлайн режиме, так и имеет программное обеспечение. Работает на Windows / Mac / Linux.

Также команда, разработавшая данный инструмент, предусмотрела плагин для самого популярного редактора фотографий Adobe Photoshop.

Сервис условно бесплатный. В бесплатной версии имеется возможность вырезать объекты, сохраняя один раз изображение с оригинальным разрешением, а далее png с разрешением не более 500×500 пикселей.

Лайфхак! Привязки к ip у сервиса нет, следовательно, вы можете постоянно регистрироваться на нём для получения 1 бесплатного сохранения полноформатного, вырезанного объекта.

Ну как же без мемов

FACE APP, REFLECT, DOUBLICAT

Самые популярные сервисы для изменения внешности и возраста. Хотите повеселить коллег или родственников? Велком!

Проблемы нейросетей

(data set — «набор данных». — Прим. T&P). Однажды китайская система распознавания нарушений выписала штраф за переход в неположенном месте женщине, которая на самом деле была лишь рекламой на автобусе, переезжавшем пешеходный переход. Это значит, что для обучения нейросети использовался неправильный датасет. Нужны были объекты в контексте, чтобы нейросеть научилась отличать настоящих женщин от рекламных изображений.

Другой пример: было соревнование по детекции рака легких. Одно сообщество выпустило датасет с тысячью снимками и разметило на них рак в соответствии с точкой зрения трех разных экспертов (но только в тех случаях, когда их мнения совпадали). На таком датасете можно было обучиться. А вот другая контора решила попиариться и выпустила новость, что использовала в работе несколько сотен тысяч рентгенов. Но оказалось, что больных там было только 20%. А ведь именно они являются для нас важными, ведь если нейросеть будет учиться без них, то не распознает заболевание. Более того, в эти 20% вошли несколько категорий заболеваний с разными подтипами болезней. И выяснилось, что так как это не 3D-картинка, а двухмерное изображение, то сделать с таким датасетом ничего нельзя.

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

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

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

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

Кому нужны курсы data science онлайн?

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

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

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

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

Демонстрация работы нейросети

Обучим сеть двум ключевым образам, буквам Т и Н:

Эталонные образы для обучения сети

Теперь проверим работу сети на искаженных образах:

Попытка распознать искаженный образ буквы НПопытка распознать искаженный образ буквы Т

Программа работает! Сеть успешно восстановила исходные образы.

В заключение стоит отметить, что для сети Хопфилда число запоминаемых образов не должно превышать величины, примерно равной (где — размерность входного сигнала и количество нейронов). Кроме того, если образы имеют сильное сходство, то они, возможно, будут вызывать у сети перекрестные ассоциации, то есть предъявление на входы сети вектора А приведет к появлению на ее выходах вектора Б и наоборот.

Исходники на Github и демо.

Открытый код

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

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

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

Рассмотрим наиболее популярные функции активации и обсудим их преимущества и недостатки.

Сигмоида

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

Но если внимательнее присмотреться к сигмоиде, можно заметить несколько проблем. 

1. Насыщенные нейроны могут «убить» градиент. Возьмём сигмоидный узел вычислительного графа и передадим в него входные данные X. Когда мы делаем обратный проход, восходящий градиент равен dL/d?, а локальный — dL/d? * d?/dx. 

Что же произойдёт, если X будет равен −10? Градиент станет нулевым, поскольку все большие отрицательные значения находятся на прямом участке сигмоидной функции. Таким образом, во все последующие узлы будут передаваться нулевые производные — это и «убивает» градиентный поток.

А если X = 0? В этом случае всё будет в порядке, как и для других близких к нулю значений. А вот при X = 10 градиент снова обнулится. Поэтому сигмоида не работает для слишком высоких положительных или отрицательных данных.

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

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

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

Тангенс

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

ReLU

ReLU или Rectified Linear Unit стала довольно популярной в последние годы. Она вычисляет функцию f(x) = max(0,x), то есть просто выдаёт значения «ноль» и «не ноль». Это решает проблему обнуления градиента для положительных чисел. Кроме того, ReLU очень просто вычисляется: примерно в шесть раз быстрее сигмоиды и тангенса. Однако, в ней снова отсутствует нулевое центрирование.

Другой очевидный недостаток — градиент по-прежнему «умирает» при отрицательных входных данных. Это может привести к тому, что половина нейронов будет неактивна и не сможет обновляться. 

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

Leaky ReLU

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

При этом функцию по-прежнему легко вычислить. То есть, она решает практически все перечисленные проблемы. Одной из её разновидностей является PReLU, которая выглядит как f(x) = max(?x, x). 

ELU

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

Maxout

Maxout выбирает максимальную сумму из двух наборов весов, умноженных на исходные данные с учётом смещения. Тем самым он обобщает ReLU и leaky ReLU, не обнуляя градиент. Но, как можно догадаться по виду функции, maxout требует удвоения параметров и нейронов.

Подводя итог: используйте ReLU, можете попробовать взять leaky ReLU/Maxout/ELU. На тангенс и сигмоиду лучше не рассчитывать.

Прямое кодирование

Миллер, Тодд и Хедж

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

Стэнли, Мииккулайнен

  • Конкурирующие представления (Competing Conventions) — один и тот же фенотип (топологически) ИНС может быть по разному представлена в генотипе даже в рамках одного способа кодирования. Например — в ходе эволюции между двумя ранее созданными генами (например, А и B) был вставлен ген C, который (как это часто бывает с мутациями) на начальном этапе не несет никакой полезной информации. В результате, мы имеем особь с двумя генами (A, B) и особь с тремя генами (A, C, B). При скрещивании этих двух особей оператор кроссинговера будет применяться к генам, стоящим в соответствующих позициях (т.е. A <->A, C <-> B), что не есть очень здорово, т.к. мы начинаем скрещивать свинью (С) с апельсинами (B).
  • Незащищенные инновации — при нейроэволюции инновации (т.е. изменения структуры ИНС) производятся добавлением или удалением нейронов и/или груп нейронов. И зачастую, добавление новой структуры в ИНС ведет к тому, что значение её фитнес-функции снижается. Например, добавление нового нейрона вносит нелинейность в линейный процесс, что приводит к снижению значения фитнес-функции до тех пор, пока вес добавленного нейрона не оптимизируются.
  • Начальные размер и топологические инновации — во многим методиках нейроэволюции начальная популяция является набором случайных топологий. Помимо того, что приходится тратить определенное время на отсеивание изначально нежизнеспособных сетей (например, таких, у которых ни один вход не соединен ни с одним выходом), такие популяции имеют тенденцию к преждевременной сходимости к решениям, размер которых неоптимален (т.е. слишком велик). Это вызвано тем, что изначально сгенерированная случайная топология уже имеет набор связей, которые крайне неохотно редуцируются в ходе генетического поиска. Как показали эксперименты, наиболее эффективным является поиск с последовательным увеличением размера нейросети — в этом случае пространство поиска сильно сужается. Одним из способов решения этой задачи является введение штрафной функции, которая уменьшает значение фитнесс-функции в зависимости от размера сети. Однако по прежнему остается решить задачу оптимального вида этой функции, а также подбора оптимальных значений её коэффициентов.

структурной

  1. Выполнения кроссовера только между гомологичными генами
  2. Защиты инноваций за счет введения «нишевания» — особи, имеющие близкие топологические структуры, отсеиваются, таким образом оставляя место для «новичков».
  3. Минимизации размерности за счет последовательного роста от минимального размера

Нейросети в IT

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

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

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

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

Такой простейший вариант нейронной сети называется перцептрон, и именно его мы с вами и попробуем воссоздать.

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

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

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

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

Тренировка нейронной сети — многовариантные исчисления, Часть 2

Текущая цель понятна – это минимизация потерь нейронной сети. Теперь стало ясно, что повлиять на предсказания сети можно при помощи изменения ее веса и смещения. Однако, как минимизировать потери?

Для простоты давайте представим, что в наборе данных рассматривается только :

Имя/Name Вес/Weight (минус 135) Рост/Height (минус 66) Пол/Gender
Alice -2 -1 1

Затем потеря среднеквадратической ошибки будет просто квадратической ошибкой для :

Еще один способ понимания потери – представление ее как функции веса и смещения. Давайте обозначим каждый вес и смещение в рассматриваемой сети:

Затем можно прописать потерю как многовариантную функцию:

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

На этот вопрос может ответить частная производная . Как же ее вычислить?

Для начала, давайте перепишем частную производную в контексте :

Данные вычисления возможны благодаря дифференцированию сложной функции. 

Подсчитать можно благодаря вычисленной выше :

Теперь, давайте определим, что делать с . Как и ранее, позволим , , стать результатами вывода нейронов, которые они представляют. Дальнейшие вычисления:

Как было указано ранее, здесь является функцией активации сигмоида.

Так как влияет только на , а не на , можно записать:

Использование дифференцирования сложной функции.

Те же самые действия проводятся для :

Еще одно использование дифференцирования сложной функции.

В данном случае — вес, а — рост. Здесь как производная функции сигмоида встречается во второй раз. Попробуем вывести ее:

Функция в таком виде будет использована несколько позже.

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

Эта система подсчета частных производных при работе в обратном порядке известна, как метод обратного распространения ошибки, или backprop.

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

Создаём простую нейросеть +33

  • 18.09.18 11:05


NIX_Solutions

#423647

Хабрахабр


Перевод

13100

Машинное обучение, Алгоритмы, Блог компании NIX Solutions

Перевод Making a Simple Neural Network
Что мы будем делать? Мы попробуем создать простую и совсем маленькую нейронную сеть, которую мы объясним и научим что-нибудь различать. При этом не будем вдаваться в историю и математические дебри (такую информацию найти очень легко) — вместо этого постараемся объяснить задачу (не факт, что удастся) вам и самим себе рисунками и кодом.
Многие из терминов в нейронных сетях связаны с биологией, поэтому давайте начнем с самого начала:
Мозг — штука сложная, но и его можно разделить на несколько основных частей и операций:
Возбудитель может быть и внутренним (например, образ или идея):
А теперь взглянем на основные и упрощенные части мозга:Мозг вообще похож на кабельную сеть.Нейрон — основная единица исчислений в мозге, он получает и обрабатывает химические сигналы других нейронов, и, в зависимости от ряда факторов, либо не делает ничего, либо генерирует электрический импульс, или Потенциал Действия, который затем через синапсы подает сигналы соседним связанным нейронам:
Сны, воспоминания, саморегулируемые движения, рефлексы да и вообще все, что вы думаете или делаете — все происходит благодаря этому процессу: миллионы, или даже миллиарды нейронов работают на разных уровнях и создают связи, которые создают различные параллельные подсистемы и представляют собой биологическую нейронную сеть.
Разумеется, это всё упрощения и обобщения, но благодаря им мы можем описать простую
нейронную сеть:
И описать её формализовано с помощью графа:
Тут требуются некоторые пояснения. Кружки — это нейроны, а линии — это связи между ними,
и, чтобы не усложнять на этом этапе, взаимосвязи представляют собой прямое передвижение информации слева направо. Первый нейрон в данный момент активен и выделен серым. Также мы присвоили ему число (1 — если он работает, 0 — если нет). Числа между нейронами показывают вес связи.
Графы выше показывают момент времени сети, для более точного отображения, нужно разделить его на временные отрезки:

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

Neural Net 001

Neural Net 002Подведем промежуточный итогКак обучать нейронную сеть?алгоритмы обучения

И что это изменит?

активного нейрона

Neural Net 003повторов

Neural Net 004Так что же такое классное мы только что сделали?

  • Механизм хранения изученных весов не предусмотрен, поэтому данная нейронная сеть забудет всё, что знает. При обновлении или повторном запуске кода нужно не менее шести успешных повторов, чтобы сеть полностью обучилась, если вы считаете, что человек или машина будут нажимать на кнопки в случайном порядке… Это займет какое-то время.
  • Биологические сети для обучения важным вещам имеют скорость обучения 1, поэтому нужен будет только один успешный повтор.
  • Существует алгоритм обучения, который очень напоминает биологические нейроны, у него броское название: правило widroff-hoff, или обучение widroff-hoff.
  • Пороги нейронов (1 в нашем примере) и эффекты переобучения (при большом количестве повторов результат будет больше 1) не учитываются, но они очень важны в природе и отвечают за большие и сложные блоки поведенческих реакций. Как и отрицательные веса.

Многослойный перцептрон с сигмоидной функцией активации (итерация модели 2)

слойдругого

Пример 1: распознавание паттерна лестницы
  1. Построим модель, которая срабатывает при распознавании «левых лестниц»,
  2. Построим модель, которая срабатывает при распознавании «правых лестниц»,
  3. Добавим базовым моделям оценку, чтобы конечная сигмоида срабатывала только если оба значения (, ) велики

Другой вариант

  1. Построим модель, срабатывающую, когда нижний ряд тёмный,
  2. Построим модель, срабатывающую, когда верхний левый пиксель тёмный и верхний правый пиксель светлый,
  3. Построим модель, срабатывающую, когда верхний левый пиксель светлый и верхний правый пиксель тёмный,
  4. Добавим базовые модели так, что конечная сигмоидная функция срабатывала только когда и велики, или когда и велики. (Заметьте, что и не могут быть большими одновременно.)
Пример 2: распознать лестницы светлого оттенка
  1. Построим модели, срабатывающие при «затенённом нижнем ряде», «затенённом x1 и белом x2», «затенённом x2 и белом x1», , и
  2. Построим модели, срабатывающие при «тёмном нижнем ряде», «тёмном x1 и белом x2», «тёмном x2 и белом x», , и
  3. Соединим модели таким образом, чтобы «тёмные» идентификаторы вычитались из «затенённых» идентификаторов перед сжиманием результата сигмоидой

Одноодин выходной слойдвутри

Пример 2

Предположим что у Вы являетесь психологом в учебном заведении и перед Вами поставили цель: выявить эмоциональное состояние учащихся. Казалось бы спросить «Какое у тебя сегодня настроение?» дело совершенно плёвое, но когда это необходимо сделать 30 000 раз каждый день(именно столько учащихся Вам необходимо опросить) — это уже становится проблемой.

Предположим что в учебном заведении есть закрытая социальная сеть, в которой учащиеся ежедневно оставляют более 500 000 сообщений. Эта информация строго конфиденциальная, но Вы имеете к ней доступ, так как подписали договор о не разглашении. Отлично! Теперь у нас есть несколько миллионов сообщений вместо 30 000 учеников! 

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

Перед нами стоит следующая задача:  Построить ИИС которая будет определять эмоциональное состояние человека по сообщению.

Входными данными является сообщение пользователя.

Выходными данными является строка: «хорошее» — если эмоциональный окрас сообщения позитивный, «плохое» — если эмоциональный окрас сообщения агрессивный или депрессивный.

Пример работы:

Сообщение «Завтра будет просто ужасный день!»

Результат «плохое»

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

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

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

В заключение хочу сказать что JavaScript безусловно не является языком наиболее подходящим для построения ИНС. Вы наверно уже заметили как медленно проходит процесс обучения. Это вызвано тем что NodeJS, как и JavaScript является однопоточным и не раскрывает все вычислительные возможности процессора. Разработчики brain.js обещают улучшить производительность с выходом 2-й версии. Хотя и сейчас есть возможность использовать мощность видеопроцессора при помощи WebGL, но работу через GPU в brain.js поддерживают только neural networks. Для дальнейшего изучения рекомендую посмотреть в сторону Python.

  1. Основы ИНС

  2. https://habr.com/company/epam_systems/blog/317050/
  3. https://habr.com/post/312450/
  4. https://habr.com/post/40137/
  5. https://habr.com/post/398645/
  6. https://tproger.ru/translations/javascript-brain-neural-framework/
  7. https://itnan.ru/post.php?c=1&p=304414
  8. https://habr.com/post/183462/
  9. https://medium.com/openmindonline/emotion-detection-with-javascript-neural-networks-5a408f84eb75