티스토리 뷰

머신러닝

[ML] 3. Logistic Regression

hezma 2020. 7. 27. 20:50

3.0 Intro

Chapter 2에서 다룬 linear model의 핵심 idea는 x를 w와 선형결합한 signal이었다. linear regression과 linear classification은 모두 이를 바탕으로 한 model이었다. 이 때 linear classification은 'Hard' binary classification이었고 0이라는 Hard한 threshold를 기준으로 binary한 결과값을 출력했다. logistic regression'Soft' binary classification으로써 binary response에 대한 probability를 출력하는 model이다.

3.1 Logistic Regression

Intro에서 이야기한 바와 같이 Logistic regression은 어떤 binary event의 probability를 계산하는 model이다. 이 때 model의 출력이 '확률' 이어야 한다는 것을 고려하여 model을 설계해 나갈 수 있다.

3.1.1 Predicting Probability

logistic regression은 probability를 계산하는 model이므로 linear classification처럼 0이라는 Hard한 threshold값을 가져도 안 되고, linear regression처럼 아무 threshold없이 값을 출력해도 안된다.

따라서 우리의 output을 [0,1]사이에 smooth하게 제한하는 Logisitc function theta를 도입하여 우리의 model을 다음과 같이 정의한다.
$$
h(x)=\theta(w^Tx)
$$
이 때 theta를 logistic function 혹은 logistic sigmoid라 한다.

-Logistic function theta

logistic sigmoid는 다음과 같은 함수다.
$$
\theta(s)=\frac{1}{1+e^{-s}}
$$
또한 이를 s에 대해 plot해본 결과는 다음과 같다.

<그림1: theta의 plot>

이를 보면 output이 [0,1]사이에 있는 것을 알 수 있다. 이 때 logistic regression에서는 outputbinary event의 발생 확률로 해석한다.

-Models

지금까지 나온 모든 model들이 input에 어떻게 반응하는지 정리해보면 다음 <그림2>와 같다.

<그림2: summary of activation function>

-Other sigmoids

또한 sigmoid함수는 여러개 있을 수 있는데 예를 들어 tanh도 sigmoid로 사용하기도 한다. 다음 <그림3>은 여러 sigmoid들의 예시다.

<그림3: comparison of sigmoids>

​ 3.1.2 Cross-Entropy Error Measure

-Learning Target in logistic regression

logistic regression에서의 learning target f(x)는 우리가 관심있는 event가 y=+1로 labeling된다고 할 때 다음과 같이 조건부 확률로 정의할 수 있다.
$$
f(x)=P[y=+1|x]
$$
이는 x가 주어졌을 때 관심있는 event의 발생 확률로써 sigmoid의 정의에 의해 [0,1]에 Bounding되어있는 값이다.

-How to measure error in this setting?

이제 model을 정의했으니 training할 때의 error를 어떻게 정의할 것인지가 문제가 된다. 예를 들어 chapter 2의 linear regression에서의 in sample error는 Least square로 정의했다. 이 때 Logistic regression에서는 여러 수학적 성질을 고려하여 다음과 같이 in sample error를 정의한다.

이 때의 error measure는 정보이론의 cross-entropy서로다른 분포 간 error를 measure해야할 때 사용하는 방법이다. 이 in sample error는 point-wise error를 평균낸 것이고 복잡해보이지만 다음과 같은 좋은 성질을 가지고있다.

  1. 의외로 intuitive한 확률적 해석에 근거하고 있다.
  2. gradient-based optimization에 좋은 성질들을 가지고 있다.

1.에 대해 설명하자면 insample error를 y=+1, y=-1로 setting한 그래프를 아래의 <그림4>와 같이 plot해보면 된다.

<그림4: 가중치 합에 대한 error plot>

<그림4>를 보면 알 수 있듯이

  • 실제 Data가 +1일 때 가중치 합(wtx)이 0보다 아주 커야 error가 0에 가까워 진다.
  • 실제 Data가 -1일 때 가중치 합(wtx)이 0보다 아주 작아야 error가 0에 가까워 진다.

따라서 intuitive하게 확률적 해석에 맞는다고 볼 수 있다.

2에 대해서는 조금 뒤에서 다룬다.

또한 사실 이 Error measure는 maximum likelihood 방법으로 유도한 Error와 결국 동일한데, 여기서 그 유도는 생략한다. 여튼 밑에서는 위의 in-sample error를 쭉 쓰면 된다.

3.1.3 Training via Gradient Descent

CH2에서 다루었던 두 linear model- linear classification, linear regression을 생각해보면 전부 in-sample error를 줄이는 방향으로 training을 시도했다. logistic regression도 마찬가지로 in-sample error를 줄이는 방향으로 training이 진행되며 E_in(w)=0을 목표로 두고 푸는 방향으로 간다.

그런데 E_in(w)가 다음 식과 같이 나오는데 이는 수학적으로 한 번에 풀 수 없는 식이다.
$$
\nabla E_{in}(w)= \frac{1}{N}\sum _{n=1}^{N}{ -y_nx_n\theta(-y_nw^Tx_n) }=0
$$
따라서 이 때 iterative한 optimization방법인 Gradient Descent를 이용하여 문제를 풀게 된다.

-Gradient Descent(경사 하강법)

gradient descent방법은 매우 general한 알고리즘으로 gradient는 vector함수의 derivative를 나타내는 말이다. 또한 이 방법은 local minimum 혹은 local maximum을 찾는 방법으로써 global optimization을 보장하지 못한다는 점에 유의해야 한다.

다음 <그림5>를 보자.

<그림5: insample error plot>

위 <그림5>에서 빨간 줄은 in-sample error의 plot이다. gradient descent의 algorithm은 다음과 같다.

  1. t시점의 error가 w(t)에 있다면 그곳에서 다음과 같은'움직일 방향' 벡터를 정한다.

$$
\triangle w = -\nabla E_{in}(w(t))
$$

  1. 그 후 learning rate alpha를 고려하여 다음의 w(t+1)을 정해준다.
    $$
    w(t+1)=w(t)+\alpha \triangle w
    $$

  2. if satisty terminal condition, iteration을 종료. else 1.로 돌아간다.

3의 terminal condition에 대한 구체적인 얘기는 4.1.4에 있다.

또한, delta w를 다음과 같이 크기가 1인 unit vector로 정의하기도 한다.
$$
\triangle w=\frac{-\nabla E_{in}(w(t))}{|\nabla E_{in}(w(t))|}
$$
이 때 learning rate를 적절히 정하는 것이 중요한데 learning rate가 너무 작으면 종료까지 걸리는 iteration이 너무 많아지고 learning rate가 너무 커지면 error가 결코 수렴하지 못할 수도 있다.

또한, learning rate를 가변한 값으로 두기 위해 t시점의 learning rate를 다음과 같이 gradient의 크기에 비례하는 값으로 둘 수 있다.


이 경우 맨 처음과 결국 동일한 계산법이 된다.

또한 in sample Error를 계산하는 것은 총 표본의 수인 N개의 식을 보아야 하기 때문에 각 iteration마다 O(N) time을 소비할 수밖에 없다. 이를 O(1)로 줄이기 위해 한 번의 insample error 계산 시 1개의 표본만을 추출하여 gradient를 계산하는 방법을 stochastic gradient 방법이라 한다.

3.1.4 Logistic Regression Algorithm

-Algorithm Pseudo Code

Gradient descent 방법을 도입한 logistic regression의 알고리즘 총 정리는 다음과 같다.

initialize weights at time step t=0 to w(0)
for t in range(T): # T는 max iteration number
    compute the gradient 
    set the v_t=-gradient
    update weights w(t+1)=w(t)=alpha*v_t
    iterate to next step until it is time to stop
return final weights w

- Basic criteria for Termination

terminating condition은 trivial하게 결론 내릴 수 있는 주제는 아니므로, 다음과 같은 사항들을 상황에 따라 고려하여 설정해야 한다.

  • iteration의 수
  • gradient의 변화-변화가 계속 작다면 수렴한 것일수도?

따라서 경험적으로 logistic regression에서는 다음 두가지의 결합이 잘 작동한다고 한다.

  • large upper bound for # of iterations
  • small lower bound for error

물론, in-sample error curve의 특성에 따라 gradient가 작다고 멈추게하면 다음 <그림6>와 같은 flat-region이 있는 curve에서는 미리 멈출수도 있다.

<그림6: flat insample error curve>

이런 때에는 다음 두가지 조건을 모두 termination의 조건으로 거는 것이 solution이 될 수도 있다.

  • error의 변화 자체도 작지만
  • error 그 자체도 작아야 한다.

- Variants of gradient descent

gradient descent시 error 계산에 몇 개의 sample을 이용할 것인지에 따라 gradient descent의 종류가 나뉜다.

  1. batch gradient descent: N개의 sample을 모두 이용 ->정확하지만 느림
  2. stochastic gradient descent: 각 iteration마다 1개의 sample을 뽑아서 이용 -> 빠르지만 noisy
  3. mini-batch gradient descent: 1과2 사이의 방법으로 사용자가 정한 b개의 sample을 뽑아서 이용(b<N)

 

글을 이렇게 마치고, Logistic Regression을 구현한 이전 글이 있으니 참고하면 좋을 수도 있다. MATLAB으로 Andrew ng의 강좌 과제를 풀었던 글이다.

 https://hezma.tistory.com/14?category=789894

'머신러닝' 카테고리의 다른 글

[ML] 5. Training Neural Network  (0) 2020.08.06
[ML] 4. Neural Network  (0) 2020.07.30
[ML] 2. Binary Classification & Linear Regression  (0) 2020.07.23
[ML] 1. Perceptron  (0) 2020.07.22
Week 4. 3rd Programming Assignment  (0) 2020.02.04
댓글