Gradient Descent Algorithm

Gradient Descent Algorithm

Network의 parameter update에는 보통 Gradient Descent Algorithm을 사용한다. parameter θ\theta 에 대한 Loss function J(θ)J(\theta) 의 값을 최소화하기 위해 기울기 값 θJ(θ)\nabla_\theta J(\theta) 을 활용한다.

Loss를 최소화한다는 의미?

parameter θ\theta를 바꿔가며 출력의 Loss를 계산하면 아래와 같은 그래프가 나온다하자. 여기서 학습목표는 loss function J(θ)J(\theta)의 값이 최소가 되는 θ\theta를 찾는 것이다.
gradient-0
위 그림에서 loss가 가장 적은 곳은J(θ)J(\theta)함수를 θ\theta로 편미분했을때 기울기 θJ(θ)\nabla_\theta J(\theta)가 0 이 되는 지점으로 θ\theta값을 기울기의 반대방향으로 이동하여 도달할 수 있다.
한 iteration에서 update되는 θt+1\theta_{t+1} 의 계산식은 아래와 같다.
θt+1=θtηθJ(θ)\theta_{t+1} = \theta_{t}-\eta\nabla_\theta J(\theta)
learning rate η\eta 는 update에서 기울기를 타고 내려가는 한번의 step을 조절하는 hyperparameter로 활용된다.

Gradient Descent Algorithm은 update방식에 따라 크게 BGD와 SGD로 구분되고 변형되어가면서 더 빠르게 최적의 parameter로 학습할 수 있게되었다.

Batch Gradient Descent (BGD)

Batch는 모델학습 과정에서 GPU의 병렬처리기능을 효율적(GPU메모리의 크기에 따라 선정하여 학습속도를 효과적으로 줄일 수 있음)으로 활용하기 위해 입력벡터를 하나의 집단으로 묶어놓은 것을 말한다.
(여기서 말하는 Batch는 엄밀히 말하면 mini-batch라하지만 편의상 Batch라한다.)

BGD는 parameter update의 가장 기본적인 모델이다. 입력으로 전체 데이터를 활용하기 때문에 어느정도 보장된 학습결과를 도출할 수 있지만, 한 step을 나아가기 위해 전체데이터의 loss를 계산하는 등 학습속도가 너무 낮다는 문제점이 있다.

Stochastic Gradient Descent (SGD)

BGD는 학습시 전체 데이터를 이용하므로 학습속도가 너무 느리다는 단점이 있다. SGD에서는 학습시 전체데이터(Batch)를 활용하지 않고 Mini-batch를 활용하여 한 step을 진행하게 된다.
이 방법은 BGD보다 다소 부정확할 수 있지만, 학습에 더 짧은 시간이 소요되고 더 많은 step을 진행하면 BGD와 비슷한 결과를 도출 할 수 있다.
또한, SGD를 활용할 경우 BGD에서 발생하는 local minima를 회피하여 더 좋은 학습결과를 도출 할수도 있다.

보통 우리가 Network를 학습할 때는 이 SGD를 활용하거나 SGD의 변형알고리즘을 활용한다.
내가 보려고 올리는 기술 블로그 (6 Page) :: 내가 보려고 올리는 기술 ...

'Algorithm > Deep Learning' 카테고리의 다른 글

Optimizer 의 종류와 특성 (Momentum, RMSProp, Adam)  (0) 2020.05.05

+ Recent posts