ML & DL/[강의] 모두를 위한 딥러닝 강좌 시즌 1

[정리/모두를 위한 딥러닝] ML lec 04 - multi-variable linear regression (*new)

uni2237 2022. 9. 15.
728x90
728x90

https://youtu.be/kPxpJY6fRkY

 

 

 

📌 ML lec 04 - multi-variable linear regression (*new)

 

우선 지난 강의에서 다룬 것 처럼

 

Linear regression을 설계하기 위해선 위의 3가지가 필요하다.

1. Hypothesis를 정한다.

-> 주어진 x variable에 대한 W(=weight), b(=bias)를 학습한다.

2. W와 b를 학습하는데 있어서, cost(loss)를 어떻게 계산할 것인지를 정한다.
-> (예측값 - 정답)^2의 합의 평균

3. cost를 최적화하는 알고리즘으로 gradient descent algorithm을 사용한다.
-> cost를 최적화 하는 W와 b를 찾는다.


 

🙋 x variable이 하나인 경우는 위와 같이 진행하면 되지만, 여러 개인 경우는 어떻게 해야 할까?


 

 

Multi-variable Linear Regression의 Hypothesis , Cost


Hypothesis(상) / Cost function(하)

 

Hypothesis 부분이 바뀌게 된다.

-> W 하나에서 w1, w2, w3로 바뀜

 

 

🤨 x가 늘어날수록 수식이 엄청나게 길게 늘어질텐데,,, 불편 ~~~

      -> 잘 처리할 방법이 없을까? 🤷‍♀️

 


 

Matrix Multiplication


 

Matrix multiplication (행렬 곱)

Matrix의 곱셈을 활용하면 된다.

 

행렬 곱 계산방식을 간단히 짚고 넘어가보자.

ex)

(1x7) + (2x9) + (3x11) = 58

    7            18           33  

 

 

🤷‍♀️ 그럼 어떻게 적용한다는 걸까?

 


 

Hypothesis using matrix


 

빨간 박스(우측)와 같이 길게 수식으로 늘어져있던것이, 

초록 박스(좌측)와 같이 간단하게 Matrix로 표현가능하다.

 

(x1, x2,,,xn) 은 X로 표현하고 , (w1, w2,,,wn) 은 W로 표현한다.

결과적으로 H(X) = XW 로 표현할 수 있다.

 

 

 

Many x instances

그런데, 실제 데이터들은 위 그림처럼 많은 instance들을 가지고 있다.

 

 

🤷‍♀️ 그럼 위 그림과 같이 instance 각각을 X로 넣어서 행렬곱하는 형태로 반복하면 되는걸까?

-> No, 비효율적이다.

    x instance 수가 10000개라면 연산을 10000번 해야한다는 소리! 😫

 

 

 

 

=> 여기서 matrix의 장점이 발휘된다. 😀

 

instance의 수에 맞게 X matrix를 만들면 된다. (하지만 W는 그 전과 똑같음)

-> 마치 이전 matrix 식에서 각각의 instance를 한번씩 계산한 것과 똑같은 연산 결과를 얻게 된다.

    (instance 수가 많을 때, 각각의 instance를 계산할 필요가 없어짐)

 

 

 

 

 

matrix multiplication의 규칙

 

matrix 곱셈 연산을 할 때는 다음과 같은 규칙을 지켜줘야한다. 

앞 matrix '열(column)의 차원' = 뒤 matrix '행(row)의 차원'

 

그럼 matrix 곱셈의 결과는 다음과 같이 나온다.

[ 앞 matrix '행(row)의 차원' , 뒤 matrix '열(column)의 차원' ]

 

 

🙋위 규칙을 응용하면 우리의 경우에 맞는 weight의 크기를 쉽게 결정할 수 있지 않을까?

 

 

 


Weight의 크기 결정하는 법


 

W의 '행(row)의 차원' X matrix의 '열(column)의 차원' 과 같아야하고, 이는 'x variable의 개수'이다.

W의 '열(column)의 차원' H(X) matrix의 '열(column)의 차원' 과 같아야하고, 이는 'Y(원하는 결과)의 개수'이다.

 

 

😀 결과적으로 Weight의 크기 [ x variable의 수 , Y 개수 ] 로 쉽게 구할 수 있다.

 

 

 

 

실제로 ' x instance의 수 '는 데이터 수에 따라 가변하는 값이므로 n이라 표현한다.

 

실제 구현할 때는, numpy에서는 -1tensorflow에서는 None으로 표시한다.

(가끔 None이라는 array를 본다면 'n'개이므로 원하는 만큼 들어올 수 있다고 생각하면 된다)

 

 

🤷‍♀️그럼 출력(Y)의 개수가 여러 개인 경우는 어떨까?

 

 

 

출력 ( Y ) 의 개수가 여러개인 경우

출력(Y)의 개수가 여러 개일때도 Weight의 크기는 동일하게 [ x variable(input)의 개수 , Y(output)의 개수 ] 이다.

 

 

 

 

matrix의 장점 😀

- multi-variable의 경우에도 쉽게 처리 가능

- instance가 많은 경우에도 n(=instance 수)으로 쉽게 처리 가능

- 출력(output)이 여러개인 경우에도 쉽게 처리 가능

 

 

 


WX vs XW


마지막으로 주의할 점이다

 

이론상으로는 Wx + b 형태로 많이 나타내지만

구현할 때는 X와 W 모두 matrix인 경우, XW의 순서로 하는 것이 좋다.

 

이유 : X를 앞에 두면 별도의 처리 없이 바로 matrix의 곱만으로도 계산이 가능하기 때문

728x90

댓글