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

Вдохновение для ИНС

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

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

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

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

Архитектура ИНС

Архитектура ИНС довольно проста. Одной из самых простых ИНС является Однослойный персептрон, в котором у нас есть несколько входов, которые подключены к одному выходному узлу без каких-либо скрытых слоев. Проблема с этой моделью заключалась в том, что она не могла выполнять логические операции XOR(исключающее ИЛИ) и XAND(исключающее И).

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

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

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

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

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

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

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

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

Предубеждения. Предубеждения — это термины, которые мы вводим, чтобы сместить функцию активации в нужном нам направлении. Мы можем понимать Bias как точку пересечения уравнения Y =MX + B. Поскольку точка пересечения B в этом уравнении линии может сдвигать линию вверх или вниз по координате XY. Аналогичным образом Bias можно использовать для смещения нашей функции активации.

А теперь давайте пристегнемся к МАТЕМАТИКЕ

Предположим, что в созданной нами сети входными значениями являются I1, I2, I3, I4, I5. Пусть узлы в нашем первом скрытом слое будут N1, N2, N3, N4, N5, N6, N7. Каждая из связей между входным и первым скрытым слоями будет иметь некоторый вес.

Поскольку есть 35 соединений, будет 35 весов. Давайте просто возьмем первый узел N1, чтобы мы могли легко показать расчеты. Веса соединений от входов к N1 равны W1, W2, W3, W4, W5. Пусть смещение будет B1, и мы будем использовать функцию активации ReLU.

Что происходит в узле N1, так это то, что он суммирует входные данные и веса, поэтому Summation(Product(Wn, In)), а затем этот вывод передается нашей функции активации. И затем производится окончательный вывод этого узла, который является Суммированием вывода нашей функции активации F(x) и смещения B1.

Эта операция выполняется для всех узлов в скрытом и выходном слое. И из этой серии операций мы получаем наш окончательный результат. Существует ряд методов инициализации весов и их последующей настройки в MLP, например, с помощью алгоритма Random Start Hill Climbing.

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

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

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

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

Заключительные комментарии

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

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

Дайте мне знать, если у вас возникнут вопросы или вы хотите, чтобы я что-то подробно объяснил. МОЖЕТ НАЧАТЬ ОБУЧЕНИЕ….

Профиль автора

Правин Кумар Сингх В настоящее время я работаю менеджером по анализу рисков в Standard Chartered Bank. Имею 5-летний опыт работы в области анализа кредитных рисков. Мне нравится заниматься машинным обучением и расширенной аналитикой. Помимо работы я люблю путешествовать, играть в игры на своем компьютере и возиться с Arduino.

Первоначально опубликовано на https://www.skilledroots.com 4 августа 2018 г.