저번시간에 언급한 Single-Layer Neura Network에 대한 기본 알고리즘인 Gradient Descent를 공부했다.

전체적으로 Single-Layer Neura NetworkPerceptron과 같은 개념으로 보고, 아래와 같이 그림으로 나타낼 수 있다.
게다가 고전 알고리즘인 Linear Regression도 비슷한 개념으로 생각하자.

image

이러한 SLNN는 사실 Regression문제을 위한 Single-Layer Neural Network다.

그러면 Regression문제 이외에 다른 문제가 있을 까?


Regression문제 과 classification문제

기본적으로, 주어진 Data를 보고 Regression문제인지 Classification문제인지를 먼저 정의해야한다.
image

위 표를 참고하여, 우리가 받은 Data의 label높고 낮음이 중요-> Regression문제
위 표를 참고하여, 우리가 받은 Data의 label이 같냐 다르냐가 중요-> Classification문제

전통적인 알고리즘인 리니어, 로지스틱 회귀와 관련해서는

Regression알고리즘을 ---> Regression문제에 적용하여 푼 것 : Linear Regression
Regression알고리즘을 ---> Classification문제에 적용하여 푼 것 : Rogistic Regression


Binary Classification문제

Binary Classification문제는 y값의 범위가 0 or 1이다.

그러나 저번시간에 배운 Regression알고리즘(SLNN-gradient descent)h(x)(y_predict)값이
 -무한대 ~ +무한대까지 나오므로 binary classification문제에 적용을 할 수 없다.

그러므로, 저번시간의 Regression알고리즘인 SLNN-gradient descent을 ---(???)-----> classification알고리즘으로 바꿔주어야한다.

  • Regression알고리즘에서는 h(x)의 값으로 -무한대 ~ +무한대까지 나왔다.
    이제 중간에, 이 값(-무한대~+무한대)를 받아서 ---> 예측값(h(x), y_predict)값이 0 or 1이 나오도록 으깨주는 새로운 함수 f(x)를 집어넣는다.
    이러한 f(x)squarsh function이라고 하며, y값(h(x), y_predict)가 0or1으로 정의되므로
    binary classification문제를 풀 수 있는 classification알고리즘이 된다.
    image

  • Squarsh function로 0 or 1이 나오도록 으깨어서 Regression - SLNN알고리즘에 적용시 ----> classification알고리즘이 된다.
    하지만, 이 Squarsh function은 반드시 미분가능해야한다. ->
    그래야 f(x)로부터 정의되는 h(x), L(y,h(x)), J(w,b) 편미분하여 -> w를 업데이트 해 줄 수 있다.
    그러므로 Squarsh function의 전제조건은
    • x가 뭐가 들어가는 간에, 0과 1이 나와야한다.
    • 미분가능해야한다.
      그림2

  • 이 전제조건(미분가능하고 0or1이 나오는)을 만족하는 Squarsh function이 바로 f(x) = Sigmoid이다.

    {\displaystyle S(x)={\frac {1}{1+e^{-x}}}={\frac {e^{x}}{e^{x}+1}}.}

    def
    sigmoid(x):
         return 1 / ( 1 + np.exp(-x) )

    식은 아래와 같고, https://www.desmos.com/calculator 에서 그려면 그래프는 아래와 같다.
    image
    x가 무엇이 들어오든 0과 1사이로 Squarsh한다.
    soomth하므로, 미분이 가능하니 --> h(x), L(y, h(x)), J(w,b)모두 미분가능하다.

여기까지 요약해보면,
저번시간에는
Regression문제(h(x), y예측값이 -무한대+무한대)를 푸는 Single-Layer Neural Network가
저번시간에 학습한 Gradient Descent이다.


이번에는
Classification문제(h(x), y예측값이 0or1) 를 푸는 Single-Layer Neural Network를 짜기위해서
Gradient Descent 알고리즘 중 h(x)값이 0or1이 나오도록 미분가능한 sigmoid를 h(x)전에 f(x)로 씌워준 시킨 뒤, 합성해주었다. h( f(x) )

하지만 여기까지만 하면 문제가 발생한다.

  • sigmoid를 입힌 Loss function은 그래프상으로 울퉁불퉁해져서, 접선의 기울기가 0이지만 happy하지 않는 또다른 지점(Local obtimer)이 생겨, 정답(y_predict - y = 0)이 아님에도 불구하고 w를 업데이트 안시켜주는 현상이 생길 수 있다.
    image
    이렇게 울퉁불퉁한 h(x)를 graident로 태우면, L(y,h(x))는 느리거나 수렴하지 않을 수 있다.

  • sigmoid에 있는 e^x 때문에 결국에는 울퉁불퉁해진다. 이 울퉁불퉁한 것을 없애서 happ한 Loss function을 만들어주기 위해
    sigmoid에 Log를 입혀 e^x를 없애 울퉁불퉁함을 없애준다.
    그렇다면, sigmoid가 들어감에도 불구하고 Loss가 soomth해지기 위해 Log가 들어가야하므로
    Log가 들어가는 새로운 Log function을 정의해보자.

    즉, Binary Classification문제(0or1)을 풀기위한 Single-Layer Neural Network 알고리즘으로서
    기존의 Graident Descent에서 sigmoid를 입힌 h(x)를 정의하고, 울퉁불퉁한 부분을 위해 Log를 입힌 Loss function
    그게 Cross-Entropy 이다.
    image


  • Cross-entropy의 경우에도, 역시 Loss function은 0일 때, happy / 무한대일때, unhappy하다.
    증명은 아래 그림을 참고하자.
    image


여기까지 요약하자면,

classification문제에서도 사용할 수 있는 Gradient Descent(SLNN)알고리즘을 만들기위해

1. y값이 0or1이 나오도록 squarsh function인 sigmoid를 입히고

2. 울퉁불퉁하여 미분이 되지않는 것을 방지하기 위해 Log를 입힌 Loss function이 cross-entropy이다.

이렇게 만든 Loss function은 Graident를 태울 수 있다.


우리가 실제로 쓰는 함수는 Loss function이 아니라 cost function이다.
cross-entropy(모든loss function)에서 0 or 무한대가 나오는 것을 증명을 통해 확인할 수 있는데,
만약 우리의 데이터 중에 하나라도 unhappy한 데이터로 인해 무한대가 나온다면,
전체 데이터에 대한 loss function인 cost function이 무한대가 나올 것이다.

그렇게 된다면 너무 불합리한 알고리즘이 될 수 있다.

실제 코드에서 cross-entropy를 사용할 때는,
예측값y_predict에서는 0 or 1이 나오는 것이 아니라 확률로 나온다.
그리고 그 확률을 0.5이하시 -> 0으로, 0.5 초과시 -> 1으로 분류해버릴 것이다. 이러한 것을 클리핑or쓰레숄더라고 하는데,
이렇게 한다면, Loss function에서는 y가 0or1만 가지게 될 것이므로, 무한대의 문제가 안생긴다.


  • 실제로 Graident Descent를 돌리기 위한 w를 업데이트 하기 위해서는 cost function 편미분( 결국에는 loss function편미분)을 한 것이 필요하다.
    - 그 과정에서는 Loss function의 편미분을 구한다.
    - 그 과정에서는 h(x) = sigmoid( z(x) )의 미분이 들어간다 * sigmoid 미분 = sigmoid( 1 - sigmoid )
    - Binary Classification문제를 풀기위해만든 SLNN의 알고리즘loss function인 Cross-entropy 편미분 결과는
      Regression문제를 풀기위한 SLNN의 알고리즘(Gradient Descent)의 loss function의 편미분 결과와 동일하고 코드도 같다.
      imageimage
    image
    image


실습

실습한 로컬 노트북 파일




+ Recent posts