입력 데이터 전처리
대표적인 전처리:
zero-mean 으로 만들고 normalize (보통 표준편차)
zero-centered
전체의 평균을 구하고, 각각을 빼 줌.
정규화
표준편차로 나누어 줌.
-1 ~ 1 혹은 0 ~ 1 과 같이 특정범위 내로 들어가도록 함.
이미지는 이미 특정 범위 (0 ~ 255)
앞에서, 입력이 모두 Positive인 경우, 모든 뉴런이 positive인 gradient를 가짐.
입력이 전부 negative인 경우도 마찬가지.
normalization을 하는 이유는,
모든 차원이 동일한 범위 안에 있게 하여, 전부 동등한 기여를 하게 됨.
이미지의 경우는, 전처리로 zero-cetering 정도만 해 줌.
스케일링이 어느 정도 맞춰져 있기 때문.
스케일링이 다양한 경우가 아닌, 이미지에서는 정규화를 너무 잘 할 필요 없음.
PCA (주성분 분석)나 Whitening 같은 더 복잡한 전처리 과정도 있다.
CNN에서는 원본 이미지 자체의 공간 정보를 이용해서,
공간 구조를 얻을 수 있도록 함.
[질문] Train에 전처리 하면, Test에도 전처리해야 하나?
Training data에서 얻은 평균을 그대로 Test에 사용.
보통 입력이미지의 사이즈를 서로 맞춰줌.
AlexNet의 경우, 오렌지 색을 빼줌.
전체의 평균을 구하지 않고,
채널마다 평균을 독립적으로 계산하는 경우도 있음.
VGGNet
평균은 어떻게 구하는가?
Training data 전체에 대하여 평균을 구함.
질문은 미니배치 단위로 학습해도, 평균은 미니배치 단위가 아니라 전체로 계산하는가?
Yes. 트레이닝 데이터 전체의 평균
배치에서 뽑은 데이터도 전체 데이터에서 나온 것이고,
결국 배치 평균이나 전체 평균이나 구해보면 이상적으로는 같다.
그러나 반대로, 엄청나게 큰 데이터의 전체 평균을 구할 때는,
적절하게 샘플링하여 구할 수도 있다.