본문 바로가기
머신러닝

머신러닝 실습 with Tensorflow 1장 - linear regression -

by ChocoPeanut 2017. 6. 3.

머신러닝 실습 with Tensorflow 1

- linear regression -

 

머신러닝에 대한 이론적인 부분은 이미 공부한 후 이에 대한 부분을 실습하여 실제로 실행시켜보는 것에 중점으로 학습할 것이다. 이에 대한 도구로 tensorflow라는 tool을 사용할 것이다. 또한 python의 언어를 바탕으로 제작된다. tensorflow는 머신러닝을 위한 다양한 함수를 내포하고 있어 보다 편하게 머신러닝을 구현할 수 있게 구성되어 있다. tensorflow3가지의 과정으로 구성된다. Tensorflow의 도구를 이용해 그래프를 만드는 과정, sees.run 함수를 통해 데이터를 넣어주거나 그래프를 가동시키는 과정, 마지막으로 결과 값을 내보내거나 그래프의 변수를 업데이트 시키는 과정이다.


Linear Regression은 다음과 같은 가설과 cost function을 가진다. 선형 회귀 방식인 만큼 예측 모델이 일차 함수의 형태로 나타나게 되고 cost function은 이에 대해 예측 모델의 결과 값과 실제 결과 값을 비교한 데이터의 최소 제곱의 방식으로 구하게 된다. 여기서 기본적인 데이터를 사용하여 linear regression 모델을 tensorflow를 이용하여 구현을 해보도록 하자.



우선 간단한 데이터를 넣어주게 된다. 이는 train을 하는 값들로 입력 값인 x값과 결과 값인 y 값이 모두 주어지게 된다. 이에 대해 W(weight)b(bias)는 변수로 선언이 되어 random한 값을 넣어주게 된다. 이 때 사용하는 함수는 Variable이라는 함수를 사용하게 된다. xy 값은 우리가 넣어주는 값이고 wb의 값은 컴퓨터가 사용할 값이라고 생각하면 된다. wb는 학습을 함에 따라 계속 값이 변하게 되어 다음의 과정들에 의해 최적의 값을 찾아가게 될 것이다. 예측 모델에 대한 형태를 위의 식과 같이 정의하여 만들게 된다.



cost function도 그대로 tensorflow에 있는 내부의 함수를 사용하여 정의할 수 있다. 식 그대로를 코드로 옮겼다고 생각하면 된다. reduce_mean은 평균을 만들어주는 함수이다.



cost function을 최소화 시키는 방법으로는 GradientDescentOptimizer를 통해 gradient descent algorithm을 사용하는 함수를 사용한다. 일부로 미분을 계산할 필요 없이 함수를 통해 learning rate의 값도 줄 수 있고 optimizer라는 변수를 통해 minimize 함수를 실행시키면 최소화 시키는 과정을 진행할 수 있다. 그런데 우리는 이 과정을 계속 반복하여 wb 값을 변화시켜야 되기 때문에 step을 통해 train을 여러 번 돌려주어야한다. 그렇게 되면 cost의 값이 계속 변하게 되고 이에 대한 wb 값도 계속 변하여 값이 들어가게 된다.



위와 같이 임의로 값을 우선적으로 넣는 대신에 train을 할 때 값을 넣어주는 것도 가능하다. placeholders 라는 함수를 사용하게 되면 XY에 대한 값이 처음에는 들어가지 않고 나중에 sess.run을 하는 과정에서 돌아가게 된다. 이 때 feed_dict이라는 것을 사용하여 각각의 변수에 값을 넣어주게 된다.