머신러닝 독학하기 - 로지스틱 회귀

maintain·2020년 9월 16일
1

퍼셉트론

퍼셉트론은 기본적으로 선형회귀와 유사한 구조를 가지고 있습니다. 선형회귀와 같은 선형 함수를 사용하는 것은 같지만 마지막 단계에서 이진 분류를 위해 계단 함수를 사용하고, 계단 함수를 통과한 값을 학습하는 데에 사용합니다.

  • 선형 함수

    w1x1+w2x2+w3x3...wnxn+b=zw_1x_1 + w_2x_2 +w_3x_3 ... w_nx_n+ b= z

  • 계단함수
    y={1(z>0)1y = \begin{cases} 1 & (z > 0) \\ -1 \end{cases}

아달린

아달린은 퍼셉트론보다 나중에 나온 알고리즘입니다. 아달린은 선형 함수와 계단 함수를 사용하는 것까진 퍼셉트론과 같지만 퍼셉트론과 달리 선형 함수의 결과를 학습하는 데에 사용합니다.

로지스틱 회귀란

로지스틱 회귀는 아달린에서 중간 과정이 하나 더 추가됩니다. 선형 함수를 통과한 결과값 z에 활성화 함수를 통해 변형시키고 이 변형된 값을 학습하는 데에 사용합니다. 또한 마지막에 계단 함수가 아닌 임계 함수를 사용해 예측을 수행합니다.
이 활성화 함수는 보통 비선형 함수를 사용합니다. 선형 함수를 사용할 경우 활성화 함수를 통과한 결과는 선형 함수와 선형 함수를 곱한 꼴로 또다른 선형 함수를 통과한 모양이 되기에 크게 존재하는 의미가 없습니다. 그래서 활성화함수는 반드시 비선형 함수를 사용합니다. 로지스틱 회귀에서는 시그모이드라는 비선형 함수를 사용합니다.
로지스틱 회귀에서는 이진 분류가 목표이므로 무한 범위를 가지는 z값을 조절해야 했습니다. 그래서 시그모이드 함수를 통해 z를 확률처럼 해석할 수 있게 했습니다. 그리고 확률은 참과 거짓으로 나누기 위해 임계 함수를 사용했습니다.

  • 시그모이드

    p=11+ezp = \frac{1}{1 + e^{-z}}

로지스틱 손실 함수

로지스틱 회귀의 목표는 올바르게 분류되는 데이터의 비율을 높이는 것입니다. 이 비율은 미분 가능하지 않기 때문에 경사 하강법의 손실 함수로 사용할 수 없습니다. 로지스틱 손실 함수를 손실 함수로 대신 사용합니다.

  • 로지스틱 손실 함수

    L=(ylog(a)+(1y)log(1a))L = -(y\log{(a)} + (1-y)\log{(1-a)})

이진 분류의 경우 결과는 참과 거짓 즉 1, 0입니다. 그렇다면 다음 두 가지 경우로 나눌 수 있겠죠

{logay=1log(1a)y=0\begin{cases} -\log{a} & y = 1 \\ -\log{(1-a)} & y = 0 \\ \end{cases}

로그 함수의 개형과 a, 즉 시그모이드 함수를 통과한 값의 범위 0부터 1을 생각해볼 때, 손실함수의 값을 최소로 만들려면 y=1일 때는 a가 1에 가까워야 하고, 반대일 경우 0에 가까워야 합니다. 이 값을 계단 함수에 통과시키면 참일 확률이 높다면 참으로 아니라면 거짓으로 결과가 판별되겠죠. 이제 경사하강법을 사용하기 위해 미분하겠습니다.

로지스틱 함수 미분으로 절편과 가중치에 대한 변화율 구하기

  • 가중치의 경우

    • dLdw=dzdwdadzdLda\frac{dL}{dw} = \frac{dz}{dw}\frac{da}{dz}\frac{dL}{da}
    • dLda=d(ylog(a)+(1y)log(1a)da\frac{dL}{da}=-\frac{d(y\log{(a)} + (1-y)\log{(1-a)}}{da}
      =(ya+1y1a×(1))=-(\frac{y}{a} + \frac{1-y}{1-a}\times(-1))
      =ya+1y1a=-\frac{y}{a} + \frac{1-y}{1-a}
      =aya(1a)=\frac{a-y}{a(1-a)}
    • dadz=ddz(11+ez)\frac{da}{dz} = \frac{d}{dz}(\frac{1}{1+e^{-z}})
      =d(1+ez)1dz= \frac{d(1+e^{-z})^{-1}}{dz}
      =(1+ez)2×(ez)= -(1 + e^{-z})^{-2}\times(-e^{-z})
      =ez(1+ez)22=\frac{e^{-z}}{(1+e^{-z})^{2}}^{2}
      =1+ez(1+ez)21(1+ez)2=\frac{1+e^{-z}}{(1+e^{-z})^{2}} - \frac{1}{(1+e^{-z})^{2}}
      =aa2=a - a^{2}
      =a(1a)= a(1-a)
    • dzdw=d(i=1n(wixi)+b)dw\frac{dz}{dw} = \frac{d(\sum_{i=1}^n (w_ix_i) +b)}{dw}
      =xi=x_i
    • dLdw=dzdwdadzdLda\frac{dL}{dw} = \frac{dz}{dw}\frac{da}{dz}\frac{dL}{da}
      =aya(1a)×a(1a)×xi= \frac{a-y}{a(1-a)}\times a(1-a)\times x_i
      =(ya)xi=-(y-a)x_i
  • 절편의 경우

    • dLdb=dzdbdadzdLda\frac{dL}{db} = \frac{dz}{db}\frac{da}{dz}\frac{dL}{da}
    • dzdb=d(i=1n(wixi)+b)dw=1\frac{dz}{db} = \frac{d(\sum_{i=1}^n (w_ix_i) +b)}{dw} = 1
    • dLdb=dzdbdadzdLda\frac{dL}{db} = \frac{dz}{db}\frac{da}{dz}\frac{dL}{da}
      =aya(1a)×a(1a)×1= \frac{a-y}{a(1-a)}\times a(1-a)\times 1
      =(ya)=-(y-a)

정리

  1. 선형 함수로 데이터 통과
    w1x1+w2x2+...b=zw_1x_1 + w_2x_2 + ... b = z
  2. 선형 함수의 결과 z가 시그모이드 활성화 함수를 통과
    a=11+eza = \frac{1}{1 + e^{-z}}
  3. 예측하는 경우 이 값이 0.5보다 크면 참 아니면 거짓을 반환
  4. 훈련하는 경우 로지스틱 손실함수를 가중치와 절편의 변화율을 빼서 가중치와 절편 업데이트
    L=(ylog(a)+(1y)log(1a))L = -(y\log{(a)} + (1-y)\log{(1-a)})
    가중치 변화율 : =(ya)xi=-(y-a)x_i
    절편 변화율 : =(ya)=-(y-a)
  5. 다른 데이터로 반복

참고

정직하게 코딩하며 배우는 딥러닝 입문
다음에는 로지스틱 회귀를 구현해 보겠습니다. 이 글은 개인 공부 기록용으로 작성하였으며 오류가 있을 수 있습니다.

0개의 댓글