Goal
- Stochastic Gradient Descent 알고리즘
- Gradient Descent와의 차이점
- 각 알고리즘의 장단점
- hyper-parameter(epoch, batch size)
그래프 상에서 임의의 한 점을 잡아서 기울기 방향으로 이동해 가는 최적화 알고리즘이다.

우리가 알고리즘에서 사용할 때는 Full-batch Gradient descent 라고 부르는 개념이다.
미분값을 구할 때 전체 값을 다 구해준다.
미분값을 구할 때, 전체 데이터인 N개 만큼의 값을 구해주는 것이 핵심이다.
위와 같은 속도가 느려진다는 점이 있어서 Stochastic gradient descent 를 사용한다.
확률적인 경사하강법이다.
한 점씩 돌아가면서 gradient 를 구하는 것이다.
procedure SGD
shuffle(X) ▷ Randomly shuffle data
for i in number of X do
θ_j := θ_j - α (ŷ⁽ⁱ⁾ - y⁽ⁱ⁾) xⱼ⁽ⁱ⁾ ▷ Only one example
end for
end procedure
위와 같은 문제점이 있기 때문에 사용하는 것이 Mini-batch (stochastic) gradient descent 이다.
데이터를 일부 사용하는 것이다.
procedure MINI-BATCH SGD
shuffle(X) ▷ Randomly shuffle data
BS <- BATCH SIZE
NB <- Number of Batches
NB <- len(X)//BS
for i in NB do
θ_j := θ_j - α ∑_{k = i×BS}^{(i+1)×BS} (ŷ⁽ᵏ⁾ - y⁽ᵏ⁾) xⱼ⁽ᵏ⁾ ▷ Batch-sized examples
에 x[0 : 10], x[10 : 20] 이런 식으로, x에서 0부터 10까지 뽑아서 넣어주고, 10부터 20까지 학습시키는 것이다.
for epoch in range(epoches): # 전체 Epoch이 iteration 되는 횟수
X_copy = np.array(X)
if is_SGD: # SGD 여부 -> SGD일 경우 shuffle
np,random.shuffle(X_copy)
batch = len(X_copy) // BATCH_SIZE # 한번에 처리하는 BATCH_SIZE
for batch_count in range(batch):
X_batch = np.copy(
X_copy(batch_count*BATCH)SIZE : (batch_count+1)*BATCH_SIZE])
# Do weight Update BATCH_SIZE 크기만큼 X_batch 생성
print("Number of epoch : %d" % epoch)
gd_lr = linear_model.LinearRegressionGD(eta0=0.001, epochs=10000, batch_size=1, shuffle=False)
bgd_lr = linear_model.LinearRegressionGD(eta0=0.001, epochs=10000, batch_size=len(X), shuffle=False)
sgd_lr = linear_model.LinearRegressionGD(eta0=0.001, epochs=10000, batch_size=1, shuffle=True)
msgd_lr = linear_model.LinearRegressionGD(eta0=0.001, epochs=10000, batch_size=100, shuffle=True)