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

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

z = wT. x + b, где w — набор весов для линейной обработки (взвешенная сумма входных данных), а b — скаляр.

a (активация) = y^ (наш прогноз) = σ (wT.x +b)

где σ (z) = 1/(1+exp(-z)).

Для простой бинарной классификации мы ищем значения w и b, которые минимизируют нашу ошибку предсказания. (например, мы можем пытаться предсказать, будет ли определенное изображение изображением кошки.)

Эта двухэтапная обработка, взвешенная сумма входных данных (линейный шаг) и сигмоида выходных данных (нелинейный шаг) называется фазой «прямого распространения»нейронной сети. обработка.

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

L (y^-y)= -(y log(y^) + (1-y)(log(1-y^)

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

Функция стоимости (J) представляет собой среднее значение всех индивидуальных потерь по всему вашему тренировочному набору и определяется как…

J (w,b) = -1/m * Σ(i=1:m) (y[i] log(y^[i]) + (1-y[i])(log(1-y^[ я])

Функция стоимости J дает нам ошибку прогнозирования нашей NN для конкретной пары w, b. Это функция, которую мы будем пытаться минимизировать по весам (w) и скаляру b, а также с помощью «Градиентного спуска».

Градиентный спуск – это итеративный процесс, в котором мы спускаемся вниз по самому крутому склону выпуклой функции стоимости (самый высокий градиент), пытаясь достичь глобального оптимума — самой низкой точки в кривая функции стоимости.

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

ш:=ш-α. dJ(w) / d(w) , b := w-α. dJ(b) / d(b), где альфа — наша скорость обучения. (Скорость обучения определяет размер наших шагов, когда мы спускаемся по выпуклой кривой затрат.)

Если мы выполним частные производные относительно w и b, мы получим следующее… (Пожалуйста, обратитесь к любому тексту «Математика для глубокого обучения», чтобы узнать о выводах db, dw, dZ.)

∂J/∂b = 1/m * X (A-Y).T

∂J/∂w = 1/m * Σ(i=1:m)(a[i]-y[i])

Чтобы выполнить шаг прямого распространения для m выборок, мы можем использовать векторизацию numpy и использовать широковещательную передачу python, чтобы избежать использования явного цикла for, который требуется, чтобы избежать вычислительных затрат цикла for. Это сила numpy, позволяющая нам эффективно выполнять матричные операции. В numpy это делается с помощью функции np.dot(x,y).

Z = np.dot(w.T, X) +b, затем напишите сигмовидную функцию и достигните A.

A = σ(Z)

dZ = A-Y (это следует из правила цепной производной)

dw = 1/m * np.dot(X, (A-Y).T)

дБ = 1/м * np.sum(A-Y)

w:=w-α. dJ(w) / d(w)

b:= w-α. dJ(b) / d(b)

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

Для оптимизации мы можем определить функцию, которая будет делать следующее…

для [количество итераций]

  • прямое распространение (вычисление A и получение dw и db с помощью специальной функции «распространения»)
  • обратное распространение — обновить w и b, используя dw и db

После оптимизации (n итераций функции оптимизации) мы будем иметь оптимальные значения w и b для минимизации стоимости модели.

Затем, наконец, с помощью функции прогнозирования мы можем вычислить наш прогноз y^, с

A = sigmoid (np.dot (wT, X) + b) и, например, если результат >0,5, мы можем предсказать «ДА».

На этом описание построения простой модели глубокого обучения для бинарной классификации завершено.