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


Привет всем читателям Habrahabr, в этой статье я хочу поделиться с Вами моим опытом в изучении нейронных сетей и, как следствие, их реализации, с помощью языка программирования Java, на платформе Android. Мое знакомство с нейронными сетями произошло, когда вышло приложение Prisma. Оно обрабатывает любую фотографию, с помощью нейронных сетей, и воспроизводит ее с нуля, используя выбранный стиль. Заинтересовавшись этим, я бросился искать статьи и «туториалы», в первую очередь, на Хабре. И к моему великому удивлению, я не нашел ни одну статью, которая четко и поэтапно расписывала алгоритм работы нейронных сетей. Информация была разрознена и в ней отсутствовали ключевые моменты. Также, большинство авторов бросается показывать код на том или ином языке программирования, не прибегая к детальным объяснениям.
Поэтому сейчас, когда я достаточно хорошо освоил нейронные сети и нашел огромное количество информации с разных иностранных порталов, я хотел бы поделиться этим с людьми в серии публикаций, где я соберу всю информацию, которая потребуется вам, если вы только начинаете знакомство с нейронными сетями. В этой статье, я не буду делать сильный акцент на Java и буду объяснять все на примерах, чтобы вы сами смогли перенести это на любой, нужный вам язык программирования. В последующих статьях, я расскажу о своем приложении, написанном под андроид, которое предсказывает движение акций или валюты. Иными словами, всех желающих окунуться в мир нейронных сетей и жаждущих простого и доступного изложения информации или просто тех, кто что-то не понял и хочет подтянуть, добро пожаловать под кат. Первым и самым важным моим открытием был плейлист американского программиста Джеффа Хитона, в котором он подробно и наглядно разбирает принципы работы нейронных сетей и их классификации. После просмотра этого плейлиста, я решил создать свою нейронную сеть, начав с самого простого примера. Вам наверняка известно, что когда ты только начинаешь учить новый язык, первой твоей программой будет Hello World. Это своего рода традиция. В мире машинного обучения тоже есть свой Hello world и это нейросеть решающая проблему исключающего или(XOR). Таблица исключающего или выглядит следующим образом:

abc
000
011
101
110

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

Что такое нейронная сеть?

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

Частные производные

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

Разберем необходимость частных производных на примере.

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

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

Ошибка нескольких детей может уменьшиться, но общая ошибка все еще увеличивается.

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

Для чего нужны нейронные сети?

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

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

Предсказание

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

Распознавание

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

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

Преимущества и недостатки нейросети

К преимуществам искусственной нейронной сети относят:

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

Что такое нейрон?


Нейрон — это вычислительная единица, которая получает информацию, производит над ней простые вычисления и передает ее дальше. Они делятся на три основных типа: входной (синий), скрытый (красный) и выходной (зеленый). Также есть нейрон смещения и контекстный нейрон о которых мы поговорим в следующей статье. В том случае, когда нейросеть состоит из большого количества нейронов, вводят термин слоя. Соответственно, есть входной слой, который получает информацию, n скрытых слоев (обычно их не больше 3), которые ее обрабатывают и выходной слой, который выводит результат. У каждого из нейронов есть 2 основных параметра: входные данные (input data) и выходные данные (output data). В случае входного нейрона: input=output. В остальных, в поле input попадает суммарная информация всех нейронов с предыдущего слоя, после чего, она нормализуется, с помощью функции активации (пока что просто представим ее f(x)) и попадает в поле output.


Важно помнить

, что нейроны оперируют числами в диапазоне [0,1] или [-1,1]. А как же, вы спросите, тогда обрабатывать числа, которые выходят из данного диапазона? На данном этапе, самый простой ответ — это разделить 1 на это число. Этот процесс называется нормализацией, и он очень часто используется в нейронных сетях. Подробнее об этом чуть позже.

Переходим к обучению

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

  • x — вход слоя,
  • z — выход,
  • df — производная функции активации.

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

Что такое синапс?


Синапс это связь между двумя нейронами. У синапсов есть 1 параметр — вес. Благодаря ему, входная информация изменяется, когда передается от одного нейрона к другому. Допустим, есть 3 нейрона, которые передают информацию следующему. Тогда у нас есть 3 веса, соответствующие каждому из этих нейронов. У того нейрона, у которого вес будет больше, та информация и будет доминирующей в следующем нейроне (пример — смешение цветов). На самом деле, совокупность весов нейронной сети или матрица весов — это своеобразный мозг всей системы. Именно благодаря этим весам, входная информация обрабатывается и превращается в результат.
Важно помнить

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

История

Какова же история развития нейронных сетей в науке и технике? Она берет свое начало с появлением первых компьютеров или ЭВМ (электронно-вычислительная машина) как их называли в те времена. Так еще в конце 1940-х годов некто Дональд Хебб разработал механизм нейронной сети, чем заложил правила обучения ЭВМ, этих «протокомпьютеров».

Дальнейшая хронология событий была следующей:

  • В 1954 году происходит первое практическое использование нейронных сетей в работе ЭВМ.
  • В 1958 году Франком Розенблатом разработан алгоритм распознавания образов и математическая аннотация к нему.
  • В 1960-х годах интерес к разработке нейронных сетей несколько угас из-за слабых мощностей компьютеров того времени.
  • И снова возродился уже в 1980-х годах, именно в этот период появляется система с механизмом обратной связи, разрабатываются алгоритмы самообучения.
  • К 2000 году мощности компьютеров выросли настолько, что смогли воплотить самые смелые мечты ученых прошлого. В это время появляются программы распознавания голоса, компьютерного зрения и многое другое.
  • Как работает нейронная сеть?


    В данном примере изображена часть нейронной сети, где буквами I обозначены входные нейроны, буквой H — скрытый нейрон, а буквой w — веса. Из формулы видно, что входная информация — это сумма всех входных данных, умноженных на соответствующие им веса. Тогда дадим на вход 1 и 0. Пусть w1=0.4 и w2 = 0.7 Входные данные нейрона Н1 будут следующими: 1*0.4+0*0.7=0.4. Теперь когда у нас есть входные данные, мы можем получить выходные данные, подставив входное значение в функцию активации (подробнее о ней далее). Теперь, когда у нас есть выходные данные, мы передаем их дальше. И так, мы повторяем для всех слоев, пока не дойдем до выходного нейрона. Запустив такую сеть в первый раз мы увидим, что ответ далек от правильно, потому что сеть не натренирована. Чтобы улучшить результаты мы будем ее тренировать. Но прежде чем узнать как это делать, давайте введем несколько терминов и свойств нейронной сети.

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

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


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

    Сигмоид


    Это самая распространенная функция активации, ее диапазон значений [0,1]. Именно на ней показано большинство примеров в сети, также ее иногда называют логистической функцией. Соответственно, если в вашем случае присутствуют отрицательные значения (например, акции могут идти не только вверх, но и вниз), то вам понадобиться функция которая захватывает и отрицательные значения.

    Гиперболический тангенс


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

    Русские Блоги

    С появлением новых архитектур нейронных сетей становится все труднее записать все нейронные сети. Чтобы понять все сети, на которые ссылаются эти аббревиатуры (DCIGN, IiLSTM, DCGAN и т. Д.), Предполагается, что невозможно начать с самого начала.

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

    Очевидно, что эти графы узлов не могут показать внутренний рабочий процесс каждой модели. Например, графики узлов вариационного автоэнкодера (VAE) и автоэнкодера (AE) выглядят одинаково, но процесс их обучения фактически совершенно различен, а сценарии использования обученной модели более различны. VAE — это генератор, используемый для вставки шума в образец. AE просто отображает входные данные, которые они получают, к самому последнему обучающему образцу в своей «памяти»! Эта статья не раскрывает подробно, как каждая отдельная архитектура работает внутри.

    Хотя большинство сокращений были общепринятыми, существуют также некоторые конфликты. Например, RNN обычно относится к рекуррентным нейронным сетям, а иногда и к рекурсивным нейронным сетям, и даже во многих местах просто относится к различным рекуррентным архитектурам (включая LSTM, GRU и даже двунаправленные варианты). AE — это то же самое, VAE и DAE просто называются AE. Кроме того, сокращение той же модели также имеет проблему, заключающуюся в том, что количество суффиксов N отличается. Эту же модель можно назвать сверточной нейронной сетью или сверточной сетью, соответствующей аббревиатурой становится CNN или CN.

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

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

    Персептрон (P слева)иНейронная сеть с прямой связью (FF или FFNN справа)Очень интуитивно понятные, они вводят информацию из внешнего интерфейса, а затем выводят из внутреннего интерфейса. Нейронные сети часто описываются как имеющие слои (входной, скрытый или выходной), где каждый слой состоит из параллельных блоков. Обычно один и тот же слой не имеет связей, и два соседних слоя полностью связаны (каждый нейрон в каждом слое с каждым нейроном в другом слое). Простейшая практическая сеть имеет два входных блока и один выходной блок, который можно использовать для построения логической модели (используется для определения того, стоит или нет). FFNN обычно обучается методом обратного распространения, а набор данных состоит из парных входных и выходных результатов (это называется контролируемым обучением). Мы просто вводим данные и позволяем сети заполнять вывод. Ошибки обратного распространения обычно представляют собой некоторую вариацию разницы между выходом заполнения и фактическим выходом (таким как MSE или просто линейная разница). Учитывая, что в сети достаточно скрытых нейронов, теоретически возможно всегда моделировать отношения между входом и выходом. На самом деле их приложения очень ограничены, и они обычно объединяются с другими сетями, образуя новые сети.

    Радиальная базовая функция (RBF) СетьЭто сеть FFNN с радиальными базовыми функциями в качестве функций активации. Однако RBFNN имеет свой вариант использования, отличный от FFNN (большинство FFNN с другими функциями активации не имеют своих собственных имен из-за проблемы времени изобретения).

    Сеть Хопфилда (HN)Каждый нейрон связан с другими нейронами, его структура напоминает пластину полностью запутанных итальянских панелей. Каждый узел вводится перед тренировкой, а затем скрывается и выводится во время тренировки. Сеть обучается путем установки значений нейронов в соответствии с желаемым шаблоном, и после этого веса остаются неизменными. После обучения одному или нескольким шаблонам сеть всегда будет сходиться к одному из шаблонов обучения, поскольку в этом состоянии сеть стабильна. Следует отметить, что HN не всегда согласен с идеальным состоянием. Одной из причин стабильности сети является то, что общая «энергия» или «температура» постепенно уменьшается во время тренировки. Каждый нейрон имеет порог активации, который меняется в зависимости от температуры. Как только сумма входов будет превышена, это приведет к тому, что нейрон перейдет в одно из двух состояний (обычно -1 или 1, иногда 0 или 1). Обновление сети может быть сделано синхронно или по очереди. Последнее является более распространенным. Когда сеть обновляется по очереди, генерируется справедливая случайная последовательность, и каждая единица обновляется в установленном порядке. Поэтому, когда каждый модуль обновляется и больше не изменяется, вы можете судить, что сеть стабильна (больше не сходится). Эти сети также называют ассоциативными воспоминаниями, потому что они сходятся к состоянию, наиболее сходному с входным: когда люди видят половину таблицы, мы представляем другую половину таблицы. Если входной сигнал наполовину шумный и половина таблицы, HN будет Сошлись в таблицу.

    Марковская цепь (MC или цепочка Маркова с дискретным временем, DTMC)Это предшественник BM и HN. Это можно понять следующим образом: из моего текущего узла вероятность того, что я попаду на любой из соседних узлов, не знает, что означает, что выбранный вами узел полностью зависит от текущего узла, я не имею никакого отношения к узлу в прошлом , Хотя это не настоящая нейронная сеть, она похожа на нейронную сеть и формирует теоретическую основу BM и HNs. Как и BM, RBM и HN, MC не всегда считается нейронной сетью. Кроме того, цепи Маркова не всегда полностью связны.

    Машина Больцмана (БМ)Как и HN, за исключением того, что только некоторые нейроны помечены как входные нейроны, а другие остаются «скрытыми». Входные нейроны становятся выходными нейронами в конце полного обновления сети. Он начинается со случайных весов и обучает модель посредством обратного распространения или контрастной дивергенции (цепочка Маркова, используемая для определения градиента между двумя выигрышами в информации). По сравнению с HN, большинство нейронов BM имеют бинарный паттерн активации. С тех пор, как обучено MC, BM — случайная сеть. Процесс обучения и работы BM очень похож на HN: входные нейроны установлены на определенные значения зажима, тем самым освобождая сеть. Хотя вы можете получить любое значение, освободив узел, это приводит к нескольким итерациям между входным и скрытым слоями. Активация контролируется глобальным порогом. Этот процесс постепенного снижения глобальных ошибок приводит к тому, что сеть в конечном итоге достигает равновесия.

    Ограниченная машина Больцмана (RBM)Очень похоже на БМ и ХН. Самое большое различие между BM и RBM состоит в том, что RBM имеет лучшее удобство использования, поскольку он более ограничен. RBM не соединяет каждый нейрон с каждым другим нейроном, а только соединяет каждую группу нейронов с каждой другой группой, поэтому никакой входной нейрон не связан напрямую с другими входными нейронами, и не будет никакого скрытого слоя Подключитесь напрямую к скрытому слою. RBM можно обучать, как FFNN, вместо распространения данных вперед и затем назад.

    Автоэнкодеры (AE)Подобно нейронной сети с прямой связью (FFNN). Вместо того, чтобы говорить, что это совершенно другая структура сети, лучше сказать, что это другое применение нейронных сетей с прямой связью. Основная идея автоэнкодера заключается в следующем: автоматически кодировать информацию (например, сжатие, а не шифрование). Отсюда и название. Вся сеть похожа на воронку по форме: в ней всегда меньше единиц скрытого слоя, чем входной и выходной слои. Автоэнкодеры всегда симметричны относительно центрального слоя (то, является ли центральный слой одним или двумя, зависит от количества слоев в сети: если он нечетный, он симметричен относительно среднего слоя; если он четный, он симметричен относительно двух средних слоев). Самый маленький скрытый слой всегда находится в центральном слое, где информация является наиболее сжатой (называемой точкой блокировки сети). От входного уровня до центрального уровня называется часть кодирования, от центрального уровня до выходного уровня называется часть декодирования, а центральный уровень называется кодом. Вы можете использовать алгоритм обратного распространения для обучения автокодера, ввода данных в сеть и установки ошибки как разности между входными данными и выходными данными сети. Вес автоматического кодера также является симметричным, то есть вес кодирования и вес декодирования одинаковы.

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

    Вариационные автоэнкодеры (Variational autoencoders, VAE)Он имеет ту же структуру сети, что и автоэнкодер, но модель изучает кое-что еще: приблизительное распределение вероятностей входных выборок. Эта точка больше похожа на машину Больцмана (BM) и ограниченную машину Больцмана (RBM). Тем не менее, они полагаются на байесовскую математику, которая включает в себя вероятностный вывод и независимость, и методы репараметризации для получения различных представлений. Вероятностный вывод и независимость интуитивны, но они опираются на сложные математические знания. Основной принцип заключается в следующем: учитывать влияние. Если что-то происходит в одном месте, а другое происходит в другом месте, они не обязательно связаны между собой. Если они не релевантны, то это следует учитывать в процессе обратного распространения ошибок. Этот метод полезен, поскольку нейронная сеть представляет собой большой граф (до некоторой степени), поэтому при входе в более глубокий сетевой уровень вы можете исключить влияние некоторых узлов на другие узлы.

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

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

    Сверточные нейронные сети (CNN, или Deep сверточные нейронные сети, DCNN)Это полностью отличается от большинства других сетей. Они в основном используются для обработки изображений, но могут также использоваться для других типов ввода, таких как аудио. Типичное применение сверточных нейронных сетей: ввод изображений в сеть, и сеть будет классифицировать изображения. Например, если вы введете изображение кота, будет выведено «кот», а если вы введете изображение собаки, то вы увидите «собаку». Сверточные нейронные сети, как правило, используют один входной «сканер» вместо одновременного анализа всех обучающих данных. Например, для ввода изображения размером 200 x 200 пикселей вам не нужно использовать входной слой с 40000 узлами. Вместо этого вам нужно всего лишь создать слой сканирования, этот входной слой имеет только 20 x 20 узлов, и вы можете ввести первые 20 x 20 пикселей изображения (обычно начиная с верхнего левого угла изображения). Как только вы передадите эти данные 20 x 20 пикселей (вероятно, обученные им), вы можете ввести следующие 20 x 20 пикселей: переместите «сканер» на один пиксель вправо. Будьте осторожны, чтобы не переместить более 20 пикселей (или другой ширины «сканера»). Вместо того, чтобы разбивать изображение на 20 х 20 частей, вы немного перемещаете «сканер». Эти входные данные затем передаются на сверточный уровень вместо нормального уровня. Узлы сверточного слоя не полностью связаны. Каждый узел связан только со своими соседними ячейками (насколько близко он зависит от реализации приложения, но обычно не больше, чем несколько). Эти сверточные слои будут постепенно уменьшаться по мере углубления сети. Обычно количество сверточных слоев является входным фактором. (Таким образом, если ввод 20, следующий сверточный слой может быть 10, а затем 5). Полномочия двух часто используются, потому что они делятся на: 32,16,8,4,2,1. В дополнение к сверточному слою существуют также слои объединения объектов. Объединение в пул — это метод фильтрации деталей: наиболее распространенным методом объединения является максимальное объединение. Например, используя 2 x 2 пикселя, возьмите наибольшее из четырех пикселей. Чтобы применить сверточную нейронную сеть к аудио, вводите звуковые волны длины клипа по частям. Сверточные приложения нейронных сетей в реальном мире обычно добавляют в конце нейронную сеть с прямой связью (FFNN) для дальнейшей обработки данных, что позволяет выполнять нелинейное сопоставление признаков. Эти сети называются DCNN, но эти имена и сокращения часто используются взаимозаменяемо.

    Деконволюционные сети (DN)Также называется инверсной графической сетью (IGN). Это обратная сверточная нейронная сеть. Представьте себе, что вы вводите слово «кошка» в нейронную сеть и обучаете сетевую модель, сравнивая разницу между выходом сети и изображением реальной кошки, в результате получая изображение, похожее на кошку. Деконволюционные нейронные сети могут использоваться в сочетании с нейронными сетями с прямой связью, такими как обычные сверточные нейронные сети, но это может включать новые сокращения. Они могут быть глубоко деконволюционными нейронными сетями, но вы можете быть склонны: когда вы добавляете нейронную сеть с прямой связью до или после деконволюционной нейронной сети, они могут быть новыми сетевыми структурами и им должны быть присвоены новые имена. Стоит отметить, что в реальных приложениях вы не можете напрямую вводить текст в сеть, а вместо этого вводить двоичный вектор классификации. Например, <0,1> — это кошка, <1,0> — это собака, а <1,1> — это кошка и собака. В сверточной нейронной сети существует уровень пула, который обычно заменяется аналогичной обратной операцией, обычно смещенной интерполяцией или экстраполяцией (например, если уровень пула использует максимальный пул, когда выполняется обратная операция, (Другие нижние новые данные могут быть сгенерированы для заполнения)

    Глубоко сверточные инверсные графические сети (DCIGN)Это название несколько вводит в заблуждение, потому что на самом деле они являются вариационными автоэнкодерами (VAE), за исключением того, что в кодере и декодере соответственно есть сверточные нейронные сети (CNN) и деконволюционные нейронные сети (DNN). Эти сети пытаются вероятностно моделировать «особенности» во время процесса кодирования. Таким образом, вы можете позволить сети научиться генерировать фотографию кошки и собаки, если вы используете только кошку и собаку. Точно так же вы можете ввести фотографию кошки.Если рядом с кошкой есть раздражающая собака соседа, вы можете попросить сеть удалить собаку. Эксперименты показывают, что эти сети также можно использовать для обучения выполнению сложных преобразований на изображениях, таких как изменение источника света 3D-объектов или выполнение операций вращения на объектах. Эти сети обычно обучаются с обратным распространением.

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

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

    Долгосрочная / кратковременная память (LSTM)Вводя ворота и четко определенную ячейку памяти, мы пытаемся преодолеть проблему исчезновения градиента или взрыва градиента. Эта идея была в основном вдохновлена ​​схемотехникой, а не биологией. Каждый нейрон имеет блок памяти и имеет трехэлементную структуру: вход, выход и забытие. Функция этих структур шлюзов заключается в защите информации путем запрета или разрешения потока информации. Структура входного вентиля определяет, сколько информации из предыдущего слоя хранится в текущем блоке памяти. Структура выходного шлюза предполагает работу на другом конце, решая, сколько информации можно узнать на этом уровне. Забывать о структуре ворот на первый взгляд странно, но иногда необходимо забыть:

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

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

    Закрытые рекуррентные единицы (ГРУ)Это вариант сетей долгосрочной и краткосрочной памяти. Разница в том, что нет входного шлюза, выходного шлюза, забываемого шлюза, у него только один вентиль обновления. Шлюз обновления определяет, сколько информации сохраняется из предыдущего состояния и сколько информации сохраняется с предыдущего уровня. Этот вентиль сброса работает так же, как вентиль забывания LSTM, но его положение немного отличается. Он всегда испускает все состояния, но нет выходных вентилей. В большинстве случаев они очень похожи на LSTM по функциям, самое большое отличие состоит в том, что GRU немного быстрее и прост в запуске (но хуже по способности выражения). На практике они имеют тенденцию компенсировать друг друга, потому что, когда вам нужна большая сеть для получения большей выразительной мощности, они часто сводят на нет преимущество в производительности. ГРУ может быть лучше, чем LSTM без необходимости в дополнительной выразительности.

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

    Двунаправленные рекуррентные нейронные сети, двунаправленные сети с долговременной и кратковременной памятью, двунаправленные рекуррентные нейронные сети (BiRNN; двунаправленные сети с долговременной и краткосрочной памятью, BiLSTM; двунаправленные рекуррентные блоки с двунаправленным доступом, BiGRU) не показаны в таблице, поскольку они Это выглядит так же, как соответствующая односторонняя сеть. Разница в том, что эти сети связаны не только с прошлым, но и с будущим. Например, для прогнозирования слова «рыба» используется односторонняя сеть долгосрочной и краткосрочной памяти. Процесс обучения следующий: вводите слово «рыба» буква за буквой, и здесь циклическое соединение запоминает последнее значение во времени. Чтобы предоставить будущую информацию, сеть двусторонней кратковременной памяти введет следующую букву в обратном канале. Этот метод обучает сеть заполнять пробелы вместо прогнозирования будущей информации, например, при обработке изображений он не расширяет границы изображения, но может заполнить пробел в изображении.

    Глубокие остаточные сети (DRN)Это очень глубокая нейронная сеть с прямой связью.В дополнение к соединениям между соседними слоями, она может передавать входные данные от одного слоя к следующим нескольким слоям (обычно от 2 до 5 слоев). Глубокая остаточная сеть не отображает некоторые входы (например, через 5-уровневую сеть) на выходы, но учится сопоставлять некоторые входы с некоторыми выходами + входами. По сути, он добавляет функцию идентификации, которая принимает старый ввод в качестве нового ввода в следующем слое. Результаты показывают, что при достижении 150 уровней эти сети очень эффективны для изучения шаблонов, что намного больше, чем в обычных 2-5 слоях. Однако оказывается, что эти сети по сути не являются рекуррентными нейронными сетями (RNN), построенными на определенной временной основе, и их всегда сравнивают с сетями долгосрочной кратковременной памяти (LSTM) без структур шлюзов.

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

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

    Жидкие автоматы (LSM)Это очень похоже на Echo State Network (ESN). Реальная разница заключается в том, что машина состояния жидкости представляет собой своего рода импульсную нейронную сеть: функция активации сигмовидной кишки заменяется пороговой функцией, а каждый нейрон является накопительной ячейкой памяти. Таким образом, когда нейрон обновляется, его ценность заключается не в накоплении соседних нейронов, а в его собственном накоплении. Как только порог достигнут, он передает свою энергию другим нейронам. Это создает импульсный паттерн: ничего не происходит, пока порог не будет достигнут внезапно.

    Опорные векторные машины (SVM)Нашел лучшее решение проблемы классификации. Традиционные SVM обычно имеют дело с линейно разделяемыми данными. Например, обнаружение, какая картина — Гарфилд, а какая — Снупи, но не другие результаты. Во время обучения машину опорных векторов можно представить как отрисовку всех точек данных (Гарфилд и Снупи) на (двумерном) графике, а затем выяснение того, как нарисовать прямую линию для различения этих точек данных. Эта линия делит данные на две части, все Гарфилд на одной стороне линии и Снупи на другой. Лучшая разделительная линия — максимизировать интервал между точками с обеих сторон и линией. Когда новые данные должны быть классифицированы, мы нарисуем эту новую точку данных на графике, а затем просто посмотрим на ту сторону, где она принадлежит прямой линии. Используя методы ядра, они могут быть обучены для классификации n-мерных данных. Это требует рисования точек на 3D-карте, и тогда вы сможете различить Снупи, Гарфилда и Саймона, или даже больше персонажей мультфильмов. Машины опорных векторов не всегда считаются нейронными сетями.

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

    Эпоха

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


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

    Ошибка

    Ошибка — это процентная величина, отражающая расхождение между ожидаемым и полученным ответами. Ошибка формируется каждую эпоху и должна идти на спад. Если этого не происходит, значит, вы что-то делаете не так. Ошибку можно вычислить разными путями, но мы рассмотрим лишь три основных способа: Mean Squared Error (далее MSE), Root MSE и Arctan. Здесь нет какого-либо ограничения на использование, как в функции активации, и вы вольны выбрать любой метод, который будет приносить вам наилучший результат. Стоит лишь учитывать, что каждый метод считает ошибки по разному. У Arctan, ошибка, почти всегда, будет больше, так как он работает по принципу: чем больше разница, тем больше ошибка. У Root MSE будет наименьшая ошибка, поэтому, чаще всего, используют MSE, которая сохраняет баланс в вычислении ошибки.
    MSE

    Root MSE

    Arctan


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

    Рейтинг
    ( 2 оценки, среднее 4.5 из 5 )
    Понравилась статья? Поделиться с друзьями:
    Для любых предложений по сайту: [email protected]