머신러닝

1-14 Linear Regression 기법과 TensorFlow 머신러닝 입문에의 초대

coding art 2018. 7. 22. 16:17
728x90

______________________________________________________________________________________________________________________________


인공지능 알파 고 충격에서부터 시작하여 4차 산업혁명이라는 용어에 이르기까지 머신 러닝 분야가 너무나도 많은 관심을 불러일으키고 있는게 사실인 듯하다. 언뜻 보면 최첨단으로서 그 누구도 쉽게 근접할 수 없어 보이는 듯한 착시 현상이 들 수도 있겠지만 세상의 모든 일이란 것이 근본부터 차근 차근 따져 보면 양자 도약 현상과 같이 갑작스럽게 튀어 나온 것은 아니며 예전부터 있어 왔던 분야가 때를 타고 개화하게 있다고 보면 될 것이다.


어제까지 아두이노 코딩을 100회 이상 연재하다가 갑자기 머신 러닝으로 급격히 전환한다고 여길 분들도 있겠지만 코딩 측면에서 보건대 난이도 측면에서 그다지 큰 차이가 없다고 볼 수 있다.  굳이 지적한다면 아두이노 코딩은 초중등에서도 가능하며 머신 러닝은 고교과정 수학 개념이 좀 들어가는 듯하다. 아울러 컴퓨터 언어 측면에서 보면 C/C++에서 Python  인데 컴퓨터 언어란 것이 전라도 사투리냐 영남사투리냐 정도의 차이이며 그다지 큰 어려움 없이 알아먹을 수 있다는 점이다.

머신 러닝에 입문하기 위해 누구나 다루어 보는 선형회귀(linear regression) 문제를 검토해 보자. 이 문제는 머신 러닝이 각광을 받기 이전부터 통계학애서 또는 응용 수학 분야에서 최소 자승 기법과 함께 오래전부터 다루어 온 전통적인 수학 문제이다.



(x,y) 평면상에서 2개의 점 데이터를 사용하여 기울기를 계산해 내고 절편 값을 결정하여 일차함수를 다루는 기법은 중학교 수학과정에 해당한다. 그런데 Linear Regression 문제에서 일차함수 취급법과는 달리 최소 3개의 점 데이터를 사용하는 이유는 무엇인가? 점 데이터 2개는 안 되는 것일까?

(x,y) 평면에서 Linear Regression 이라함은 (x,y) 평면상에 점 데이터들을 대상으로 하나의 일차함수를 설정하되 이 일차함수와 주어진 점 데이타와의 차이 값의 제곱의 합이 최소화 되도록 설정하는 과정이다. 일차함수를 규정짓는 파라메터가 기울기 w 와 절편(바이아스) 값 b 일 때에 2개의 점 데이터가 주어진다면 일차함수와 점데이타 y 값의 차이의 제곱이 정확하게 0이 되므로 최소자승기법 적용이 필요 없음에 유의하면 된다.

하지만 점 데이터가 3개면 어떻게 될까?  결정해야 할 미지수는 2개인데 조건식이 3개라면 이는 한마디로 과잉 조건에 해당하며 연립 방정식으로는 풀 수 없다는 것은 자명하다.

그렇다면 과연 Linear Regression이 하는 역할은 무엇일까? 직선의 기울기와 절편의 값을 결정한다는 점에서는 목적이 동일하지만 Linear Regression 방법은 3개의 점 데이터의 각 x 좌표에 대응하는 y 데이터 값과 결정되어야 할 직선의 y 값과의 차이 즉 y 방향의 거리 차이를 구해 3개를 각각 제곱 평균하여 cost 함수를 구성한 다음 이 cost 함수를 최소화할 수 있는 기울기 w 값과 절편 b 값을 찾아내는 것이다.

Linear Regression  모델에서의 특징은 고려하는 대상의 풀어야 할 지배 방정식이 따로 없다는 점이며 대신에 인위적으로 cost 함수를 설정하고 이 값을 최소화 하도록 문제를 꾸며야 한다는 점이다.


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



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 와 b를 포함하는 2차식 형태가 얻어진다. 여기서 기울기 또는 웨이트 w 와 바이아스 b 는 별 제한이 없는 실수 값을 가지게 되며 특히 2차항의 계수가 플러스인 2차 방정식 형태에서 최소값을 구하기란 그리 어렵지 않다. 물론 처리해야 할 점 데이터 수가 크게 늘어날수록 최소값을 찾아내기에 특화된 특별한 알고리듬의 컴퓨터 코드 즉 경사하강법(Gradient Descent) 루틴을 사용하여 적용하는 것이다.

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

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

머신 러닝에 입문라기 하기 위한 아주 기본적인 예제로서 위에서 언급했던 3개의 점 데이타 문제를 필두로 해서 TensorFlow 라이브러리 모듈을 사용하는 파이선 코드를 선보일 예정이니 앞으로도 참조 바란다.