Что такое динамический вычислительный граф?

19

Такие фреймворки, как PyTorch и TensorFlow через TensorFlow Fold, поддерживают динамические вычислительные графики и привлекают внимание исследователей данных.

Тем не менее, кажется, что не хватает ресурсов для понимания динамических вычислительных графов.

Преимущество динамических вычислительных графиков заключается в возможности адаптации к различным величинам во входных данных. Кажется, что может быть автоматический выбор количества слоев, количества нейронов в каждом слое, функции активации и других параметров NN, в зависимости от каждого экземпляра входного набора во время обучения. Это точная характеристика?

Каковы преимущества динамических моделей над статическими моделями? Вот почему DCG уделяется так много внимания? Таким образом, что такое DCG и каковы их плюсы и минусы?

Blaszard
источник

Ответы:

8

Два коротких ответа

Короткий ответ с теоретической точки зрения заключается в том, что ...

Динамический вычислительный граф - это изменчивая система, представленная в виде ориентированного графа потока данных между операциями. Его можно визуализировать как фигуры, содержащие текст, соединенный стрелками, причем вершины (фигуры) представляют операции с данными, проходящими по краям (стрелками).

Обратите внимание, что такой граф определяет зависимости в потоке данных, но не обязательно временный порядок применения операций, который может стать неоднозначным при сохранении состояния в вершинах или циклах графа без дополнительного механизма для указания временного приоритета.

Краткий ответ с точки зрения разработки приложений:

Каркас динамического вычислительного графа представляет собой систему библиотек, интерфейсов и компонентов, которые обеспечивают гибкий, программный интерфейс времени выполнения, который облегчает построение и модификацию систем путем подключения конечного, но, возможно, расширяемого набора операций.

PyTorch Framework

PyTorch - это интеграция платформы Torch с языком Python и структурированием данных. Torch конкурирует с Theano, TensorFlow и другими системами построения динамических вычислительных систем.


———   Дополнительные подходы к пониманию   ———

Произвольные вычислительные структуры произвольных дискретных тензоров

Одним из компонентов, который может быть использован для построения вычислительной системы, является элемент, предназначенный для соединения для создания нейронных сетей. Доступность этих поддерживает построение глубокого обучения и обратно распространяющихся нейронных сетей. Также может быть создано множество других систем, включающих сборку компонентов, которые работают с потенциально многомерными данными в произвольно определенных вычислительных структурах.

Данные могут быть скалярными значениями, такими как числа с плавающей запятой, целые числа или строки, или их ортогональные агрегации, такие как векторы, матрицы, кубы или гиперкубы. Операции по обобщению этих форм данных представляют собой дискретные тензоры, а структуры, созданные из сборки тензорных операций в рабочих системах, являются потоками данных.

Ориентиры для понимания концепции динамических вычислений

Динамические вычислительные графы не являются особенно новой концепцией, хотя термин является относительно новым. Интерес к DCG среди компьютерных ученых не так нов, как термин Data Scientist. Тем не менее, этот вопрос правильно утверждает, что имеется мало хорошо написанных доступных ресурсов (кроме примеров кода), из которых можно узнать общую концепцию, связанную с их появлением и использованием.

Одним из возможных ориентиров для начала понимания DCG является шаблон проектирования Command, который является одним из многих шаблонов проектирования, популяризируемых сторонниками объектно-ориентированного проектирования. Шаблон проектирования Command рассматривает операции как вычислительные единицы, детали которых скрыты от командных объектов, которые их запускают. Шаблон проектирования Command часто используется вместе с шаблоном проектирования Interpreter.

В случае DCG шаблоны проектирования Composite и Facade также используются для упрощения определения операций дискретного тензора «включай и работай», которые можно объединять в шаблоны для формирования систем.

Эта конкретная комбинация шаблонов проектирования для формирования систем на самом деле представляет собой программную абстракцию, которая в значительной степени напоминает радикальную идею, которая привела к появлению архитектуры фон Неймана, центральной для большинства современных компьютеров. Вклад фон Неймана в появление компьютера заключается в том, что произвольные алгоритмы, содержащие булеву логику, арифметику и ветвления, могут быть представлены и сохранены как данные - программа.

Другим предвестником DCG являются механизмы выражения. Механизмы выражения могут быть такими же простыми, как арифметические механизмы, и такими же сложными, как приложения, такие как Mathematica. Механизм правил немного похож на DCG, за исключением того, что механизмы правил являются декларативными, а мета-правила для механизмов правил работают с этими объявлениями.

Программы, управляющие программами

Общим для DCG является то, что поток данных и операций, которые должны применяться, могут быть определены во время выполнения. Как и в случае с DCG, некоторые из этих программных библиотек и приложений имеют API или другие механизмы, позволяющие применять операции к функциональным деталям. По сути, это идея программы, позволяющей манипулировать другой программой.

Другим ориентиром для понимания этого принципа на примитивном уровне является оператор switch-case, доступный на некоторых компьютерных языках. Это структура исходного кода, в которой программист по существу выражает: «Мы не уверены, что должно быть сделано, но значение этой переменной скажет модели выполнения в реальном времени, что делать из набора возможностей».

Оператор switch-case является абстракцией, которая расширяет идею отложить принятие решения относительно направления вычислений до времени выполнения. Это версия программного обеспечения того, что делается внутри блока управления современного процессора, и расширение концепции отсрочки некоторых деталей алгоритма. Таблица функторов (указателей на функции) в C или полиморфизм в C ++, Java или Python являются другими примитивными примерами.

Динамическое вычисление продвигает абстракцию дальше. Они откладывают большинство, если не все, спецификации вычислений и отношений между ними во время выполнения. Это всеобъемлющее обобщение расширяет возможности функциональной модификации во время выполнения.

Направленное графическое представление вычислений

Вот что такое динамическая вычислительная модель. Теперь для части графика.

Как только кто-то решает отложить выбор операций, которые должны быть предварительно сформированы, до времени выполнения, требуется структура для хранения операций, их зависимостей и, возможно, сопоставления параметров. Такое представление представляет собой нечто большее, чем синтаксическое дерево (такое как дерево, представляющее иерархию исходного кода). В отличие от программы на ассемблере или машинного кода, она должна быть легко и произвольно изменяемой. Он должен содержать больше информации, чем граф потока данных, и намного больше, чем карта памяти. Как должна выглядеть та структура данных, которая определяет вычислительную структуру?

К счастью, любой произвольный конечный ограниченный алгоритм может быть представлен в виде ориентированного графа зависимостей между указанными операциями. В таком графике вершины (часто представленные в виде узлов различной формы при отображении) представляют операции, выполняемые с данными, а края (часто представляемые в виде стрелок при отображении) представляют собой цифровые представления информации, возникающей в результате какой-либо операции (или системного ввода) и от которого зависят другие операции (или выходные данные системы).

Имейте в виду, что ориентированный граф не является ни алгоритмом (в котором указана точная последовательность операций), ни объявлением (в котором данные могут быть явно сохранены, а циклы, ветви, функции и модули могут быть определимыми и вложенными).

Большинство из этих платформ и библиотек динамических вычислительных графов позволяют компонентам выполнять вычисления на входе компонента, которые поддерживают машинное обучение. Вершины в ориентированном графе могут быть симуляциями нейронов для построения нейронной сети или компонентов, которые поддерживают дифференциальное исчисление. Эти структуры представляют возможности конструкций, которые могут быть использованы для глубокого обучения в более обобщенном смысле.

В контексте компьютерной истории

Опять же, ничто упомянутое до сих пор не является новым для информатики. LISP позволяет модифицировать вычислительные схемы другими алгоритмами. А обобщенная входная размерность и численность встроены во многие давние интерфейсы и протоколы plug-and-play. Идея рамок для обучения восходит к тому же периоду середины двадцатого века.

Что нового и набирающего популярность, так это особая комбинация интегрированных функций и соответствующего набора терминов, совокупность существующей терминологии для каждой из функций, что приводит к более широкой базе для понимания теми, кто уже учится и работает в индустрии программного обеспечения. ,

  • Современный (модный) вкус интерфейсов API
  • Ориентация объекта
  • Дискретная тензорная поддержка
  • Ориентированная абстракция графа
  • Совместимость с популярными языками и пакетами, которые поддерживают большие данные, интеллектуальный анализ данных, машинное обучение и статистический анализ
  • Поддержка произвольного и систематического построения нейронной сети.
  • Возможность динамической структурной адаптации нейронной сети (что облегчает эксперименты с нейронной пластичностью)

Многие из этих структур поддерживают адаптивность к изменяющейся входной размерности (число измерений и диапазон каждого).

Сходство с деревьями абстрактных символов в компиляторах

График зависимостей входов и выходов операций также появляется в абстрактных символьных деревьях (AST), которые некоторые из более прогрессивных компиляторов создают во время интерпретации структуры исходного кода. Затем AST используется для генерации инструкций ассемблера или машинных инструкций в процессе связывания с библиотеками и формирования исполняемого файла. AST - это ориентированный граф, который представляет структуру данных, выполненных операций и потока управления, указанного в исходном коде.

Поток данных - это просто набор зависимостей между операциями, который должен быть присущ AST для AST, который будет использоваться для создания инструкций выполнения в ассемблере или машинном коде, который точно следует алгоритму, указанному в исходном коде.

Платформы динамических вычислительных графов, в отличие от операторов switch-case или моделей AST в компиляторах, могут управляться в реальном времени, оптимизироваться, настраиваться (как в случае с искусственными пластиковыми сетками), инвертироваться, преобразовываться тензорами, децимироваться, модифицироваться для добавления или удаления энтропия, мутированная в соответствии с набором правил или иным образом переведенная в производные формы. Они могут быть сохранены в виде файлов или потоков, а затем извлечены из них.

Это тривиальная концепция для программистов LISP или тех, кто понимает природу рекомендации Джона фон Неймана о сохранении рабочих характеристик в качестве данных. В этом более позднем смысле программа представляет собой поток данных, который через компилятор и операционную систему дает команду динамической вычислительной системе, реализованной в цифровых схемах СБИС.

Достижение адаптируемой размерности и численности

В вопросе есть комментарий, которого нет: «Нужно иметь набор данных - чтобы все экземпляры в нем имели одинаковое фиксированное количество входов». Это утверждение не способствует точному пониманию. Есть более ясные способы сказать, что является правдой об адаптивности ввода.

Интерфейс между DCG и другими компонентами всей системы должен быть определен, но эти интерфейсы могут иметь встроенную динамическую размерность или количество. Это вопрос абстракции.

Например, тип объекта дискретного тензора представляет конкретный программный интерфейс, а тензор - это динамическая математическая концепция, вокруг которой может использоваться общий интерфейс. Дискретным тензором может быть скаляр, вектор, матрица, куб или гиперкуб, а диапазон зависимых переменных для каждого измерения может быть переменным.

Может быть так, что количество узлов в слое системы, определенных в динамическом вычислительном графе, может быть функцией числа входов определенного типа, и это тоже может быть вычисление, отложенное до времени выполнения.

Каркас может быть запрограммирован на выбор структуры слоя (снова расширение парадигмы переключения) или вычисление параметров, определяющих размеры и глубину конструкции или активацию. Однако эти изощренные особенности не являются тем, что квалифицирует платформу как платформу динамического вычислительного графа.

Что определяет структуру для поддержки динамических вычислительных графов?

Чтобы считаться платформой динамического вычислительного графа, она должна просто поддерживать отсрочку определения алгоритма для времени выполнения, открывая, таким образом, множество операций с вычислительными зависимостями и потоком данных во время выполнения. Основы отложенных операций должны включать спецификацию, манипулирование, выполнение и хранение ориентированных графов, которые представляют системы операций.

Если спецификация алгоритма НЕ откладывается до времени выполнения, но компилируется в исполняемый файл, предназначенный для конкретной операционной системы, только с традиционной гибкостью, обеспечиваемой языками низкого уровня, такими как if-then-else, switch-case, полиморфизм, массивы функторы и строки переменной длины считается статическим алгоритмом.

Если операции, зависимости между ними, поток данных, размерность данных в потоке и адаптивность системы к входной численности и размерности являются переменными во время выполнения, чтобы создать высокоадаптивную систему, тогда алгоритм является динамическим в этих отношениях.

Опять же, программы LISP, которые работают с программами LISP, механизмами правил с возможностями мета-правил, механизмами выражений, библиотеками дискретных тензорных объектов и даже относительно простыми шаблонами проектирования команд, все в некотором смысле являются динамическими, откладывая некоторые характеристики до времени выполнения. DCG гибки и полны в своих возможностях для поддержки произвольных вычислительных конструкций таким образом, чтобы создать богатую среду для глубокого обучения, экспериментов и внедрения систем.

Когда использовать динамические вычислительные графики

Плюсы и минусы DCG полностью зависят от конкретной проблемы. Если вы исследуете различные концепции динамического программирования выше и другие, которые могут быть тесно связаны с ними в соответствующей литературе, станет очевидным, нужен ли вам динамический вычислительный граф или нет.

В общем, если вам нужно представить произвольную и изменяющуюся модель вычислений, чтобы облегчить реализацию системы глубокого обучения, системы математических манипуляций, адаптивной системы или другой гибкой и сложной программной конструкции, которая хорошо сопоставляется с парадигмой DCG, то это доказательство концепции с использованием среды Dynamic Computatonal Graph является хорошим первым шагом в определении вашей программной архитектуры для решения проблемы.

Не все учебные программы используют DCG, но они часто являются хорошим выбором, когда систематическое и, возможно, непрерывное манипулирование произвольной вычислительной структурой является требованием времени выполнения.

Дуглас Дасеко
источник
« PyTorch - это интеграция фреймворка Torch для языка Python » - я думаю, что это утверждение может быть неверно истолковано как « PyTorch - это библиотека-оболочка для фреймворка Torch для языка Python », что было бы ложным утверждением. Вы, вероятно, должны перефразировать это.
августа
« В средах с динамическими вычислительными графами, в отличие от операторов регистра переключателей или промежуточных моделей AST в компиляторах, можно манипулировать операциями » ... « переводить их » - что вы подразумеваете под «переводом операций»?
18:30
1

Короче говоря, динамические графы вычислений могут решить некоторые проблемы, которые статические не могут или неэффективны из-за невозможности обучения в пакетном режиме.

Чтобы быть более конкретным, современное обучение нейронной сети обычно проводится партиями , то есть обрабатывает более одного экземпляра данных одновременно. Некоторые исследователи выбирают размер партии, например, 32, 128, в то время как другие используют размер партии, превышающий 10000. Обучение в одном экземпляре обычно очень медленное, потому что оно не может выиграть от аппаратного параллелизма.

Например, в Natural Language Processing исследователи хотят обучать нейронные сети предложениям различной длины. Используя статические графы вычислений, они обычно должны сначала выполнять заполнение , то есть добавлять бессмысленные символы в начало или конец более коротких предложений, чтобы все предложения были одинаковой длины. Эта операция значительно усложняет обучение (например, требуется маскирование, переопределение метрик оценки, тратит значительное количество времени на вычисление этих дополненных символов). С динамическим графом вычислений заполнение больше не требуется (или необходимо только в каждом пакете).

Более сложный пример - использование нейронной сети для обработки предложений на основе деревьев разбора. Поскольку каждое предложение имеет свое собственное дерево синтаксического анализа, для каждого из них требуется отдельный граф вычислений, что означает, что обучение со статическим графом вычислений может разрешить только обучение в одном экземпляре. Примером, подобным этому, являются Рекурсивные Нейронные Сети .

user12075
источник
0

Многие глубокие нейронные сети имеют статический граф потоков данных, что примерно означает, что структура его вычислений (его граф вычислений) остается стабильной на разных входах. Это хорошо, поскольку мы можем использовать эту функцию для повышения производительности, например, путем мини-пакетирования (обработки сразу нескольких входных данных).

Но некоторые нейронные сети могут иметь разные графы вычислений для каждого входа. Это вызывает некоторые проблемы (трудности с группированием, построение графа требует больших вычислительных ресурсов), и, следовательно, эти сети немного сложны в использовании.

В статье, на которую вы ссылаетесь, эта проблема решается путем предложения метода, который может объединять несколько графов вычислений в один. Затем мы можем сделать наши обычные методы NN.

Преимущества - ускорения, которые стимулируют исследователей исследовать различные структуры и быть более творческими, я думаю.

Преимущество динамических вычислительных графиков заключается в возможности адаптации к различным величинам во входных данных. Кажется, что может быть автоматический выбор количества слоев, количества нейронов в каждом слое, функции активации и других параметров NN, в зависимости от каждого экземпляра входного набора во время обучения. Это точная характеристика?

Это неверно

кс сайз 'кс сайз'
источник
0

Динамические вычислительные графы - это просто модифицированные компьютерные графы с более высоким уровнем абстракции. Слово «Динамический» объясняет все это: то, как данные проходят через график, зависит от входной структуры, то есть структура DCG является изменчивой, а не статичной. Одним из его важных приложений является нейронные сети НЛП.

ЧЕО ФУЗИ
источник