Логистическая регрессия с мышлением нейронной сети

Примечание от автора:

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

Целевая аудитория: студенты выпускного курса колледжа, новички в области науки о данных, ИТ-сотрудники, которые хотят переключиться на карьеру в области обработки данных .

Вывод. Главный вывод из этой статьи:

  1. Логистическая регрессия
  2. Подход к логистической регрессии с мышлением нейронной сети

Логистическая регрессия

Логистическая регрессия — это алгоритм бинарной классификации. В задаче бинарной классификации входными данными (X) будет вектор признаков одномерного измерения, а выходной меткой (Y) будет 1 или 0

Выходная метка логистической регрессии находится в диапазоне от 0 до 1 .

0 ≤ Y ≤ 1, где Y — вероятность того, что выходная метка равна 1 при входных данных X.

Y = P(y=1 | x) Чтобы алгоритм обучения находил Y, it принимает два параметра W и B. Где W – это вес, связанный с входными данными. вектор признаков X и Bсмещение.

Чтобы найти Ю. Что ж, одну вещь, которую вы можете попробовать, но которая не работает, будет то, что Y будет транспонировать X плюс B, что-то вроде линейной функции входных данных X. И на самом деле это то, что вы используете, если выполняете линейную регрессию. Как показано ниже.

Но это не очень хороший алгоритм для бинарной классификации.

Потому что вы хотите, чтобы Y был шансом того, что y равно единице Y = P(y=1 | x). Таким образом, Y действительно должен быть между нулем и единицей, и это трудно обеспечить, потому что W, транспонированное X плюс B, может быть намного больше, чем единица, или даже может быть отрицательным, что не имеет смысла для вероятности. Что вы хотите, чтобы оно было между нулем и единицей.

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

σ — сигмовидная функция, которой мы передаем величину w^T X+B

Сигмовидная функция будет выглядеть так,

Если , Z очень велико, σ(z) = 1/1+0 = 1

Если Z очень мало (большое отрицательное число), σ(z) = 1/1+большое число = 0

где Z — количество w^T X+B

Функция потерь определяется выражением

L(Y , y) = −y log(Y)−(1−y)log(1−Y)

Где Y — прогнозируемая метка и y — метка достоверности, которая поставляется вместе с обучающим набором данных.

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

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

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

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

Оказывается, логистическую регрессию можно рассматривать как очень-очень маленькую нейронную сеть.

Наша цель — найти значения параметра W, которые сделают наш классификатор максимально точным; и чтобы найти подходящие значения параметра W, нам нужно применить градиентный подъем/спуск.

Производная или наклон

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

Производная означает наклон

Из школьной математики мы понимаем, что наклон = высота/ширина.

Возьмем простую функцию f(a)=3aпрямой линии, как показано ниже.

Для a = 2, f(a) = 3(2) = 6 | для a=2,001, f(a) = 3(2,001) = 6,003

Поэтому наклон/производная функции для прямой линии равен высоте/ширине = 0,003/00,001 = 3. Задается как,

Производная функции просто означает наклон функции, а наклон функции может быть разным в разных точках функции. В нашем первом примере, где f(a) = 3a, это прямая линия. Производная везде одинаковая, везде три.

Точно так же давайте возьмем сложную функцию f(a) = a², где наклон функции может быть разным для разных точек функции, в отличие от приведенной выше прямой функции.

Для других функций, таких как f(a) = a² или f(a) = log(a), наклон линии меняется. Таким образом, наклон или производная могут быть разными в разных точках кривой.

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

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

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

Другими словами, при градиентном спуске мы минимизируем общую функцию стоимости J(W,B), двигаясь к глобальным минимумам в выпуклой функции. Наклон к глобальным минимумам получается путем взятия производной функции стоимости ⅆ/ⅆw J(W,B)

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

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

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

Подход к логистической регрессии с мышлением нейронной сети

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

Основные этапы построения нейронной сети:

  1. Инициализируйте параметры модели W и B.
  2. Петля: прямое и обратное распространение
  • Рассчитать текущие потери (прямое распространение) L
  • Рассчитать градиент тока (обратное распространение) J
  • Параметры обновления (градиентный спуск)θ

3. Используйте изученный (w, b), чтобы предсказать метки для данного набора примеров.

Шаг 1:

Инициализируйте параметры W и B вручную.

W -- initialized vector of shape (dim, 1)
B -- initialized scalar (corresponds to the bias)

Шаг 2:

Прямое распространение, обратное распространение и оптимизация

Мы получаем стоимость J(W, B) и градиент потерь по отношению к W и B, используя приведенные ниже формулы для прямого распространения и обратное распространение

# compute cost (Forward Propagation)
cost = -(1/m) * np.sum(Y.T * np.log(A) + (1 - Y.T) * (np.log(1-A)) )
#where A is the sigmoid Activation ,
A = sigmoid(np.dot(X.T,w) + b)
#Gradients of loss with respect to W and B:(Backward Propagation)
dw = (1/m) * np.dot(X,(A-Y.T))
db = (1/m) * np.sum(A-Y.T)

Цель состоит в том, чтобы узнать W и B, минимизировав функцию стоимости J. Для параметра θ правило обновления:

где альфа - скорость обучения

Оптимизация заключается в нахождении обновленного параметра W и B после минимизации функции стоимости J путем применения правила обновления.

W = W- learning_rate * dw
B = B- learning_rate * db

Шаг 3.

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

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

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

Резюме

Логистическая регрессия — это простая нейронная сеть. Основная цель алгоритма логистической регрессии — найти обновленные параметры путем минимизации функции стоимости J, где функция стоимости J измеряет, насколько хорошо вы выполняете весь тренировочный набор.

Логистическая регрессия проходит 3 этапа: сначала мы инициализируем параметры W и B нулями. Затем мы вычисляем стоимость всей обучающей выборки (J) и получаем производные от параметров dw и db, которые представляют собой не что иное, как градиент потерь по отношению к W и B. Наконец мы применяем правило обновления, чтобы минимизировать функцию стоимости и получить обновленные параметры.

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

Чтобы прочитать другие уроки этого курса, перейдите к этой статье, чтобы найти полную программу и оглавление.

- - - - - - - - - - -> "Кликните сюда"