머신러닝

1-17 AI 머신러닝의 원리와 Regression

coding art 2020. 1. 1. 12:47
728x90

인공지능 머신러닝의 원리를 탐구하는 과정에서는 뉴튼의 고전 물리학이라든지, 아인슈타인의 상대성 원리, 양자 역학, 평행 우주론을 비롯한 어려운 물리적 원리가 아닌 에너지 최소화 또는 오차(error) 최소화와 같은 간단한 원리가 핵심 역할을 하고 있다. 에너지, 오차의 의미를 이해하기 어렵다면 비용 즉 코스트(Cost) 개념으로 바꾸어 생각해도 무방하다.

 

머신 러닝에 입문 단계에서 누구나 다루어 보는 선형회귀(linear regression) 통계학 문제를 검토해 보자. 이 문제는 머신 러닝이 각광을 받기 이전부터 통계학에서 최소자승법(least squares method)과 함께 오래전부터 다루어 온 전통적인 수학 문제이다. 오래 전부터 그렇게 생각해 왔었는데 물리학적인 관점에서 다시 생각해보는 계기를 가지게 되었다. 누구나 다 알다시피 중고교 과정에서 스프링이나 탄성고무에 관한 영의 법칙(Young’s Law)을 기억할 것이다. 이 영의 법칙을 사용하여 선형회귀 문제를 정식화하고 풀어 보기로 한다.

 

다음과 같이 무게가 거의 없는 강성 바 문제를 Linear Regression 방식으로 고려해 보자. 이 강성 바는 원점에서 회전이 가능하며 직선의 방정식에서 보면 기울기는 미지수 w 이며 절편 즉 바이아스 값이 0 인 경우이다. X=2 X=3에 대응하는 강성 바에 길이가 0 이며 스프링 상수 값을 k로 가지는 스프링이 부착되어 있으며 이 스프링을 늘여 A점 즉 (2, a) 그리고 B점 즉 (3, b)까지 늘이도록 하자. 이때에 강성 바의 기울기 w를 구해 보자. 즉 함수 Y=wX를 결정하는 문제인데 머신러닝 과정에서 이렇게 결정해야 할 함수를 흔히 Hypothesis 라 부르기도 한다는 점을 참조하자.

 

 

길이가 늘어난 선형 스프링 A B에 저장된 탄성 에너지는 각각 다음과 같이 주어진다.

 

 

강성바 전체에 저장된 탄성에너지는 각각의 스프링에 저장된 탄성에너지의 합으로 주어진다.

 

 


이와 같이 탄성 에너지의 합은 w2차식임을 알 수 있다. 물리학 관점에서 탄성에너지와 같은 포텐셜 에너지는 최소값을 가지게 되는 상태에서 안정적으로 평형(equilibrium)상태에 머문다. 스프링 상수 k 0.0 이 아닌 양의 상수이므로 양변을 나누어서 생각해 보자.

 

 

완전제곱법을 사용하여 위 w에 관한 2차식이 최소값을 가지게 되는 w 값을 찾아보자.

 

 

w=(2a+3b)/13 일 때에 탄성 에너지 E는 최소값을 가지게 된다.

a=2.5, b=0.5 이면 w=0.5가 되며 (E/k)의 최소값은 1.625 가 된다.

 

약간의 계산이 필요한 물리 문제임을 알 수 있으며 컴퓨터 프로그램에 의해서 이런 과정을 잘 처리할 수 있을 것이다. 자 그렇다면 컴퓨터 프로그램 말고 이런 문제를 잘 처리할 수 있는 생물체 상의 메카니즘이 바로 뉴론으로서 즉 시냅스에서 입력되는 데이터를 웨이팅(Weighting)하여 처리가 가능하다.

 

Least Squares Method 정식화

 

강성 바 문제를 통계학적으로 다시 설명해보자. 직선 방정식의 기울기 w가 얼마일 때 직선의 방정식 y=wx에 대해서 A점과의 거리의 제곱과 B점과의 거리의 제곱의 합이 최소값을 가지게 되는가?

 

 

 

 

강성 바 문제의 전체 탄성 에너지 (2)식과 least square method(4)식은 배율을 제외하면 동일한 함수 형태를 가짐을 알 수 있다. 결론적으로 수학적인 문제로 여겼던 least square method 문제나 고무줄로 당기는 물리학적인 강성 바 문제가 동일하다는 점을 알 수 있다.

 

아울러 에러의 제곱들의 합을 샘플 수로 나누게 되면 통계학에서 말하는 분산(Variance)값이 얻어지게 되는데 이 통계적인 분산 값을 최소화하는 알고리듬이 바로 최소제곱법에 해당한다.

 

통계학적 선형회귀 예

아래의 그래프 사례를 생각해 보자. 많은 수의 점들이 찍혀 있는데 이 점들의 경향을 나타내어 줄 수 있는 대표적인 직선의 형태를 결정해야 하는 상황이다. 예를 들어 가로축을 키 세로축을 체중이라고 하자. 특정한 상관관계가 있을 수 있다. 어떻게 할 것인가? 수많은 점들을 대상으로 직선의 방정식을 풀어내야 할 것인가??? 직관적으로 적절한 기울기를 가지는 직선을 찾아야 할 것이다. 어떻게? 각 점을 대상으로 가상의 직선 방정식으로부터의 오차의 제곱을 계산하여 최소화 하는 것은 어떨까?

 

Linear Regression 모델에서의 특징은 고려하는 대상의 풀어야 할 지배 방정식이 따로 없다는 점이며 대신에 인위적으로 cost 함수를 설정하고 이 값을 최소화 하도록 문제를 꾸며야 한다는 점이다. 앞에서 검토했던 강성 바 모델에서는 최소화의 대상이 무엇이었는지 알아보자.

 

한편 이 Linear Regression은 어떤 목적으로 적용되는가? Linear Regression 분석을 위해 어떤 종류의 데이터가 사용되는가 하는 문제인데 즉 독립 변수 x 와 종속 변수 y 와의 관련성을 검증해 보는 것이다. 관련성이 대단히 높을 경우 독립 변수 x 의 변화에 따른 종속 변수 y의 변동이 높은 관련성으로 인해 예측이 가능해진다.

 

Random 변수 Linear Regression 모델에서 사용하는 데이터의 성격을 고려해 보자. 위 그래프 예제에서 볼 수 있는 (x, y) 데이터에서 독립 변수 x 의 선택은 (0,10) 사이의 구간에서 random 해 보이는 듯하다. random 이란 특정한 패턴이 없이 무작위적인 확률분포를 특징으로 규정지울 수 있다. 반면에 y 값은 어느 정도 독립 변수 x 에 대하여 선형적 영향을 받고 있다는 것을 알 수 있다.

 

Cost 함수 Linear Regression 모델을 결정하기 위한 방법으로서 최소자승법 또는 최소제곱법, least square method는 서두에서 제시되었던 3점 데이터 모델에서 다음과 같이 cost 함수가 주어진다.

 

 

 

Gradient Descent Linear Regession 과정에서 결정해야 할 파라메터는 y=w*x+b를 윗 식에 대입하게 되면 cost 함수가 미지수 w b2차식 형태가 얻어진다. 여기서 기울기에 해당하는 웨이트 w 와 바이아스(절편) b는 아무런 제한이 없는 실수 값을 가진다. 특히 다항식의 2차 항의 계수가 플러스인 2차 방정식 형태에서 최소값을 구하기란 그리 어렵지 않다. 물론 처리해야 할 점 데이터 수가 크게 늘어날수록 최소값을 찾아내기에 특화된 특별한 알고리듬의 컴퓨터 코드 즉 경사 하강법(Gradient Descent, Steeptest Descent) 루틴을 사용하여 적용하는 것이다.

 

머신 러닝과 관련하여 언제나 적용되는 경사 하강 법은 최신의 알고리듬이 아니라 이미 1970년대 컴퓨터 보급 여명기로부터 수치해석법의 발전에 따라 오랫동안 사용되어 오던 기법이다. 물론 구글의 TensorFlow 라이브러리 모듈에서 머신 러닝 응용을 위해 재공되는 기능이므로 사례별 용법을 잘 알아두면 될 것이다.

 

learning rate 경사하강 법은 위 그래프에서처럼 cost함수의 처음에 임의로 랜덤하게 지정된 w 값에서 경사를 타고 내려오면서 cost함수의 즉 오차 값의 크기를 비교해 보는 것이다. 바로 앞의 w 점에서 cost 함수의 기울기를 계산하고 이미 설정되어 있는 학습률(learning rate) 값을 사용하여 그 다음 w 값을 계산하게 된다. 물론 바이아스 b 도 마찬가지로 함께 취급된다. 결론은 바로 앞의 (w, b)에서의 오차 값과 현재의 (w, b) 에서의 오차 값 차이가 허용 범위 내라고 할 만큼 충분히 적다고 판단되면 (w, b)의 값이 결정 된 것이다, Linear Regression 이 이루어진 것이다.

 

머신 러닝에 입문하기 위한 아주 기본적인 예제를 대상으로 TensorFlow 라이브러리 모듈을 사용하는 파이선 코드를 선보일 예정이니 앞으로도 참조 바란다.