< предыдущие главы


51. Выбираем компоненты конвейера: простота решения задач


Вторым важным фактором, который нужно учитывать при построении «конвейера», кроме доступности обучающих данных, является простота использования компонента. Нужно попытаться выбрать такие компоненты конвейера, каждый из которых легок в разработке или в обучении. Но что значит: компонент легок в обучении?


image


Ниже перечислены задачи машинного обучения в порядке возрастания сложности:


  1. Классификация переэкспонированных изображений (как в примере выше)
  2. Определение, сделано изображение в помещении или на улице
  3. Определение, содержит изображение кошку или нет
  4. Определение, содержит ли изображение кошку с черно-белым мехом
  5. Определение, содержит ли изображение сиамскую кошку (особая порода кошек).

Каждая из них представляет собой задачу бинарной классификации: на вход подается изображение, алгоритм выдает либо 0, либо 1. При этом, чем выше задача в списке, тем «легче» нейронной сети научиться ее решать. Более простые задачи требуют меньше обучающих примеров.


В машинном обучении на настоящий момент нет хорошего формального определения трудности задачи


Замечание автора: В Теории информации существует понятие «сложность Колмогорова», в соответствие с которым, сложность функции — это длина самой короткой компьютерной программы, которую нужно реализовать, чтобы воспроизвести значения функции (рассчитать функцию на множестве ее определения). Эта теоретическая концепция нашла некоторое практическое применение в области ИИ. Смотрите также.


С ростом применения глубокого обучения и многослойных нейронных сетей иногда подразумевается, что задача «простая», если ее можно выполнить с меньшим количеством вычислений (что соответствует нейронной сети с небольшим количеством слоев(shallow neural network)), и «сложная», если для нее требуется большое количество вычислительных операций (задачи, требующие многослойных (глубоких) нейронных сетей). Но это неформальные определения.


Если у вас есть возможность разложить сложную задачу на простые подзадачи, то решая их с высокой точностью, вы даете алгоритму предварительные знания, которые позволяют ему научиться эффективно решать комплексную задачу.


image


Предположим, нужен детектор сиамских кошек. Можно его попытаться его реализовать посредством алгоритма со сквозной архитектурой:


image


Или альтернативный подход, использующий конвейер из двух компонент:
image


Первый компонент (детектор кошек) обнаруживает всех кошек на изображении.


image


Затем второй компонент пропускает обрезанные изображения каждой из обнаруженных кошек (по одной за раз) через классификатор видов кошек, на выходе получаем 1, если какая-либо из обнаруженных кошек является сиамской.


image


Каждый из двух компонентов конвейера (детектор кошек и классификатор пород кошек) гораздо легче обучить и требует намного меньше данных, чем алгоритм сквозного обучения, сопоставляющий входному изображению 0 или 1.


Замечание автора: Если вы на практике знакомы с алгоритмами обнаружения объектов на изображениях, то вы знаете, что данные для их обучения состоят из фрагментов, нарезанных ограничительными рамками. Обсуждение того, как обучаются такие алгоритмы, выходит за рамки этой главы. Если вам интересна эта тема, посмотрите специализацию Deep Learning на Coursera.


В качестве последнего примера давайте вернемся к конвейеру для автономного вождения.


image


Алгоритм этого конвейера состоит из трех ключевых шагов: (1) обнаружение других автомобилей, (2) обнаружение пешеходов и (3) планирование траектории. Каждый из них существенно более простая «функция», обучающийся на меньшем количестве данных, чем подход с использованием сквозного обучения.


Таким образом, при принятии решения о том, из чего собирать конвейер, постарайтесь выбирать такие компоненты, которые представляют собой относительно «простые» функции, обучаемые на небольших выборках данных.


52. Сквозное обучение позволяет получать сложные объекты на выходе алгоритма


При классификации изображений, алгоритм на вход получает изображение x и выдает целое число, указывающее категорию объекта. Может ли алгоритм вместо указания категории, описать изображение при помощи естественного языка (вывести фрагмент текста, в котором рассказывается, что изображено)?


x = image


y = «Желтый автобус едет по дороге, на заднем плане зеленая трава и деревья»


Традиционные приложения обучения с учителем обучаются с использованием функции h: Х -> Y, где y на выходе обычно является целым или действительным числом.


Например:


Проблема Вход(X) Выход(Y)
Определение спама Текст электронного письма Спам/Не спам (0/1)
Распознавание изображений Изображение Класс изображения
Предсказание цен домов Признаки, описывающие дом Цена в долларах
Рекомендация продуктов Продукт и признаки, описывающие пользователя Вероятность покупки

Наиболее захватывающим в разработке систем сквозного глубокого обучения является то, что мы имеем возможность, обучая систему, напрямую получать на выходе y, которые несоизмеримо сложнее, чем число. В примере с описанием изображения можно использовать нейронную сеть, получающую на вход изображение (x) и генерирующую его описание на естественном языке (y).


Проблема X Y Ссылки на примеры
Описание изображений Изображение Текст Mao et al., 2014
Машинный перевод Английский текст Французский текст Suskever et al., 2014
Ответы на вопросы (Текст, Вопрос) пара Текст ответа Bordes et al., 2015
Распознавание голоса Аудио Транскрипция Hannun et al., 2015
(TTS) Текстовые признаки Аудио van der Oord et al., 2016

Нарастающей тенденцией глубокого обучения является обучение сквозных систем, на выходе которых, при наличие подходящих размеченных данных (размеченный вход и выход для системы), можно получать изображения, фрагменты текстов, аудио-клипы и другие сложные объекты, а не просто числа.


продолжение