0x00 сводка
Эта статья и последующиеAutomatic Differentiation in Machine Learning: a SurveyНа основе этой статьи мы постепенно проанализируем автоматическое дифференцирование, основной инструмент машинного обучения.
0.1 Происхождение
Автор планирует проанализировать распределенную реализацию PyTorch, но при анализе распределенного автограда я обнаружил, что если не разобраться с автоматическим дифференцированием и обычным движком автограда, то анализ распределенного автограда сделать сложно, поэтому я вернулся учиться, поэтому у меня есть эта статья.
0.2 Автоматическое дифференцирование
Мы знаем, что основной процесс обучения модели в рамках глубокого обучения:
- Постройте вычислительный граф на основе модели.
- Вычислите функцию потерь на входе.
- Вычислите производную функции потерь по параметрам модели.
- В соответствии с полученными производными параметры модели обновляются обратно пропорционально с помощью таких методов, как градиентный спуск, чтобы минимизировать функцию потерь.
Процесс построения расчетного графа (зависимости) и расчета функции потерь называется «прямое распространение», выполняется на основе пользовательской модели и по существу обрабатывается пользователем. Процесс вывода на основе функции потерь называется «обратным распространением», что слишком тяжело для пользователей, поэтому различные фреймворки глубокого обучения предоставляют функции автоматического вывода. Основные проблемы, которые помогают решить фреймворки глубокого обучения, следующие:
- Автоматический расчет и обновление градиента при обратном распространении.
- Вычислить с помощью графического процессора.
Таким образом, это включает в себя концепцию автоматического расчета градиента.
В математике и вычислительной алгебре автоматическое дифференцирование или автоматический вывод (Automatic Differentiation, AD) также называют дифференциальным алгоритмом или числовым дифференцированием. Это способ численного вычисления, функция которого заключается в вычислении производной, градиента, значения матрицы Гессе и т. д. сложной функции (многослойной составной функции) в определенной точке.
0x01 Основная концепция
Чтобы завершить текст, мы должны сначала представить некоторые основные понятия или идеи, некоторые из которых могут быть знакомы всем, пожалуйста, сразу переходите к главе 2.
1.1 Машинное обучение
Герберт Саймон (лауреат премии Тьюринга 1975 г., лауреат Нобелевской премии по экономике 1978 г.) определяет «обучение» следующим образом: «Если система может, выполняя процесс, улучшить свою работу, то этот процесс является обучением».
Таким образом, машинное обучение — это обучение на эмпирических данных, извлечение важных закономерностей и тенденций в данных и, таким образом, повышение производительности функций прогнозирования (функциональных функций для конкретных входных данных и ожидаемых выходных данных).
Например: функция может использоваться для различения кошек и собак, нам нужно использовать большое количество обучающих данных, чтобы добывать и развивать эту функцию и улучшать ее производительность.
1.2 Глубокое обучение
Традиционное машинное обучение использует знания и опыт для извлечения различных функций из необработанных данных для обучения. Извлечение признаков — важная часть машинного обучения: проектирование признаков. Разработка функций — сложная часть из-за огромного количества функций, задействованных в необработанных данных, и разнообразия функций. Глубокое обучение позволяет нейронной сети самостоятельно изучать/извлекать различные функции данных или формировать некоторые высокоуровневые функции путем комбинирования различных низкоуровневых функций.
1.3 Функция потерь
Для функциональной функции машинного обучения мы даем ввод и получаем вывод, например ввод кота и вывод «будь то кот». Но это фактическое выходное значение может не совпадать с нашим ожидаемым значением. Следовательно, нам нужно построить систему оценки, чтобы различать, является ли функция хорошей или плохой, что приводит к функции потерь.
Функция потерь или функция стоимости используется для измерения степени «разрыва» или точности между ожидаемым результатом (истинное значение) и фактическим результатом (прогнозируемое значение).
Функция потерь может количественно определить степень соответствия модели значению функции.Если мы выберем другие параметры модели, значение функции потерь изменится соответствующим образом. Чем меньше значение функции потерь, тем меньше разница между фактическим выходом и ожидаемым выходом и тем выше точность построенной модели. Например, функция потерь общей среднеквадратичной ошибки (Mean Squared Error) в геометрическом смысле может рассматриваться как квадрат среднего расстояния между прогнозируемым значением и фактическим значением.
1.4 Веса и смещения
Обычно в функции потерь есть два параметра:
- Мы называем степень влияния между нейронами и нейронами весом. Величина веса является прочностью соединения. Он сообщает следующему слою соседних нейронов, на какие входные семафоры следует обратить больше внимания.
- В дополнение к весам связи внутри нейрона есть особый вес, который применяется к самому себе, называемый смещением. Смещение используется для настройки отклонения расстояния функции от истинного значения. Облегчает ли смещение активацию вспомогательного нейрона. То есть он определяет, насколько большой должна быть взвешенная сумма связей нейрона, чтобы срабатывание было значимым.
Структура нейронной сети предназначена для того, чтобы позволить нейронной сети обучаться с «лучшей» производительностью. А вотТак называемое «обучение» заключается в непрерывной корректировке весов и смещений, чтобы найти наиболее подходящие веса и смещения между нейронами, чтобы можно было минимизировать значение функции потерь..
1.5 Производные и градиенты
Одной из характеристик нейронных сетей является то, что они учатся на выборках данных.То есть значения параметров весов сети могут быть определены автоматически из обучающих данных.
Теперь, когда у нас есть система оценки функции потерь, мы можем использовать ее для обратной настройки весов в сети, чтобы минимизировать потери, то есть, если некоторые веса заставляют функцию потерь достигать минимального значения, эти веса являются наиболее идеальными. параметры, которые мы ищем.
Предполагая, что функция потерь равна y = f(x), находим ее минимальное значение, то есть находим экстремум этой функции, затем находим решение дифференциального уравнения ее первой производной f'(x) = 0. Однако компьютеры плохо справляются с решением дифференциальных уравнений, поэтому они могут лишь предпринимать множество попыток с помощью интерполяции и других методов найти крайние точки функции.
Что такое производная?
Так называемая производная — это мера, используемая для анализа «скорости изменения» функции. Для конкретной точки х0 в функции производная этой точки есть «мгновенный наклон» точки х0, т. е. наклон касательной.
Что такое градиент?
Первоначальное значение градиента - вектор (вектор), указывающее на то, что производная функции по направлению в этой точке принимает максимальное значение по этому направлению, то есть функция быстрее всего изменяется по этому направлению (направлению этого градиента). в этой точке и скорость изменения самая большая (для величины градиента).
В действительнозначной функции с одной переменной для конкретной точки функции направление ее градиента указывает направление, в котором значение функции растет наиболее быстро, или направление, в котором скорость изменения производной функции является максимальной. самый большой.
Для машинного обучения / глубокого обучения направление градиента - это направление, в котором функция потерь изменяется быстрее всего.Поскольку мы хотим наименьших потерь, мы обычно используем численное дифференцирование для расчета градиента весовых параметров нейронной сети и определения параметров в соответствии в направлении градиентного спуска и оптимизировать в соответствии с этим направлением.
1.6 Градиентный спуск
Общая идея градиентного спуска такова: сначала случайным образом установить некоторые начальные значения для параметров w и b, затем использовать итерационный алгоритм для вычисления выхода текущей сети, а затем изменить в обратном направлении в соответствии с разностью между выходом сети и ожидаемыми выходными параметрами предыдущих слоев, пока сеть не сойдется и не стабилизируется.
В частности, это:
-
Произвольно установить некоторые начальные значения для параметров w, b.
-
для i = 0 к количеству обучающих данных:
- Рассчитать выход текущей сети для i-х обучающих данных по начальным значениям параметров w, b
- Градиент веса w и смещения b по отношению к функции потерь получается на основе разницы между выходом сети и ожидаемым выходом.
-
Наконец, для каждых обучающих данных получается значение градиента веса и смещения.
-
Сложите весовые градиенты данных каждой выборки и рассчитайте среднее значение весовых градиентов всех выборок.
-
Градиенты отклонения данных каждой выборки суммируются, и вычисляется среднее значение градиентов отклонения всех выборок.
-
Обновите значения веса и смещения:
- w = w -
- b = b -
- Вернитесь к 2 и продолжайте итерацию, пока сеть не сойдется.
Конечно, существует множество методов оптимизации для градиентного спуска, и конкретная логика у них разная.
1.7 Обратное распространение
Когда дело доходит до алгоритмов обратного распространения, мы обычно подчеркиваем обратное распространение. По сути, это двусторонний алгоритм. Другими словами, он фактически разделен на два этапа:
Прямое распространение: отправка пакетных данных в сеть, вычисление и дальнейшее распространение входной информации (то есть обработка ряда матриц с помощью функции активации и «распространение» вперед слой за слоем до достижения выходного слоя) и, наконец, вывод После сравнения прогнозируемого значения с реальной меткой функция потерь используется для расчета потерь этой итерации с упором на то, как ввод влияет на каждый слой.
Обратное распространение: ошибка обратного распространения начинается с конца сети и входит в каждый уровень перед моделью сети.В соответствии с выводом цепочки корректируются веса и смещения сети, и, наконец, веса постепенно корректируются, чтобы сделать окончательный результат и ожидаемый Чтобы достичь минимума, основное внимание уделяется тому, как каждый слой влияет на конечный результат.
Подробности следующие:
Мы видим, что на этом рисунке задействовано много вычислений градиента, поэтому возникает еще один вопрос: как вычисляются эти градиенты? Основные проблемы, которые помогает решить фреймворк глубокого обучения, следующие:
- Автоматическое вычисление и обновление градиента во время обратного распространения, также известное как автоматическое дифференцирование.
- Вычислить с помощью графического процессора.
1.8 Дифференцируемое программирование
1.8.1 Бессмертие дифференцируемого программирования
Янн Лекун упомянул в своем блоге «Глубокое обучение мертво, дифференцируемое программирование живет»:
"Глубокое обучение — это, по сути, новый способ программирования — дифференцируемое программирование.- и в этой области пытаются создавать многоразовые структуры таким образом. На данный момент у нас есть: свертка, пул, LSTM, GAN, VAE, модуль памяти, модуль маршрутизации и т. д. "
Но важным моментом является то, что сейчас люди собирают сети из различных параметризованных функциональных модулей, создают новый тип программного обеспечения и обучают это программное обеспечение, используя своего рода оптимизацию на основе градиента.
Все больше и больше людей программно определяют сети в зависимости от данных (циклы и условия), что позволяет им динамически изменяться с входными данными. Это очень похоже на обычную программу, за исключением того, что она параметризована, автоматически дифференцируема и может быть обучена и оптимизирована. Динамические сети становятся все более популярными (особенно для НЛП) благодаря фреймворкам глубокого обучения, таким как PyTorch и Chainer (примечание: еще в 1994 году предыдущий фреймворк глубокого обучения, Lush, мог обрабатывать специальную динамическую сеть Graph Transformer Networks для текста). признание).
1.8.2 Ключ к успеху глубокого обучения
Дифференцируемое программирование также было представлено Дэвидом Далримплом из MIT Media Lab. Далримпл считает, что есть два ключа к успеху глубокого обучения: один — обратное распространение, а другой — привязка весов, которые очень похожи на вызов повторно используемых функций в функциональном программировании. Дифференцируемое программирование потенциально может быть «вечным».
Обратное распространение применяет цепное правило (простой трюк с исчислением) очень элегантным способом, что приводит к глубокой интеграции непрерывной и дискретной математики, позволяя автономно улучшать сложные семейства потенциальных решений с помощью векторного исчисления.
Ключом к обратному распространению является организация шаблона потенциальных решений в виде ориентированного графа. Обходя этот график в обратном направлении, алгоритм может автоматически вычислить «вектор градиента», который направляет алгоритм для поиска все более и более лучших решений.
Привязка веса является вторым ключевым моментом, который позволяет использовать одни и те же компоненты сети, связанные с весом, в нескольких местах одновременно, и каждая копия компонента является согласованной. Привязка веса позволяет сети научиться обобщать больше, потому что слова или объекты могут появляться в нескольких местах в текстовом блоке или изображении. Компоненты с привязкой веса на самом деле представляют собой ту же концепцию, что и повторно используемые функции в программировании (аналогично написанию функции и вызову ее в нескольких местах программы), и повторное использование компонентов таким же образом, как «функции более высокого порядка», обычно используемые в функциональном программировании. генерируется точно так же.
1.8.3 Дифференцируемое программирование
Дифференцируемое программирование — это относительно новая концепция, расширение обратного распространения ошибки и связывания весов. Пользователь только указывает структуру функции и порядок ее вызова, а программа функции фактически компилируется в вычислительный граф, аналогичный тому, который требуется для обратного распространения ошибки. Компоненты графа также должны быть дифференцируемыми, дифференцируемое программирование оставляет детали реализации/развертывания оптимизатору — язык будет использовать обратное распространение для автоматического изучения деталей на основе целей всей программы, оптимизируя на основе градиентов, точно так же, как оптимизация. веса в глубоком обучении одинаковы.
Андрей Карпати, глава отдела искусственного интеллекта Tesla, также предложил концепцию «программного обеспечения 2.0».
Программное обеспечение 1.0 (Software 1.0) написано на таких языках, как Python и C++, и состоит из явных инструкций для компьютера. Написав каждую строку кода, программист может определить конкретную точку в программном пространстве.
Программное обеспечение 2.0 написано с весами нейронной сети.Никто не участвовал в написании этого кода. В случае программного обеспечения 2.0 люди задают некоторые ограничения на поведение идеальной программы (например, наборы входных и выходных данных) и ищут в программном пространстве программы, которые удовлетворяют ограничениям, в зависимости от доступных вычислительных ресурсов. В этом пространстве процесс поиска может быть выполнен с использованием обратного распространения ошибки и стохастического градиентного спуска.
Карпати утверждает, что в реальном мире большинство проблем заключается в том, что собирать данные проще, чем писать программы в явном виде. В будущем большинству программистов больше не нужно будет поддерживать сложные программные библиотеки, писать сложные программы или анализировать время выполнения программ. Им нужно собирать, организовывать, манипулировать, маркировать, анализировать и визуализировать данные, предоставляемые нейронной сети.
Таким образом, теперь, когда мы знаем о важности автоматического вычисления градиентов, давайте воспользуемся статьейAutomatic Differentiation in Machine Learning: a SurveyДавайте узнаем подробно.
0x02 Метод дифференциации
2.1 Общие методы
Давайте сначала рассмотрим несколько наиболее часто используемых методов дифференцирования:
- Ручное дифференцирование: выполняется вручную, решается формула градиента в соответствии с цепным правилом, вводится значение и получается градиент.
- Численное дифференцирование: используйте исходное определение производной для непосредственного определения дифференциального значения.
- Символьное дифференцирование: используйте правило вывода для автоматического вычисления выражения, и результатом вычисления будет выражение производной функции, а не конкретное значение. То есть сначала получается аналитическое решение, затем оно преобразуется в программу, а затем программа вычисляет градиент функции.
- Автоматическое дифференцирование: метод между числовым и символьным дифференцированием, который использует направленные графоподобные вычисления для решения дифференциальных значений.
Подробности следующие:
2.2 Ручная дифференциация
Ручная дифференциация заключается в использовании формулы вывода, чтобы вручную написать формулу вывода для каждой целевой функции, а затем написать код в соответствии с формулой, ввести значение и найти окончательный градиент.
Этот метод точен и эффективен, но он не подходит для инженерной реализации из-за плохой универсальности и гибкости.Каждый раз, когда мы модифицируем модель алгоритма, мы должны модифицировать соответствующий алгоритм градиентного решения. Если модель сложная или проект часто повторяется, то инженер-алгоритмист не сможет сказать 996, даже 365 x 24.
2.3 Численное дифференцирование
Численное дифференцирование должно быть самым прямым и простым методом автоматического вывода. Из исходного определения производной мы можем интуитивно увидеть, что формула прямой разницы выглядит так:
Когда h принимает небольшое значение, например 0,000001, производную можно аппроксимировать, используя разницу. Нужно только указать значение функции и разницу между независимыми переменными, алгоритм численного дифференцирования может вычислить значение производной. Формула односторонней разности непосредственно аппроксимирует значение производной в точке на основе определения производной.
Преимущества численного дифференцирования:
- Приведенный выше расчет работает почти во всех случаях, если только точка не является дифференцируемой,
- Простота реализации.
- Процесс решения скрыт от пользователя.
Однако численное дифференцирование имеет несколько проблем:
-
Объем вычислений слишком велик, а скорость решения самая низкая среди этих методов, особенно при большом количестве параметров, потому что вам нужно пересчитывать f(x+h) каждый раз, когда вы вычисляете производную параметра.
-
Поскольку это численное приближение, оно будет ненадежным и нестабильным, и относительно точное значение производной не может быть получено. Если h выбран неправильно, может быть получен противоположный знак, что приведет к увеличению ошибки. Особенно две серьезные проблемы:
- Ошибка усечения: ошибка аппроксимации, вызванная тем фактом, что h не может быть равным нулю в численных расчетах.
- Ошибка округления: постоянное округление десятичных разрядов в процессе расчета приведет к накоплению ошибок в процессе вывода.
Чтобы уменьшить ошибку усечения, была предложена аппроксимация центральной разности, этот метод все еще не может решить ошибку округления, только уменьшает ошибку, но имеет меньшую ошибку и лучшую устойчивость, чем формула односторонней разности. Конкретная формула выглядит следующим образом:
Хотя численное дифференцирование имеет некоторые недостатки, преимущество состоит в том, что его просто реализовать, поэтому его можно использовать для проверки правильности градиента, полученного другими алгоритмами, такими как «проверка градиента», в котором используется численное дифференцирование.
2.4 Символическая дифференциация
Символьное дифференцирование относится к категории символьных вычислений, оно использует правило вывода для автоматического вычисления выражения, а результатом вычисления является выражение производной функции. Символьные вычисления используются для решения формульных решений (также называемых аналитическими решениями) в математике и приводят к выражению решения, а не к конкретному числовому значению.
Символическое дифференцирование подходит для автоматического вывода символьных выражений.Принцип символьного дифференцирования заключается в замене ручного дифференцирования следующими простыми правилами вывода:
Символьное дифференцирование использует алгебраическое программное обеспечение для реализации некоторых дифференциальных формул, а затем преобразует процесс вычисления формулы в дифференциальный процесс в соответствии с формулой вывода основной функции и правилом вывода четырех операций и составных функций, так что пользователь- снабжен замкнутым. Математическое выражение формы решается методом «автоматического дифференцирования». Это сначала найти аналитическое решение, затем преобразовать его в программу, а затем вычислить градиент функции через программу.
Выражения, вычисляемые с помощью символьного дифференцирования, должны храниться в строках или других структурах данных, таких как деревья выражений. Эта методика реализована в математических программах, таких как Mathematica, Maple, matlab. Библиотека символьных вычислений языка python также предоставляет такие алгоритмы.
Проблема с символической дифференциацией заключается в следующем:
- Выражение должно быть математическим выражением в закрытой форме, то есть оно должно иметь возможность быть записанным как полное математическое выражение и не может иметь циклических структур, условных структур и т. д. в языках программирования. Таким образом, вся проблема может быть преобразована в чисто математическую символьную задачу, которую можно решить путем символьного дифференцирования с использованием некоторого алгебраического программного обеспечения.
- Когда выражение сложное (глубокая составная функция, такая как функция отображения нейронной сети), из-за того, что компьютер может быть не в состоянии разумно упростить, может возникнуть проблема «набухания выражения».
Расширение выражения показано на рисунке ниже.Если вы не будете осторожны, символьное дифференциальное решение будет показано в среднем столбце ниже.Выражение быстро расширяется, что приводит к более медленному решению проблем, избыточным вычислениям и высокой стоимости:
На самом деле для приложений в машинном обучении нет необходимости получать выражение для производной, а нужно только значение производной функции в определенной точке.
2.5 Автоматическое дифференцирование
2.5.1 Промежуточные методы
Автоматическое дифференцирование — это метод между числовым дифференцированием и символьным дифференцированием, использующий направленные графоподобные вычисления для определения дифференциального значения.
- Численное дифференцирование: подставьте непосредственно в решение численного приближения в начале.
- Символьное дифференцирование: непосредственно решите алгебраическое выражение аналитически и, наконец, подставьте числовое значение для вычисления.
- Автоматическое дифференцирование: сначала примените метод символического дифференцирования к основному оператору (функции), затем введите числовое значение для расчета, сохраните промежуточный результат и, наконец, примените промежуточный результат ко всей функции с помощью метода вывода по цепочке, который может быть полностью скрыт от пользователя. Процесс дифференциального решения также можно комбинировать со структурой цикла и условной структурой языка программирования.
Нам нужно сделать несколько замечаний по поводу аналитического решения. Практически все алгоритмы машинного обучения можно свести к решению задачи оптимизации при обучении или прогнозировании, и если целевая функция дифференцируема, то проблема становится критической точкой обучающей функции. Но обычно мы не можем получить аналитическое решение критической точки, поэтому мы можем использовать только численные алгоритмы оптимизации, такие как метод градиентного спуска, метод Ньютона, метод квазиньютона и так далее. Все эти алгоритмы численной оптимизации полагаются на значение первой или второй производной функции (включая градиенты и матрицы Гессе). Следовательно, необходимо решить задачу о том, как найти производную сложной функции, а метод автоматического дифференцирования является общим методом решения этой задачи.
Поскольку метод автоматического дифференцирования применяет только правила символьного дифференцирования к базовым функциям или константам, он может гибко комбинировать структуры циклов, условные структуры и т. д. языков программирования. С автоматическим дифференцированием и без него общие изменения кода очень малы.Поскольку это фактически расчет графа, его можно много оптимизировать, поэтому этот метод широко используется в современных системах глубокого обучения.
2.5.2 Математические основы
Автоматическое дифференцирование (АД) - это программа для автоматического вывода матрицы Якоби или ее части.Это численный метод вычисления производной зависимой переменной к независимой переменной, поэтому его математической основой является цепное правило вывода и Матрица Якоби.
2.5.2.1 Цепные производные
Перед вычислением цепного правила рассмотрим составные функции. Составная функция — это, по существу, функция функций. Он передает возвращаемое значение одной функции в качестве параметра другой функции и передает возвращаемое значение другой функции в качестве параметра следующей функции, то есть функции набора функций, которая объединяет несколько простых функций в более сложную. функция.
Цепное правило — это правило вывода в исчислении, которое используется для нахождения производной сложной функции и является широко используемым методом вывода в исчислении. Производная составной функции будет произведением производных конечного числа функций, составляющих составную функцию в соответствующей точке, точно так же, как цепочка на цепочку, поэтому ее называют цепным правилом.
Поскольку в последнее время у Наггетс есть проблемы с анализом формул, я могу только отобразить их, пожалуйста, поймите.
2.5.2.2 Матрица Якоби
В векторном исчислении матрица Якоби — это матрица, в которой определенным образом расположены частные производные первого порядка, а ее определитель называется определителем Якоби. Важность матрицы Якоби состоит в том, что она воплощает оптимальное линейное приближение дифференцируемого уравнения к заданной точке.
Матрица Якоби представляет все возможные частные производные двух векторов. Это градиент одного вектора по отношению к другому вектору, который реализует отображение n-мерных векторов в m-мерные векторы.
В векторных операциях матрица Якоби представляет собой числовую матрицу, основанную на частных производных первого порядка функции по всем переменным.Когда количество входов = количеству выходов, ее также называют определителем Якоби.
Предполагая входной вектор и выходной вектор, матрица Якоби определяется как:
0xEE Личная информация
★★★★★★Думая о жизни и технологиях★★★★★★
Публичный аккаунт WeChat:мысли Росси
ссылка 0xFF
Ян ЛеКун: Глубокое обучение мертво, да здравствует дифференцируемое программирование!
метод автоматической дифференциации
Итак, Wikipedia.org/wiki/auto…
Pytorch Learning Spring 2020-1-Линейная регрессия
Введение в автоматическую дифференциацию — основные принципы тензорного потока
Говоря о тензоре и его использовании в PyTorch
[Красота глубокого обучения 01] Что такое (машинное/глубокое) обучение?
[Красота глубокого обучения 15] Как воспринимать функцию потерь?
[Красота глубокого обучения 18] Что такое градиент?
[Красота глубокого обучения 21] Подробное объяснение алгоритма BP перед распространением
[Красота глубокого обучения 22] Цепное правило алгоритма BP Подробное объяснение
[Красота глубокого обучения 23] Обратное распространение алгоритма BP Подробное объяснение
[Теория глубокого обучения] Градиентный спуск
Принцип и этапы реализации алгоритма градиентного спуска (Gradient Descent)
Методы градиентного спуска и производные
Глубокое обучение --- частный случай обратного распространения
Принцип алгоритма BP в нейронной сети и анализ исходного кода реализации Python
Машинное обучение — автоматический вывод
Automatic Differentiation in Machine Learning: a Survey
AI Engine — автоматическая дифференциация
Введение в автоматическую дифференциацию
Automatic Differentiation in Machine Learning: a Survey
Введение в автоматическую дифференциацию
Почему у PyTorch есть параметр grad_variables?
Что такое автоматическая дифференциация? Вот самоописание
BACKPACK: PACKING MORE INTO BACKPROP
метод автоматической дифференциации
Дифференциальное программирование (1): три смертных греха традиционной автоматической дифференциации
Внедрите собственную автоматическую дифференциацию за один день
Основы автоматической дифференциации PyTorch
[Примечания к исследованию PyTorch] 1.5 autograd и логистическая регрессия
zhuanlan.zhihu.com/p/348555597)
Механизм автоматического получения базовой технологии AI framework (Автоград)