머신 러닝

[머신러닝 코세라 강의] (2주차) "Gradient Descent 벡터 표현" Machine Learning (by Andrew Ng)

마빈 Marvin 2022. 5. 29. 05:15

 

Andrew Ng 교수님의 Coursera 머신 러닝 수업 중 Octave 를 사용하는 튜토리얼 내용을 정리중이다. 오늘은 다른 프로그래밍 언어에서도 참고할만한 vectorization 개념과 Octave 코드에 대해서 다루어보도록 하겠다. 파이썬 코드는 다음 포스팅에 마련해두어야겠다. 

 

Octave 관련 내용 목차

(1) Basic Operations

(2) Moving Data Around

(3) Computing Data

(4) Plotting Data

(5) Control Statements: for, while, if statement
[Octave 관련 이전 포스팅, (1-5) 바로가기 링크]

(6) Vectorization (이번 포스트)

 

(6) Vectorization

 

(numerical) linear algebra 라이브러리를 이용하면 속도가 더 빨라질 수 있다.

 

hθ(x)=j=0nθjxj

=θTx

where θx 는 vector. 

 

Unvectorized implementation.

octave:3> prediction = 0.0;

octave:4> n = length(x)

n =  3

octave:5> for j = 1:n,

> prediction = prediction + theta(j)*x(j)

> end;

prediction =  2

prediction =  14

prediction =  44

 

Vectorized implementation.

octave:6> prediction = theta'*x;

octave:7> prediction

prediction =  44

 

두 값이 동일함을 볼 수 있다. 코드도 짧고 속도도 빠르다.

 

Gradient descent

θj:=θjα1mi=1m(hθ(xi)yi)xij

for n=2

θ0:=θjα1mi=1m(hθ(xi)yi)xi0

θ1:=θjα1mi=1m(hθ(xi)yi)xi1

θ2:=θjα1mi=1m(hθ(xi)yi)xi2

를 벡터 형태로 만들어보자. 

θ:=θαδ

where δ=1mi=1m(hθ(xi)yi)xi 

에서 θRn+1, αRn, δRn+1

 

δ 에 집중해보자. 

δ0=1mi=1m(hθ(xi)yi)xi0.

 

인데, (hθ(xi)yi)R 이고, xiRn+1

δ=i=1m(hθ(xi)yi)xi=(hθ(x1)y1)x1+(hθ(x2)y2)x2+...+(hθ(xn)yn)xn 이다.

여기서 각각의 (hθ(xi)yi)xi 는 scala × vector 형태이다.  

 

δ 를 매트릭스의 곱형태로 표현해보자. 

 

δ=i=1m(hθ(xi)yi)xi=(hθ(x1)y1)x1+(hθ(x2)y2)x2+...+(hθ(xn)yn)xn

=(hθ(x1)y1)[x10x11x12]+(hθ(x2)y2)[x20x21x22]+...+(hθ(xn)yn)[xn0xn1xn2]

=[x10x20...xn0x11x21...xn1x12x22...xn2][(hθ(x1)y1)(hθ(x2)y2)...(hθ(xn)yn)]

=xT(hθ(x)y)

where y=[y1y2...yn]

 

마무리하며

 

[ ] 추후에 gradient descent 알고리즘을 위의 matrix 방식을 적용하면 계산 속도가 더 빨라질 것 같다. 

     - cost function 과  gradient descent algorithm 을 for loop 을 이용해서 구하는 링크

 

부록

 

NOTE: xT(hθ(x)y) 를 도출하는 과정에서 vector (xT) 와 scala (hθ(xi)yi) 들과 관련된 내용:

[135246][abc]

=[1a+3b+5c2a+4b+6c]

=[12]a+[34]b+[56]c