Почему PyTorch стал популярнее TensorFlow?

«Почему PyTorch стал популярнее TensorFlow?» — вопрос из категории Нейронные сети и Deep Learning, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

PyTorch получил широкое распространение, особенно в исследованиях и стартапах, из-за своего интуитивного и гибкого дизайна, который лучше соответствует привычкам программистов на Python. Ключевые технические причины:

  • Динамический вычислительный граф (Eager Execution по умолчанию): В PyTorch граф строится на лету. Это позволяет использовать привычные конструкции Python (циклы, условные операторы) прямо внутри модели и отлаживать код стандартными средствами (pdb, print). В TensorFlow 1.x необходимо было сначала статически определить граф через tf.Session, что было громоздко.
  • Python-first подход: API PyTorch ощущается как часть Python. Объектно-ориентированный дизайн (torch.nn.Module) понятен и прост для расширения. Создание кастомных слоев или функций потерь тривиально.
  • Более простой дебаггинг: Так как выполнение происходит построчно, ошибки ведут прямо к проблемной строке кода, а не в недра статического графа.

Пример: Быстрое прототипирование на PyTorch

import torch
import torch.nn as nn
import torch.optim as optim

# Определяем модель за пару строк
class SimpleNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc = nn.Linear(10, 1)
    def forward(self, x):
        return self.fc(x)

model = SimpleNN()
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# Прямой проход, расчет ошибки, обратное распространение - все ясно и на виду
for data, target in dataloader:
    optimizer.zero_grad()
    output = model(data)          # Граф строится здесь
    loss = criterion(output, target)
    loss.backward()               # Автоматическое дифференцирование
    optimizer.step()
    print(f'Loss: {loss.item()}') # Легко следить за процессом

Хотя TensorFlow 2.0 перенял eager mode, к тому моменту PyTorch уже создал сильное сообщество и стал де-факто стандартом для новых исследований, что обеспечило его экосистеме (библиотеки, предобученные модели) быстрое развитие.