Сходимость SGD применительно к наименьшим квадратам в R

Я изучаю стохастический градиентный спуск и пытаюсь использовать его со среднеквадратичной ошибкой, применяемой к набору данных Бостона. Выбор функции для минимизации намеренно прост, так что, наконец, я могу сравнить его с хорошо известным результатом.

Код в R следующий:

X=data.matrix(Boston, rownames.force = NA)
y=X[,14]
X=X[,-14]
X=matrix(c(replicate(506,1),X),506,14)
sizebatch=c(1,2,3,5,10,15,20,50,100,506)
Atrue=solve(t(X)%*%X)%*%t(X)%*%y
A=Atrue+0.01*rnorm(14)
for(i in 1:length(sizebatch)){
  szb=sizebatch[i]
  count=1
  while (norm(A-Atrue)>1e-2){
    batch=sample(1:506,szb,replace = FALSE)
    eta=count^(-0.6)/10
    for(j in batch){
      A=A-drop((1/szb)*eta*(X[j,]%*%A-y[j]))*as.matrix(X[j,])
    }
  count=count+1  
  }
}

Кажется, что это сильно расходится, но я не могу понять почему: то, что я должен делать, - это вычитать из A градиент (относительно A) функции потерь, применяемый к членам одной партии, разделенный на размер партии.

Если размер партии большой, достаточно одной итерации, чтобы позволить A расходиться, и я действительно не понимаю, почему. Возможно, я ошибся с градиентом, но не могу понять где. Спасибо всем.

0 ответов

Другие вопросы по тегам