Нейронные сети 2017

Page 1

Нейронные сети Нейросети Ашманова

Русский MeetUP, 2017


О докладчике Станислав Ашманов

Ген. дир. и основатель «Нейросетей Ашманова» Разработчик нейронных сетей

• «Нейросети Ашманова» основаны в 2015 г. • Занимаемся разработкой нейросетей и машинного обучения на заказ • 5 сотрудников: выпускники Мехмата МГУ, аспиранты • Резиденты Сколково с момента основания компании • Победители конкурса по нейронным сетям DeepHack 2016


План доклада 1. 2. 3. 4. 5. 6.

Решённые задачи машинного обучения Что такое машинное обучение Что такое нейронные сети Обучение нейронных сетей Фреймворки и железо для нейросетей Что делать-то?


Решённые задачи машинного обучения


Изображения и видео • Детекция объектов («найди что-то на фото»): • Люди • Лица, глаза, носы, рты • Машины, разметка, знаки, ямы • Бытовые предметы, животные • В общем – ВСЁ, ЧТО ЧЕЛОВЕК МОЖЕТ ДЕТЕКТИРОВАТЬ • Классификация изображений («определи класс изображения»): • Эротика/порнография • Эмоции на лице


Изображения и видео • Классификация изображений: • Определение пола, веса по лицу • Заболевания растений • И т. д. • Сегментация изображений («определи категорию каждого пиксела на фотографии»): • Разметка, знаки, дорожное полотно • Спутниковые снимки • И т. д.


Изображения и видео • Распознавание лиц («узнай человека по лицу») • Синтез изображений («возьми изображение и поменяй его»): • Стилизация • Повышение разрешения • Изменение направления взгляда • Изменение цвета волос, глаз • Раскраска ч/б фото


Тексты • • • • • • •

Классификация текстов по тематикам Тональность (негатив/позитив) Определение языка Определение пола Спам-фильтры Машинный перевод Оценка близости текстов (Word2Vec)

• А чатботы? Да, но получается плохо.


Тексты • Пример диалогов чатбота на нейросетях:

Человек: Привет! Машина: Привет! Ч.: Как дела? М.: Хорошо. Ч.: Как тебя зовут? М.: Джулия. Ч.: Когда ты родилась? М.: 20 июля. Ч.: В каком году ты родилась? М.: 1977. Ч.: Откуда ты родом? М.: Из глубинки. Ч.: Ты мужчина или женщина? М.: Я женщина. Ч.: Почему мы здесь? М.: Я не уверена. Ч.: Окей, пока! М.: Пока.

Ч.: В чем смысл жизни? М.: Творить добро. Ч.: Для чего мы живем? М.: Чтобы жить вечно. Ч.: В чем смысл существования? М.: В том, чтобы выяснить, что случится, когда мы достигнем планеты Земля. Ч.: Где ты сейчас находишься? М.: В центре пустоты. Ч.: В чем смысл смерти? М.: Чтобы получить жизнь. Ч.: В чем смысл разума? М.: В том, чтобы понять, что это. Ч.: В чем смысл чувств? М.: Я не знаю.


Аудио • • • • •

Распознавание речи Синтез речи Идентификация диктора Оценка тональности (негатив/позитив) Чтение по губам (ещё не полностью решено)


Прочее • Логика для роботов • Alpha Go • Планирование маршрутов беспилотников • Рекомендательные системы для магазинов • Биометрия • Предсказание поломок по данным с датчиков


Что такое машинное обучение


Машинное обучение. Общая задача. Дано: • Набор наблюдений X = {x_i} • Набор соответствующих им «результатов» Y = {y_i} Надо: • Автоматически найти функцию f(x) = y, «наилучшим» образом отражающую связь между X и Y


Машинное обучение. Примеры. Линейная регрессия: Объекты x_i и y_i – из R^n и R^k, предполагаем, что зависимость между ними линейная. Распознавание речи: Объекты x_i – аудиозаписи, y_i – их тексты-расшифровки. Распознавание изображений: Объекты x_i – картинки (набор пикселей), y_i - координаты точек или объектов на изображении, классы изображений, … Детекция спама: Объекты x_i – тексты писем, y_i – ярлыки «спам/не спам». Поисковики Яндекс/Google: Объекты x_i – веб-сайты, y_i – их позиция в поисковой выдаче по данному запросу.


Машинное обучение. Модели + алгоритмы. Модель – это заданный класс функций f, которые могут у нас получиться в результате поиска закономерности X -> Y. Алгоритм – это процедура поиска «наилучшей» f для заданных {(x_i, y_i)} в этом классе, в рамках выбранной модели. Самые популярные модели (+ алгоритмы): • Метод наименьших квадратов • Метод опорных векторов (SVM) • Деревья принятия решений • Случайный лес • Метод ближайших соседей • Регрессии • Генетические алгоритмы • Нейронные сети


Что такое нейронные сети


Нейронные сети • Математическая модель, вдохновлённая устройством мозга • Способны решать задачи: • Детекция • Классификация • Синтез, … • Свёрточные нейронные сети организованы по аналогии со зрительной корой мозга • Рекуррентные нейронные сети обладают памятью (а-ля конечный автомат) • Нейронные сети иерархически строят представление объекта


Нейронные сети. Иерархия признаков. И к видам лиц

К частям лица

Через простые признаки

От пикселей


Нейронные сети. Нейрон (перцептрон).

w_i

Математический нейрон

• x_1, … , x_n – входы • w_1, … ,w_n – веса • output – взвешенная сумма, пропущенная через «калитку» – функцию активации

Биологический нейрон


Нейронные сети. Простые сети. • Это много нейронов, соединённых друг с другом • Здесь три слоя: входной скрытый выходной • Каждый нейрон: получает на вход числа суммирует их пропускает через функцию активации отдаёт результат на свой выход • Получается, что у каждого нейрона есть свой набор весов


Нейронные сети. Простые сети.

Тоже простая сеть:


Нейронные сети. Глубокие сети.

Очень большое количество слоёв:


Нейронные сети. Глубокие сети. Почему произошёл бум глубоких нейронных сетей? 1. В 2006-2012 годах были придуманы алгоритмы эффективного обучения сетей 2. Появилось огромное количество обучающих данных 3. Появились видеокарты (GPU), а нейронные сети очень хорошо распараллеливаются Плюсы: • Нет ручного конструирования признаков объекта, сеть автоматически выделяет полезные признаки • Показывают удивительные результаты Минусы: • Иногда невозможно интерпретировать, объяснить результаты классификации • Прожорливые (поэтому, обучение лучше запускать на GPU) • Не работают без большого количества обучающих данных


Нейронные сети. Глубокие сети. • Deep learning – это наука построения нейронных сетей с большим количеством слоёв • Глубина = количество слоёв • Доказано: • Сеть с двумя слоями и фиксированными нелинейными функциями активации может сколь угодно точно аппроксимировать любую непрерывную функцию Остаётся научиться находить сети, которые дают нам решения наших конкретных задач (детекция, классификация и т.д.).


Обучение нейронных сетей


Нейронные сети. Обучение. • Имеем данные (например, изображения или текст) • Имеем ярлыки для них (например, координаты лиц на изображениях или категории для текста) • Обучение сети – алгоритм, который: 1. Проходит по всем данным 2. Находит значения весов для всех нейронов так, чтобы сеть наилучшим образом решала задачу (предсказание должно лучшим образом совпадать с реальностью)

• Архитектура сети (количество слоёв, функции активации и прочее) фиксируется заранее, алгоритм обучения эти параметры не меняет


Нейронные сети. Обучение. • Нейронная сеть представляет из себя функцию • У неё очень много коэффициентов • Если есть размеченные данные, то мы имеем оптимизационную задачу: найти такую функцию (т. е. найти все её коэффициенты), которая наилучшим образом соответствует данным • Обучение сети представляет из себя обычный алгоритм градиентного спуска • В Deep Learning его называют “backpropagation” – алгоритм обратного распространения ошибки • Есть много вариаций этого алгоритма


Процедура разработки 1) Определить X и Y 2) Изучить мировой опыт по задаче (статьи, код) 3) Подготовить обучающую выборку (X и Y) 4) Обеспечить тестирование качества (нужен бенчмарк) 5) Реализовать простую архитектуру 6) Улучшить архитектуру, протестировать …


Обучающие выборки. Создание. Выборка должна быть: 1) Чистая • С минимумом ошибок • Однородная 2) Большая • Изображения – 1000+ • Аудио – 1000+ • Тексты – 10000+ 3) Сбалансированная • В каждом классе должно быть быть одинаковое число примеров 4) Адекватная реальности • Реальные условия могут отличаться от лабораторных


Фреймворки и железо для нейросетей


Фреймворки. Определение. Фреймворк (или библиотека) для построения нейронных сетей – это ПО, которое позволяет: 1) Сконструировать нейронную сеть (описать архитектуру) 2) Обучить нейронную сеть (используя алгоритмы решения задач оптимизации) 3) Использовать обученную нейронную сеть в реальных задачах • Фреймворки – модульные, как конструктор • Фреймворки выполняются как на GPU, так и на CPU • Есть много хороших open-source фреймворков


Фреймворки. Основные фреймворки. 1. TensorFlow • Разрабатывается Google • Удобный • Большое сообщество (много opensource примеров и обучающих статей) • Linux/Windows/Mac OS • Python, C++, Java 2. Torch / Pytorch • Разрабатывается Facebook • Удобный • Большое сообщество Linux/Windows/Mac OS • Lua, Python, C++, …

3. Caffe • Один из самых древних и мощных • Большое сообщество • Linux/Windows/Mac OS • Python, C++ 4. Chainer • Удобный • Маленькое сообщество • Python, C++ 5. Keras • Это надстройка над другими фреймворками • Удобнее всех • Python


Железо • GPU • NVIDIA CUDA • Можно арендовать мощности у Amazon, Microsoft, Google • CPU • Чем больше ядер – тем лучше • Очень медленно, но можно обучаться на GPU, а использовать потом CPU • FPGA (ПЛИС) • В статьях упоминается, что даёт 10-кратный прирост к GPU • Не поддерживается фреймворками • ASIC • Нейрочипы • Используются крупными производителями умных устройств • Не поддерживаются фреймворками


Что делать-то?


Что делать? МАШИННОЕ ОБУЧЕНИЕ

ПРОДУКТ

Не надо так!


Что делать? ПРОДУКТ (НА МАШИННОМ ОБУЧЕНИИ)

ПРОБЛЕМА

ИЛИ

СУЩЕСТВУЮЩИЙ ПРОДУКТ, БИЗНЕС

УЛУЧШЕННЫЙ ИЛИ НОВЫЙ ПРОДУКТ


Что делать? Самое экономное по времени и деньгам решение: 1) 2) 3) 4) 5)

Сформулируйте, какой алгоритм нужен Поищите готовые технологии в сети (arxiv.org, github.com) Если нужно, соберите обучающие данные Наверняка есть научные статьи на arxiv’е по вашей теме Реализуйте прототип на собранных данных и на архитектуре из статей 6) Упакуйте, запустите пилотный проект, проверьте бизнес-гипотезу, улучшите алгоритм


Спасибо! Нейросети Ашманова stanislav@ashmanov.net, +7-916-533-55-88, http://ashmanov.net


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.