припустимо, що я хочу навчити алгоритм регресії стохастичного градієнта спуску за допомогою набору даних, що містить N зразків. Оскільки розмір набору даних є фіксованим, я повторно використовую дані T разів. Під час кожної ітерації або "епохи" я використовую кожен зразок тренінгу рівно один раз після випадкового переупорядкування всього навчального набору.
Моя реалізація базується на Python та Numpy. Тому використання векторних операцій може значно скоротити час обчислень. Подання векторизованої реалізації пакетного градієнта спуску досить просто. Однак у випадку стохастичного градієнтного спуску я не можу зрозуміти, як уникнути зовнішньої петлі, яка проходить через усі зразки в кожну епоху.
Хтось знає будь-яку векторизовану реалізацію стохастичного градієнтного спуску?
EDIT : Мене запитали, чому я хотів би використовувати онлайн-градієнт, якщо розмір мого набору даних встановлений.
З [1] видно, що онлайн-градієнтний спуск конверсується повільніше, ніж пакетний градієнт, до мінімуму емпіричної вартості. Однак вона швидше переходить до мінімальної очікуваної вартості, що вимірює ефективність узагальнення. Я хотів би перевірити вплив цих теоретичних результатів на мою конкретну проблему шляхом перехресної перевірки. Без векторизованої реалізації мій онлайн-код градієнта значно повільніше, ніж пакетний градієнт спуску. Це надзвичайно збільшує час, необхідний для завершення процесу перехресної перевірки.
EDIT : Я включаю сюди псевдокод моєї он-лайн градієнтної спуск, як того вимагає 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] «Велике масштабне Інтернет-навчання», Л. Ботту, Ю. Ле Кун, NIPS 2003.