CNTK — нейромережевої інструментарій від Microsoft Research

2015 рік був дуже багатий на події, пов'язані з нейромережевими технологіями і машинним навчанням. Особливо помітний прогрес показали згорткові та рекурентні мережі, необхідні для вирішення завдань в області комп'ютерного зору та розпізнавання мови. Багато великі компанії опублікували на Github свої розробки, Google випустив у світ TensorFlow, Baidu — warp-ctc. Група вчених з Microsoft Research теж вирішила приєднатися до цієї ініціативи, випустивши Computational Network Toolkit, набір інструментів для проектування і тренування мереж різного типу, які можна використовувати для розпізнавання образів, розуміння мовлення, аналізу текстів і багато чого іншого. Інтригующим при цьому є те, що ця мережа перемогла в конкурсі ImageNet LSVR2015є найшвидшою серед існуючих конкурентів.



Зовсім короткий вступ в CNTK



Computational Network Toolkit є спробою систематизувати і узагальнити основні підходи щодо побудови різних нейронних мереж, забезпечити вчених і інженерів великим набором функцій і спростити багато рутинних операцій. CNTK дозволяє створювати мережі глибокого навчання (DNN), згорткові мережі (CNN), рекурентні мережі та мережі з пам'яттю (RNN, LSTM). Базою для CNTK є лаконічний спосіб опису нейронної мережі через ряд обчислювальних кроків, прийнятий у багатьох інших рішеннях, наприклад, Theano. Найпростіша мережа з одним прихованим шаром може бути представлена наступним чином:



На кроці 2 вхідний вектор значень X (іншими словами, набір чисел) множиться на вектор ваг W1, потім складається з вектором зміщень B1, отримані значення ваг передаються сигма функції збудження. Далі обчислений вектор S1 множиться на ваги прихованого шару W2 складається з зміщенням B2, і обчислюється функція softmax яка є відповіддю мережі.
Цей же алгоритм у графічному вигляді можна представити так (обчислення йде знизу-вгору):



Мережі такого типу можуть бути описані з допомогою конфігураційного синтаксису CNTK має у простому випадку наступний вигляд:



Навчання мережі, або іншими словами, підбір коефіцієнтів W[N], ведеться за допомогою стохастичного градієнтного спуску (SGD), і теж описується в конфігураційному файлі, задаючи параметри швидкості навчання, кількості епох і моменту:



CNTK допомагає вирішити завдання інфраструктурного характеру, зокрема, у нього вже є підсистеми читання даних з різних джерел. Це можуть бути текстові та бінарні файли, зображення, звуки.
Більш докладно про можливості і функції CNTK можна прочитати на сторінці An Introduction to Computational Networks and the Computational Network Toolkit.

Приклади використання CNTK



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

Простий приклад класифікації


На основі штучних даних, що генеруються скриптом Matlab, створюється мережа, яка вирішує задачу бінарної класифікації — чи належить точка синьому або червоному кластеру:

Фактично, нейронна мережа намагається відновити функцію label= 0.25*sin(2*pi*0.5*x) >y з допомогою якої ці дані були згенеровані. Даний приклад демонструє всю силу і потужність нейронних мереж, так як математично доведено, що завдяки універсальній теоремі апроксимації можна підібрати будь-яку функцію.

Аналіз зображень


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


цього прикладу вам стане зрозуміло, як дані про зображенні потрапляють в сверточную мережа (CNN). Не будемо робити таємниці, все насправді просто. Всі значення пікселів зображення, а в нашому випадку це квадрат 28x28 потрапляють на вхід мережі, а відповіддю мережі є ймовірність того що подане зображення належить конкретного класу. Відповідно у мережі 784 входу і 10 виходів.
Крім цього в CNTK входять приклади роботи з класичними наборами зображень, найбільш популярними у науковців які займаються Deep Convolution Neural Networks, це CIFAR-10 і ImageNet (AlexNet і VGG формати).
Зусилля, які доклали вчені MSR при створенні CNTK можуть давати надію на створення досить швидких класифікаторів. За деякими тестами (наскільки розуміє автор, на «класичному» у світі CNN розмірі 224x224 пікселя), швидкість розпізнавання може бути понад 400 кадрів в секунду, що є досить високим результатом. Ще більш цікавим є те, що сучасні CNN мережі в деяких випадках вже перевершують можливості людини по розпізнаванню образів. Більш докладно про це ви можете дізнатися з публікації Delving Deep into Rectifiers: Surpassing Human Level Performance on ImageNet Classification.


Аналіз мови і природних мов


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



Близькими у цьому контексті є LSTM мережі, для яких розроблений спеціальний тип нейронів, переводить себе в порушену стан на основі деяких значень і не змінює його поки на вхід не прийде деактивационый вектор. LSTM мережі в тому числі допомагають вирішити завдання перетворення послідовності на послідовність виникає при перекладі з однієї мови на іншу. Можливості RNN і LSTM мереж настільки високі, що в деяких випадках вже перевершують людини в розпізнаванні коротких фраз і рукописного введення.
У CNTK входить кілька прикладів аналізу мови, на основі AN4 Dataset, Kaldi Project, TIMIT, і проект по трансляції на основі наукової роботи Sequence-to-sequence neural net models for grapheme to phoneme conversion. Аналіз тексту представлений декількома проектами з аналізу коментарів, новин, і сказаних фраз (spoken language understanding, SLU), з деталями останньої технології ви можете ознайомитися з наукової роботи SPOKEN LANGUAGE UNDERSTANDING USING LONG SHORT-TERM MEMORY NEURAL NETWORKS.

Якщо ви хочете спробувати CNTK у справі



Ядро CNTK створено на мові C++, але розробники обіцяють в майбутньому створити Python bindings, і C# інтерфейси.
Ви можете самостійно зібрати CNTK для Windows або Linux, у першому випадку вам знадобиться Visual Studio 2013, і набір бібліотек CUDA, CUB, CuDNN Boost, ACML або MKL і MS-MPI. Опціонально, CNTK може бути скомпільовано з підтримкою OpenCV. Деталі ви можете дізнатися з CNTK Wiki.
Можна скористатися готовими бінарними збірками GPU з підтримкою і без, які опубліковані за адресою https://github.com/Microsoft/CNTK/wiki/CNTK-Binary-Download-and-Configuration
Короткий вступ в CNTK яке було проведене вченими з MSR в рамках конференції NIPS 2015 опубліковано за адресою http://research.microsoft.com/pubs/226641/CNTK-Tutorial-NIPS2015.pdf

Джерело: Хабрахабр

0 коментарів

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