Deep Learning. На пути к искусственному интеллекту
-
Upload
tech-talks-nsu -
Category
Software
-
view
223 -
download
1
Transcript of Deep Learning. На пути к искусственному интеллекту
Где применяется Deep learning?
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Распознавание (текста, образов, голоса, жестов и т.д.)• Машинный перевод• Биометрия (отпечатки пальцев, голос, лицо)• Медицина (экспресс диагностика, борьба с раком,
протезы и т.д.)• Классификация документов (спам, поиск и т.д)• Робототехника (ходьба, управление руками и т.д.)• Беспилотные автомобили• И т.д.
Давным-давно, в далёкой-далёкой галактике...
© 2015 API.AI | Михаил Ермоленко, [email protected]
Дмитрий Анатольевич принял бразды правленияИ решил он реформировать полицию и судыВ этот раз точно должно получится, так как на помощь прийдут глубокие нейронные сетиДал поручение создать киборгов судей-полицейскихИз бюджета выделили 100 миллиардовТендер выиграла компания «НаноИнновацииПлюс»Деньги куда-то исчезли и осталось всего 100 тысячОтветственным за спасение ситуации назначили программиста самоучку Небоходова…
Кодовое название проекта: Судья Дредд
© 2015 API.AI | Михаил Ермоленко, [email protected]
Периметр работ
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Зрение• Слух• Понимание• Принятие решение• Действия/движения
Принятие решений: казнить ли преступника?
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Убийство (Критерий 1)• Грабеж (Критерий 2)• Повторное правонарушение (Критерий 3)
Свойства правонарушения:
Принятие решений: казнить ли преступника?
© 2015 API.AI | Михаил Ермоленко, [email protected]
K1:У K2:Г K3:П Сумма Казнить
Вес 3 2 1 от 4
Преступник 1 1 1 0 5 ДА
Преступник 2 1 0 1 4 ДА
Преступник 3 0 1 1 3 НЕТ
Преступник 4 0 1 0 2 НЕТ
Сумма = K1*3+K2*2+K3*1
Если сумма больше или равна 4, то да
Принятие решений: казнить ли преступника?
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Совершеннолетний или нет (Критерий 4)• Случайное убийство (Критерий 5)• Самооборона (Критерий 6)• Повторное правонарушение (Критерий 7)• и т.д. и т.п.
Какие ещё могут быть свойства:
И чем больше свойств, тем сложнее и дольше подбирать коэффициенты
Перцептрон (Perceptron)
© 2015 API.AI | Михаил Ермоленко, [email protected]
от лат. perceptio — восприятие
Обучение перцептрона
© 2015 API.AI | Михаил Ермоленко, [email protected]
Метод коррекции ошибок:• Ставим случайные веса (или обнуляем их вовсе) • Подаем на вход тестовый пример и вычисляем
результат• Если результат не верный, то модифицируем все веса
следующим образом: wn = wn + a*xn*(<expected> - <result>)
• Повторяем для всех примеров, делаем несколько итераций
Обучение перцептрона на 1м примере (a=1)
© 2015 API.AI | Михаил Ермоленко, [email protected]
i w0 w1 w2 w3 K1 K2 K3 Resul Exp. Diff1 0 0 0 0 1 1 0 1 1 01 0 0 0 0 1 0 1 1 1 01 0 0 0 0 0 1 1 1 0 -11 -1 0 -1 -1 0 1 0 0 0 02 -1 0 -1 -1 1 1 0 0 1 12 0 1 0 -1 1 0 1 1 1 02 0 1 0 -1 0 1 1 0 0 02 0 1 0 -1 0 1 0 1 0 -13 -1 1 -1 -1 1 1 0 0 1 13 0 2 0 -1 1 0 1 1 1 03 0 2 0 -1 0 1 1 0 0 03 0 2 0 -1 0 1 0 1 0 -14 -1 2 -1 -1 1 1 0 1 1 04 -1 2 -1 -1 1 0 1 1 1 04 -1 2 -1 -1 0 1 1 0 0 04 -1 2 -1 -1 0 1 0 0 0 0
И наступило счастье
© 2015 API.AI | Михаил Ермоленко, [email protected]
• После обучения система работала отлично, точность 99%
• Только добавляй примеров на основе судебной практики
• Когда стали подаваться результаты новых дел, то часто даётся неверный ответ
• Начали разбираться… перцептрон совсем не умеет обещать, но есть идея!
На самом деле нет:
Добавим промежуточные классы
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Подбирать коэффициенты руками стало ещё сложнее
• А обучение никак не сходится. Как быть?
Но:
В чем причина?
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Малейшее изменение в данных может привести к кардинальному изменению ответа (с 0 на 1 и наоборот) => не предсказуемость
• Многие промежуточные характеристики не бинарны и могут иметь промежуточные значения
Сейчас начнётся посложнее..
© 2015 API.AI | Михаил Ермоленко, [email protected]
Целевая функция ошибки
© 2015 API.AI | Михаил Ермоленко, [email protected]
• C введением сигмоида значения 0 или 1 можно получить только при +/- бесконечности
• У нас много примеров и нужно придумать способ, который бы находил такие веса, что бы всё примеры были максимально близко к желаемому результату
• Решение: метод наименьших квадратов:
Градиентный спуск (SGD)
© 2015 API.AI | Михаил Ермоленко, [email protected]
Метод обратного распространения ошибки
© 2015 API.AI | Михаил Ермоленко, [email protected]
Глубокая нейронная сеть
© 2015 API.AI | Михаил Ермоленко, [email protected]
Скрытые слои
Входной слой
Выход
Стало на много лучше
© 2015 API.AI | Михаил Ермоленко, [email protected]
• После обучения система работала отлично, точность 99,8%
• На неизвестных примерах точность выросла до 85%
• Уж очень долго тренируется, тяжело экспериментировать
• Хотелось бы повысить точность
Но есть проблемы:
Как мы можем ускорить тренировку? (1/3)
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Разбить тренировочные примеры на пакеты (batch) по N штук (на практике от 10 до 500)
• Считаем результат работы нейронной сети для всех примеров в рамках одного пакета
• Считаем градиент общей функции ошибки• Делаем всего один проход обратного распространения
ошибки вместо N (ускоряем тренировку в несколько раз)
Как мы можем ускорить тренировку? (2/3)
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Реализуем тренировку на GPU (видеокарты) До 100 раз быстрее, чем на CPU
• Рекомендуемое железо: Nvidia GeForce GTX TITAN X или GTX 980 Ti
• Реализуем распараллеливание тренировки на несколько видео крат, а возможно даже и серверов
Как мы можем ускорить тренировку? (3/3)
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Использовать улучшенные версии градиентного спуска (Adagrad, RMSprop, Adam)
• Уменьшить размер слоев• Попробовать ReLU, как функцию активации (быстрее
считается и для ряда задач лучше точность)• Почитать, что пишут умные люди, ещё много тонких
моментов
Повышение точности (1/2)
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Увеличить количество слоев• Увеличить количество нейронов в каждом слое• Увеличить объём тренировочных данных• Бороться с переобучением
Повышение точности (2/2)
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Критерий выхода из обучения• Использовать Dropout или Batch normalization
Борьба с переобучением:
И наступило счастье
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Теперь вообще замечательно, точность 99,9%• На неизвестных примерах точность выросла до 98,5%
• Сажать в тюрьму (ещё и на разный срок)• Назначать условное наказание• Накладывать штрафы• Делать предупреждения• И ещё что-нибудь:)
Но судья должен не только казнить, но и:
Мультиклассовая классификация
© 2015 API.AI | Михаил Ермоленко, [email protected]
• На каждое решение заводим отдельный выход у нейронной сети
• Так как сроки и суммы наказания тоже конечные, то для каждого варианта заводим отдельный выход
• Используем Cross entropy функцию как функцию ошибок:
• Softmax как активацию на последнем слое:
© 2015 API.AI | Михаил Ермоленко, [email protected]
У нас очень справедливый судья
Но выносить приговор это только лишь одна из сотен его обязанностей.
И их все нужно натренировать, скучно.. давайте дальше
Распознавание изображений
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Начнём с цифр и попробуем использовать архитектуру предидущей сети
• На вход подаём значения пикселей (28x28)
http://yann.lecun.com/exdb/mnist/
Дополнение (Augmenting)
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Сделаем картинки с различным сдвигом, растяжением и поворотом
• Добавим случайные шумы• Качество на тестовом наборе увеличится с 97%• Но дальше уже не улучшается
Сверточные нейронные сети
© 2015 API.AI | Михаил Ермоленко, [email protected]
Посмотреть в динамике можно здесь: http://cs.stanford.edu/people/karpathy/convnetjs/demo/mnist.html
Сверточные нейронные сети
© 2015 API.AI | Михаил Ермоленко, [email protected]
Рекуррентные нейронные сети
© 2015 API.AI | Михаил Ермоленко, [email protected]
Аппроксимируют любую последовательность
Двунаправленные реккурентные нейронные сети
© 2015 API.AI | Михаил Ермоленко, [email protected]
Memory networks
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Joe went to the kitchen. Fred went to the kitchen. Joe picked up the milk.
• Joe travelled to the office. Joe left the milk. Joe went to the bathroom.
• Where is the milk now? A: office• Where is Joe? A: bathroom• Where was Joe before the office? A: kitchen
Обучение с подкреплением
© 2015 API.AI | Михаил Ермоленко, [email protected]
Q-Learning
http://arxiv.org/pdf/1312.5602v1.pdf
Transfer learning
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Обучаем на больших данных• Выкидываем последний слой• Обучаем на небольшом объёме
данных, с хорошей точностью
Распознавание речи
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Kaldi (http://kaldi.sourceforge.net/)• Eesen (https://github.com/yajiemiao/eesen)
Беспилотные автомобили
© 2015 API.AI | Михаил Ермоленко, [email protected]
https://www.ted.com/talks/chris_urmson_how_a_driverless_car_sees_the_road
Библиотеки
© 2015 API.AI | Михаил Ермоленко, [email protected]
• Torch (http://torch.ch/)• Caffe (http://caffe.berkeleyvision.org/)• Theano (http://deeplearning.net/software/theano/):
• Keras (http://keras.io/)• Lasagne (http://lasagne.readthedocs.org/en/latest/)
• Плодятся как грибы после дождя:)
Спасибо!
© 2015 API.AI | Михаил Ермоленко, [email protected]
Все вопросы можно задать по адресу [email protected]