Як походить функція витрат з логістичної регресії


29

Я роблю курс машинного навчання Стенфорда на Coursera.

У главі з логістичної регресії функція витрат така: введіть тут опис зображення

Потім, це похідне тут: введіть тут опис зображення

Я намагався отримати похідну від функції витрат, але отримав щось зовсім інше.

Як отримується похідна?

Які є посередницькими кроками?


+1, перевірте відповідь @ AdamO на моє запитання тут. stats.stackexchange.com/questions/229014/…
Хайтао Ду

"Зовсім іншого" насправді недостатньо, щоб відповісти на ваше запитання, крім того, щоб сказати вам те, що ви вже знаєте (правильний градієнт). Було б набагато корисніше, якби ви дали нам те, до чого призвели ваші розрахунки, тоді ми можемо допомогти вам опинитися там, де ви допустили помилку.
Метью Друрі

@MatthewDrury Вибачте, Метт, я домовився про відповідь перед тим, як увійшов ваш коментар. Я редагую, щоб пізніше надати їй додаткову цінність ...
Антоні Пареллада

2
коли ви говорите "похідне", ви маєте на увазі "диференційований" чи "похідний"?
Glen_b -Встановіть Моніку

Відповіді:


41

Адаптовано з конспектів курсу, які я не бачу доступними (включаючи це виведення) за межами конспектів, внесених студентами на сторінці курсу «Курсове машинне навчання Ендрю Нґ» Ендрю Нґ .


У подальшому, суперскрипт позначає індивідуальні вимірювання або навчальні "приклади".(i)

J(θ)θj=θj1mi=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]=linearity1mi=1m[y(i)θjlog(hθ(x(i)))+(1y(i))θjlog(1hθ(x(i)))]=chain rule1mi=1m[y(i)θjhθ(x(i))hθ(x(i))+(1y(i))θj(1hθ(x(i)))1hθ(x(i))]=hθ(x)=σ(θx)1mi=1m[y(i)θjσ(θx(i))hθ(x(i))+(1y(i))θj(1σ(θx(i)))1hθ(x(i))]=σ1mi=1m[y(i)σ(θx(i))(1σ(θx(i)))θj(θx(i))hθ(x(i))(1y(i))σ(θx(i))(1σ(θx(i)))θj(θx(i))1hθ(x(i))]=σ(θx)=hθ(x)1mi=1m[y(i)hθ(x(i))(1hθ(x(i)))θj(θx(i))hθ(x(i))(1y(i))hθ(x(i))(1hθ(x(i)))θj(θx(i))1hθ(x(i))]=θj(θx(i))=xj(i)1mi=1m[y(i)(1hθ(x(i)))xj(i)(1yi)hθ(x(i))xj(i)]=distribute1mi=1m[yiyihθ(x(i))hθ(x(i))+y(i)hθ(x(i))]xj(i)=cancel1mi=1m[y(i)hθ(x(i))]xj(i)=1mi=1m[hθ(x(i))y(i)]xj(i)


Похідна від сигмоїдної функції є

ddxσ(x)=ddx(11+ex)=(1+ex)(1+ex)2=ex(1+ex)2=(11+ex)(ex1+ex)=(11+ex)(1+ex1+ex11+ex)=σ(x)(1+ex1+exσ(x))=σ(x)(1σ(x))


1
+1 за всіх зусиль !, використання позначення матриці може бути простіше?
Хайтао Ду

чи можна сказати в лінійній регресії, мета - а похідна - , де , в логістичній регресії вона подібна, похідна де , і ? Axb22ATee=AxbATee=pbp=sigmoid (Ax)
Хайтао Ду

2
тому я ціную ваші зусилля. Ви витрачаєте час на мову ОП !!
Хайтао Ду

1
Я розумію, що є проблеми опуклості, які роблять мінімізацію помилок у квадраті небажаною для нелінійних функцій активації. У матричній нотації це буде . J(θ)θ=1mX(σ(Xθ)y)
Антоні Пареллада

1
@MohammedNoureldin Я просто взяв часткову похідну в числівниках попереднього рядка, застосовуючи правило ланцюга.
Антоні Парелада

8

Щоб уникнути враження надмірної складності справи, давайте просто побачимо структуру рішення.

Зі спрощенням і деяким зловживанням позначенням, нехай є терміном у сумі , а є функцією : G(θ)J(θ)h=1/(1+ez)z(θ)=xθ

G=ylog(h)+(1y)log(1h)

Ми можемо використовувати правило ланцюга: і вирішити його по одному одна ( і - константи).dGdθ=dGdhdhdzdzdθxy

dGh=yh1y1h=yhh(1h)
Для sigmoid виконується, що є лише знаменником попереднього твердження.dhdz=h(1h)

Нарешті, .dzdθ=x

Об'єднання результатів все разом дає шуканий вираз: Надія, яка допомагає.

dGdθ=(yh)x

0

Заслуга цієї відповіді належить Антоні Парелладі з коментарів, які, на мою думку, заслуговують на більш помітне місце на цій сторінці (як це допомагало мені, коли багато інших відповідей не мали). Крім того, це не повна деривація, а більше чітке твердження . (Для повного виведення див. Інші відповіді).J(θ)θ

J(θ)θ=1mXT(σ(Xθ)y)

де

XRm×n=Training example matrixσ(z)=11+ez=sigmoid function=logistic functionθRn=weight row vectory=class/category/label corresponding to rows in X

Також реалізація Python для тих, хто хоче обчислити градієнт відносно .Jθ

import numpy
def sig(z):
return 1/(1+np.e**-(z))


def compute_grad(X, y, w):
    """
    Compute gradient of cross entropy function with sigmoidal probabilities

    Args: 
        X (numpy.ndarray): examples. Individuals in rows, features in columns
        y (numpy.ndarray): labels. Vector corresponding to rows in X
        w (numpy.ndarray): weight vector

    Returns: 
        numpy.ndarray 

    """
    m = X.shape[0]
    Z = w.dot(X.T)
    A = sig(Z)
    return  (-1/ m) * (X.T * (A - y)).sum(axis=1) 

0

Для тих із нас, хто не настільки сильний в обчисленні, але хотів би пограти з коригуванням функції витрат і потрібно знайти спосіб розрахунку похідних ... короткий шлях до повторного вивчення числення - це онлайн-інструмент для автоматичного надання виведення, з покроковими поясненнями правила.

https://www.derivative-calculator.net

Приклад визначення функції витрат сигмоїдної активації при логістичній регресії

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.