21. 로그 함수 정리
이번 주 스터디에서 cost 함수에 들어가는 log 함수 때문에 고생을 많이 했다. 수학 사이트를 뒤져서 로그만 다시 봐야 하는건가, 하는 고민도 하고..
이 글은 함께 스터디하시는 수학 천재의 도움을 받아 작성할 수 있었음을 밝힌다. 지금 어느 정도 이해됐을 때 재빠르게 정리하지 않으면 다시 처음으로 돌아갈 것 같다.
import math
for i in range(1, 21):
print('{:6.3f} ({})'.format(math.log10(i/10), i/10), end=' ')
if i%5 == 0:
print()
# 출력 결과
# -1.000 (0.1) -0.699 (0.2) -0.523 (0.3) -0.398 (0.4) -0.301 (0.5)
# -0.222 (0.6) -0.155 (0.7) -0.097 (0.8) -0.046 (0.9) 0.000 (1.0)
# 0.041 (1.1) 0.079 (1.2) 0.114 (1.3) 0.146 (1.4) 0.176 (1.5)
# 0.204 (1.6) 0.230 (1.7) 0.255 (1.8) 0.279 (1.9) 0.301 (2.0)
도대체 로그 결과가 어떻게 나오는지 확인하고 싶었다. 이 별거 아닌 코드를 만들면서 에러도 많이 만들었다.
log는 0을 포함해서 음수를 전달하면 계산할 수 없다는 것도 이번에 알았다. 왜 안되는지는 알고 싶지 않다. 그건 수학 천재들의 영역이다. 그래서, 코드는 0.1부터 2.0까지 진행한 결과다. 여기서 중요한 것이 0.0이 나오는 부분인데, x가 1일 때 로그에서 결과가 0이 된다. 이건 수학 천재에게 들은 건데, 정말 그렇게 나왔다.
위의 결과를 그래프에 그려봤다. 유명한 사이트가 있어서 결과를 쉽게 비교할 수 있었다. 동영상을 다시 보니, 이 사이트가 교수님께서 사용하셨던 사이트였다.
https://www.desmos.com/calculator
첫 번째는 파이썬 코드로 확인했던 log(x)에 대한 그래프이다. x가 0일 때 음수 무한, 1일 때 0이 되는 것을 알 수 있다. 화면상에서는 x가 0에 가까울 때 그래프가 y축에 붙은 것처럼 보이지만, 붙은 게 아니라 0에 무한히 커지긴 하지만 y축에 달라붙을 수는 없다. 앞에서 말했듯이 x는 0이 될 수 없고, 음수도 될 수 없다. |
|
log(x)의 결과에 - 기호를 붙여서 결과를 음수로 만들었다. 이게 생각보다 헷갈리긴 한데, 전체 결과에 -를 붙였으니까, 결론적으로 y가 뒤집힌다. log 함수에 전달되는 x는 그대로인데, 결과는 반대가 됐다. |
|
이번 그래프는 x축에 대해서 대칭이다. log 함수에 전달되는 값이 음수인 경우에 이와 같이 그려진다. |
|
cost 함수에 등장하는 두 번째 그래프다. 이 그래프가 밥그릇에서 오른쪽 부분을 담당한다. |
|
바로 앞의 그래프를 오른쪽으로 1만큼 이동시켰다. 이동시키는 방법은 1에서 x를 빼면 된다. 아니 기존 값에 1을 더하는게 좋겠다. y = -log(-x+1)이라는 표현이 더 쉽다. |
|
아무 기대하지 않고 그려봤다. -log(x)와 -log(1-x)를 더했다. cost 함수에서는 실제로 이와 비슷하게 사용한다. |
cost 함수 그림을 가져왔다. 다음에 나오는 그래프와 비교해서 보기 바란다.
아주 큼지막하게 그려봤다. cost 함수에서 사용되는 2개의 log 함수이다. 우리는 이 그래프에서 0과 1 사이의 구간만 사용한다. 0보다 작거나 1보다 큰 영역의 그래프는 필요없다. 더욱이 진짜 밥그릇처럼 2개를 연결해서 그린다는 것은 말이 되지 않는다. 하나는 0에서 시작하고, 하나는 1에서 시작하는데 어떻게 연결할 수 있겠는가?
아래는 log 함수 4개를 하나로 모은 그래프이다. 앞에서 충분한 설명이 되었지만, 한 눈에 비교를 해 보면 더 좋을 수도 있을 것 같다.
'딥러닝_김성훈교수님' 카테고리의 다른 글
23. 딥러닝의 기본 개념2- Back-propagation 과 2006-2007 '딥'의 출현 (lec 08-2) (0) | 2016.07.31 |
---|---|
22. 딥러닝의 기본 개념- 시작과 XOR 문제 (lec 08-1) (0) | 2016.07.31 |
20. 2주차 스터디 정리 (0) | 2016.07.29 |
19. 학습 rate, training-test 셋으로 성능평가 (lab 07) (0) | 2016.07.29 |
18. Training-Testing 데이타 셋 (lec 07-2) (0) | 2016.07.28 |