Само различие тоже бывает нескольких видов, но эти подробности я уже пропущу, чтобы пост не превратился в нудную тягомотину.
Решение проблемы адаптации зависит от глубины нейросети: для более мелких (shallow neural nets) используются свои методы, для глубоких – свои (deep neural nets). Я позволю себе не останавливаться на мелких нейросетях и расскажу немного о глубоких, поскольку мой интерес лежит скорее в этой области (за мелкими нейросетями обращайтесь к статье, ссылка на которую есть в начале поста).
Итак, работая с глубокими нейросетями, проблему адаптации к области можно решать тремя способами: основываясь на различиях (discrepancy-based), реконструкции (reconstruction-based) и соперничестве (adversarial-based).
Названия способов, в общем, говорящие. В первом случае (метод, основанный на различиях) мы концентрируемся на том, что отличает исходную область от целевой (в терминах распределения данных). Нейросеть трансформирует исходное распределение таким образом, чтобы оно было как можно более похоже на целевое.
Метод, основанный на реконструкции, предполагает изменение данных и исходной, и целевой области таким образом, чтобы они были как можно более похожи. Грубо говоря, здесь создается некоторое третье распределение, в котором модель реконструирует данные из исходного и целевого распределений, сохраняя наиболее важную информацию о каждом объекте из обеих областей.
Метод, основанный на соперничестве, создан на основе обучения, основанного на соперничестве, про это был отдельный пост. Напомню кратко: соперничают генератор, который создает, например, изображения, и дискриминатор, который учится различать, реально изображение или создано генератором. Они обучаются параллельно, что дает впечатляющие результаты. В случае с адаптацией к области, генератор создает объекты, похожие на объекты из целевой области. Дискриминатор пытается определить, реальные ли данные перед ним или синтетические (созданные генератором).