Micrograd — автоград в 150 строк кода, который стоит изучить каждому ML-разработчику

08 Aug, 2024

Репозиторий давно не обновлялся

Последнее обновление было 1 год назад.

16,339
🔱 2,563
👥 178

Когда я впервые открыл исходники PyTorch, меня озадачила сложность реализации autograd — механизма автоматического вычисления градиентов. Как объяснить коллеге-джуниору основы обратного распространения ошибки, если сам фреймворк скрывает всю магию под капотом? Именно эту проблему решает micrograd от Андрея Карпати — минималистичная реализация autograd менее чем в 150 строк кода.

Что в коробке?

Micrograd — это:

  • Автоматическое дифференцирование (autograd) для скалярных значений
  • Простейшая нейросетевая библиотека поверх него (а-ля PyTorch)
  • Визуализация вычислительного графа
  • Полноценный пример обучения MLP-классификатора

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

Как это работает? Разбираем на примерах

Базовые операции с градиентами

Рассмотрим простейший пример из документации:

from micrograd.engine import Value

a = Value(-4.0)
b = Value(2.0)
c = a + b
d = a * b + b**3
# ... и другие операции

g.backward()  # Вот оно, волшебство!
print(f'{a.grad:.4f}')  # Градиент по a
print(f'{b.grad:.4f}')  # Градиент по b

Что здесь происходит:

Реклама
  1. Создаем «умные» скаляры через Value
  2. Строим вычислительный граф операциями
  3. Вызываем backward() для автоматического расчета градиентов

Нейросети? Легко!

Несмотря на простоту, micrograd позволяет собирать настоящие нейронные сети:

from micrograd.nn import Neuron, Layer, MLP

# Нейрон с двумя входами
n = Neuron(2)  
x = [Value(1.0), Value(-2.0)]
y = n(x)

# Многослойный перцептрон
model = MLP(2, [16, 16, 1])  # 2 входа, два скрытых слоя по 16 нейронов, 1 выход

В репозитории есть полный пример обучения такого MLP на dataset «две луны»:

Decision boundary

Почему стоит попробовать?

  1. Образовательная ценность — лучший способ понять autograd
  2. Минимализм — 100 строк на autograd + 50 строк нейросетей
  3. Наглядность — встроенная визуализация графов
  4. Совместимость — API похож на PyTorch
# Визуализация вычислительного графа
dot = draw_dot(y)

Graph visualization

Под капотом: как устроен micrograd

  1. Вычислительный граф строится динамически через перегрузку операторов
  2. Обратное распространение реализовано рекурсивно
  3. Нейросети — просто композиция слоев из Neuron
  4. Оптимизация — классический SGD «в лоб»

Кому будет полезен?

  • Новичкам в ML — чтобы понять основы autograd
  • Опытным разработчикам — для экспериментов с механикой градиентов
  • Преподавателям — отличная кодовая база для курсов
  • Исследователям — платформа для прототипирования новых идей

Установка и начало работы

pip install micrograd

Для тестов понадобится PyTorch (как эталонная реализация):

python -m pytest

Вывод: 150 строк, которые стоит изучить

Micrograd — идеальный проект для «разбора на запчасти». За полчаса чтения кода вы поймете принципы, на которых работают современные фреймворки. Это как учебник по машинному обучению, где каждая глава умещается в один файл .py.

Советую:

  1. Клонируйте репозиторий
  2. Запустите demo.ipynb
  3. Поэкспериментируйте с engine.py
  4. Попробуйте добавить свои операции

P.S. Автор — Андрей Карпати, бывший директор по ИИ в Tesla, ныне работающий в OpenAI. Его мини-проекты (как nanoGPT) всегда стоят внимания.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.