규링링링

3주차 1-2) Using an appropriate scale to pick hyperparameters 본문

deeplearning.ai/Improving Deep Neural Networks

3주차 1-2) Using an appropriate scale to pick hyperparameters

규링링 2019. 5. 20. 21:33

지난번에 임의의 값을 통해서 하이퍼 파라미터를 찾는것을 했는데 임의로 샘플링 하는것은 균등한 랜덤 값에서 값을 가져오는 것은 아니다. ( 글을 쭉 읽다보면 그림2에서 나오는데 learning rate를 0.0001~1로 할 때   0.1에서 1 사이에 좋은 값이 몰려있다.)

 

hidden unit의 갯수를 l층에서 정한다고 해보자. 50~100이 좋은 범위라고 가정할때 이 사이의 값을 고르는게 좋은 방법이라고 할 수 있고, 또는 layers의 총 갯수가 2~4 라고 할때 2,3,4 값을 정하는게 가장 좋을 수 있다.

 

하지만, hidden unit 또는 layers 갯수처럼 쉽게 적용하기 힘든 하이퍼 파라미터도 있다. 알파 값이 0.0001~1 사이라고 할 때 거의 좋은 값들은 0.1~1 사이에 90%가 있을 것이고 그 외에는 10% 밖에 없을 것이다. (맨 위에서 말한 균등한 랜덤 값이 아니다)

그래서 2번째 줄에서 나오는 것처럼 하이퍼 파라미터를 log scale이라고 해서 어느 정도 크기로 나눈다고 할때 (균일화)

그러므로 파이썬에서는 다음과 같이 도입하는게 가장 좋다고 한다. r= -4 * np.random.rand()    alpa = 10^r

r는 -4부터 0의 임의의 수이고 알파는 10^-4(가장 왼쪽) 부터 10^0(가장 오른쪽) 사이의 값일 것이다.  

만약~ 10^a와 10^b 사이의 값이라고 해보자 그러면 가장 왼쪽은 10^a일 것이다. log를 취해서 a= log{10}{0.0001} 이라고 하면 a는 -4 이고 오른쪽의 경우 0이다. 그러면 a와 b의 사이 값은 -4~0사이의 값이라는 것이다.  이것을 log scale 샘플링 이라고 한다. 

 

마지막으로 exponentially weighted averages에 대한 베타 값을 추정하는 것인데. 0.9 ~ 0.999사이라고 가정해보자 (정확히 뭔소린지는 모르겠지만..) 이미 exponentially weighted averages를해서 0.9 같은 경우 (요일) 10일의 평균 기온이라고 할 수 있고 0.999의 경우 1000일의 평균치를 구하는 것과 같다. 이것은 오른쪽 상단과 같이 나누기가 어렵다. 그래서 방법으로 1 - 베타를 해가지고 0.001~0.01 (그림에서 잘못 그림)해가지고 나눌 수 있다. 그래서 [-3 ~ -1]

(왜 오른쪽 상단처럼 안하고 1을 빼서 하는지는 무슨 소린지는 이해 못했다.) 아마 베타가 0.999처럼 1에 근접할 경우에는 1000개에서 2000개 정도의 엄청난 갯수의 셈플링이 나올 수 있으닌까 1에 근접하지 않도록 멀리 떨어뜨리는 것 같다.