Transfer Learning

Transfer Learning (трансферное обучение) – это подраздел машинного обучения, целью которого является применение знаний, полученные из одной задачи, к другой целевой задаче. Существует множество решений, который могут помочь Data Scientist’у применить его к своей проблеме, поэтому нет необходимости изобретать велосипед.

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

История Transfer Learning

История трансферного обучения восходит к 1993 году. В своей статье «Передача между нейронными сетями на основе различимости (англ. Discriminability-Based Transfer between Neural Networks)» Lorien Pratt открыла ящик Пандоры и представила миру потенциал трансферного обучения [1]. В июле 1997 года журнал Machine Learning опубликовал серию статей о трансферном обучении [2]. По мере развития смежные области, например многозадачное обучение (multi-task learning), также были включены в трансферное обучение. Сегодня Transfer Learning является мощным инструментом искусственного интеллекта. Andrew Ng предсказывает подъём трансферного обучения с точки зрения коммерческого успеха [3].

Увеличение коммерческого успеха у Transfer Learning (презентация Andrew Ng на NIPS 2016)
Ожидание Andrew Ng коммерческого успеха подразделов машинного обучения

Как работает Transfer Learning

Прежде всего стоит обратить внимание на 2 аспекта при использовании Transfer Learning:

  1. Наличие открытой предварительно обученной модели
  2. Переназначение модели с помощью выделения признаков (Feature extraction) или дообучения (Fine Tuning)

Предварительно обученная модель – это модель, созданная и обученная кем-то другим для решения проблемы, аналогичной нашей. На практике кто-то, имея большие вычислительные ресурсы, они конструируют большую нейронную сеть для решения конкретной проблемы, тренируют её на большом наборе данных (Big Data), например ImageNet или Wikipedia Corpus. Так, например, VGG19 имеет 143.667.240 параметров и используется для классификации изображений. Под «открытой» моделью мы подразумеваем, что она обнародована, и её можно свободно использовать.

Ресурсы с предварительно обученными моделями:

В редких случаях предварительно обученные модели хорошо работают для целевой задачи. Как правило, их необходимо поднастроить по следующим причинам:

  • Получение более высокой точности
  • Настроенная модель генерирует выходной сигнал в правильном формате

Предварительно обученные сети используются для дообучения (fine-tuning) или выделения признаков (feature extraction).

Дообучение

В архитектурах Deep Learning начальные слои изучают общую информацию, а слои на последнем уровне более специфичные признаки. Например, первые слои запониманют текстуру, цвет, общую картину, а последние слои глаза, рот, родинки и т.д. Многие модели обучены на всевозможных ситуациях, например, ImageNet содержит 1 миллион изображений с 1000 классами, поэтому нет необходимости изменять общую картину, которую видит текущая модель. Вместо этого полезнее дополнить новыми конкретными признаками, дообучив только последние слои, чтобы перепрофилировать её для собственных нужд.

Затрагивая больше слоев для дообучения, повышается риск переобучения (overfitting). Например, модель VGG19 может после полного переобучения показать непредсказуемые результаты в рамках Transfer Learning, причем не в пользу Data Scientist’а. Поэтому часто обходятся двумя-тремя последними слоями.

Выделение признаков

Для выделения признаков используются представления, полученные предыдущей моделью, для извлечения признаков из новых образцов, которые затем пропускаются через новый классификатор. В этом методе просто добавляется классификатор, который будет обучаться с нуля, поверх предварительно обученной модели для решения целевой функции.

В сверточные архитектуры нейронных сетей (CNN) обычно состоят из двух частей: сверточной и полносвязной. Для выделения признаков (feature extraction) сверточная часть остаётся неизменной. В то время как Fine Tuning захватывает несколько последних сверточных слоев.

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

Выделение признаков в Transfer Learning реализуется двумя способами:

  • Новые данные пропускаются через сверточную основу, т.е. делается предсказание модели (predict). Результат предсказаний записывается, а затем пропускается через созданный полносвязный слой
  • Имеющаяся модель дополняется полносвязными слоями. Сверточную основу замораживают, чтобы при обучении её коэффициенты не изменялись. Данный способ позволяет использовать расширение данных (Data Augmentation), поэтому можно заранее подготовить и увеличить исходный датасет. Этот способ затратнее первого

Что выбрать дообучение или выделение признаков

Оба метода могут повысить точность модели, но при условии наличия достаточного объёма данных, в противном случае сеть не «почувствует» изменений от нового набора данных и не сможет перепрофилироваться.

Выделение признаков применяется в том случае, когда решаемая задача прошлой сети схожа с целевой. А вот если есть существенные отличия, то используется дообучение, которое является более затратной с вычислительной точки зрения.

Источники
  1. http://papers.neurips.cc/paper/641-discriminability-based-transfer-between-neural-networks.pdf
  2. https://www.springer.com/journal/10994
  3. https://www.youtube.com/watch?v=wjqaz6m42wU