Демистификация глубокого обучения (5 частей серии)
Редактировать: dev.to Иногда форматирует математику неправильно. Чтобы увидеть оригинальный пост с математикой, правильно оказанным Голова здесь Действительно
Посмотрев линейную и логистическую регрессию, мы посмотрим, как эти алгоритмы «учится».
Функции потери:
Для алгоритма машины для изучения, ему нужен какой-то способ оценки его производительности. Функция потери (Функция AKA затрат) – это функция, которая количественно определяет ошибки в его прогнозах – более низкая ошибка лучше. Таким образом, способ улучшения алгоритма состоит в том, чтобы минимизировать эту функцию потери, которая, если выбрана правильно, также приведет к обучению модели. Алгоритм может настроить свои веса и предубеждения, чтобы получить значение функции потерь как можно ниже. При размышлениях о правильной функции потери использования, она помогает подумать о проблеме, которую мы пытаемся решить:
Интуиция: Для линейной регрессии мы хотим построить прямую линию Best Fit – то есть то, что так близко к тому, что многие из точек. Таким образом, одна хорошая идея – минимизировать среднее расстояние между прямой и точками. В
Математика: Обозначим функцию потери как
J ( W , b ) = 1 2 m ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 J (w, b) = \ frac {1} {2m}} ^ {m} (\ hat {y y} ^ {(i)} – ^ {(i)}) ^ 2 J ( W , b ) = 2 m 1 ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2
Код: Как до того, как мы продолжаем те же мотивирующие примеры цен на жилье для линейной регрессии и рака молочной железы для логистической регрессии. Вы можете получить доступ к полному коду в сопроводительном Jupyter ноутбук Отказ
def MSE_loss(Y, Y_pred): m = Y.shape[1] return (1.0/(2*m))*np.sum(np.square(Y_pred-Y))
Далее, двигаясь на логистическую регрессию:
Интуиция: Целью от логистической регрессии состоит в том, чтобы максимизировать вероятность получения правильной этикетки по всем примерам.
Математика: Здесь легче представить интуицию поперечной математике:
Для одного примера мы хотим:
W , b a r g m a x P ( y ∣ x ; W , b ) _ {W, b} ^ {argmax} p (y | x; w, b) W , b a r g m a x P ( y ∣ x ; W , b )
Это переводит на поиск
W , b a r g m a x ∏ i = 1 m P ( y ( i ) ∣ x ( i ) ; W , b ) {W, b} ^ {argmax}} ^ {m} p (y ^ {(i)} | x ^ {(i)}; w, b) W , b a r g m a x ∏ i = 1 m P ( y ( i ) ∣ x ( i ) ; W , b )
Это может привести к подведению, при умножении крошечных вероятностей вместе, поэтому вместо этого мы принимаем журнал и максимизируем это. С
W , b a r g m a x ∑ i = 1 m бревно P ( y ( i ) ∣ x ( i ) ; W , b ) {W, b} ^ {argmax}} ^ {m} \ log {p (y ^ {((i)} | x ^ {(i)}; w, b)} W , b a r g m a x ∑ i = 1 m воплощение g P ( y ( i ) ∣ x ( i ) ; W , b )
Если мы вспомним нашу интерпретацию вывода логистической регрессии, у нас есть это:
P ( y ( i ) ∣ x ( i ) ; W , b ) = { y ^ ( i ) если y ( i ) = 1 1 − y ^ ( i ) если y ( i ) = 0 P (y ^ {(i)} | x ^ {(i)}; w, b) = \ begin {face} \ hat {y} ^ {(i)} & \ text {Если} \ 1 – \ hat {y} ^ {(i)} & \ text {Если} \ end {случаи} P ( y ( i ) ∣ x ( i ) ; W , b ) = { y ^ ( i ) если y ( i ) = 1 1 − y ^ ( i ) если y ( i ) = 0
Вместе все эти кусочки вместе, настало время посмотреть на функцию потери для логистической регрессии:
J ( W , b ) = − 1 m ∑ i = 1 m y ( i ) бревно ( y ^ ( i ) ) + ( 1 − y ( i ) ) бревно ( 1 − y ^ ( i ) ) J (w, b) = \ frac {-1} {m}} ^ {m} y ^ {(i)} \ log (\ hat {y y} ^ {(i)}) + (1-y ^ {(i)}) \ log (1- \ hat {y} ^ {(i)}) J ( W , b ) = m − 1 ∑ i = 1 m y ( i ) воплощение g ( y ^ ( i ) ) + ( 1 − y ( i ) ) воплощение g ( 1 − y ^ ( i ) )
Разрыв это вниз:
- Во-первых, у нас есть отрицательный знак перед всей выражением: это потому, что мы хотим максимизировать вероятность журнала, но мы можем только минимизировать функцию потери.
Мы разделяем сумму по
м м м – Это соответствует «средней» вероятности, а см м м одинаково для всехW С B W, B W , b Это не влияет на нашу цель.В суммировании есть два термина: первый это
бревно P ( y ( i ) = 1 |. x ( я ) ; W , b ) \ log {p (y ^ {(i)} = 1 | x ^ {(i)}; w, b)} воплощение g P ( y ( i ) = 1 |. x ( я ) ; W , b ) а второй –бревно P ( y ( i ) = 0 |. x ( я ) ; W , B ) \ log {p (y ^ {(i)} = 0 | x ^ {(i)}; w, b)} воплощение g P ( y ( i ) = 0 |. x ( я ) ; W , b ) . Эти объединения, чтобы датьбревно P ( y ( я ) |. x ( я ) ; W , b ) \ log {p (y ^ {(i)} | x ^ {(i)}; w, b)} воплощение g P ( y ( я ) |. x ( я ) ; W , b ) С каких порy = 0 y = 0. y = 0. только второй термин способствует и Аналогично, когдаy = 1 y = 1. y = 1 Только первый член способствует, посколькуy ( я ) ^ {(i)} y ( i ) и1 – y ( я ) 1 – Y ^ {(i)} 1 − y ( i ) Условия устанавливают другую до нуля соответственно.
Код:
def log_loss(Y, Y_pred): m = Y.shape[1] return (-1.0/m)*np.sum(Y*np.log(Y_pred) + (1-Y)*np.log(1-Y_pred))
Так что теперь, когда мы определили нашу функцию потери, давайте посмотрим на то, как мы его минимизируем:
Градиентный спуск:
Интуиция:
Подумайте о функционировании потери как поверхности с холмами и долинами, а текущее значение потери для алгоритма в качестве точки на этой поверхности (см. Выше изображение). Мы хотим минимизировать его, поэтому мы хотим продолжать принимать шагов вниз по склону поверхности в долину.
Наклон поверхности – это градиент в этой точке, и поэтому мы хотим, чтобы мы хотим принимать шаги в направлении вниз по градиенту до минимума, где градиент 0. Это алгоритм спуска градиента.
Математика:
Уравнение обновления градиента спускается следующим образом:
W = W − α ∂ J ∂ W W = w – \ alpha \ frac {\ partial \ mathcal {j}} {\ partial w} W = W − α ∂ W ∂ J
b = b − α ∂ J ∂ b B – \ alpha \ frac {\ partial \ mathcal {j}} {\ partial b} b = b − α ∂ b ∂ J
Теперь пришло время вычислить
Подумав о вычислении частичных производных, он помогает иметь интуитивное понимание, чтобы иметь смысл выражения математики, которые, как и результаты, особенно когда мы позже стараемся принимать частичные производные по отношению к каждому значению в матрице.
Некоторые идеи, которые стоит иметь в виду, когда мы идем в этот расчет и более сложные выражения позже:
- Частичная производная интуиция : Думаю о
∂ y ∂ х \ frac {\ partial {y}} {\ partial {x}} ∂ х ∂ y свободно, как количественно, сколькоу y y изменится, если вы дали ценностьх х х немного “подталкиваю” в точке. Разбиение вычислений – Мы можем использовать Правило цепи Чтобы помочь нам в наших вычислениях – вместо того, чтобы пытаться вычислить производное в одном палам, мы распадаем вычисление на более мелкие промежуточные шаги.
Вычислить правило цепочки – При думании о том, какие промежуточные значения включают в наше выражение правила цепочки, подумайте о немедленных выходах уравнений, связанных с
х х х – какие другие значения напрямую влияют, когда я немного подталкиваюх х х ?
Давайте применяем эти идеи в контексте линейной и логистической регрессии – ключ здесь не столько самих уравнений, но для создания этой интуиции, поскольку мы можем заварливаться большинство более продвинутых сетей с этим же рассуждением:
Во-первых, линейная регрессия – мы сломаемся на два шага:
y ^ ( i ) = ∑ j = 1 n W j x j ( i ) + b \ Hat {y} ^ {(i)} =} ^ {n} w_jx ^ {(i)} _ j + b y ^ ( i ) = ∑ j = 1 n W j x j ( i ) + b
J ( W , b ) = 1 2 m ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 J (w, b) = \ frac {1} {2m}} ^ {m} (\ hat {y y} ^ {(i)} – ^ {(i)}) ^ 2 J ( W , b ) = 2 m 1 ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2
Давайте рассмотрим один конкретный прогноз
Для этого
∂ y ^ ( i ) ∂ W j = x j ( i ) \ frac {\ partial {\ hat {y} ^ {(i)}}} {\ partial {w_j}} ^ {(i)} _ j ∂ W j ∂ y ^ ( i ) = x j ( i )
∂ y ^ ( i ) ∂ b = 1 \ frac {\ partial {\ hat {y} ^ {(i)}}} {\ partial {b}} ∂ b ∂ y ^ ( i ) = 1
Теперь мы смотрели на частичную производную интуицию, давайте посмотрим на вычисление правила цепи. Если мы вынум
∂ J ∂ W ∗ j = ∑ ∗ i = 1 m ∂ J ∂ y ^ ( i ) ∂ y ^ ( i ) ∂ W ∗ j = 1 m ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) ∗ x j ( i ) \ frac {\ partial {j}} {\ partial {w * j}} =} ^ {m} \ frac {\ partial {j}} {\ partial {\ hat {y} ^ {((i)}}} \ frac {\ partial {\ hat {y} ^ {(i)}}} {\ partial {w * j}} = \ frac {1} {m}} ^ {m} (\ hat {y} ^ {{ (i)} – y ^ {(i)}) * x ^ {(i)} _ j ∂ W ∗ j ∂ J = ∑ ∗ i = 1 m ∂ y ^ ( i ) ∂ J ∂ W ∗ j ∂ y ^ ( i ) = m 1 ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) ∗ x j ( i )
и:
∂ J ∂ b = ∑ ∗ i = 1 m ∂ J ∂ y ^ ( i ) ∗ ∂ y ^ ( i ) ∂ b = 1 m ∑ ∗ i = 1 m ( y ^ ( i ) − y ( i ) ) \ frac {\ partial {j}} {\ partial {b}} =} ^ {m} \ frac {\ partial {j}} {\ partial {\ hat {y} ^ {(i)}}} * \ \ frac {\ partial {\ hat {y} ^ {(i)}}} {\ partial {b}} = \ frac {1} {m}} ^ {m} (\ hat {y} ^ {((i) } – Y ^ {(i)}) ∂ b ∂ J = ∑ ∗ i = 1 m ∂ y ^ ( i ) ∂ J ∗ ∂ b ∂ y ^ ( i ) = m 1 ∑ ∗ i = 1 m ( y ^ ( i ) − y ( i ) )
Теперь мы можем перейти на случай логистической регрессии – мы представим промежуточный шаг
J ( W , b ) = − 1 m ∑ i = 1 m y ( i ) бревно y ^ ( i ) + ( 1 − y ( i ) ) бревно ( 1 − y ^ ( i ) ) J (w, b) = \ frac {-1} {m}} ^ {m} y ^ {(i)} \ log \ hat {y y} ^ {((i)} + (1-y ^ {(i )}) \ log (1- \ Hat {y} ^ {(i)}) J ( W , b ) = m − 1 ∑ i = 1 m y ( i ) воплощение g y ^ ( i ) + ( 1 − y ( i ) ) воплощение g ( 1 − y ^ ( i ) )
y ^ ( i ) = σ ( z ( i ) ) = 1 1 + e − z ( i ) \ hat {y} ^ {(i)} = \ sigma (z ^ {(i)}) = \ FRAC {1} {1 + E ^ {- z ^ {((i)}}} y ^ ( i ) = σ ( z ( i ) ) = 1 + e − z ( i ) 1
z ( i ) = ∑ j = 1 n W j x j ( i ) + b k ^ {(i) } =} ^ {n} w_jx ^ {(i)} _ j + b z ( i ) = ∑ j = 1 n W j x j ( i ) + b
Опять же, подтягивая
∂ J ∂ y ^ ( i ) = − 1 m ( y ( i ) y ^ ( i ) − 1 − y ( i ) 1 − y ^ ( i ) ) \ frac {\ partial {j}} {\ partial {\ hat {y} ^ {(i)}}} = \ frac {-1} {m} (\ frac {y ^ {((i)}} {\ \ шляпа {y} ^ {(i)}} – \ frac {1-y ^ {(i)}} {1- \ hat {y} ^ {(i)}}) ∂ y ^ ( i ) ∂ J = m − 1 ( y ^ ( i ) y ( i ) − 1 − y ^ ( i ) 1 − y ( i ) )
Производное
d y ^ ( i ) d z ( i ) = e − z ( i ) ( 1 + e − z ( i ) ) 2 = 1 1 + e − z ( i ) ( e − z ( i ) + 1 1 + e − z ( i ) − 1 1 + e − z ( i ) ) = σ ( z ( i ) ) ( 1 − σ ( z ( i ) ) ) = y ^ ( i ) ( 1 − y ^ ( i ) ) \ frac {d \ hat {y y} ^ {(i)}} {dz ^ {(i)}} = \ frac {e ^ {- z ^ {(i)}}} {(1 + e ^ {- z ^ {(i)}}) ^ 2} = \ frac {1} {1 + e ^ {- z ^ {((i)}}} (\ frac {e ^ {- z ^ {(i)}} +1} {1 + e ^ {- z ^ {(i)}}} – \ frac {1} {1 + e ^ {- z ^ {((i)}}}) = \ sigma (z ^ {(( i)}) (1- \ sigma (z ^ {(i)}))) = \ Hat {y} ^ {(i)} (1- \ шляпа {y} ^ {(i)}) d z ( i ) d y ^ ( i ) = ( 1 + e − z ( i ) ) 2 e − z ( i ) = 1 + e − z ( i ) 1 ( 1 + e − z ( i ) e − z ( i ) + 1 − 1 + e − z ( i ) 1 ) = σ ( z ( i ) ) ( 1 − σ ( z ( i ) ) ) = y ^ ( i ) ( 1 − y ^ ( i ) )
Это аккуратный результат, чтобы помнить:
Отлично, после этого алгебраического перестройки у нас приятный результат, поэтому давайте вычислить правило цепочки – обратите внимание на подтупку в
∂ J ∂ z ( i ) = ∂ J ∂ y ^ ( i ) ∗ d y ^ ( i ) d z ( i ) = − 1 m ( y ( i ) y ^ ( i ) − 1 − y ( i ) 1 − y ^ ( i ) ) y ^ ( i ) ( 1 − y ^ ( i ) ) \ frac {\ partial {j}} {\ partial {z ^ {((i)}}} = \ frac {\ partial {j}} {\ partial {\ hat {y} ^ {(i)}}} * \ frac {d \ hat {y y} ^ {(i)}} {dz ^ {((i)}} = \ frac {-1} {m} (\ frac {y ^ {((i)}} {\ hat {y} ^ {(i)}} – \ frac {1-y ^ {(i)}} {1- \ hat {y} ^ {((i)}}) \ hat {y} ^ {(i) } (1- \ шляпа {y} ^ {(i)}) ∂ z ( i ) ∂ J = ∂ y ^ ( i ) ∂ J ∗ d z ( i ) d y ^ ( i ) = m − 1 ( y ^ ( i ) y ( i ) − 1 − y ^ ( i ) 1 − y ( i ) ) y ^ ( i ) ( 1 − y ^ ( i ) )
Так что у нас есть, умножение:
∂ J ∂ z ( i ) = − 1 m [ y ( i ) ( 1 − y ^ ( i ) ) − y ^ ( i ) ( 1 − y ( i ) ) ] = 1 m ( y ^ ( i ) − y ( i ) ) \ frac {\ partial {j}} {\ partial {z ^ {(i)}}} = \ frac {-1} {m} [y ^ {(i)} (1- \ шляпа {y} ^ {(i)}) – \ hat {y} ^ {(i)} (1-y y ^ ^ {(i)})] = \ frac {1} {m} (\ hat {y} ^ {(i)} – y ^ {(i)}) ∂ z ( i ) ∂ J = m − 1 [ y ( i ) ( 1 − y ^ ( i ) ) − y ^ ( i ) ( 1 − y ( i ) ) ] = m 1 ( y ^ ( i ) − y ( i ) )
Если мы сравним с линейной регрессией, оказывается, что уравнения для частичных производных для
У нас просто один последний шаг, чтобы закончить вещи! Как и в последнем посте, мы можем переписать уравнение для
∂ J ∂ W ∗ 1 j = 1 m ∑ ∗ i = 1 m ( Y ^ − Y ) 1 i ∗ X j i = 1 m ∑ ∗ i = 1 m ( Y ^ − Y ) ∗ 1 i ∗ X i j T \ frac {\ partial {j}} {\ partial {w * 1j}} =} ^ {m} (\ hat {y} – y) {1i} * x {ji} =} ^ {m} (\ hat {y} – y) * {1i} * x ^ t_ {ij} ∂ W ∗ 1 j ∂ J = m 1 ∑ ∗ i = 1 m ( Y ^ − Y ) 1 i ∗ X j i = m 1 ∑ ∗ i = 1 m ( Y ^ − Y ) ∗ 1 i ∗ X i j T
∂ J ∂ W = 1 m ( Y ^ − Y ) . X T \ frac {\ partial {j}} {\ partial {w}} = \ frac {1} {m} (\ hat {y} – y) .x ^ t ∂ W ∂ J = m 1 ( Y ^ − Y ) . X T
Уравнение для
Поэтому, нарушая его на многие маленькие шаги, у нас есть наши последние уравнения (как для линейной, так и для логистической регрессии):
∂ J ∂ W = 1 m ( Y ^ − Y ) . X T \ frac {\ partial {j}} {\ partial {w}} = \ frac {1} {m} (\ hat {y} – y) .x ^ t ∂ W ∂ J = m 1 ( Y ^ − Y ) . X T
∂ J ∂ b = 1 m ∑ ∗ i = 1 m ( Y ^ ∗ 1 i − Y 1 i ) \ frac {\ partial {j}} {\ partial {b}} = \ frac {1} {m}} ^ {m} (\ hat {y} * {1i} -y_ {1i}) ∂ b ∂ J = m 1 ∑ ∗ i = 1 m ( Y ^ ∗ 1 i − Y 1 i )
Код:
def grads(X, Y, Y_pred): m = Y.shape[1] dW = (1.0/m)*np.dot(Y_pred-Y,X.T) db = (1.0/m)*np.sum((Y_pred-Y),axis=1,keepdims=True) return dW, db dW, db = grads(X, Y, Y_pred) #gradient descent update W = W - alpha*dW b = b - alpha*db
Вывод:
С последними двумя сообщениями вы теперь закодировали свои первые два алгоритма обучения машины и обучали их! Машинное обучение может быть применено к разнообразным наборам набора данных – мотивации примеров, которые вы обучали свои алгоритмы – цены на жилье и классификацию рака молочной железы – быть двумя большими примерами этого!
Если вы сделали его через математику, вы поняли основы большинства алгоритмов обучения – мы будем использовать это как строительные блоки для нейронных сетей.
Демистификация глубокого обучения (5 частей серии)
Оригинал: “https://dev.to/mukulrathi_/linear-and-logistic-regression-54n3”