티스토리 뷰
모두의 딥러닝
Linear Regression의 개념
강의
Regression
강의 내용에서는 Regression에 대해 설명을 하고 있다.
Linear Regression
Linear Regression이란, 방정식을 통해 표현되지 않는 데이터들을 예측하기 위한 모델이다. 값을 예측하기 위해 회귀하고 계산하고를 반복하는 모든 과정을 Linear Regression이라 하는 것 같다.
:Linear=직선, Regression:회귀
Hypothesis
Hypothesis에 대해 설명하기 전, 머신러닝은 아래에 설명하는 cost함수의 최저값을 찾아 최적의 모델링을 구하는걸 목표로 한다. 그럴려면 cost함수가 어떻게 구성되었는지 알아야되는데 cost함수는 Hypothesis를 구성으로 한 함수이다. Hypothesis는 해당 동영상의 1차원 방정식으로 설명을 하면, Wx + b로 구성이 되어있는 함수이다. W값과 b의 최적화된 값을 찾는것이 cost함수의 최적화된 값을 찾을 수 있는 방법이므로, hypothesis를 잘만드는 것이, 학습을 잘하게 하는 방법이 되겠다. 그래서 특정 알고리즘(gradient descent)을 이용하여, 계속 학습을 시켜, w와 b의 값을 바꿔준다. 여기 이미지에서는 파란색 선이 가장 좋은 가설(hypothesis)가 되겠다.
Cost Function
Cost란 해당 모델링이 제대로 학습이 되었는지 안되었는지 확인하는 수로 보면된다. Cost 비용이 크면 해당 모델은 학습이 제대로 이루어지지 않은 것이며, cost 비용이 작으면 해당 모델은 학습이 제대로 이루어 진 것이라 볼 수 있다. cost함수란 최적의 hypothesis를 찾기위해 사용하는 함수로써, hypothesis(x,b)에서, y의 차를 제곱하여 평균을 낸 값이다.
:여기서 x는 입력, y는 출력값
여기서 왜 제곱을 하고 평균을 나누는 지에 대해 궁금할 수 있을 것이다.
옆의 X와 Y그래프를 보면, 파란색 선이 우리가 원하는 최적의 그래프와 Y를 기준으로 +, - 만큼 차이가 있는 걸 알 수 있다. 우리가 원하는 것은 각각의 데이터 셋(x에 대한 y값)에 대한 결과값이 일치하는 모델(hypothesis)를 구하는 것이므로, 해당 +, -차를 점점 줄여주면 우리가 원하는 가설을 구할 수 있을 것이다. 그럼 +든 -든 절대값이 우리가 원하는 차가 될 것이다. 절대값을 사용해도 되지만, 조금 더 효율적으로 값을 구하기 위해 제곱을 한 것으로 보인다. 왜냐하면 제곱을 해도 양수 이고 그 차는 더 커지기 때문이다. 그리고 해당 값들을 평균을 구해주면 얼마만큼 cost가 발생했는지 알 수 있다.
Lab
Hypothersis와 Cost function의 식은 아래와 같다.
이 부분들은 텐서플로우를 사용하여 코드로 만들어 보겠다.
동영상에서는 처음으로 위와 같은 소스를 설명한다.
주석으로 간략히 해당 소스에 대해 설명을 했다.(영어가 맞는지는 잘 모른다..)
데이터 셋으로 x_train과 y_train을 갖고, 우리가 구할려는 W와 b를 랜덤값으로 정의하여 변수 선언을 하였다.
그리고 가설(hypothesis)을 만들고 cost함수를 만들었다.
여기서 reduce_mean은 시그마 평균값을 간략히 해주는 텐서플로우 API이고 square는 말그대로 해당 값을 제곱 시켜준다.
그리고 해당 동영상에서는 설명안하나(나중에 김성훈 교수님께서 설명하시는) 엄청나게 중요한 경사타고 내려가기 알고리즘(gradient descent)을 사용하여, 최적화된 값을 찾는다.
여기서 learning_rate는 학습할 때의 값의 변화?에 대해 정의를 내리는 것인데, 이 값은 여러번의 테스트와 경험으로 값을 정의해야 한다.(이 부분을 값을 어떻게 하느냐에 따라 학습이 잘되고 안되고가 결정된다.)
모든 텐서플로우는 session.run()을 실행해야 동작을 하게 된다. 아래의 이미지가 여러번 나오는 이유 또한 텐서플로우가 어떤 형태로 동작하는지 가장 잘 알려주는 이미지라 동영상에서 자주 나타나는 것 같다.
그리고 텐서플로우에서 변수(variable)을 사용하기 위해서는 초기화를 해줘야 된다. 그래서 소스에서 global_variables_initializer() 형태로 변수 초기화를 했다.
session.run으로 학습을 시키고, 각 값들을 20번에 한번씩 검사해준다.
위의 소스 이후, placeholder로 진행한 소스를 설명한다.
차이점은 placeholder와 constant 차이정도로 알면되는데, placeholder는 미리 값을 정하지 않고, 텐서플로우를 동작할때, feed_dict으로 해당 값을 정할 수 있기 때문에, 추 후에 어떤 학습 모델을 구성 했을 때, 소스를 수정할 필요없이, 해당 값들을 효율적으로 변경할 수 있기 때문에 많이 사용한다.
'AI > Tensorflow' 카테고리의 다른 글
[모두의딥러닝] Linear Regression cost함수 최소화_3 (0) | 2017.07.22 |
---|---|
[모두의딥러닝] 머신러닝 개념과 용어_1 (0) | 2017.07.21 |
Numpy 기본 (0) | 2017.06.08 |
[텐서플로우 정리] 09. argmax 함수 (0) | 2017.05.27 |
Tensorflow를 활용하기 위한 함수 및 API들... (0) | 2017.05.27 |
댓글
공지사항
최근에 올라온 글
링크
TAG
- executor
- Error
- serverless
- 점프투파이썬
- TDD
- Java
- AI
- mybatis
- BigData
- 중앙정보처리학원
- NIO
- spark
- Docker
- web
- AWS
- Maven
- Configuration
- tensorflow
- ML
- 텐서플로우
- API
- spring
- javascript
- Gradle
- memory
- 모두의딥러닝
- 머신러닝
- 파이썬
- mysql
- python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함