Mini-batch
딥러닝에서 가장 중요한 알고리즘 중 하나이다.
Batch vs. Mini-batch
Batch는 1번 iteration(1-epoch) 할 때 사용되는 example들의 set을 말한다.
Vectorization은 train example의 계산을 좀 더 효율적으로 만들어준다.
그런데 train example의 수가 너무 많아지면 단순한 batch로는 vectorization으로도 힘들어진다.
계산 시간, resource 등이 많이 필요해지기 때문이다.
Mini-batch는 train sample을 disjoint하게 subset으로 나눠서 작은 사이즈로 줄인다.
이를 통해 memory와 속도 측면에서 성능을 향상시킬 수 있다.
즉, sample 기준에서 1차원으로 나열되어있는 것을 2차원으로 묶는 것이다.
이렇게 나눠진 subset을 mini-batch라 한다.
Mini-batch로 나눌 때는 나눠진 subset 안에 sample이 충분하도록 나누는 것이 좋다.
Notation
$X^{\{t\}}, Y^{\{t\}}$ : $t$-th mini-batch
Mini-batch Size
메모리에 training-set을 다 올릴 수 있으면 굳이 mini-batch를 사용하지 않아도 된다.
적당한 mini-batch size를 정하는 것이 좋다.
메모리를 최대한 사용할 수 있도록 해야 한다.
주로 컴퓨터 구조로 인해 2의 제곱수를 사용한다. (64, 128, 256...)
전체 training sample의 수가 m일 때,
- mini-batch의 size가 m이면 (전체 샘플이 하나의 mini-batch)
- 안정적으로 gradient가 감소하게 되어 몇 번만 하면 optimal에 도착 가능하다.
- 한번 계산(iteration)의 시간이 오래 걸린다.
- mini-batch의 size가 1이면 (mini-batch 안에 1개 샘플)
- gradient가 noisy하기 때문에 zig-zag의 형태를 띄게 된다.
- 한번 계산(iteration)의 시간이 빠르다.
- vectorization을 통한 speed up이 적다.
- 적당한 크기
- learning 속도가 빠르다.
- vectorization을 통해 속도를 개선할 수 있다.
- 전체 training set의 계산으로 인한 속도 저하가 없다.
- learning 속도가 빠르다.
Gradient Descent
Mini-batch를 사용할 때 cost는 mini-batch에 대한 cost를 사용한다.
Sample에 대한 것이 아닌 mini-batch에 대한 cost로 변한다.
즉, 한 번의 iteration에서의 cost는 각 mini-batch에 대한 cost의 평균이다.
예시
전체 샘플의 수가 5,000,000이고, 1000개의 샘플을 하나의 mini-batch로 묶었다면 총 5000개의 mini-batch가 생성된다.
이 때 1번 iteration (1-epoch)는 다음과 같이 된다.
Batch vs. Mini-batch Gradient Descent
Training의 목적은 loss를 감소시키는 것에 있다.
때문에 batch를 사용할 때도 mini-batch를 사용할 때에도 iteration이 진행될 수록 training sample에 대한 loss는 떨어지는 방향으로 간다.
다만 mini-batch를 사용하면 진동하면서 loss가 떨어진다.
Mini-batch를 사용하면 어떤 mini-batch에는 쉬운 sample들만 존재할 수도 있고, 어떤 mini-batch에는 어려운 sample들만 존재할 수도 있다.
그렇기 때문에 진동하는 그래프가 그려진다.
그럼에도 모든 샘플을 다 사용하기 때문에 전체적인 방향은 떨어지는 방향이다.
어떤 경우에는 batch에 비해 mini-batch가 성능이 더 좋다.
Batch gradient descent는 local optima에 빠지면 탈출하기가 힘들다.
그러나 mini-batch gradient descent는 local optima에 빠지더라도 탈출이 가능하다.
Loss가 0이 나오는 상황에서 noise한 것이 나와서 loss가 0이 나오지 않게 되어 local optima로부터 탈출한다.
'Computer Science > AL, ML' 카테고리의 다른 글
[Batch Normalization] Covariate Shift Problem (0) | 2022.04.21 |
---|---|
Batch Normalization (0) | 2022.04.21 |
Normalization (0) | 2022.04.20 |
Weight Initialization - Gradient Problem 방지 (0) | 2022.04.20 |
Early Stopping - Overfitting 방지 (0) | 2022.04.20 |
댓글