3 minute read

Lec 5-2 Logistic (Regression) Classification:

Logistic (regression) classification에서 cost function을 최소화 하는 알고리즘에 대해 알아봅시다.

1. Cost

image

Linear Regression의 Hypothesis일 때 Cost Function의 그래프를 그리면 위처럼 나오게 됩니다. 이런 그래프의 형태가 좋은 점은 어느 점에서 시작하던 최소값을 찾을 수 있다는 것입니다.

image 그런데 우리의 가설이 바뀌었습니다. 가설이 시그모이드 함수를 사용해서 출력값이 항상 0에서 1사이가 되도록 만들었습니다.

2. Cost Function

image

H를 사용해서 Cost Function을 만들어서 그래프를 그려보면 울퉁불퉁한 그래프가 나오는 것을 확인해볼 수 있습니다. 지난번에 Linear Regression에서는 매끈한 밥그릇 모양이 나옵니다. 이유를 생각해보면 Wx + b라는 일차방정식 형태가 제곱이 되면서 구부러진 형태가 됩니다. (이차 방정식의 형태라고 말하고 싶은 것인가?) 그래서 어떤 지점에서 시작하던 최소점을 찾을 수 있습니다.

그러나 꼭 그런 것은 아니지만 직관적으로 보자면, 시그모이드 함수의 shape가 구불구불한 모양이 제곱되면서 제곱한 그래프에 들어가게 됩니다. 그러면 모양이 매끄럽지 않게 나올 수 있다는 것을 추측해볼 수 있습니다.

  • 이런 상태에서의 문제점은 경사 하강법을 적용할 때 시작점에 따라 끝나는 점이 달라질 수 있습니다.
  • 이러한 지점을 Local Minimum이라고 합니다.
  • 전체에서의 최저점은 Global minimum이라고 합니다.
  • 우리는 글로벌 미니멈을 찾아야 하는데, 코스트 함수가 이렇게 생기면 로컬 미니멈에 빠져 학습이 중단되고 우리의 모델 성능이 떨어질 수 있습니다. (나쁘게 Predcition을 할 것이다.)

그래서 우리는 Hypothesis가 바뀌었기 때문에 이에 따라 Cost Function도 바뀌어야 합니다.

image

이것이 바로 우리가 사용할 Cost Function입니다. 왜 이런 Cost 함수를 사용하면 좋은지에 대해 알아봅시다.

Cost 함수에 대해

  • 우리 Cost함수는 어떤 것의 평균입니다.
  • 복잡하니까 하나의 엘리먼트만 보겠습니다.
  • 하나의 엘리먼트는 C함수로 표현되어 있습니다.

C함수에 대해

  • C함수는 H(x)와 y값을 가지고 2가지 케이스(y가 1일 때와 0일 때)로 나누어서 함수를 정의합니다.
  • 왜 이렇게 할까요?

3. Cost Function에 대한 이해

image 우리의 H(x)는 1 / 1 +e^-2 로 나타납니다. 그리고 e^-2라는 표현식(expressional term)이 구부러진 것 처럼 코스트 함수를 만듭니다. 이 구부러진 것과 상극이 되는 것이 로그함수입니다. (구부러지는 것을 잡는다고 표현했음.) 그래서 log함수를 사용한다는 것이 기본적인 아이디어입니다. 그리고 로그 함수의 모양을 보면 우리와 상당히 잘 맞는 모양입니다.

image

  • 우리의 Hypothesis에서는 Z가 1보다 큰 값이 나오지 않으니 생각할 필요없습니다. Z가 1인 경우에는 g(z)의 값이 0이 됩니다.
  • 그리고 z값이 0에 가까워지면 함수의 값은 굉장히 커집니다.
  • 이 함수는 y값이 1일 때 이 함수를 코스트로 사용합니다.
  • 이게 가능할까요?
  • 코스트 함수의 의미를 다시 되짚어보면 실제의 값과 예측한 값이 같으면 또는 비슷하면 코스트 값이 작아지고, 우리가 예측한 값이 틀리면 코스트의 값을 크게해서 우리 모델에게 벌을 주는 것입니다.
  • 그래서 Cost를 최소화 하기 위해서 Weight를 병행시키는 것입니다.

케이스를 나누어 봅시다.

y가 1일 때의 케이스

image y가 실제로 1인 경우에 (y 레이블이 1인 경우에) 우리의 예측값이 1로 맞았다. 그런 경우에 cost가 몇일까?

  • 이 때 cost를 계산해보면 cost(1)로 계산을 해보면 된다.
  • cost함수는 g의z함수이다. g(z) = -log(z)니까 g(z)는 cost이다.
  • 그럼 z가 1일 때 0에 가까우니 cost는 0에 가깝게 된다.
  • 이것이 우리가 원한 결과이다. 실제 레이블이 1이고 예측한 값이 1일 때 cost가 0이 되는 것.

그럼 여기서 우리의 예측이 틀렸을 때를 가정해봅시다.

  • H(x) = 0
  • 그럼 cost는 값이 무한대로 가깝에 된다.
  • 즉, 예측이 틀리면 cost를 굉장히 높여서 우리 시스템에 벌을 주는 형태이다.

y가 0일 때의 케이스

image

학습을 위해 주어진 데이터의 y의 레이블이 0 일때

  • 우리의 Hypothesis가 성공적으로 예측했다고 가정을 해보자.
  • 이 때는 -log(1 - H(x))를 사용한다.
  • 그래서 우측의 그림과 같은 그래프 모양이 나온다.
  • -log(1 - x)를 -log(1 - z)라고 두자.
  • z가 0이면 0에 가깝고 1이면 굉장히 무한대에 가까워지는 형태를 볼 수 있다.
  • 예측이 0으로 맞았다면, 이게 우리가 원하는 바이다. 실제의 레이블과 예측값이 맞았을 때 코스트는 0으로 가게 된다.

시스템이 에측을 실패했을 때

  • H(x) = 1인 경우이다.
  • cost가 굉장히 커진다.
  • 이 이야기는 마찬가지로 예측을 실패했을 때 코스트를 크게하는 것이다.
  • 그래서 우리가 제일 처음 목표했던 코스트의 목표와 아주 잘맞아 떨어지는 것을 볼 수 있다.

image 이 2개의 그래프를 붙이면 우리가 좋아헀던 매끈한 밥그릇 같은 모양이 나온다. 그래서 여기서 바로 경사 하강법을 적용할 수 있게 되는 것이다.

Cost Function 정리

image

다시 한 번 정리해보자면, Cost를 C함수의 값을 더한 것의 평균으로 본다. 각 C함수를 y가 1일 때와 0일 때를 나누어서 2개의 케이스를 가지고 Cost함수를 각각 정의하면 잘된다는 것을 확인할 수 있다.

그런데, 위와 같은 수식은 if condition이 있기 때문에 프로그래밍을 할 때 복잡하게 된다. 그래서 매번 조건절을 달고 다녀야 하는 귀찮음이 있기 때문에 if condition을 없애서 수식을 붙여본 것이 맨 밑의 식입니다.

y가 1인 경우에는 앞의 식이 그대로 있고 뒤에 식이 없어저버립니다. 그래서 y가 1일 때는 -log(H(x)) 식만 남게 됩니다. y가 0일 때는 앞의 식이 사라져버리고 -log(1 - H(x))식이 남는다.

Minimize cost - Gradient descent algorithm

image

그 다음 단계는 Cost를 최소화 시키는 것이다. 그런데 이제 우리의 cost함수는 매끄러운 모양이 나오기 때문에 경사 하강법을 적용해볼 수 있다.

  • 경사 하강법을 사용할 때는 Cost함수의 기울기를 구하기 위해서 미분을 하게 된다.
  • 미분 하는 것은 복잡하니까 그 수식을 굳이 미분을 해볼 필요는 없다. 컴퓨터가 이런 미분을 할 줄 알기 때문에 개념만 이해하면 된다.
  • 알파값으로 step size를 설정하고 그 값을 가지고 현재 가지고 있는 W를 업데이트 시키는 것이다.

Gradient descent algorithm

image

텐서 플로우에 cost를 적어주고 w를 학습하는 부분은 GradientDescentOptimizer라는 함수가 있기 때문에 이부분을 사용하면 된다.