(시작하기 앞서 기본적인 수학 이론을 공부해야 한다. 아래 링크를 정주행하는 것을 추천한다. 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)가 된다.
이 식이 맞는지 확인하기 위해 오차함수를 정의한다. 오차함수는 평균제곱오차 MSE(Mean Squared Error)를 이용하겠다.
따라서 오차함수는 합성함수로 재정의할 수 있다.
선형회귀는 오차값을 줄이는 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로 검사해 볼 것이다.
'파이썬 프로그래밍 > Numpy 딥러닝' 카테고리의 다른 글
6. 소프트맥스(softmax) 함수 탐구 (2) | 2022.01.07 |
---|---|
5. 로지스틱 회귀 구현하기(실습) (0) | 2022.01.04 |
4. 로지스틱 회귀 구현하기(이론) (2) | 2022.01.04 |
3. 입력 특성이 2개인 선형회귀 구현(이론, 실습) (0) | 2022.01.03 |
2. 선형회귀 구현하기(실습) (0) | 2022.01.03 |