Курсова робота_СТАРАЯ. Зміст
Скачать 1.63 Mb.
|
ОГЛЯД БІБЛІОТЕК ДЛЯ ГЛИБИННОГО МАШИННОГО НАВЧАННЯTensorFlowTensorFlow – це система машинного навчання, яка працює у широкомасштабних та в неоднорідних середовищах. TensorFlow використовує графи потоку даних (dataflow graphs) для представлення обчислень, спільного стану та операцій, які змінюють цей стан. TensorFlow дозволяє розробникам експериментувати з новими алгоритмами оптимізації та навчання. TensorFlow підтримує безліч додатків зосереджуючись на тренуванні та висновку щодо роботи глибоких нейронних мереж. Кілька служб Google використовують TensorFlow у виробництві, він випущений як проект із відкритим кодом, і він широко використовується для дослідження машинного навчання. Приклад класифікатора зображень, написаного на TensorFlow зображено на рисунку 2.1. Рисунок 2.1 - Класифікатор зображень, написаний на TensorFlow TensorFlow забезпечує просте програмування на основі абстракції потоку даних, яка дозволяє користувачам розгортати додатки на розподілених кластерах, локальних робочих станціях, мобільних пристроях і спеціально розроблених прискорювачів. Високорівневий інтерфейс для написання скриптів обгортає конструювання графів потоку даних і дозволяє користувачам експериментувати з різними архітектурами моделі та алгоритмами оптимізації не змінюючи основну систему. Основні принципи проектування TensorFlow: Графи потоку даних примітивних операторів (Dataflow graphs of primitive operators). TensorFlow використовує представлення потоку даних для його моделі, яка являє собою індивідуальні математичні оператори (наприклад, множення матриць, згортка тощо) як вузли в графі потоку даних. Цей підхід полегшує створення користувачами нових шарів, використовуючи високорівневий інтерфейс для написання скриптів. На додаток до функціональних операторів, TensorFlow має змінний стан та операції, що оновлюють його, як вузли на графу потоку даних, що дозволяє експериментувати з різними правилами оновлення. Відкладене виконання (Deferred execution). Типова програма TensorFlow має дві чіткі фази: перша фаза визначає програму (наприклад, нейронну мережу, яку слід навчати, та правила оновлення) як символічний граф потоку даних із змінними, які будуть заповнюватись вхідними даними та змінними, що представляють стан; і друга фаза виконує оптимізовану версію програми на наборі доступних пристроїв. Відклавши виконання, поки не буде доступна вся програма, TensorFlow може оптимізувати фазу виконання за допомогою глобальної інформації про обчислення. Наприклад, TensorFlow досягає високої утилізації GPU, використовуючи структурну залежність графу, щоб видати послідовність ядер для GPU не чекаючи проміжних результатів. Загальна абстракція для гетерогенних прискорювачів На додаток до універсальних пристроїв, таких як багатоядерний процесор і графічний процесор, спеціальних прискорювачі для глибокого машинного навчання може досягти значних покращень у продуктивності і енергозбереження. У Google побудовано спеціальний блок обробки тензора (Tensor Processing Unit, TPU) для машинного навчання. Для підтримки цих прискорювачів в TensorFlow, визначено загальну абстракцію для пристроїв. Як мінімум, пристрій повинен реалізувати методи для створення ядра для виконання, розподілу пам'яті для входів і виходів і передачі буферу з і до пам’яті хоста. Кожен оператор (наприклад, матричне множення) може мати кілька спеціалізованих реалізацій для різних пристроїв. У результаті та ж сама програма може легко націлюватися на графічні процесори, TPU або мобільні процесори як це потрібно для тренувань. TensorFlow використовує тензори примітивних значень як загальний формат обміну, який розуміють всі пристрої. На найнижчому рівні, всі тензори в TensorFlow щільні. Це рішення гарантує, що на найнижчих рівнях система має просту реалізацію для виділення пам'яті і серіалізації даних, тим самим зменшуючи основні накладні витрати. Модель виконання TensorFlow. TensorFlow використовує єдиний граф потоку даних для представлення всіх обчислень та стану в алгоритмі машинного навчання, включаючи окремі математичні операції, параметри та їх правила оновлення, а також попередню обробку вхідних даних (рисунок 2.2). Рисунок 2.2 - Схематичний граф потоку даних TensorFlow для тренування Граф потоку даних виражає комунікацію між підобчисленнями явно, таким чином, що дозволяє легко виконувати незалежні обчислення паралельно і розділити обчислення на кількох пристроях. TensorFlow відрізняється від пакетних систем потоку даних у двох аспектах: Модель підтримує кілька одночасних виконань на перекритті підграфів загального графа. Індивідуальні вершини можуть мати змінюваний стан, який може бути розподіленим між різними виконаннями графа. Основне спостереження в архітектурі сервера параметрів полягає в тому, що змінюваний стан має вирішальне значення для тренування дуже великих моделей, тому що стає можливим робити оновлення для дуже великих параметрів на місці та поширювати ці оновлення для паралельних обчислень, настільки швидко, як це можливо. Потік даних із змінним станом дозволяє TensorFlow імітувати функціональність сервера параметрів, але з додатковою гнучкістю, оскільки це стає можливим для виконання довільних підграфів потоків даних на машинах, що приймають загальні параметри моделі. В результаті, користувачі змогли експериментувати з різними алгоритми оптимізації, схеми узгодженості та стратегії розпаралелювання. Елементи графу потоку даних. У графі TensorFlow кожна вершина являє собою одиницю локального обчислення, і кожне ребро представляє вихід від або вхід до вершини. Розрахунки у вершинах – це операції, а значення, які проходять уздовж ребер – це тензори. Тензор. У TensorFlow всі дані моделюються як тензори (n-мірні масиви) з елементами, які мають примітивний тип, таких як int32, float32 або string (де string може бути довільними бінарними даними). Тензори, природно, представляють входи і результати загальних математичних операцій в багатьох алгоритмах машинного навчання: наприклад, множення матриць приймає два 2-D тензори і віддає 2-D тензор; пакет 2-D згортки приймає два тензори 4-D і віддає ще один 4-D тензор. Операції. Операція приймає m ≥ 0 тензорів на вхід і віддає n ≥ 0 тензорів на виході. Операція має іменований "тип" (наприклад, Const, MatMul або Assign) і може мати нуль або більше атрибутів під час компіляції, які визначають її поведінку. Операція може бути поліморфічною і варіативною під час компіляції: її атрибути визначають обидва очікувані типи та арність її входів і виходів. Наприклад, найпростіша операція Const не має вхідних даних і має єдиний вихід; її значення є атрибутом під час компіляції. Наприклад, AddN сумує декілька тензорів того ж примітивного типу, і вона має атрибут типу T і цілочисельний атрибут N, який визначає його тип. Операції з відслідковуванням стану: змінні (variables). Операції можуть містити змінний стан, що читається і / або записується під час кожного виконання. Операція Variable містить змінний буфер, який може бути використаний для зберігання спільних параметрів моделі, яку тренують. Variable не має вхідних даних; і віддає посилання обробника (reference handle), який діє як типізована можливість читання та запису буфера. Операція Read приймає посилання обробника r як вхід і вихід значення змінної (State [r]) як щільний тензор. Інші операції змінюють буфер: наприклад, AssignAdd приймає посилання обробника r та значення тензору х, а при виконанні оновлює State'[r] ← State[r] + x. Подальші операції Read(r) віддають значення State'[r]. Операції з відслідковуванням стану: черги (queues). TensorFlow включає кілька реалізації черги. Найпростіша черга – це FIFOQueue, що володіє внутрішньою чергою тензорів, і підтримує одночасний доступ у порядку first-in-first-out. Інші типи черг віддають тензори у випадковому та пріоритетному порядку, які гарантують, що вхідні дані відбираються відповідно. Як Variable, операція FIFOQueue віддає посилдання обробника, який може бути прийнятий однією з стандартних операцій черги, таких як Enqueue і Dequeue. Enqueue буде блокувати, якщо його задана черга повна, і Dequeue блокуватиметься, якщо ця черга порожня. |