본문 바로가기
파이썬 프로그래밍/Numpy 딥러닝

1. 선형회귀 구현하기(이론)

by Majestyblue 2022. 1. 3.

(시작하기 앞서 기본적인 수학 이론을 공부해야 한다. 아래 링크를 정주행하는 것을 추천한다. https://toyourlight.tistory.com/category/%ED%8C%8C%EC%9D%B4%EC%8D%AC%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EB%94%A5%EB%9F%AC%EB%8B%9D%EA%B3%BC%20%EC%88%98%ED%95%99 ) → 일단 7. 2차원 행렬을 입력받는 합성함수의 도함수(실습) 까지 보면 된다.

 

1. 선형회귀 정의

가장 단순한 선형회귀를 표현해 볼 것이다. 

예를 들어 X = [1, 2, 3], Y = [3, 5, 7] 의 입력(X)와 출력(Y)가 있을 때 이 둘의 관계를 Y = wx + b로 가정하고 w, b를 구하는 것이다. 우리가 눈으로 볼 때 w = 2, b = 1로 쉽게 구할 수 있다.

 

함수 g(X, W, B)와 L(X, W, B)를 아래와 같이 정의할 것이다. 그런데 입력 X값은 바뀌지 않으므로 실제 함수의 파라미터는 g(W, B), L(W, B)가 된다. 

함수 g(W, B)의 정의

 

 

이 식이 맞는지 확인하기 위해 오차함수를 정의한다. 오차함수는 평균제곱오차 MSE(Mean Squared Error)를 이용하겠다.

오차함수 L(W, B)의 정의

 

 

따라서 오차함수는 합성함수로 재정의할 수 있다.

 

 

선형회귀는 오차값을 줄이는 W, B를 구하는 것인데 경사하강법을 이용할 것이다.

따라서 경사하강법을 이용하여 선형회귀를 구현하기 위해서 도함수 ∂L/∂W, ∂L/∂B를 구해야 한다.

 

 

 

 

2. 도함수 구하기

W, B에 따른 오차함수 L(g(W, B))의 도함수를 구하여야 한다. 체인룰을 이용하면 아래와 같다.

 

 

1) ∂L(g(W, B) / ∂g(W, B)는 이차함수 미분과 비슷하다.

 

 

2) ∂g(W,B) / ∂W는 X의 전치행렬이다. (위 파이썬 수학 링크 참고)

 

3) ∂g(W,B) / ∂B는 1이다. 

 

 

 

따라서

도함수 ∂L/∂W는 아래와 같다. (왜 sum이 사라지냐면, 행렬곱 하는 과정에서 이미 더해지기 때문)

 

도함수 ∂L/∂B는 아래와 같다.

 

 

다음시간에 Numpy를 이용하여 코드를 작성하고, pytorch로 검사해 볼 것이다.