컴공과컴맹효묘의블로그

수알못의 머신러닝 공부 : 행렬과 벡터로 경사하강법을 본문

컴퓨터/머신러닝

수알못의 머신러닝 공부 : 행렬과 벡터로 경사하강법을

효묘 2019. 7. 25. 16:22
반응형

안녕하세요 효묘입니다. 이번 포스팅에서는 지금까지 소개한 내용을 바탕으로 경사하강법을 좀 더 보기 간결하게 수학적으로 짧게 표현하도록 하겠습니다.

 

행렬이란 : https://hyomyo.tistory.com/15

행렬곱 :  https://hyomyo.tistory.com/16

전치행렬이란? : https://hyomyo.tistory.com/17

경사하강법 : https://hyomyo.tistory.com/13

 

이전에는 X 즉, 학습 훈련집합의 종류가 하나였습니다. 

 

수학적으로는 y = a + b*x 라는 것이죠. 하지만 만약 학습 훈련집합의 종류가 여러개라면 변수가 너무 많아질겁니다.

 

y = a + b*x_1 + c*x_2 + d*x_3 ... 이런 길고 복잡한 식이 나오게 되는데, 수학의 "행렬"을 이용하면 쉽게 풀어쓸 수 있습니다.

 

일단 표현식을 먼저 보여드리겠습니다.

 

첫 번째는 x의 i 번째 '집합(vector)', 그리고 두 번째는 x의 i번째 '집합' 의 j번째 해당하는 값 입니다.

위 사진에는 나와있지 않지만, n은 x의 특징의 개수 라고해둡시다.(x의 특징 갯수 = 변수의 개수)

 

인공지능이 예측할 직선(모듈)의 수식입니다. 여기서 패턴이 보입니다. 

 

아주 간결하게 이런 식으로 표현할 수 있겠죠.

 

그리고 x_0을 만들어서 x_0=1이라고 하면 훨씬 더 간결해질 수 있습니다.

 

이 식을 위처럼 시그마를 사용할 수도 있지만, 시그마를 추후에 다른 수식을 간결히 표현할 때 복잡해지기 때문에 행렬로 표현하도록 하겠습니다. 차라리 이 기회에 행렬과 친해지면 좋을거같습니다.

 

column 방향으로 1xn의 matrix는 column vector라고 표현합니다. row 방향은 당연히 row vector입니다.

x와 세타를 위와 같이 표현했네요.

 

여기서 세타를 전치행렬하고 행렬곱을 해주면 아주 간단해집니다.

이제 엄청나게 간단한 수식을 얻었습니다! 물론 행렬표현에 익숙해지기엔 시간이 좀 걸릴거같습니다. 저는 아직도 익숙하지가 않네요..ㅠ

 

 

암튼 이제 경사하강법의 새로운 알고리즘을 적용하도록 하겠습니다.

 

비용함수입니다.

경사하강법의 알고리즘은 다음과 같죠.

이제 이걸 이전의 경사하강법 알고리즘과 이번 포스팅을 통한 알고리즘을 적용시켜보았습니다.

새로운 알고리즘은 이전 알고리즘보다 짧고, 간결하고, 더 많은 종류의 x(input)을 적용해도 여러개의 수식들을 만들 필요가 없어졌습니다.

 

이번 포스팅은 여기까지 하겠습니다. 감사합니다.

 

수알못의 머신러닝 공부 시리즈는 제가 안드류 응 교수님의 강의를 들으면서 한글로 정리한 것이고, 이 강의는 coursera에서 무료로 들으실 수 있습니다.

반응형
Comments