Главная страница

Курсова робота_СТАРАЯ. Зміст


Скачать 1.63 Mb.
НазваниеЗміст
Дата17.12.2020
Размер1.63 Mb.
Формат файлаdocx
Имя файлаКурсова робота_СТАРАЯ.docx
ТипЗадача
#161615
страница6 из 8
1   2   3   4   5   6   7   8

MXNet



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

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




Імперативний підхід

Декларативний підхід

a = b + 1

Одразу ж виконує та зберігає результати в а того ж самого типу як і b

Повертає граф обчислень; прив'язує дані до b і виконує обчислення пізніше

Переваги

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

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

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

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

Інтерфейс програмування

Декларативні символічні вирази. MXNet використовує символічні вирази, що мають багато виходів, Symbol, що визначають обчислювальний граф. Символи складаються у оператори, такі як прості матричні операції (наприклад, "+"), або складні шари нейронних мереж (наприклад, шар згортки). Оператор може приймати кілька входів, віддавати більше одного вихідного значення і мають внутрішні змінні стану. Змінна може бути або вільна, яку ми можемо прив’язати із значенням пізніше, або з вихідом іншого символу. На рисунку 2.3 показано побудову багатошарової мережі і деяких операцій з шарами нейронної мережі.



Рисунок 2.3 – Багатошарова мережа та операції із шарами за допомогою MXNet

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

NDArray: імперативне обчислення тензора. MXNet пропонує NDArray з імперативним обчисленням тензора для заповнення прогалини між декларативним символічним виразами та мовою хоста. На рисунку вище наведено приклад, який виконує множення константних матриць на GPU, а потім виводить результати за допомогою numpy.ndarray.

NDArray абстракція працює без проблем з виконанням, оголошеними Symbol, оскільки MXNet дозволяє змішувати імперативне тензорне обчислення з іншим. Наприклад, дано символічну нейронну мережу та функцію оновлення ваги, наприклад w = w - ηg. Тоді ми зможемо реалізувати градієнтний спуск по while (1) {net.foward_backward (); net.w - = eta * net.g};

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

Графи обчислень. Прив’язаний символічний вираз представляється у вигляді графу обчислень для виконання. На рисунку 2.4 показано пряме і зворотнt проходження графа. Перед виконанням MXNet перетворює граф, щоб оптимізувати ефективність і виділяє пам’ять для внутрішніх змінних.



Рисунок 2.4 – Пряме та зворотне проходження графа

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

Розподіл пам'яті. Час життя кожної змінної, а саме період між створенням і останнім часом використання, відоме графу обчислень. Таким чином стає можливим повторно використати пам'ять для цих змінних. Однак для ідеального розподілу стратегія вимагає O(n2) складность часу, де n - це число змінних.

    1. 1   2   3   4   5   6   7   8


написать администратору сайта