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

Примечание для цитирования: содержание и структура этой статьи основаны на лекциях по глубокому обучению от One-Fourth Labs - Padhai.

Мотивация: нелинейные данные

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

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

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

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

Нейронные сети с прямой связью

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

Простая глубокая нейронная сеть

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

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

Мы знаем, что, используя один сигмовидный нейрон, невозможно получить такую ​​нелинейную границу принятия решения. Независимо от того, как мы меняем параметры сигмовидного нейрона w и b. Теперь измените ситуацию и используйте простую сеть нейронов для решения той же проблемы и посмотрите, как она справится.

У нас есть входные данные x₁ - размер экрана и x₂ - цена, входящая в сеть вместе с смещением b₁ и b₂.

Теперь давайте разберем модельный нейрон за нейроном, чтобы понять. У нас есть наш первый нейрон (крайний левый) в первом слое, который подключен к входам x₁ и x₂ с весами w₁₁ и w₁₂ и смещением b₁. Выход этого нейрона представлен как h₁, который является функцией x₁ и x₂ с параметрами w₁₁ и w₁₂.

Если мы применим сигмовидную функцию к входам x₁ и x₂ с соответствующими весами w₁₁, w₁₂ и смещением b₁, мы получим выходной сигнал h₁, который будет некоторым действительным значением от 0 до 1. Выходной сигмоид для первого нейрона h₁ будет задается следующим уравнением,

Затем у нас есть еще один нейрон в первом слое, который подключен к входам x₁ и x₂ с весами w₁₃ и w₁₄ вместе со смещением b₂. Выходной сигнал второго нейрона представлен как h₂.

Точно так же сигмовидный выход для второго нейрона h₂ будет задан следующим уравнением:

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

Ранее мы могли настраивать только w₁, w₂ и b - параметры одного сигмовидного нейрона. Теперь мы можем настроить 9 параметров (w₁₁, w₁₂, w₁₃, w₁₄, w₂₁, w₂₂, b₁, b₂, b₃), что позволяет обрабатывать очень сложные границы принятия решений. Опробовав различные конфигурации для этих параметров, мы сможем найти оптимальную поверхность, на которой выход для всей средней области (красные точки) равен единице, а во всех остальных случаях равен нулю, что мы и хотим.

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

Общая глубокая нейронная сеть

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

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

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

  1. Предварительная активация, обозначенная буквой «а»: это взвешенная сумма входов плюс смещение.
  2. Активация обозначается буквой «h»: функция активации является сигмовидной функцией.

Давайте понимать сетевой нейрон за нейроном. Рассмотрим первый нейрон, присутствующий в первом скрытом слое. Первый нейрон связан с каждым из входов по весу W ₁.

В дальнейшем я буду использовать этот формат индексов для представления весов и смещений, связанных с конкретным нейроном,

W (Номер слоя) (Номер нейрона в слое) (Введите номер)

b (Номер слоя) (Номер смещения, связанный с этим входом)

W₁₁₁— Вес, связанный с первым нейроном, присутствующим в первом скрытом слое, подключенном к первому входу.

W₁₁₂— Вес, связанный с первым нейроном, присутствующим в первом скрытом слое, подключенном ко второму входу.

b₁₁ - смещение, связанное с первым нейроном, присутствующим в первом скрытом слое.

b₁₂ - Смещение, связанное со вторым нейроном, присутствующим в первом скрытом слое.

….

Здесь W₁ весовая матрица, содержащая отдельные веса, связанные с соответствующими входами. Предварительная активация на каждом уровне представляет собой взвешенную сумму входов с предыдущего уровня плюс смещение. Математическое уравнение для предварительной активации на каждом слое «i» выражается следующим образом:

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

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

Вычисления в глубокой нейронной сети

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

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

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

W (Номер слоя) (Номер нейрона в слое) (Введите номер)

b (Номер слоя) (Номер смещения, связанный с этим входом)

Теперь давайте посмотрим, как мы можем вычислить предварительную активацию для первого нейрона первого слоя a₁₁. Мы знаем, что предварительная активация - это не что иное, как взвешенная сумма входов плюс смещение. Другими словами, это скалярное произведение между первой строкой весовой матрицы W₁ и входной матрицей X плюс смещение b₁₁.

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

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

Где,

W₁ - это матрица, содержащая отдельные веса, связанные с соответствующими входами, а b₁ - это вектор, содержащий (b₁₁, b₁₂, b₁₃,…., B₁₀) индивидуальное смещение, связанное с сигмовидными нейронами.

Активация первого слоя определяется выражением

Где «g» представляет сигмовидную функцию.

Помните, что a₁ - это вектор из 10 значений предварительной активации, здесь мы применяем поэлементную сигмовидную функцию ко всем этим 10 значениям и сохраняем их в другом векторе, представленном как h₁. Точно так же мы можем вычислить значения предварительной активации и активации для 'n' количества скрытых слоев, присутствующих в сети.

Выходной уровень DNN

До сих пор мы говорили о вычислениях в скрытом слое. Теперь поговорим о вычислениях в выходном слое.

Мы можем вычислить предварительную активацию a₃ на выходном слое, взяв скалярное произведение весов, связанных W₃, и активацию предыдущего слоя h₂ плюс вектор смещения b₃.

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

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

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

Функция Softmax

Мы будем использовать функцию Softmax в качестве функции активации выхода. Наиболее часто используемая функция активации в глубоком обучении для задач классификации.

В функции Softmax выход всегда положительный, независимо от входа.

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

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

Функция потерь

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

В общем, количество нейронов в выходном слое будет равно количеству классов. Но в случае бинарной классификации мы можем использовать только один сигмовидный нейрон, который выводит вероятность P (Y = 1), поэтому мы можем получить P (Y = 0) = 1-P (Y = 1). В случае классификации мы будем использовать потерю кросс-энтропии для сравнения предсказанного распределения вероятностей и истинного распределения вероятностей.

Кросс-энтропийная потеря для двоичной классификации определяется выражением

Кросс-энтропийная потеря для мультиклассовой классификации определяется выражением

Алгоритм обучения: нематическая версия

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

Алгоритм обучения выглядит так:

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

Заключение

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

Если вы хотите узнать больше об искусственной нейронной сети, посмотрите Искусственные нейронные сети Абхишека и Пухраджа из Starttechacademy. Также этот курс будет проходить в последней версии Tensorflow 2.0 (бэкэнд Keras). У них также есть очень хороший комплект по машинному обучению (основы + продвинутый уровень) на языках Python и R.

Рекомендуемая литература:





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

А пока мир :)

NK.

Ниранджан Кумар работает стажером в подразделении HSBC Analytics. Он увлечен глубоким обучением и искусственным интеллектом. Он является одним из лучших авторов Medium по теме Искусственный интеллект. Свяжитесь со мной в LinkedIn или подпишитесь на меня в Twitter, чтобы получать новости о предстоящих статьях по глубокому обучению и искусственному интеллекту.

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