Hàm chi phí từ Logistic Regression được tạo ra như thế nào


29

Tôi đang tham gia khóa học Machine Learning Stanford trên Coursera.

Trong chương về Hồi quy logistic, hàm chi phí là: nhập mô tả hình ảnh ở đây

Sau đó, nó được dẫn xuất ở đây: nhập mô tả hình ảnh ở đây

Tôi đã thử lấy đạo hàm của hàm chi phí nhưng tôi có một thứ hoàn toàn khác.

Đạo hàm thu được như thế nào?

Đó là các bước trung gian?


+1, kiểm tra câu trả lời của @ AdamO trong câu hỏi của tôi ở đây. stats.stackexchange.com/questions/229014/ Mạnh
Haitao Du

"Hoàn toàn khác nhau" không thực sự đủ để trả lời câu hỏi của bạn, ngoài việc cho bạn biết những gì bạn đã biết (độ dốc chính xác). Sẽ hữu ích hơn nhiều nếu bạn đưa cho chúng tôi kết quả tính toán của bạn, sau đó chúng tôi có thể giúp bạn tìm ra lỗi mà bạn đã mắc phải.
Matthew Drury

@MatthewDrury Xin lỗi, Matt, tôi đã sắp xếp câu trả lời ngay trước khi bình luận của bạn đến. Octavian, bạn đã làm theo tất cả các bước chưa? Tôi sẽ chỉnh sửa để cung cấp cho nó một số giá trị gia tăng sau ...
Antoni Parellada

2
khi bạn nói "phái sinh", bạn có nghĩa là "khác biệt" hay "dẫn xuất"?
Glen_b -Reinstate Monica

Câu trả lời:


41

Được chuyển thể từ các ghi chú trong khóa học mà tôi không thấy có sẵn (bao gồm cả dẫn xuất này) bên ngoài các ghi chú được đóng góp bởi các sinh viên trong trang của khóa học Coursera Machine Learning của Andrew Ng .


Trong phần tiếp theo, siêu ký tự (i) biểu thị các phép đo riêng lẻ hoặc "ví dụ" đào tạo.

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)


Đạo hàm của hàm sigmoid là

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 for all the efforts!, may be using matrix notation could be easier?
Haitao Du

can I say in linear regression, objective is Axb2 and derivative is 2ATe, where e=Axb, in logistic regression, it is similar, the derivative is ATe where e=pb, and p=sigmoid (Ax) ?
Haitao Du

2
that is why I appreciate your effort. you spend time to us OP's language!!
Haitao Du

1
My understanding is that there are convexity issues that make the squared error minimization undesirable for non-linear activation functions. In matrix notation, it would be J(θ)θ=1mX(σ(Xθ)y).
Antoni Parellada

1
@MohammedNoureldin I just took the partial derivative in the numerators on the prior line, applying the chain rule.
Antoni Parellada

8

To avoid impression of excessive complexity of the matter, let us just see the structure of solution.

With simplification and some abuse of notation, let G(θ) be a term in sum of J(θ), and h=1/(1+ez) is a function of z(θ)=xθ:

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

We may use chain rule: dGdθ=dGdhdhdzdzdθ and solve it one by one (x and y are constants).

dGh=yh1y1h=yhh(1h)
For sigmoid dhdz=h(1h) holds, which is just a denominator of the previous statement.

Finally, dzdθ=x.

Combining results all together gives sought-for expression:

dGdθ=(yh)x
Hope that helps.

0

The credit for this answer goes to Antoni Parellada from the comments, which I think deserves a more prominent place on this page (as it helped me out when many other answers did not). Also, this is not a full derivation but more of a clear statement of J(θ)θ. (For full derivation, see the other answers).

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

where

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

Also, a Python implementation for those wanting to calculate the gradient of J with respect to θ.

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

For those of us who are not so strong at calculus, but would like to play around with adjusting the cost function and need to find a way to calculate derivatives... a short cut to re-learning calculus is this online tool to automatically provide the derivation, with step by step explanations of the rule.

https://www.derivative-calculator.net

Example of deriving cost function of sigmoid activation in logistic regression

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.