티스토리 뷰
모두의 딥러닝
Linear Regression cost함수 최소화
강의
Cost Function
이번 강의에서는 Cost 함수에 대해 설명을 한다.
우선 다음과 같이 Hypothesis값을 수정하는데, Cost함수에 대한 이해를 쉽게 하기 위해, 값(b)을 없애서 설명하는 걸로 나온다.
그러나 신기하게도, 해당 값이 있고 없고가 cost 함수를 최소화 시키는게 문제가 안된다. 왜냐하면 b에 값이 없어진 만큼 w에서 값을 변경하면 되니깐..??
공식을 가볍게 만들기 위해서 이기도 하지만, 나중에 행렬로 계산을 할 때가 되면, 정말로 b값을 행렬에 넣어서 공식을 간단히 한다.
위의 이미지를 보면, 정말로 W 데이터를 넣고 계산을 한 cost의 값을 알 수 있다. W가 1일 경우가 cost 값이 제일 낮은 것을 알 수 있다. 이전 강의에서 설명 했듯이. 우리가 원하는 w와 b의 값은 cost를 제일 낮게 하는 값이므로, 우리가 원하는 w의 값은 1인걸 알 수 있다.
w값을 계속 바꿔가면서 계산을 하여 cost값에대한 그래프를 만들면 아래와 같은 걸 알 수 있다.
Gradient Descent Algorithm
여기서 중요한 알고리즘인 Gradient Descent Algorithm에 대해 설명한다.
Cost 함수에 대한 최소값(w,b)을 찾아주는 알고리즘 이다.
지속적으로 동작하여, W와 b값을 찾아 cost함수를 최소 값으로 찾아준다. 어떻게 찾을 수 있을까?
cost함수를 미분했을 때, 음수 또는 양수의 1차 그래프가 생기는 걸 알 수있다. 이 그래프에서는 위의 이미지에서 w가 1보다 작은 경우, 음수의 그래프가 생길 것이고, 1보다 큰 경우 양수의 그래프가 생길 것이다. 거기다, 경사각 또한 cost 최소화값인 1과 멀어질수록 커지는 것 또한 알 수 있다.
Cost 함수를 조금 더 쉽게 미분하기 위해, 1/2를 곱해준 다음(이 값을 곱해준다고 해도 우리가 구하는 건, cost가 최소값일 때의 W와 b의 값이므로, 해당 값을 구한 이후의 연산행위는 W와 b값을 구하는데 상관이 없다.)
아래와 같이 미분을 하고, W값에서 미분한 값을 빼주는 것이 경사각 알고리즘의 원리 이다.
참고로 Gradient descent algorithm에서 알파(a)가 이전 소스에서 사용됐던 learning_rate의 값이다.
위의 왼쪽 이미지와 같이 cost 함수가 구현되면, 어느곳에서 시작하느냐에 따라 우리가 찾는 cost값이 달라 질 수 있을 것이다. 그래서 오른쪽과 같이 cost함수가 구현된 곳에서 Gradient descent algorithm을 사용할 수 있다.
Lab
Matplotlib
이번 강의에선 matplotlib을 사용하여, cost함수에 대해 그래프를 만들어 본다.
위의 이미지와 같이, W값을 계속 변경하면서, 배열에 W값과 cost값을 저장하여 matplotlib 라이브러리를 이용하여 그래프로 나타내었다.
W값을 변경하는 것을 통해, placeholder를 어떻게 사용하는지에 대해 고민할 수 있게 되었다. 다음과 같이 지속적으로 값을 변경하기 위해, placeholder를 사용한다. constant를 사용하게되면 값이 고정되어 버리기 때문에, 값을 변경하기가 어렵다.
이 다음은 이전에 사용했던 Gradient Descent Algorithm을 직접 구현하는 걸 설명하고 있다.
실제로 구현을 한 소스는 다음과 같다.
결과값을 보면, cost값이 점점 내려가는걸 확인 할 수 있다. W.assign(descent)를 통한 update로 지속적으로 w의 값을 변경해주고 있는걸 확인해 볼 수 있다.
다음 이미지는 초기값을 최대한 우리가 원하는 값과 가깝게 설정하면 좋겠지만, 어떤 값을 설정하더라도 우리가 원하는 w값을 찾을 수 있다는 걸 보여주는 이미지이다.
동영상에서 마지막으로 gradient descent algorithm의 옵션값에 대해 설명한다. 필요시, 해당 알고리즘을 수정하는 방법?이다.
이부분에 대해서는 이미지하나로 대처한다.
'AI > Tensorflow' 카테고리의 다른 글
[모두의딥러닝] Logistic (Regression) Classification (0) | 2017.07.29 |
---|---|
[모두의딥러닝] 여러개의 입력(feature)의 Linear Regression_4 (0) | 2017.07.29 |
[모두의딥러닝] 머신러닝 개념과 용어_1 (0) | 2017.07.21 |
[모두의 딥러닝] Linear Regression의 개념_2 (0) | 2017.07.21 |
Numpy 기본 (0) | 2017.06.08 |
댓글
공지사항
최근에 올라온 글
링크
TAG
- TDD
- Docker
- Configuration
- javascript
- 파이썬
- executor
- Gradle
- Java
- spark
- 점프투파이썬
- python
- API
- mybatis
- NIO
- Error
- web
- BigData
- 모두의딥러닝
- spring
- serverless
- AI
- ML
- 중앙정보처리학원
- Maven
- AWS
- memory
- mysql
- 텐서플로우
- tensorflow
- 머신러닝
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함