О чём урок
В предыдущих уроках мы построили класс Value и научили его автоматически считать градиенты через обратное распространение. Но сам по себе Value это только число с памятью. Чтобы получить нейросеть, нужна надстройка: нейрон, слой, сеть из слоёв и цикл обучения, который превращает градиенты в обновления весов. В этом уроке вы разберёте классы Neuron, Layer и MLP из micrograd, посчитаете, сколько в маленькой сети на самом деле параметров, пройдёте весь цикл обучения из demo.ipynb на данных make_moons и обучите свою собственную сеть на игрушечной задаче регрессии.
Неофициальный курс AI University по открытому коду (MIT). В уроке приводится код из karpathy/micrograd © Andrej Karpathy, лицензия MIT; комментарии переведены на русский, объяснения написаны нашей командой. Курс не связан с автором кода и не одобрен им.
Нейрон в самом простом виде это взвешенная сумма входов плюс смещение, пропущенная через нелинейность. В micrograd это записано почти буквально:
Здесь nin число входов нейрона. Каждому входу соответствует вес wi, значение которого изначально выбирается случайно из равномерного распределения на отрезке [-1, 1] функцией random.uniform(-1,1). Это принципиально: если все веса инициализировать нулями, все нейроны слоя будут вычислять одно и то же и получать одинаковые градиенты, и сеть не сможет разучиться симметрии. Случайный разброс весов её ломает.
Смещение self.b стартует с нуля: Value(0). Это не обязательное правило, а разумная практика: при нулевом смещении нейрон не сдвинут ни в какую сторону заранее, и в начале обучения сдвиг появится только там, где это нужно для данных.
Обратите внимание на вызов sum((wi*xi for wi,xi in zip(self.w, x)), self.b). Второй аргумент встроенной функции sum это начальное значение, с которого начинается суммирование. Вместо нуля по умолчанию здесь подставлено self.b, поэтому результат сразу равен Σ(wi·xi) + b, без отдельной строки кода для прибавления смещения.
Параметр nonlin решает, применять ли к результату нелинейность…
План урока
- От Value к нейрону
- Слой и сеть
- Сколько параметров в MLP(2, [16, 16, 1])
- Данные и функция потерь
- Цикл обучения: градиентный спуск
- Наш пример: регрессия на MLP
- Ограничения micrograd и взгляд вперёд
- Попробуйте сами
Урок входит в полный доступ. Полный текст и видео открываются после оплаты. Первые уроки каждого курса бесплатны.