Найти тему
Nuances of programming

Нейронная сеть с нуля при помощи numpy

Оглавление

Источник: Nuances of Programming

Здесь можно посмотреть полный код.

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

И прямо сейчас мы погрузимся в создание поверхностной модели нейронной сети. Для начала, загрузим наши данные.

-2

ункция load_data загружает тренировочные и тестовые данные train_catvnoncat.h5 и test_catvnoncat.h5, соответственно. Также она возвращает X и Y для каждого из набора данных, где метки классов находятся в Y, а свойства — в X. Форма изображений имеет формат (номер образца, высота в пикселях, ширина в пикселях, измерение). Так как изображения цветные, в формате RGB, они трёхмерные, их размер 64х64, а количество тренировочных образцов составляет 209.

Схема работы
Схема работы

Мы начнём с этих задач:

  • Инициализация параметров, то есть, весов и смещения
  • Создание сигмоидной функции и reLU
  • Создание N-слойной модели сети прямого распространения
  • Создание функции стоимости для модели
  • Создание обратных функций сигмоиды и reLU
  • Получение параметров, передающихся в обратном порядке
  • Обновление весов и смещения
  • Создание предсказывающей функции

Статья разбита на две части. Первая половина задач будет рассмотрена в этой, вторая будет во второй части статьи.

Инициализация параметров

Веса и смещения
Веса и смещения
-5

Функция генерирует случайные числа для W(веса) и b(смещения) и хранит их в словаре. layers_dim — список, хранящий измерение каждого слоя и количество слоёв нейронной сети.

Сигмоида и reLU

-6
-7
-8

Таким образом, Z = W.A +b, где A = g(Z). Тогда, например, для второго слоя: Z2 = W2. A1 +b2 и A2 = g(Z2).

ReLU — это нелинейная функция активации, которая ограничивает Z нулём снизу. На данный момент это самая часто используемая функция активации. Она используется для свёрточных нейронных сетей и глубокого обучения для всех слоёв, помимо выходного. Для выходного же слоя используется сигмоида, так как её область значений (0, 1), что гораздо лучше для задач классификации.

Сигмоида и reLU
Сигмоида и reLU

N-слойная модель сети прямого распространения

-10
-11

Функция L_model_forward принимает на вход два аргумента: входные изображения (упорядоченные) и инициализированные параметры в виде словаря. Возвращает она активацию для следующего слоя и caches — кортеж, содержащий предыдущие линейные и активированные данные. Он поможет нам в построении обратной связи.

Вычисление потерь

Теперь, когда у нас есть предсказания, нам надо проверить их отличие от настоящих значений, то есть потерю или ошибку. В этом случае это не среднеквадратичная ошибка, так как наша функция (сигмоида) нелинейна. Если мы будем возводить ошибки в квадрат, то получим невыпуклую функцию с большим количеством локальных минимумов. Поэтому будем использовать бинарную перекрёстную энтропию(метод логарифмического правдоподобия для оценки погрешности), эта функция стоимости выпуклая, поэтому достичь глобального минимума будет достаточно легко. Вот функция стоимости и код, где m — это количество тренировочных примеров:

 
Перекрёстная энтропия
Перекрёстная энтропия
-13

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

Читайте нас в телеграмме и vk

Перевод статьи Tolulope Adetula: Neural Network From Scratch With Numpy