본문 바로가기
딥러닝관련/기초 이론

Stochastic gradient descent(확률적 경사 하강법)

by 머리올리자 2022. 2. 20.

2022.02.20 - [딥러닝관련/기초 이론] - 경사 하강법(Gradient Descent)

 

경사 하강법(Gradient Descent)

2022.01.24 - [딥러닝관련/기초 이론] - 선형 회귀 (Linear Regression) 선형 회귀 (Linear Regression) 선형 회귀 모델 선형 회귀(Linear Regression)의 의미 수많은 점들을 설명할 수 있는 선을 그으려면 어떻게..

better-tomorrow.tistory.com

위 글에서 이어진다.

 

Batch Gradient Descent의 단점

 

이전 글에서 알아보았던 batch gradient descent의 가장 큰 문제는 무엇일까?

 

매 step마다 전체 데이터 셋을 사용해 gradient를 계산한다는 것이다.

 

당연하게도 training set이 증가하면 gradient를 계산하는 속도가 매우 느려진다.

(실험하다보면 또 알 수 있는 것인데, 전체 데이터 셋을 한 번에 학습 시키려고 하면,

내가 설정한 하이퍼 파라미터와 모델이 학습이 잘 되고 있는 건지 확인하는 것이 오래 걸린다. -> 이 경우 시간이 낭비됨)

 


확률적 경사 하강법(stochastic gradient descent)

 

반대로 stochastic gradient descent는

- 매 step에서 한 개의 샘플을 무작위로 선택하고,

- 그 샘플에 대한 gradient를 계산한다.

 

이는 매 iteration마다 다뤄야 할 샘플이 매우 적기 때문에 한 step 당 계산하는 속도가 매우 빠르다.

(한 step당 전체 datasets vs 1개의 datasets)

 

- 반면 무작위(확률적)으로 샘플링하기 때문에, 이 알고리즘은 batch gradient descent보다 훨씬 불안정하다.

cost function이 최솟값에 다다를 때까지 smooth하게 감소하지 않고 요동치며 감소한다.

시간이 지나면 최솟값에 매우 근접하겠지만 fluctuation이 지속되면서 minimum에 안착하지 못할 수 있다.

 

출처 : https://www.oreilly.com/library/view/hands-on-machine-learning/9781491962282/assets/mlst_0408.png

 

래와 같이 cost function이 매우 불규칙할 때 stochastic gradient descent가 local minimum을 건너뛰도록 

도와 줄 수 있다.이는 stochastic gradient descent가 batch gradient descent보다 global minmum을 찾을 가능성이 높다는 의미

 

 

이런 무작위성은 local minumum을 탈출시켜서 좋지만 global minimum에 다다르지 못하게 한다는 점에서는 단점이다.

 

이를 해결할 수 있는 한 가지 방법은 learning rate를 점진적으로 감소시키는 것.

-> 학습을 시작할 때 learning rate를 크게 -> learning rate를 점차 줄여나간다.

이를 annealing(담금질)이라고 함.

(이를 수행해주기 위해 learning rate scheduler가 많이 적용된다)

 

# original code from https://github.com/rickiepark/handson-ml2/blob/master/04_training_linear_models.ipynb
theta_path_sgd = []
m = len(X_b)
np.random.seed(8138)

n_epochs = 50
t0, t1 = 5, 50  # 학습 스케줄 하이퍼파라미터

def learning_schedule(t):
    return t0 / (t + t1)

theta = np.random.randn(2,1)  # 랜덤 초기화

for epoch in range(n_epochs):
    for i in range(m): # data 수만큼 range 0......len(X_b)-1
        if epoch == 0 and i < 20:                    # 책에는 없음
            y_predict = X_new_b.dot(theta)           # 책에는 없음
            style = "b-" if i > 0 else "r--"         # 책에는 없음
            plt.plot(X_new, y_predict, style)        # 책에는 없음
        random_index = np.random.randint(m) # m전까지 무작위 int
        xi = X_b[random_index:random_index+1] # 한 개 sampling
        yi = y[random_index:random_index+1] # 정답 sampling
        gradients = 2 * xi.T.dot(xi.dot(theta) - yi) # gradient 계산
        eta = learning_schedule(epoch * m + i) # epoch와 m, i에 따른 새로운 lr계산
        theta = theta - eta * gradients # weight update
        theta_path_sgd.append(theta)                 # 책에는 없음

plt.plot(X, y, "b.")                                 # 책에는 없음
plt.xlabel("$x_1$", fontsize=18)                     # 책에는 없음
plt.ylabel("$y$", rotation=0, fontsize=18)           # 책에는 없음
plt.axis([0, 2, 0, 15])                              # 책에는 없음
save_fig("sgd_plot")                                 # 책에는 없음
plt.show()                                           # 책에는 없음

위는 learning rate schedule를 적용한 stochastic gradient descent 구현

(몇개 주석은 따로 추가함)

 

아래는 stochastic gradient descent의 20 step의 그래프

 

출처 :&amp;nbsp;https://www.oreilly.com/library/view/hands-on-machine-learning/9781491962282/assets/mlst_0409.png

샘플을 무작위로 선택하기 때문에 어떤 한 샘플은 여러 번 선택될 수 있고 어떤 샘플은 선택되지 못할 수도 있음

 

알고리즘의 모든 sample을 사용하게 하려면 training sets를 섞은 후 차례대로 하나씩 선택하고,다음 epoch에서 다시 섞는 식의 방법 적용 가능

(보통은 학습할 때 매 epoch가 끝날 때마다 training set을 shuffling을 해준다

shuffling을 하지 않으면 stochastic gradient descent는

첫 번째 label에 최적화 -> 두 번째 label에 최적화되는 식으로 진행되어,

결국 global minimum에 도달하기 어려움)

 

 

다음 글

2022.02.20 - [전체글] - Mini-batch Gradient Descent(미니배치 경사 하강법)

 

Mini-batch Gradient Descent(미니배치 경사 하강법)

2022.02.20 - [딥러닝관련/기초 이론] - Stochastic gradient descent(확률적 경사 하강법) Stochastic gradient descent(확률적 경사 하강법) 2022.02.20 - [딥러닝관련/기초 이론] - 경사 하강법(Gradient Desce..

better-tomorrow.tistory.com

 

이 글의 내용은 많은 부분 아래 링크인 핸즈온 머신러닝 2판을 참고했으며

영리 목적이 아닌 개인적인 학습을 위해 정리한 내용을 바탕으로 작성했음을 밝힙니다.

 

 

내용 참고

https://book.naver.com/bookdb/book_detail.nhn?bid=16328592