본문 바로가기
머신러닝과 딥러닝/기초 이론

Logistic Regression의 cost 함수 설명

by Bentist 2020. 2. 13.

sigmoid 함수로 Cost 함수를 만들어보면, Logistic regression은 구불구불한 밥그릇 형태다. 새로운 H(X)는 더이상 linear하지 않기 때문에 시작점이 어디냐에 따라 평평한 곳을 만나면 해당 지점을 최저점이라고 잘못 인식하게 된다.

이 지점을 Local minimum이라 한다. 그러나 우리는 global minimum을 찾는 것이 우리의 목표이다.
그래서 선형회귀에서 사용하던 Gradient descent algorithm로지스틱 회귀에서는 사용할 수가 없다.

이제 Cost 함수 자체를 바꿔서 구불구불한 밥그릇을 매끄럽게 펴줘야 한다.

새로운 Cost 함수

Cost는 어떤 것의 합의 평균이다. 하나의 엘리먼트에 Cost를 구해 평균 내는 것이다. 이것을 c라고 하자. c에 (H(x), y)를 넣어 y=1일 때는 -log(H(x)), y = 0일 때는 -log(1-H(x))처럼 두가지로 나누어 함수를 정의 한다. 

왜 이렇게 하는 걸까?

자연상수(e)의 지수가 구부러진 함수를 만드는 원인인데, 지수와 상극(반대)인 log함수를 사용해서 Cost함수를 평평하게 펴주고자 한다. 아래 그림에서 왼쪽의 -log(z) 그래프 른쪽의 -log(1-z) 그래프를 사용하여 두 개 합치면, 이전의 매끄러운 밥그릇이 만들어진다.

* y는 학습시킬 실제 데이터(label)이고, H(X)는 y를 예측한 값이다.

 

1) y(학습시킬 실제 데이터)가 1일 때,

이때 우리가 제대로 예측하여, H(x) = 1 값을 갖는다고 생각해보자.

그럼 Cost 함수에 대한 결과가 매우 작은 값(거의 0)에 가깝게 나와서 cost가 작게 된다.

반대로, 우리가 제대로 예측하지 못하여 H(x) = 0 값을 갖는다면

Cost 함수에 대한 결과는 매우 큰 값(거의 무한대)에 가깝게 나와서 cost가 매우 크게 된다.

2) y(학습시킬 실제 데이터)가 0일 때,

우리가 제대로 예측하여, H(X) = 0일 때는 오른쪽 그래프에서 y는 0이 된다. (cost=0)
H(X) = 1일 때는 오른쪽 그래프에서 y는 무한대가 된다. (cost=무한대)

 

즉, 맞는 예측을 했을 때의 비용을 0으로 만들어줌으로써 Cost함수의 역할을 다하게 된다. 

이제 다시 Cost 함수를 정의해보자. 

 

y = 1일 때와 y = 0일 때로 나눠진 식을 텐서플로우에서 프로그래밍하게 되면, if문을 사용해야되서 굉장히 복잡해진다. 그래서 하나의 식으로 합쳐서 계산을 용이하게 할 것이다.

-ylog(H(x)) - (1-y)log(1-H(x))를 y*A + (1-y)*B 형태로 나타내면, y는 1 또는 0 값에 따라 해당 함수를 사용할 수 있다. 

 

 

이제 이 평평해진 Cost 함수로 Gradient decent algorithm을 사용할 수 있다. 
Cost 함수의 기울기인 W를 구하기 위해 미분을 할 것이다. 
컴퓨터가 우리 대신 미분( GradientDescentOptimizer() )해줄거니까, 우리는 α값만 적절히 주고 현재의 weight를 조금씩 업데이트시키면 된다.

댓글