티스토리 뷰

딥러닝에서 한번의 iteration을 위해 들어가는 인풋데이터는 보통 batch라고 하여 수십수백개의 데이터를 한그룹으로 사용하게 됩니다. 그렇다면 mini-batch는 한번의 iteration에 인풋 데이터로 한개를 쓰는 경우와 전체 데이터셋을 쓰는 두 경우(양극단)에 비해 어떤 장점이 있길래 이렇게 당연한 듯이 쓰이는 걸까요. 당연한 말이지만 mini-batch는 두가지 방법의 장점을 모두 얻기 위한(서로의 단점을 보완) 타협점입니다, 아래에서는 두가지 방법의 장단점에 대해 알아보고 왜 mini-batch를 사용하는지 정리해보겠습니다.

(forward + backpropagation+업데이트를 거치는 한번의 과정을 iteration이라고 합니다.)


데이터를 한개 쓰는 경우

장점:

1)iteration 한번 수행하는데 소요되는 시간이 매우 짧습니다. cost function의 최적의 값을 찾아가는 과정을 한걸음한걸음 minimum을 향해 걸어가는 것으로 생각한다면 매우 빠르게 걸을 수 있습니다.

 

단점:

1)데이터 전체의 경향을 반영하기가 힘듭니다, 그래서 업데이트를 꼭 좋은 방향으로만 하지않습니다. 현재 학습을 진행하는 데이터 한개에 대해서는 cost function의 값이 줄어들더라도 이로 인해 다른 데이터에 대해서는 cost가 증가 할 수 있기 때문입니다. 결국 많이 헤매게 됩니다.

2)하드웨어입장에서 비효율적입니다, 현재 딥러닝에 GPU를 많이 쓰는 이유는 그 강력한 병렬연산능력 때문입니다. 그런데 한번에 데이터 한개만 학습에 사용한다면 그 병렬연산을 안쓰는 것이나 마찬가지입니다. 학습을 위해서 갈 길이 먼데 매우 아까운 낭비가 될 것입니다.


그림1: 타원의 중심이 minimu(목표지점), x표시가 출발지점. 갈팡질팡 헤매면서 목표지점에 다가서게 된다.

빨간원은 그 안에서도 여러차례 헤매게 된다는 것을 표시.



전체데이터를 쓰는 경우 

장점:

1)전체 데이터를 반영하여 한걸음한걸음을 내딛습니다, 즉 정말로 cost function의 값을 줄이는 양질의 이동을 하게됩니다.

단점:

1)데이터셋의 크기가 커질 경우 iteration을 한번 수행하는데 소요되는 시간이 매우 깁니다, 최적의 위치를 찾아가기 위해서는 최소한으로 수행해야 하는 iteration이 존재하기에 학습시간이 매우 길어집니다. 이를 보완하기 위해서 learning rate를 높이려고 해봐도 쉽지 않습니다. 보통 학습을 진행 할 때 learning rate를 너무 크게 잡으면 local minimum만 왔다갔다하거나 minimum에 들어가지 못하는 shooting 현상이 생기기 때문입니다. 

2)하드웨어입장에서 부담스럽습니다. 데이터셋이 커질 경우 그 데이터를 메모리에 올려야 될 뿐만 아니라 그 데이터의 전처리한 결과나 레이어를 거친 아웃풋 등도 수시로 메모리를 드나듭니다. 즉매우 큰 메모리용량이 필요하게 됩니다.


그림2: 화살표 부분에서 시작하여 목표지점을 향해 매우 효율적으로 움직임.


결국 데이터를 한개 쓰면 빠르지만 너무 헤매고, 전체를 쓰면 정확하지만 너무 느립니다. 즉 적당히 빠르고 적당히 정확한 길을 찾기 위해 mini-batch를 사용합니다. 적게는 수십개부터 많게는 수백개의 데이터를 한 그룹으로하여 처리함으로써 iteration 한번 수행하는데 소요되는 시간을 최대한 줄이면서 전체 데이터를 최대한 반영합니다. 동시에 보통은 가능한 한도 내에서 batch 크기를 최대한 크게 잡아 하드웨어에 부담을 주지 않는 선에서 하드웨어를 최대한 활용합니다. 이와 같은 이유로 거의 당연하게 mini-batch를 사용하게 됩니다.



그림출처: Andrew Ng의 코세라 머신러닝 수업

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함