Що таке динамічний обчислювальний графік?


19

Такі рамки, як PyTorch і TensorFlow через TensorFlow Fold, підтримують динамічні обчислювальні графіки і привертають увагу науковців даних.

Однак, як видається, не вистачає ресурсів для розуміння динамічних обчислювальних графіків.

Перевага динамічних обчислювальних графіків, мабуть, включає можливість адаптуватися до різної кількості вхідних даних. Схоже, може бути автоматичний вибір кількості шарів, кількості нейронів у кожному шарі, функції активації та інших параметрів NN, залежно від кожного вхідного набору екземплярів під час тренінгу. Це точна характеристика?

Які переваги динамічних моделей перед статичними моделями? Це тому DCG приділяють велику увагу? Підсумовуючи, що таке DCG та які плюси та мінуси їх використання?

Відповіді:


8

Два коротких відповіді

Коротка відповідь з теоретичної точки зору полягає в тому, що ...

Динамічний обчислювальний графік - це мутаційна система, представлена ​​у вигляді спрямованого графіка потоку даних між операціями. Його можна візуалізувати як фігури, що містять текст, з'єднаний стрілками, при цьому вершини (фігури) являють собою операції над даними, що протікають по краях (стрілки).

Зауважимо, що такий графік визначає залежності в потоці даних, але не обов'язково тимчасовий порядок застосування операцій, який може стати неоднозначним при збереженні стану у вершинах або циклах у графі без додаткового механізму визначення часового пріоритету.

Коротка відповідь з точки зору розвитку додатків полягає в тому, що ...

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

Рамка PyTorch

PyTorch - це інтеграція рамки Torch з мовою Python та структуруванням даних. Факел конкурує з Theano, TensorFlow та іншими динамічними рамками побудови обчислювальної системи.


———   Додаткові підходи до розуміння   ———

Довільні обчислювальні структури довільних дискретних тензорів

Одним із компонентів, який може бути використаний для побудови обчислювальної системи, є елемент, призначений для взаємозв’язку для створення нейронних мереж. Наявність цих засобів підтримує побудову глибокого навчання та поширення нейронних мереж. Також може бути побудована велика кількість інших систем, що включають складання компонентів, які працюють з потенційно багатовимірними даними в довільно визначених обчислювальних структурах.

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

Орієнтири для розуміння концепції динамічних обчислень

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

Одним із можливих орієнтирів для початку розуміння DCG є модель дизайну Command, яка є однією з багатьох моделей дизайну, популяризованих прихильниками об'єктно-орієнтованого дизайну. Шаблон дизайну Command розглядає операції як обчислювальні одиниці, деталі яких приховані від командних об'єктів, які їх запускають. Шаблон дизайну Command часто використовується разом із схемою дизайну Інтерпретатора.

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

Ця особлива комбінація моделей дизайну для формування систем - це фактично програмне абстрагування, яке багато в чому нагадує радикальну ідею, що призвела до появи архітектури Фон Ноймана, центральної для більшості комп’ютерів сьогодні. Вклад Фон Ноймана в появу комп'ютера полягає в ідеї дозволити довільні алгоритми, що містять булеву логіку, арифметику та розгалуження, представляти і зберігати як дані - програму.

Ще одним попередником DCG є двигуни експресії. Двигуни експресії можуть бути настільки простими, як арифметичні двигуни і настільки ж складними, як додатки, такі як Mathematica. Двигун правил трохи схожий на DCG, за винятком того, що двигуни правил є декларативними, а мета-правила для двигунів правил працюють на цих деклараціях.

Програми маніпуляції програмами

Що вони мають спільне з DCG, це те, що потік даних та операції, що застосовуються, можна визначити під час виконання. Як і у DCG, деякі з цих програмних бібліотек та додатків мають API або інші механізми, що дозволяють застосовувати операції над функціональними деталями. По суті це ідея програми, яка дозволяє маніпулювати іншою програмою.

Іншим орієнтиром для розуміння цього принципу на примітивному рівні є заява про вимикач, доступна на деяких мовах комп'ютерів. Це структура вихідного коду, згідно з якою програміст по суті виражає: "Ми не впевнені, що потрібно зробити, але значення цієї змінної підкаже моделі виконання в реальному часі, що робити з набору можливостей".

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

Динамічні обчислення надалі відводять абстракцію. Вони відкладають більшість, якщо не всю специфікацію обчислень та зв'язки між ними на час роботи. Це всебічне узагальнення розширює можливості функціональної модифікації під час виконання.

Спрямоване графічне представлення обчислень

Ось що таке динамічна обчислювальна модель. Тепер для частини Graph.

Як тільки хтось вирішить відкласти вибір операцій, які слід підготувати до часу виконання, необхідна структура для утримання операцій, їх залежностей залежності та, можливо, параметрів відображення. Таке подання є більш ніж синтаксичним деревом (наприклад, деревом, що представляє ієрархію вихідного коду). На відміну від програми мовлення або машинного коду, він повинен легко і довільно змінюватися. Він повинен містити більше інформації, ніж графік потоку даних і набагато більше, ніж карта пам'яті. Якою має бути така структура даних, яка визначає структуру обчислень?

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

Майте на увазі, що спрямований графік не є ні алгоритмом (якщо вказана точна послідовність операцій), ні декларацією (внаслідок цього дані можна явно зберігати, і петлі, гілки, функції та модулі можуть бути визначені та вкладені).

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

У контексті комп'ютерної історії

Знову ж таки, нічого згаданого до цих пір не є новим для інформатики. LISP дозволяє обчислювальну схему змінювати за допомогою інших алгоритмів. А узагальнена вхідна розмірність та чисельність вбудована у ряд давніх інтерфейсів та протоколів підключення та прослуховування. Ідея рамки для навчання також сягає тієї ж середини ХХ століття.

Що нового і набирає популярності - це особливе поєднання інтегрованих функцій та пов'язаного з ним термінології, сукупність існуючої термінології для кожної з функцій, що веде до більш широкої бази для розуміння тими, хто вже навчається та працює у галузі програмного забезпечення .

  • Сучасний (модний) аромат інтерфейсів API
  • Орієнтація на об'єкт
  • Дискретна опора тензора
  • Абстракція спрямованого графа
  • Взаємодія з популярними мовами та пакетами, які підтримують великі дані, обмін даними, машинне навчання та статистичний аналіз
  • Підтримка довільної та систематичної побудови нейронної мережі
  • Можливість динамічної структурної адаптації нейронної мережі (що полегшує експерименти над нейронною пластичністю)

Багато з цих фреймворків підтримують пристосованість до зміни вхідної розмірності (кількість розмірів і діапазон кожного).

Подібність до абстрактних дерев символів у укладачах

Графік залежності входів і результатів операцій також з'являється в абстрактних деревах символів (AST), які будують деякі більш прогресивні компілятори під час інтерпретації структури вихідного коду. Потім AST використовується для генерації інструкцій асемблера або машинних інструкцій у процесі зв’язку з бібліотеками та формування виконуваного файлу. AST - це спрямований графік, який представляє структуру даних, виконані операції та потік управління, визначений вихідним кодом.

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

Динамічні рамки обчислювальної графіки, на відміну від операторів перемикання випадку або моделей AST у компіляторах, можуть маніпулювати в режимі реального часу, оптимізуватися, налаштовуватися (як у випадку з пластиковими штучними мережами), перевертатися, перетворюватися тензарами, оброблятися, модифікуватися для додавання або видалення ентропії, мутованої відповідно до набору правил або іншим чином переведеної у похідні форми. Вони можуть зберігатися у вигляді файлів або потоків, а потім витягуватися з них.

Це тривіальна концепція для програмістів LISP або тих, хто розуміє природу рекомендації Джона фон Неймана щодо зберігання експлуатаційних специфікацій як даних. У цьому більш пізньому сенсі програма - це потік даних, який через компілятор та операційну систему інструктує динамічну обчислювальну систему, реалізовану в цифровій схемі VLSI.

Досягнення адаптивної розмірності та чисельності

У запитанні йдеться до коментаря, який не відповідає: "Потрібно мати набір даних - щоб усі екземпляри в ньому мали однакову, фіксовану кількість входів". Це твердження не сприяє точному розумінню. Існують більш чіткі способи сказати, що правда щодо адаптованості вводу.

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

Наприклад, дискретний тип об'єкта тензора представляє специфічний програмний інтерфейс, але тензор - це динамічна математична концепція, навколо якої можна використовувати загальний інтерфейс. Дискретний тензор може бути скаляром, вектором, матрицею, кубом або гіперкубом, і діапазон залежних змінних для кожного виміру може бути змінним.

Може статися так, що кількість вузлів у шарі системи, визначеному в Динамічному обчислювальному графіку, може бути функцією від кількості входів певного типу, і що теж може бути обчисленням, відкладеним на час виконання.

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

Що кваліфікує рамки для підтримки динамічних обчислювальних графіків?

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

Якщо специфікація алгоритму НЕ відкладається до часу запуску, а складається в виконувану програму, розроблену для конкретної операційної системи, лише з традиційною гнучкістю, що надається мовами низького рівня, такими як "if-then-else", "case-case", "поліморфізм", "масиви" функторів і рядків змінної довжини, це вважається статичним алгоритмом.

Якщо операції, залежності між ними, потік даних, розмірність даних всередині потоку та пристосованість системи до вхідної чисельності та розмірності є змінними під час виконання таким чином, щоб створити високо адаптивну систему, тоді алгоритм є динамічним цими способами.

Знову ж таки, програми LISP, що працюють на програмах LISP, керують движками з можливостями мета-правил, двигунами експресії, дискретними тензорними бібліотеками об'єктів і навіть відносно простими моделями дизайну команд, в деякому сенсі все динамічно, відкладаючи деякі характеристики на час роботи. DCG є гнучкими та всебічними своїми можливостями для підтримки довільних обчислювальних конструкцій таким чином, щоб створити багате середовище для глибокого вивчення експериментів та впровадження систем.

Коли використовувати динамічні обчислювальні графіки

Плюси і мінуси ДКГ цілком специфічні для проблеми. Якщо ви дослідите різні поняття динамічного програмування вище та інші, які можуть бути тісно пов'язані з ними в сукупній літературі, стане очевидним, чи потрібен вам Динамічний обчислювальний графік чи ні.

Загалом, якщо вам потрібно представити довільну та мінливу модель обчислень для полегшення впровадження системи глибокого навчання, математичної системи маніпуляцій, адаптивної системи чи іншої гнучкої та складної програмної конструкції, яка добре відображає парадигму DCG, тоді це підтвердження Концепція з використанням системи Dynamic Computatonal Graph є хорошим першим кроком у визначенні вашої архітектури програмного забезпечення для вирішення проблеми.

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


" PyTorch - це інтеграція рамки Torch для мови Python " - я думаю, що це твердження може бути неправильно трактовано як " PyTorch - це бібліотека обгортки для рамки Torch для мови Python ", що було б помилковим твердженням. Ви, ймовірно, повинні перефразовувати це.
nbro

" З рамками динамічного обчислювального графіка, на відміну від операторів вимикання випадку або проміжних моделей AST у компіляторах, можна маніпулювати операціями " ... " перекласти їх " - Що ви маєте на увазі під "операціями перекладу"?
nbro

1

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

Щоб бути більш конкретним, сучасне навчання нейронної мережі зазвичай проводиться партіями , тобто обробляє більше ніж один екземпляр даних одночасно. Деякі дослідники вибирають розмір партії як 32, 128, а інші використовують розмір партії більше 10 000. Навчання на одному примірнику зазвичай дуже повільне, оскільки не може отримати користь від апаратного паралелізму.

Наприклад, в галузі обробки природних мов дослідники хочуть тренувати нейронні мережі з пропозиціями різної довжини. Використовуючи статичні графіки обчислень, вони, як правило, спочатку повинні робити прокладки , тобто додавати безглузді символи на початку або в кінці коротших речень, щоб зробити всі речення однакової довжини. Ця операція значно ускладнює навчання (наприклад, маскування потребує, переосмислення показників оцінювання, витрачання значної кількості часу на обчислення на цих вкладених символах). З графіком динамічних обчислень набивання більше не потрібно (або потрібне лише в межах кожної партії).

Складнішим прикладом може бути (використовувати нейронну мережу) для обробки речень на основі їх дерев. Оскільки кожне речення має власне дерево розбору, для кожного з них потрібен інший графік обчислень, а це означає, що навчання зі статичним графіком обчислення може дозволити навчатись лише з одним примірником. Приклад подібний до цього - рекурсивні нейронні мережі .


0

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

Але деякі нейронні мережі можуть мати різний графік обчислення для кожного вводу. Це спричиняє деякі проблеми (складні труднощі із створенням графіків, складання графіків обчислювально дорого), а отже, ці мережі трохи важкі у використанні.

У роботі, яку ви посилаєте, долається ця проблема, пропонуючи метод, який може об'єднати кілька графіків обчислення в один. Тоді, ми можемо виконувати наші звичні методи NN.

Переваги - це прискорення, що стимулює дослідників досліджувати різні структури та бути більш творчими.

Перевага динамічних обчислювальних графіків, мабуть, включає можливість адаптуватися до різної кількості вхідних даних. Схоже, може бути автоматичний вибір кількості шарів, кількості нейронів у кожному шарі, функції активації та інших параметрів NN, залежно від кожного вхідного набору екземплярів під час тренінгу. Це точна характеристика?

Це неправильно.


0

Динамічні обчислювальні графіки - це просто модифіковані CG з більш високим рівнем абстракції. Слово "Динамічний" пояснює все це: те, як дані проходять через графік, залежить від вхідної структури, тобто структура DCG є змінною і не статичною. Одне з його важливих застосувань - в нейронних мережах NLP.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.