CNN hyperparameter

CNN hyperparameter

CNN Hyper-parameter

뉴럴 네트워크에서 하이퍼의 종류는 매우 많고 그 중요성도 매우 크다. 설명하기 전에 간략하게 CNN의 기본 구조에 대해 적고 가야겠다. CNN은 이미지 데이터를 다룰 때 주로 쓰인다. 이미지 데이터에 대해 알아야 할 것이 있다. 이미지의 크기는 가로x세로x깊이로 나타내고, 하나의 픽셀은 0~255 값 중 하나를 갖게 된다. 이미지의 깊이는 3으로 RGB를 나타낸다.
img
초매개변수의 적정값에 대한 결론부터 얘기하면, 레이어의 갯수, 즉 깊이,를 늘리는 데에 초점을 맞추어 조절해야 한다. 이제 개인적인 생각으로 초매개변수를 어떻게 정하면 좋을지 적어보겠다.

  • 레이어의 갯수(=깊이)
    네트워크를 어떻게 구성할 것인가가 될 것이다. 생각을 해보자. 뉴럴 네트워크의 깊이가 깊어질수록 정확도는 높아지는가? 뉴럴 네트워크는 인간의 뇌를 모방해서 만든 기술이다. 인간의 뇌는 수 많은 일련의 뉴런의 연결로 이루어져 있는데, 뉴럴 네트워크의 최종 목표 또한 그럴 것이다. 그러므로 깊어져야 할 것이다.
    그럼 무작정 깊이를 늘리면 정확도가 높아지는가? ResNet이 나오기 전까지는 그렇지 않았다. 20개의 레이어가 56개의 레이어보다 정확도가 높았다. 그 이유는 무엇인가? Gradient Vanishing/Exploding, Degradation 현상 때문이었다.
    Gradient의 문제는 주로 활성(Activation) 함수와 연관이 있는데, 시그모이드 활성 함수를 보면 x 값이 양의 값으로 큰 값을 갖거나 음의 값으로 작은 값을 갖질수록 Gradient가 0으로 수렴하게 된다.
    이 문제를 해결하기 위해 Batch normalization이 나왔다. mini-batch마다 각 층의 input을 normalization하는 방법으로 어느정도 해결했다. Batch normalization을 사용하면 initialization을 크게 신경쓰지 않아도 된다. 또한 optimizer의 learning rate를 이전보다 더 높일 수 있다. 결과적으로 더 빠른 학습을 가능하게 한 것이다.
    심지어 batch normalization은 regularization 역할도 하기 때문에 Dropout을 사용하지 않아도 학습이 잘 되는 특성이 있다. 이 때부터 많은 neural network에서 dropout을 사용하지 않기 시작했다.
    img
    Degradation은 neural network의 깊이는 증가하는데 training error가 증가하는 경우를 말한다. ResNet은 이 문제들을 해결해 결국 152개까지 늘렸고, 이후 1001개까지 시도했다.
    레이어 깊이의 적정값은 모델에 달렸다고 할 수 있다. 모델을 잘 짜서 Gradient 값이 잘 튀지 않도록 잘 조절할 수 있다면 깊어지면 깊어질수록 정확도가 높아질 것이다.

  • 필터의 갯수
    여기서 필터는 일정한 크기를 가진 정사각형의 픽셀의 집합인데, 주로 1x1, 3x3, 7x7를 쓴다. 각 필터는 픽셀마다 가중치를 가지고 있으며 학습 할수록 가중치 값은 backpropagation에 의해 조절된다.
    img
    각 conv 레이어에서 필터의 갯수를 정하게 되는데 주로 96, 256 …을 쓰게 된다. Convolutional Neural Networks at Constrained Time Cost논문과 Highway Networks논문에서 Degradation 문제에 대해 설명했는데, 필터의 갯수나 크기보다는 네트워크의 깊이가 정확도를 결정한다고 한다. 또한 Inference time을 유지하면서 네트워크의 깊이를 늘리려면 필터의 개수나 사이즈를 줄여야 한다. 왜냐하면 필터의 사이즈가 커지면 결과 이미지의 사이즈가 줄어들기 때문에 패딩으로 이미지의 크기를 늘리는 데에 한계가 있을 것이다. 그래서 ResNet의 경우, 첫 레이어를 제외하고 3x3 필터 밖에 쓰지 않는다. 그리고 필터의 갯수를 늘리면, 파라미터의 양이 엄청 많아진다는 얘기인데 속도가 굉장히 느려져 비효율적일 것이다.
    그렇기 때문에 필터의 갯수나 필터의 크기는 네트워크의 깊이에 따라 정해지는 경우가 많다. 얕은 네트워크를 모델링할 경우, 필터의 사이즈는 크게하고 갯수는 엄청 늘려서 결과 이미지의 사이즈는 작아지고 깊이가 깊어지게 할 수 있을 것이다.(얕은 네트워크이기 때문에 필터의 갯수는 늘려 많은 학습을 유도한다.) 반대로 깊어지려면 필터의 사이즈는 작게해서 다음 결과 이미지가 많이 줄어들지 않도록 해야하고 필터의 갯수는 연산 속도에 맞춰서 하면 될 것이다.

댓글

이 블로그의 인기 게시물

윈도우 설치에서 파티션 설정 오류(NTFS)

[exploit writing] 1_스택 기반 오버플로우 (1) First

하둡 설치 오류 정리