CNN hyperparameter

이미지
CNN hyperparameter CNN Hyper-parameter 뉴럴 네트워크에서 하이퍼의 종류는 매우 많고 그 중요성도 매우 크다. 설명하기 전에 간략하게 CNN의 기본 구조에 대해 적고 가야겠다. CNN은 이미지 데이터를 다룰 때 주로 쓰인다. 이미지 데이터에 대해 알아야 할 것이 있다. 이미지의 크기는 가로x세로x깊이로 나타내고, 하나의 픽셀은 0~255 값 중 하나를 갖게 된다. 이미지의 깊이는 3으로 RGB를 나타낸다. 초매개변수의 적정값에 대한 결론부터 얘기하면, 레이어의 갯수, 즉 깊이,를 늘리는 데에 초점을 맞추어 조절해야 한다. 이제 개인적인 생각으로 초매개변수를 어떻게 정하면 좋을지 적어보겠다. 레이어의 갯수(=깊이) 네트워크를 어떻게 구성할 것인가가 될 것이다. 생각을 해보자. 뉴럴 네트워크의 깊이가 깊어질수록 정확도는 높아지는가? 뉴럴 네트워크는 인간의 뇌를 모방해서 만든 기술이다. 인간의 뇌는 수 많은 일련의 뉴런의 연결로 이루어져 있는데, 뉴럴 네트워크의 최종 목표 또한 그럴 것이다. 그러므로 깊어져야 할 것이다. 그럼 무작정 깊이를 늘리면 정확도가 높아지는가? ResNet이 나오기 전까지는 그렇지 않았다. 20개의 레이어가 56개의 레이어보다 정확도가 높았다. 그 이유는 무엇인가? Gradient Vanishing/Exploding, Degradation 현상 때문이었다. Gradient의 문제는 주로 활성(Activation) 함수와 연관이 있는데, 시그모이드 활성 함수를 보면 x 값이 양의 값으로 큰 값을 갖거나 음의 값으로 작은 값을 갖질수록 Gradient가 0으로 수렴하게 된다. 이 문제를 해결하기 위해 Batch normalization이 나왔다. mini-batch마다 각 층의 input을 normalization하는 방법으로 어느정도 해결했다. Batch normalization을 사용하면 initialization을 크게 신경쓰지 않아도 된다. 또한 opt

머신러닝 다시 시작하기 - 4

이미지
머신러닝 다시 시작하기 - 4 머신러닝 다시 시작하기-4 참고 게시글 머신러닝 다시 시작하기-1 머신러닝 다시 시작하기-2 머신러닝 다시 시작하기-3 머신러닝에 대한 간략한 요약을 1, 2, 3을 통해 해보았다. 머신러닝 중 요즘 핫해진 뉴럴 네트워크를 공부해보도록 하겠다. 뉴럴 네트워크가 어떤 필요에 의해 탄생했는 지는 각설하고 바로 간단한 개념으로 들어가겠다. 어떤 방향으로 나아갈 지 고민이다. 머신러닝은 모델링, 학습, 평가 단계로 진행했지만 딥러닝은 아래와 같이 간단하게 진행해보겠다. Modeling Cost function propagation (foward / back) 참고 게시글의 내용과 많이 겹치겠지만 좀 더 복잡한 식이 나올 예정이다. 1. Modeling 딥러닝의 모델링은 필자도 자세하게 모르겠지만 잘못 생각하고 있다가 이번에 새롭게 알게 된 내용을 정리하고자 한다. 기존의 여러 강의를 듣거나 독학을 할 경우 충분히 헷갈릴 수 있는 부분이기 때문에 도움이 되길 바란다. (출처 : https://i.ytimg.com/vi/n7DNueHGkqE/maxresdefault.jpg ) 1-1) 각 노드는 값을 가진다. 자세히 공부하기 전에는 각 노드의 값은 알 수 없는 줄 알았다. Input Layer와 Output Layer의 값만 보고 Hidden Layer의 값은 알 수 없는 채 정확도만 알 수 있는 줄 알고 있었다. 하지만 각 Hidden Layer의 노드는 h θ ( x ) h_\theta(x) h θ ​ ( x ) 의 결과값을 갖고 있다. 그리고 Layers 사이에 검은색 선마다 θ \theta θ 값을 갖고 있는데 흔히 아는 가중치 값을 갖고 있다. a 1 ( 2 ) = g ( Θ 10 ( 1 ) x 0 + Θ 11 ( 1 ) x 1 + Θ 12 ( 1 ) x 2 ) a 2 ( 2 ) = g ( Θ 20 ( 1 ) x 0 + Θ 21 ( 1 ) x 1 + Θ

머신러닝 다시 시작하기 - 3

이미지
머신러닝 다시 시작하기 - 3 머신러닝 다시 시작하기-3 3. 평가 이제 모델링과 학습은 마쳤다. 학습된 머신을 평가해보는 단계이다. 여기서 이 머신이 쓸모 있는지 없는지 판단하게 된다. 평가 단계에서 training data set으로 학습한 머신을 test data set으로 평가하게 되고 정확도를 계산한다. 하지만 이 방법으로는 한계가 존재한다. 바로 test set에 과적합되어 현실의 데이터를 가져왔을 때 제대로 예측을 못하게 되는 것이다. 이 한계를 극복하기 위해 교차 검증이 개발되었다. 교차 검증도 여러 가지가 존재하는데 그 중 가장 효과적이라고 알려져 있는 K-fold Cross Validation 에 대해 알아보도록 하자. 3-1) K-fold Cross Validation (출처 : https://cdn-images-1.medium.com/max/1600/1*rgba1BIOUys7wQcXcL4U5A.png ) 위 그림에는 k = 5로 두어 교차 검증을 한 결과이다. 분류기 성능 측정의 통계적 신뢰도를 높이기 위해서, resampling 방법을 사용한다. 먼저 데이터를 k개의 데이터로 등분한다. 분리된 k개의 subset중에 k-1개를 훈련 데이터로 사용하고 (샘플링의 방법은 simple random, systematic, stratified, First N, cluster등이 있음.) 1개의 subset을 테스트 데이터로 사용한다. 여기서 비복원 추출의 개념으로, 한번 테스트로 선택된 subset 데이터는 다시 선택되지 않는다. 물론 k-fold와 홀드아웃 교차검증을 섞어서 사용할 수도 있다. 그리고 당연하게도, k등분 된 k-fold 검정에서의 iterate 횟수는 k번이다. (비복원으로 모든 경우의 수를 하는 갯수) k-fold의 장점은 모든 데이터를 training과 test에 쓸 수 있다는 점이다. 또한 오버피팅의 염려도 크지 않다. 하지만 시간이 다소 오래걸린다는 단점이 존재한다.

머신러닝 다시 시작하기 -2

이미지
머신러닝 다시 시작하기-2 2. 학습 모델을 정했다면 이제 그 모델을 학습시킬 차례다. 학습은 크게 보면 cost function(비용 함수)의 값을 줄이는 과정이다. 그럼 이제 어떻게 cost 값을 정의하고 줄여나가는지 알아보겠다. 2-1) Cost function 비용 함수는 정답과 내 머신의 가설을 이용한 예측값을 비교하여 두 값의 차이가 크면 비용을 높이고, 차이가 작으면 비용을 줄이는 함수이다. 비용을 줄이는 쪽으로 파라미터(가중치, θ \theta θ )를 조절하면 0으로 수렴하는 값을 찾을 수 있을 것이다. 나중에 다시 설명하겠지만 비용 함수를 이용하여 비용 함수의 미분값이 0인 즉, 비용 함수의 최솟값을 찾는 과정을 거친다. 그러기 위해선 비용 함수는 convex-function이어야만 한다. 하지만 회귀 함수의 비용함수를 그대로 분류에 사용하게 되면 non-convex-function이 되기 때문에 이 둘은 비용 함수가 다르다. 2-1-1) Regression Cost function (출처 : https://image.slidesharecdn.com/mlppt-190911145734/95/gradient-descent-algorithm-4-638.jpg?cb=1568214298 ) 파라미터 벡터 θ ∈ R n + 1 \theta∈R^{n+1} θ ∈ R n + 1 에 대하여 비용 함수는 다음과 같이 나타내어진다.모든 파라미터와 모든 트레이닝 셋에 대한 비용함수를 표현한 것이다. J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^m \left(h_\theta(x^{(i)})-y^{(i)} \right)^2 J ( θ ) = 2 m 1 ​ i = 1 ∑ m ​ ( h θ ​ ( x ( i ) ) − y ( i ) ) 2 여기서 h θ ( x ) h_\theta(x) h θ ​ ( x ) 는 전에 모델링에서