본문 바로가기
딥러닝 머신러닝 데이터 분석/BoostCampAITech

[ Boost Camp ] Day-1 학습로그 (벡터, 행렬, 선형회귀, SGD)

by SteadyForDeep 2021. 8. 6.
반응형

본 문서는 강의의 내용을 토대로 다른 자료들을 공부하고 취합하여 재 해석한 내용으로 강의 내용과 많이 다를 수 있음.

이하 모든 출처가 생략된 자료는 모두 Boost Camp AI Tech의 자료에서 발췌한 것임을 밝힘.

 

// 벡터

 

벡터와 행렬의 정의부터 설명하고 넘어갔다.

 

벡터는 여러개의 축으로 이루어진 공간상에서 한 점을 나타내는 수학적인 단위이고

 

이 공간 상에서 두 벡터간의 거리를 결정하는 것을 norm이라고 한다.

 

나는 이걸 놈이라고 읽는데 노름 이라고도 읽는 것 같다.

 

이 norm을 어떻게 설정하냐에 따라 두 벡터상의 거리에관한 규칙이 달라지므로

 

공간의 여러 기하적인 특징이 달라진다.

 

 

원의 형태가 이렇게 달라지는 것을 확인할 수 있다.

 

그 외에 벡터에 관한 설명들은 굉장히 기초적인 것이어서 여기서 설명은 생략한다.

 

// 행렬

 

행렬은 정말 말도 많고 탈도 많은 녀석이다.

 

강의에서 소개된 행렬은 데이터 사이언스 적인 측면에서 행렬을 소개하는데

 

첫번째 관점은 아주 직관적이고 와닿는 방식이다.

 

하나의 행렬은 여러개의 행벡터를 원소로 가지는 열벡터를 말한다.

 

그러니까 이렇게 이해하는 경우 여러 점들의 집합으로 이해하는 것이 가능하다.

 

일종의 미니배치를 생각하면 쉽다.

 

두번째 관점에서 행렬은 물리학에서의 행렬과 유사한데 연산자로써의 행렬이다.

 

 

물론 차원이 다른 공간으로 맵핑을 할 수도 있지만 같은 공간에서 벡터를 회전하거나

 

길이를 변경하거나 하는 식의 모든 벡터연산을 행렬로 정의할 수 있다.

 

딥러닝에서 이런 관점이 중요한 이유는

 

고차원의 데이터를 저 차원의 공간에서 표현하는 것이 딥러닝의 핵심 중 하나이기 때문이다.

 

그리고 대표적으로 L2-norm을 목적함수로 사용하는 경우 어떤 고차원 상의 두 점을 찍고

 

두 점간의 거리가 점점 가까워지게 하는 것으로 학습을 이해할 수 있기 때문에

 

역시 위의 관점으로 행렬의 operation을 이해하는 것은 매우 중요하다.

 

// 선형회귀분석

 

선형회귀분석은 어떤 데이터들이 주어진 경우

 

그 데이터의 경향성을 가장 잘 대표하는 하나의 선을 찾는 작업이다.

 

2차원 혹은 3차원의 경우 그 작업을 시각화해서 이해하는 것이 가능하지만

 

4차원 이상의 데이터가 주어지는 경우 이것을 시각적으로 이해하기란 쉽지 않다.

 

따라서 공부를 하는 입장이라면 2차원과 3차원에서 벌어지는 일을 반드시 숙지한 후에

 

더 높은 차원의 문제로 접근해야 할 것이다.

 

이 그림은 고차원의 선형회귀분석을 저차원에서 이해하기 위한 자료다.

 

여기서 주의해야할 점은 X가 행렬이고 \beta가 벡터로 나와있지만

 

사실 Operation은 \beta 가 하고있고 X의 각 행은 하나의 행벡터로 되어있다는 점이다.

 

이경우 하나의 n차원 행벡터를 y축만 있는 1차원 공간으로 맵핑한다고 봐야한다.

 

보통의 회귀나 학습에서 우리가 변화시킬 수 있는 parameter로 이루어진 행렬이 Operation을 담당하게 된다. 

 

기계학습은 최적의 Operation을 찾는 작업이기 때문이다.

 

이 작업을 L-2 norm 등을 이용해서 최적화하는 것도 가능하지만

 

저런 수식을 보면 가장 먼저 떠오르는 작업은 역시 역행렬을 이용해서 풀어보는 작업일 것이다.

 

하지만 X가 정사각행렬이 아닌경우에는 역행열을 어떻게 구해야 하는 것일까

 

그때 사용하는 방법이 바로 무어-펜로즈(Moore-Penrose) 역행렬을 사용하는 방법이다.

 

유사 역행렬이라고도 하는 이 역행렬은 Singular Value Decomposition (SVD) 이라는

 

작업에서 굉장히 유용하게 사용된다.

 

SVD 는 일반적인 행렬에서 Eigen value problem을 푸는 문제로

 

이미지 처리에서 굉장히 유용하게 사용되는 것으로 알고 있다.

 

 

잘보면 첫번째 식의 양변 우측에 A를 곱하면 우변이 항등행렬이 된다.

 

두번째 식의 좌측에 A를 곱하면 우변이 항등행렬이 된다.

 

역행렬의 정의에서 출발하여 자신과 곱해졌을때 항등행렬이 나온다는 성질을 만족하는 행렬을 찾는 작업인 것이다.

 

 

그 뒤로는 일반적인 연립방정식의 해를 찾는 작업과 동일하다.

 

그런데 이 방법에서 하나의 문제점은 식의 수보다 변수의 수가 많아지면 수학적인 해를 구할 수 없다는 것이다.

 

그럴때는 최적화를 통해서 해를 찾아야한다.

 

// 경사하강법

 

최적화를 통해서 해를 찾을 때는 거의 모든 경우에서 경사하강법을 이용한다.

 

내가 도달하고자 하는 점이 있는 경우 내가 설계한 모델이 주는 출력과

 

도달하고자 하는 점간의 거리를 구해서 그 거리를 최소화 하는 작업을 한다.

 

그러니까 우리가 타고 내려갈 경사는 거리-모델파라미터 공간에서 생기는 경사다.

 

 

위에서 본 선형회귀식을 풀어보면 이렇게 기울기를 구할 수 있고 이 기울기를

이 식에 대입에서 베타를 업데이트 하는 것까지 가능하다.

 

AI Tech 과정에서 과제로 이 기울기가 실재로 어떻게 움직이는지 구해보는 과제가 있었는데

 

이런걸 수학적으로 정리해보고 이론으로 적립해 보는 것도 매우 귀중한 시간이지만

 

실전에서 사용해 보는 것 또한 굉장히 중요한 작업이므로 반드시 병행해야한다.

 

그런 부분에서 AI Tech 커리큘럼은 정말 잘 짜여져 있는 것 같다.

 

// 확률론적 경사하강법

 

지금은 mini batch를 써서 학습하는 것이 아주 당연한 시절에 살고있지만

 

내가 기억하기로도 mini batch를 쓰는 것이 과연 얼마나 효과가 있나

 

왜 mini batch는 학습이 잘 되고 full batch는 학습이 잘 안되나 하는 논쟁이 꽤나 뜨거운 감자였던 시절이 있었다.

 

이것에 대해 강의를 해 주셔서 간단하게 짚고 넘어가고자 한다.

 

내가 만든 자료

 

우선은 우리가 타고 내려가는 경사는 오차-파라미터 공간의 경사라고 했다.

 

그러므로 데이터 X와 Y 가 주어지면 이 값들은 더이상 바꿀 수 없고

 

파라미터를 바꿔가면서 오차가 낮아지는 방향으로 움직여야 한다.

 

그 말은 우리가 타고 내려가야하는 manifold의 특성을 바로 이 X와 Y가 결정한다는 말이다.

 

우리는 파라미터가 굉장이 많은 모델을 이용해서 데이터의 분포를 근사하게 되는데

 

이때 파라미터가 많아지고 층이 여러겹이 될 수록 이 manifold의 구조는 복잡해 진다.

 

따라서 굉장히 많은 local minimum이 생길 수 있고 이 웅덩이에 언제든지 빠져버릴 수 있게 된다.

 

하지만 X와 Y가 그때 그때 바뀌는 식으로 훈련을 하게 되면 이 local minimum의 위치가 바뀐다.

 

같은 parameter 를 사용해도 어떤 데이터에 대해서는 local minimum이지만

 

어떤 데이터를 입력하면 이 부분이 경사를 가지게 되어 학습이 가능해 지는 것이다.

 

이런식으로 계속해서 경사면을 바꾸어주면서 학습을 하게되면

 

결국 최적의 해는 아니지만 어느 정도 오차가 낮은 범위 내에서 진동하는 해를 얻을 수 있다는 것이

 

바로 이 Stochastic Gradient Descent의 철학이다.

 

끝.

반응형

댓글