Deep Learning: Порівняння фреймворків для символьного глибокого навчання

Представляємо вам переклад серії статей, присвячених глибоке навчання. У першій частині описано вибір фреймворка з відкритим кодом для символьного глибокого навчання, між MXNET, TensorFlow, Theano. Автор докладно порівнює переваги і недоліки кожного з них. У наступних частинах ви дізнаєтеся про тонкій настройці глибоких згорткових мереж, а також про поєднання глибокої серточной нейронної мережі з рекурентної нейронної мережею.



Цикл статей «Deep Learning»
1. Порівняння фреймворків для символьного глибокого навчання.
2. Transfer learning і тонка настройка глибоких згорткових нейронних мереж.
3. Поєднання глибокої сверточной нейронної мережі з рекурентної нейронної мережею.

Примітка: далі розповідь буде вестися від імені автора.

Символьні фреймворки
Фреймворки для символьних обчислень (MXNET, TensorFlow, Theano) характеризуються символьними графами векторних операцій, таких як матричне додавання/множення або згортка. Шар є просто набором таких операцій. Завдяки поділу на невеликі складові компоненти (операції) користувачі можуть створювати нові складні типи шарів без використання низькорівневих мов (як в Caffe).

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

Далі ми порівняємо перераховані фреймворки для символьних обчислень.
Характеристика
Theano
TensorFlow
MXNET
Програмне забезпечення Theano TensorFlow MXNET
Автор Монреальський університет Команда Google Brain Співтовариство Distributed (Deep) Machine Learning Community
Ліцензія на програмне забезпечення Ліцензія BSD Apache 2.0 Apache 2.0
Відкритий вихідний код Так Так Так
Платформа Крос-платформенне рішення Linux, Mac OS X, планується підтримка Windows Ubuntu, OS X, Windows, AWS, Android, iOS, JavaScript
Мова програмування Python C++, Python C++, Python, Julia, Matlab, R, Scala
Інтерфейс Python C/C++, Python C++, Python, Julia, Matlab, JavaScript, R, Scala
Підтримка CUDA Так Так Так
Автоматична диференціація Так Так Так
Наявність заздалегідь підготовлених моделей З допомогою model zoo в Lasagne Немає Так
Рекурентні мережі Так Так Так
Згорткові мережі Так Так Так
Обмежені машини Больцмана/глибокі мережі довіри Так Так Так
Порівняння символьних і несимвольных фреймворків

Несимвольные фреймворки

Переваги:
  • Несимвольные (імперативні) фреймворки нейронних мереж, такі як torch і caffe, як правило, мають дуже схоже пристрій обчислювальної частини.
  • З точки зору виразності імперативні фреймворки влаштовані досить непогано, у них може бути інтерфейс на основі графів (наприклад, torch/nngraph).
Недоліки:
  • Основним недоліком імперативних фреймворків є оптимізація вручну. Наприклад, операції на місці потрібно реалізувати вручну.
  • Більшість імперативних фреймворків програють символьним по виразності.

Символьні фрейморки

Переваги:
  • символьних фреймворках можлива автоматична оптимізація на основі графів залежностей.
  • символьних фреймворках можна отримати набагато більше можливостей багаторазового використання пам'яті. Наприклад, це прекрасно реалізовано в MXNET.
  • Символьні фреймворки можуть автоматично обчислювати оптимальний графік. Детальніше можна дізнатися тут.
Недоліки:
  • Доступні символьні фреймворки з відкритим вихідним кодом поки ще недостатньо розвинені і поступаються імперативним по продуктивності.
Додавання нових операцій
У всіх цих фреймворках додавання операцій з збереженням прийнятної продуктивності вельми непросто.
Theano/MXNET TensorFlow
Можна додавати операції на Python з підтримкою вбудованих операторів C. Forward на C++, symbolic gradient на Python.
Багаторазове використання коду
Для навчання глибоких мереж потрібно чимало часу. Тому Caffe випустили кілька заздалегідь підготовлених моделей (model zoo), які можна було б використовувати в якості початкових зразків при передачі навчання або при тонкій настройці глибоких мереж для певних галузей знань або користувальницьких образів.
Theano TensorFlow MXNET
Lasagne — високорівнева платформа на основі Theano. У Lasagne дуже просто використовувати заздалегідь навчені моделі Caffe Немає підтримки заздалегідь підготовлених моделей MXNET передбачений інструмент caffe_converter, призначений для перетворення заздалегідь підготовлених моделей caffe у формат MXNET

Низькорівневі оператори Tensor
Досить ефективна реалізація низькорівневих операторів: їх можна використовувати в якості складових компонентів при створенні нових моделей, не витрачаючи зусилля на написання нових операторів.
Theano TensorFlow MXNET
Безліч простих операцій Цілком добре Дуже мало

Оператори управління потоком
Оператори управління потоком підвищують виразність і універсальність символьної системи.
Theano TensorFlow MXNET
Підтримуються У форматі експерименту Не підтримуються

Високорівнева підтримка
Theano TensorFlow MXNET
«Чистий» символьний обчислювальний фреймворк. Можна створювати високорівневі платформи у відповідності з вимогами. Серед успішних прикладів — Keras, Lasagne, blocks Непогане пристрій з точки зору навчання нейтронних мереж, але при цьому даний фреймворк не орієнтований виключно на нейтронні мережі, що дуже добре. Можна використовувати колекції графів, черги та доповнення образів в якості складових компонентів для високорівневих оболонок Крім символьної частини, в MXNET також передбачені всі необхідні компоненти для класифікації образів, від завантаження даних до побудови моделей з методами для початку навчання.

Продуктивність

Вимірювання продуктивності Single-GPU

У моїх тестах продуктивність моделі LeNet для набору даних MNIST виміряна для конфігурації з одним графічним процесором (GPU NVIDIA Quadro K1200).
Theano TensorFlow MXNET
Відмінно Середньо Чудово

Пам'ять

Об'єм пам'яті GPU обмежений, тому використання для великих моделей може бути проблематично.
Theano TensorFlow MXNET
Відмінно Середньо Чудово

Швидкість Single-GPU

Theano дуже довго компілює графи, особливо в складних моделях. TensorFlow ще трохи повільніше.
Theano/MXNET TensorFlow
Порівнянно з CuDNNv4 Приблизно вдвічі повільніше

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

Theano TensorFlow MXNET
Експериментальна підтримка Multi-GPU Multi-GPU Розподілена

Висновок
Theano (з високорівневими рішеннями Lasagne і Keras) — це відмінний вибір для моделей глибокого навчання. З допомогою Lasagne/Keras дуже просто створювати нові мережі і змінювати існуючі. Я віддаю перевагу Python, тому вибираю Lasagne/Keras завдяки дуже розвиненій інтерфейсу Python. Втім, ці рішення не підтримують R. Можливості передачі навчання і тонкої настройки в Lasagne/Keras показують, що там дуже просто модифікувати існуючі мережі, а також налаштовувати під предметно-орієнтовані дані користувача.

Після порівняння фреймворків можна зробити висновок, що найоптимальнішим рішенням буде MXNET (більш висока продуктивність, ефективне використання пам'яті). Крім того, у нього відмінна підтримка R. Власне кажучи, це єдина платформа, в якій підтримуються всі функції на R. MXNET передача навчання і тонка настройка мереж можливі, але виконувати їх досить складно (порівняно з Lasagne/Keras). З-за цього буде складно не тільки модифікувати існуючі мережі навчання, але і налаштовувати під предметно-орієнтовані дані користувача.

Якщо ви побачили неточність перекладу, повідомте будь ласка про це в особисті повідомлення.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.