신경망을 학습하려면 데이터 셋은 어떻게 구성하는 것이 좋을까?
그리고 데이터를 어떤 단위로 입력해야 학습에 효율적일까?
클래스별로 데이터의 비율을 골고루 맞춰야 하며 특정 클래스의 데이터를 확보하기 어려워 한쪽 클래스에 데이터가 치우친다면 데이터를 강제로 늘려주거나 데이터의 분포를 고려하여 손실 함수에 가중치가 조절되도록 알고리즘적으로 해결해야 한다.
신경망이 연속함수를 근사할 때 관측 데이터 사이의 함수 구간은 보간(interpolation)을 해서 근사하겠지만 관측 데이터 범위 밖의 영역에 있는 함수 구간에서 외삽(extrapolation)을 해서 근사할 경우 근사능력이 떨어지기 때문이다.
따라서 함수를 만들려는 범위에 필요한 데이터가 충분히 있는지 살펴봐야 한다.
모델 성능을 평가할 대 훈련에 사용하지 않았던 새로운 데이터로 평가해야 일반화된 성능평가가 이루어지기 때문이다. 보통 훈련 데이터셋과 테스트 데이터셋은 전체 관측 데이터에서 8:2, 7.5:2.5, 7:3 정도의 비율로 분할해서 만들며 검증 데이터셋은 훈련 데이터셋에서 10%~20%정도를 분할해서 만든다.
훈련 데이터셋이 작다면 배치 방식으로 학습할수 있지만, 신경망은 다른 머신러닝 알고리즘보다 많은 학습 데이터가 필요하고 그만큼 훈련 데이터셋이 크기 때문에 배치방식으로 학습하면 메모리 용량을 쉽게 초과한다. 그뿐만 아니라 온라인 학습(online learning)과 같이 서비스와 학습을 동시에 해야 하는 경우 데이터가 점진적으로 추가되므로 애초에 배치방식으로 훈련하기란 불가능하다.
이와 같은 배치 방식의 한계를 극복하고자 데이터를 작은 단위로 묶어서 훈련하는 방식을 미니배치(minibatch)방식이라고 한다. 일반적으로 신경망은 미니배치 방식으로 학습한다.
데이터 샘플 단위로 훈련할 수도 있는데 이런 방식을 확률적(stochastic)방식이라고 한다.
보통 개별 샘플의 용량이 매우 클 때는 샘플 단위로 훈련하기도 한다. 미니배치의 크기를 1로 하면 확률적 방식이 되고 미니배치의 크기를 훈련 데이터셋 크기로 하면 배치 방식이 되므로 미니배치 방식이 가장 융통성 있다.

- 미니배치 방식은 데이터를 작은 단위로 묶어서 훈련하기 때문에 미니배치를 생성할 때마다 매번 다른 데이터로 묶인다. 따라서 그때마다 조금씩 다른 통계랑을 갖는 확률적 성질이 생긴다. 확률적 성질이 생기면 일반화 오류가 줄어들고 과적합이 방지되는 정규화 효과를 볼 수 있다.
- 배치 방식으로 훈련하면 그레디언트 계산은 정확하지만 학습 속도가 느려진다. 이 대 오히려 미니배치방식으로 훈련하면 그레디언트는 근사값을 갖지만 학습속도가 빨라지고 정규화 효과 덕분에 좋은 최적해를 찾을 수 있다.
예를 들어 미니배치 크기를 100에서 10,000으로 늘린다고 해보자
계산시간은 100배 증가하지만 표본 평균의 표준 편차는 에서 으로 10배밖에 감소하지 않는다. 따라서 모델의 성능에 가장 좋은 적절한 미니 배치 크기를 찾는 과정이 필요하다. 미니배치 크기는 하이퍼파라미터 만큼 신경망을 훈련하면서 검증 데이터셋을 이용해서 적절한 크기를 찾아야 한다.