Мелкие нейронные сети

Когда мы слышим название «Нейронная сеть», мы чувствуем, что она состоит из множества и многих скрытых слоев, но есть тип нейронной сети с небольшим количеством скрытых слоев. Мелкие нейронные сети состоят всего из 1 или 2 скрытых слоев. Понимание мелкой нейронной сети дает нам представление о том, что именно происходит внутри глубокой нейронной сети. В этом посте давайте посмотрим, что такое неглубокая нейронная сеть и как она работает в математическом контексте. На рисунке ниже показана неглубокая нейронная сеть с 1 скрытым слоем, 1 входным слоем и 1 выходным слоем.

Нейрон

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

  1. Первая часть вычисляет выходной Z, используя входные данные и веса.
  2. Вторая часть выполняет активацию на Z, чтобы выдать окончательный результат A нейрона.

Скрытый слой

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

В приведенных выше уравнениях

  1. Верхний индекс [i] обозначает номер слоя, а нижний индекс j обозначает номер нейрона в конкретном слой.
  2. X - входной вектор, состоящий из 3-х функций.
  3. W [i] j - вес, связанный с нейроном j, присутствующим в слое я.
  4. b [i] j - смещение, связанное с нейроном j, присутствующим в слое я.
  5. Z [i] j - промежуточный результат, связанный с нейроном j, присутствующим в слое я.
  6. A [i] j - это окончательный результат, связанный с нейроном j, присутствующим в слое я.
  7. Сигма - это функция активации сигмовидной кишки. Математически это определяется как:

Как мы видим, приведенные выше 4 уравнения кажутся избыточными. Поэтому мы векторизуем их как:

  1. Первое уравнение вычисляет все промежуточные выходы Z путем однократного матричного умножения.
  2. Второе уравнение вычисляет все активации A путем однократного матричного умножения.

Мелкая нейронная сеть

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

  1. Первое уравнение вычисляет промежуточный выходной Z [1] первого скрытого слоя.
  2. Второе уравнение вычисляет окончательный результат A [1] первого скрытого слоя.
  3. Третье уравнение вычисляет промежуточный выходной сигнал Z [2] выходного слоя.
  4. Четвертое уравнение вычисляет окончательный результат A [2] выходного слоя, который также является окончательным результатом всей нейронной сети.

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

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

Без функций активации наша неглубокая нейронная сеть может быть представлена ​​как:

Если мы подставим значение Z [1] из уравнения 1 в уравнение 2, мы получим следующие уравнения:

Как видите, выходные данные станут линейной комбинацией новой матрицы веса W, входных данных X и новый Bias b, который означает, что не остается значения нейронов, присутствующих в скрытом слое, и весов, присутствующих в скрытом слое. Поэтому, чтобы внести в сеть нелинейность, мы используем функции активации.

Есть много функций активации, которые можно использовать. К ним относятся сигмоид, Tanh, ReLU, Leaky ReLU и многие другие. Не обязательно использовать определенную функцию активации для всех уровней. Вы можете выбрать функцию активации для определенного слоя и другую активацию для другого слоя и так далее. Подробнее об этих функциях активации вы можете прочитать в этом посте.

Инициализация веса

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

Пусть W1, матрица весов слоя 1 и W2, весовая матрица слоя 2 инициализируется значением 0 или любое другое значение. Теперь, если бы весовые матрицы были одинаковыми, активации нейронов в скрытом слое были бы такими же. Более того, производные активации будут такими же. Следовательно, нейроны в этом скрытом слое будут изменять веса аналогичным образом, то есть не будет иметь значения наличие более 1 нейрона в конкретном скрытом слое. Но мы этого не хотим. Вместо этого мы хотим, чтобы каждый нейрон в скрытом слое был уникальным, имел разный вес и работал как уникальная функция. Поэтому мы произвольно инициализируем веса.

Лучшим методом инициализации является инициализация Xavier's. Математически это определяется как:

В нем указано, что матрица веса W определенного слоя l выбирается случайным образом из нормального распределения с mean μ = 0 и сигма дисперсии² = мультипликативная обратная величина числа нейронов в слое l − 1 . Смещение b всех слоев инициализируется 0.

Градиентный спуск

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

На приведенном выше рисунке прямое распространение (обозначенное черными линиями) используется для вычисления выходных данных для заданного входа X. Обратное распространение (обозначено красными линиями) используется для обновления матриц весов W [1], W [2] и смещения b [1 ], b [2]. Это выполняется путем вычисления производных входных данных на каждом этапе графа вычислений. Мы знаем, что убыток L математически определяется как :

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

Приведенные выше уравнения могут сбивать с толку, но они идеально подходят для градиентного спуска. В уравнении dZ [1], * представляет собой произведение умножения, а σ ' представляет собой производную от сигмы.

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

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

использованная литература

  1. Coursera - Курс глубокого обучения 1
  2. Заметки о глубоком обучении - Инициализация

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