stochastic gradient descent(SGD)에 대하여
데이터 학습을 할 때 optimizer로 많이 사용되는 SGD에 대해 알아보고자 한다.
SGD는 Batch Gradient Descent(BGD)같이 전체 데이터셋에 대한 미분값을 계산하지 않고, mini-bathc 만큼의 데이터셋에 대해서만 계산을 진행한다.
이렇게 되면 전체 데이터셋을 메모리에 올릴 필요가 없으므로 큰 메모리가 요구되지 않게 됩니다.
stochastic 이라고 말하는 이유 또한 mini-batch만 보기 때문입니다.
BGD가 전체 데이터셋을 다룬다는 의미는 같은 데이터를 계속 살펴본다는 의미이다. 그렇기 때문에 gradient 값이 하나로 주어지게 되며 이를 deterministic 하다고 말합니다.
하지만, SGD의 경우 mini-batch로 데이터를 보기 때문에 mini-batch를 어떻게 선택하냐에 따라서 gradient값이 다르게 나오게 됩니다.
따라서 gradient의 흐름이 정해지지 않고 확률적으로 나타난다는 의미에서 stochastic 이라고 말하게 됩니다.
SGD의 장점
mini-batch로 step을 진행하므로 더 빠른 학습이 가능하다.
local-minima을 피할 수 있게 된다.
위의 그림을 보면 BGD는 전체 데이터셋에 대한 계산을 진행하기 때문에 minimum 방향으로 곧장 나아가게 된다.
하지만 SGD는 어떤 batch를 선택했느냐에 따라 minimum을 향해가는 방향이 달라지게 된다. 이렇게 minima의 방향을 알고서 향해가는 것이 아니기 때문에 local minima를 피해갈 수 있게 된다.
SGD의 단점
SGD는 하나의 축에 대해서는 minima이지만 다른 축에 대해서는 아닌 saddle point를 벗어나지 못하는 문제점이 있다.
이를 해결하기 위한 SGD의 변형 알고리즘인 Momentum, NAG, Adadelta 등이 존재하며 이는 다음 포스트에서 살펴보려고 한다.
출처