ETC/머신러닝, 딥러닝 실습

3-2. 여러개의 입력의 Linear Regression 구현 (by Tensorflow)

개발자킹콩 2020. 10. 30. 23:54

모두를 위한 머신러닝 / 딥러닝 강의: hunkim.github.io/ml/

 

 

 


 

Multi-variable linear regression

 

 

우리는 이제 변수 3개에 대한 출력이 1개인 데이터 셋을 학습시키려한다.

변수가 3개라면 각각의 변수에 대한 weight(가중치)가 존재할 것이고

이 가중치가 곱해진 변수들의 합은 Hypothesis(가설, 직선)을 나타낸다.

 

 

 

 

cost를 정의하고 optimizer를 Gradient Descent Algorithm 을 사용하여 minimize cost를 구하도록 설정하였다. 이제 train을 tf.Session().run(train)을 실행하면 cost는 최소를 구하도록 operation할 것이다.

그리고 학습과정에서 cost와 hypothesis값들의 변화를 출력하기 위해 변수에 값을 담아 출력하는 형태이다.

 

 

 


 

 

 

 

그런데 여기서 learning_rate는 무엇일까?

『Linear regression이나 logistic regression의 방법을 사용할 때 cost function을 최소화시키기 위해서 우리는 Gradient descent algorithm을 사용했다. Gradient descent는 기울기의 크기가 줄어드는 쪽으로 가는 것이 cost function이 최소가 되는 지점을 찾아간다는 생각에서 나온 알고리즘이다. Gradient descent algorithm을 사용할 때 cost 값의 미분한 값 앞에 알파라는 값이 오게 되는데 이 값이 Learning rate이다. Learning rate 어느 정도의 크기로 기울기가 줄어드는 지점으로 이동하겠는가를 나타내는 지표이다. 그래프 상에서 이동하게 만드는 step의 크기를 조절한다고 할 수 있다. 

 

만약 Learning rate의 값이 크다면 어떻게 될까? 처음 출발에는 기울기가 줄어드는 지점으로 이동을 하겠지만 어느 지점에서 최솟값에 도달하기 보다는 그 값을 넘어서 그래프의 반대편으로 지점이 이동할 수 있다. 이건 step의 간격이 너무 커서 발생하는 결과이다. 또한 이러한 차이가 계속 발생하게 되면 오히려 최솟값에 도달하기 보다는 그래프를 벗어나는 결과 값을 가지게 만들 수도 있다. 이러한 경우를 overshooting이라고 한다. 』

출처: https://copycode.tistory.com/166 [ITstory] 

 

 

 


 

출력값

 

 

출력에서 cost의 값은 점점 최소를 찾아갔고, 출력Y에 대한 예측은 실제 측정된 값과 비교해보면 매우 흡사해지고 있음을 확인하였다. 

 

 

 


 

 

But, 이런 방법은 사용하지 않는다.

 

 

 

 

 

  •  x_data는 instance(데이터 묶음)단위로 관리한다.
  • 모델을 만들때 사용할 X, Y에서 주의할 점이 shape이다.
  • 첫 번째 항인 None는 총 데이터의 묶음인 instance의 갯수를 의미하는데 갯수에 제한이 없게 두는 것이다.
  • 두 번째 항인 3은 한 instance당 데이터의 수(종속변수의 갯수)를 의미한다.
  • b는 상수항이고, W의 경우 3행 1열 데이터이기에 다음과 같이 설정하였다.
  • tf에서 matmul(메트릭스 곱)으로 연산하여 hypothesis를 구하였다.

 


 

 

 

 

 

 

 

 

 

 

 

다음 시간에는 많은 데이터를 기재하는 것이 힘들기에 파일에 저장하고 이를 불러오는 작업에 대해 공부해 볼 것이다.