Я просто хочу знать, делает ли PyTorch "базовый" градиентный спуск или что-то другое.
Если вы установите torch.optim.SGD
, это означает стохастический градиентный спуск.
У вас есть разные реализации в GD, но та, которая используется в PyTorch, применяется к мини-пакетам.
Существуют реализации GD, которые оптимизируют параметры после полной эпохи. Как вы можете догадаться, они очень «медленные», это может быть полезно для тестирования суперкомпьютеров. Существуют реализации GD, которые работают для каждого образца, так как вы можете догадаться, что их несовершенство - это «огромные» градиентные флуктуации.
Это все относительные термины, поэтому я использую ""
Обратите внимание, что вы используете слишком большие скорости обучения, такие как lr = 1.0
, что означает, что вы сначала не нормализовали свои данные, но это навык, который вы можете скальпировать со временем.
Так что возможно, что с оптимизатором SGD и MSELoss он использует какую-то другую функцию дельты или обратного распространения, а не базовую, упомянутую выше?
Использует то, что вы сказали.
Вот пример в PyTorch и в Python, чтобы показать, что обнаружение градиентов работает как ожидалось (используется в обратном распространении):
x = torch.tensor([5.], requires_grad=True);
print(x) # tensor([5.], requires_grad=True)
y = 3*x**2
y.backward()
print(x.grad) # tensor([30.])
Как бы вы получили это значение 30 в обычном питоне?
def y(x):
return 3*x**2
x=5
e=0.01 #etha
g=(y(x+e)-y(x))/e
print(g) # 30.0299
Как мы и ожидали, мы получили ~ 30, было бы еще лучше с меньшим etha
.