Обучение одной нейронной сети для логистической регрессии

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

Набор данных:

Набор данных состоит из входных данных X, содержащих m выборок, каждая выборка имеет n признаков, и выходной/целевой переменной y, которая представляет собой вектор-столбец размера (m, 1) со значениями 0 или 1, как показано

У нас есть проблема бинарной классификации, где при заданном X нам нужно предсказать, будет ли y = 1 или 0. Мы сформулируем это в виде следующего уравнения:

ŷ = σ(wX+b)               

где :

ŷ - прогнозируемый вектор в форме (m, 1) для заданного входа X

w - весовой вектор формы (m, 1) и

b - это точка пересечения, которая является скалярным значением

𝜎 — функция активации. Мы используем сигмовидную функцию в качестве нашей функции активации в случае задачи бинарной классификации 0–1, поскольку она легко отображает любой ввод в вывод между 0 и 1.

Функция потерь для логистической регрессии задается (векторизованная форма):

Loss, L = -(y*log(ŷ) + (1-y)*(log(1-ŷ))∕m

где y - вектор истинных меток

и ŷ - прогнозируемые значения, рассчитанные выше.

Наша цель в логистической регрессии — найти оптимальные w и b, которые минимизируют потери L. Или, другими словами, найти такие w и b, что

∂L∕∂w = 0 and ∂L/∂b = 0

Мы будем использовать нейронную сеть с одним нейроном, чтобы найти оптимальные w и b. Структура нейронной сети будет такой, как показано на рисунке:

Шаги прямого распространения:

  1. Инициализируйте весовой вектор w формы (n,1) с 0 (используйте np.zeros).
  2. Инициализировать перехват b = 0.0
  3. Вычислите z = w*x+b .
  4. Вычислите a = 𝜎(z). {где 𝜎 — сигмовидная функция}
  5. Рассчитайте потери, используя:
L = (y*log(a) + (1-y)*(log(1-a))

Теперь нам нужно использовать обратное распространение, чтобы вычислить градиенты ∂L ∕ ∂w и ∂L ∕ ∂b и обновить веса ‘w’ и перехватить ‘b’ с помощью уравнений

Используя цепное правило дифференцирования, мы можем написать

Вычисляя каждый термин отдельно:

мы получаем

Подставляя все в формулу цепного правила, получаем,

Точно так же мы можем получить

Кроме того, мы можем показать, что

что подразумевает

и

Обычно, поскольку мы берем производную функции потерь по w, b и z, соглашение состоит в том, чтобы представлять их как «dw», «db» и «dz». Таким образом, приведенные выше уравнения становятся:

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

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

Векторизация

Вместо того, чтобы повторять этот процесс «m» раз, мы можем использовать векторизацию, чтобы избежать использования дорогостоящих в вычислительном отношении циклов for для вычисления градиентов.

Затем формулы станут (используя numpy для операции векторизации)

Z = wᵀ.X +b

= np.dot(wᵀ, X) +b

A = 𝜎(Z)

dZ = A-Y

dw = np.dot(X,dZᵀ)/м

db = np.sum(dZ, axis=1,keepdims=True)/м

w := w-𝛼dw

b := b-𝛼db

где 𝛼 — скорость обучения.

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

Это была простая демонстрация того, как прямое и обратное распространение работают в нейронной сети. Для более крупных нейронных сетей вычисления могут стать сложными из-за изменения размера и количества скрытых слоев, но процесс остается тем же для вычисления градиентов, используя прямое распространение для вычисления прогнозов, а затем используя обратное распространение ошибки для получения градиентов. «dw» и «db» и использовать его для обновления весов «w» и перехватов «b» и повторять весь процесс до тех пор, пока потери не будут минимизированы.

Все идеи взяты из DeepLearning.AI. Здесь я попытался воспроизвести то, что узнал, своими словами.

Спасибо, что прочитали. Поделитесь своими впечатлениями, предложениями или вопросами, если таковые имеются.