짧은 답변:
- 많은 빅 데이터 설정 (예 : 수백만 개의 데이터 포인트)에서 모든 데이터 포인트를 합산해야하므로 비용 또는 그라디언트를 계산하는 데 시간이 오래 걸립니다.
- 주어진 반복에서 비용을 줄이기 위해 정확한 기울기를 가질 필요 는 없습니다 . 그래디언트의 근사치가 정상적으로 작동합니다.
- SGcha (Stochastic Gradient Decent)는 하나의 데이터 포인트 만 사용하여 그라디언트와 유사합니다. 따라서 그래디언트를 평가하면 모든 데이터를 합산하는 것과 비교하여 많은 시간이 절약됩니다.
- "합리적인"반복 횟수 (이 수는 수만 개일 수 있고 수백만 개일 수있는 데이터 포인트 수보다 훨씬 적을 수 있음)를 사용하면 확률 적 그라디언트가 적절한 솔루션을 얻을 수 있습니다.
긴 대답 :
Andrew NG의 기계 학습 과정 과정을 따릅니다. 익숙하지 않은 경우 여기 에서 강의 시리즈를 검토 할 수 있습니다 .
제곱 손실에 대한 회귀를 가정하자, 비용 함수는
제이( θ ) = 12 M∑나는 = 1미디엄( 시간θ( x( 나는 )) − y( 나는 ))2
그라디언트는
디제이( θ )디θ= 1미디엄∑나는 = 1미디엄( 시간θ( x( 나는 )) − y( 나는 )) x( 나는 )
그래디언트 디센트 (GD)의 경우
θN E w= θo l d− α 1미디엄∑나는 = 1미디엄( 시간θ( x( 나는 )) − y( 나는 )) x( 나는 )
1 개 / m엑스( 나는 ), y( 나는 ) 와서 시간을 절약하십시오.
θN E w= θo l d− α ⋅ ( 시간θ( x( 나는 )) − y( 나는 )) x( 나는 )
시간을 절약 할 수있는 이유는 다음과 같습니다.
10 억 개의 데이터 포인트가 있다고 가정하십시오.
GD에서 매개 변수를 한 번 업데이트하려면 (정확한) 그래디언트가 필요합니다. 이를 위해서는 1 개의 업데이트를 수행하기 위해이 10 억 개의 데이터 포인트를 요약해야합니다.
SGD에서 우리는 그것을 얻는 것을 정확한 기울기 대신 근사 기울기 . 근사치는 하나의 데이터 포인트 (또는 미니 배치라고하는 여러 데이터 포인트)에서 나옵니다. 따라서 SGD에서 매개 변수를 매우 빠르게 업데이트 할 수 있습니다. 또한 모든 데이터 (하나의 에포크라고 함)를 "반복"하면 실제로 10 억 개의 업데이트가 있습니다.
트릭은 SGD에서 10 억 회 반복 / 업데이트 할 필요는 없지만 1 백만 회 정도로 훨씬 적은 반복 / 업데이트가 필요하며 사용하기에 "충분한"모델을 갖게된다는 것입니다.
아이디어를 시연하는 코드를 작성 중입니다. 먼저 선형 방정식을 정규 방정식으로 풀고 SGD로 풀기합니다. 그런 다음 결과를 매개 변수 값과 최종 목적 함수 값으로 비교합니다. 나중에 시각화하기 위해 튜닝 할 두 개의 매개 변수가 있습니다.
set.seed(0);n_data=1e3;n_feature=2;
A=matrix(runif(n_data*n_feature),ncol=n_feature)
b=runif(n_data)
res1=solve(t(A) %*% A, t(A) %*% b)
sq_loss<-function(A,b,x){
e=A %*% x -b
v=crossprod(e)
return(v[1])
}
sq_loss_gr_approx<-function(A,b,x){
# note, in GD, we need to sum over all data
# here i is just one random index sample
i=sample(1:n_data, 1)
gr=2*(crossprod(A[i,],x)-b[i])*A[i,]
return(gr)
}
x=runif(n_feature)
alpha=0.01
N_iter=300
loss=rep(0,N_iter)
for (i in 1:N_iter){
x=x-alpha*sq_loss_gr_approx(A,b,x)
loss[i]=sq_loss(A,b,x)
}
결과 :
as.vector(res1)
[1] 0.4368427 0.3991028
x
[1] 0.3580121 0.4782659
124.1343123.0355 이며 매우 가깝습니다.
반복에 대한 비용 함수 값은 다음과 같습니다. 손실을 효과적으로 줄일 수 있다는 것을 알 수 있습니다. 이는 데이터의 하위 집합을 사용하여 그래디언트를 근사화하고 "충분한"결과를 얻을 수 있습니다.
1000sq_loss_gr_approx
3001000