N 개의 샘플이있는 데이터 세트를 사용하여 확률 적 경사 하강 회귀 알고리즘을 훈련시키고 싶다고 가정 해 봅시다. 데이터 세트의 크기가 고정되어 있으므로 데이터를 T 번 재사용합니다. 각 반복 또는 "에포크"에서 전체 트레이닝 세트를 무작위로 재정렬 한 후 각 트레이닝 샘플을 정확히 한 번 사용합니다.
내 구현은 Python과 Numpy를 기반으로합니다. 따라서 벡터 연산을 사용하면 계산 시간이 크게 단축 될 수 있습니다. 배치 그라디언트 디센트의 벡터화 된 구현을 생각해내는 것은 매우 간단합니다. 그러나 확률 구배 하강의 경우 각 시대에서 모든 샘플을 반복하는 외부 루프를 피하는 방법을 알 수 없습니다.
확률 구배 하강의 벡터화 구현을 아는 사람이 있습니까?
편집 : 내 데이터 세트의 크기가 고정 된 경우 왜 온라인 그라디언트 디센트를 사용하고 싶은지 묻습니다.
[1]에서 온라인 그라디언트 디센트는 배치 그라디언트 디센트보다 경험적 비용의 최소로 느리게 수렴됨을 알 수 있습니다. 그러나 예상 비용의 최소 수준으로 더 빨리 수렴되어 일반화 성능을 측정합니다. 교차 검증을 통해 특정 문제에서 이러한 이론적 결과의 영향을 테스트하고 싶습니다. 벡터화 된 구현이 없으면 온라인 그라디언트 디센트 코드가 배치 그라디언트 디센트 코드보다 훨씬 느립니다. 이는 교차 검증 프로세스가 완료되는 데 걸리는 시간을 크게 증가시킵니다.
편집 : ffriend의 요청에 따라 온라인 그라데이션 하강 구현의 의사 코드를 여기에 포함시킵니다. 회귀 문제를 해결하고 있습니다.
Method: on-line gradient descent (regression)
Input: X (nxp matrix; each line contains a training sample, represented as a length-p vector), Y (length-n vector; output of the training samples)
Output: A (length-p+1 vector of coefficients)
Initialize coefficients (assign value 0 to all coefficients)
Calculate outputs F
prev_error = inf
error = sum((F-Y)^2)/n
it = 0
while abs(error - prev_error)>ERROR_THRESHOLD and it<=MAX_ITERATIONS:
Randomly shuffle training samples
for each training sample i:
Compute error for training sample i
Update coefficients based on the error above
prev_error = error
Calculate outputs F
error = sum((F-Y)^2)/n
it = it + 1
[1] "대규모 온라인 학습", L. Bottou, Y. Le Cunn, NIPS 2003.