Генерация объектов — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(fix styling)
м (rollbackEdits.php mass rollback)
 
(не показана 71 промежуточная версия 11 участников)
Строка 1: Строка 1:
{{В разработке}}
+
'''Задача генерации объектов''' (англ. ''object generation problem'') {{---}} задача, связанная с машинным обучением, заключающаяся в создании новых правдоподобных объектов на основании заданной выборки.
 +
Полученные объекты могут быть использованы как для прикладных целей (в таком случае, это чаще всего изображения), так и для генерации объектов для тренировочной выборки, когда размечать настоящие данные — долго и дорого, или их нужно анонимизировать. В зависимости от того, для какой из этих целей используется генерация объектов, постановка задачи и методы её решения несколько отличаются.
  
[[Файл:GAN_DIAGRAM.png|420px|thumb|right|Диаграмма ''generative adversarial network''.]]
+
== Генерация объектов для прикладных целей ==
 +
 
 +
=== Применение ===
  
'''Задача генерации объектов''' (англ. ''object generation problem'') {{---}} Среди задач, связанных с машинным обучением, выделяют задачу генерации объектов. Эта задача заключается в создании новых правдоподобных объектов на основании заданной выборки. Полученные объекты могут как быть использованы независимо для прикладных целей (в таком случае, это чаще всего изображения), так и для устранения несбалансированности классов (оверсэмплинг) и дальнейшей обработки данных (обычно классификации). В зависимости от того, для какой из этих целей используется генерация объектов, постановка задачи и методы её решения несколько отличаются..
+
==== Изображения ====
  
== Генерация объектов для прикладных целей ==
+
При генерации объектов основная задача обычно состоит в том, чтобы научиться создавать изображения, которые человек не может отличить от изображений, полученных иным путём (рис. 1). Они могут использоваться для более дешёвого создания модельных снимков, обложек или пейзажей. Одним из ярких примеров такого применения является создание фотографий вымышленных людей для рекламы в расчёте на то, что люди будут больше ассоциировать себя с образом, не представляющим кого-либо конкретного, но сочетающим в себе те черты, которые есть у них самих.
 +
 
 +
Генерация объектов может улучшать астрономические изображения и использоваться при моделировании дорогостоящих для изучения физических процессов. Так, в 2019 году при помощи [[Generative Adversarial Nets (GAN) | генеративных состязательных сетей (GAN)]] были успешно смоделированы <ref>[https://phys.org/news/2019-05-cosmogan-neural-network-dark.html Обучение нейронной сети для изучения темной материи]</ref> распределения темной материи в определенном направлении в пространстве и составлены предсказания гравитационного линзирования.
 +
 
 +
В медицине активно используется [[Машинное обучение в медицине#Генерация результатов исследований | генерация результатов исследований]]. Из-за запрета на использование анализов и осмотров без согласия пациента часто довольно тяжело получить большое количество данных, поэтому сейчас для формирования крупных датасетов стали применять GAN. Состязательные сети также могут использоваться для обнаружения глаукомных изображений, помогая ранней диагностике, которая необходима для предотвращения частичной или полной потери зрения.<ref>[https://www.sciencedirect.com/science/article/abs/pii/S1568494620301058?via%3Dihub Обнаружение глаукомных изображений]</ref>
 +
[[File:propal_chelovek.jpg|thumb|Рисунок 1. Пример сгенерированного изображения]]
 +
 
 +
==== Музыка и звуки ====
 +
 
 +
Аудио является еще одним возможным приложением для GAN, однако используется гораздо реже. Примером может являться архитектура [https://arxiv.org/abs/1802.04208 WaveGan], которая без меток учится воспроизводить понятные слова при обучении на наборе речевых данных с небольшим словарным запасом, а также может синтезировать звук из других областей, таких как барабаны, вокализации птиц и фортепиано.
 +
 
 +
На сегодняшний день многие модели для генерации музыки используют [[Долгая краткосрочная память | долгую краткосрочную  память (LSTM)]]. Например, еще в 2002 году  при помощи LSTM-сети построили<ref>[http://www.iro.umontreal.ca/~eckdoug/papers/2002_ieee.pdf Finding temporal structure in music: Blues improvisation with lstm recurrent networks]</ref> модель, генерирующую не только мелодию, но и аккомпанемент к ней в формате выбора аккорда из зафиксированного перечня, и, отчасти, впервые добились благозвучного результата.
 +
 
 +
В Google сейчас активно используется модель [https://en.wikipedia.org/wiki/WaveNet WaveNet], которая основана на [[Сверточные нейронные сети| сверточных сетях]]. WaveNet способна генерировать речь, похожую на голос любого человека, и другие звуки, включая музыку (например, композиции на пианино) <ref>[https://habr.com/ru/company/Voximplant/blog/309648/ Google WaveNet]</ref>.
 +
 
 +
==== Текст ====
 +
 
 +
Генерировать можно документы и тексты. Генераторы текстов широко используются при разработке и поисковой оптимизации сайтов: для генерации названий, описаний и содержимого. Существуют крупные англоязычные сайты, на которых весь контент пишут не журналисты, а боты — статьи автоматически [https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D1%80%D0%B0%D0%B9%D1%82%D0%B8%D0%BD%D0%B3 рерайтятся] из других источников. Русский язык, в отличие от английского, имеет сложную морфологию, поэтому появление подобных ботов-рерайтеров в рунете сильно осложнено.
 +
 
 +
==== Анимация и игры ====
 +
[[Файл:Flintstones.png|500px|thumb|Рисунок 2. Пример сгенерированных изображений по подписям.]]
 +
Еще генерация объектов может использоваться при воссоздании текстур старых игр в лучшем расширении (пример игры, для которой был использован такой метод – [https://ru.wikipedia.org/wiki/Resident_Evil Resident Evil]). Такой подход также помогает создавать персонажей в стилистике мультфильма, нарисовав руками только пару из них, анимировать уже нарисованных героев, а также полезен для подготовки кадров фильмов или мультипликации<ref>[https://arxiv.org/abs/1609.02612 Generating Videos with Scene Dynamics]</ref>. В 2018 году исследователи из Университета Иллинойса и Института искусственного интеллекта Аллена разработали модель под названием CRAFT (Composition, Retrieval and Fusion Network)<ref>[https://arxiv.org/abs/1804.03608 модель CRAFT]</ref>, которая принимает текстовые описания (или подписи) от пользователя и генерирует сцены из  мультсериала «Флинтстоуны» (рис. 2).
 +
 
 +
==== Другое ====
 +
При решении какой-либо задачи часто бывает удобно генерировать специфические объекты для ее решения. Например, одна из задач машинного обучения в медицине {{---}} [[Машинное обучение в медицине#Генерация молекулярных структур|генерация новых молекул]], которые потенциально могут быть лекарствами. Для решения этой проблемы используют генеративные состязательные сети.
 +
 
 +
Еще одним примером может являться генерация наборов данных с заданными свойствами для задачи классификации<ref>[http://fppo.ifmo.ru/dissertation/?number=233319 Забашта Алексей Сергеевич, Генерация наборов данных для задачи классификации с заданными свойствами для повышения качества систем мета-обучения]</ref>. Это, в частности, может использоваться для генерации данных для систем автоматической проверки программ или в алгоритмах предсказания стоимости изготовления детали по её чертежу и текстовым характеристикам.
  
=== Применение ===
+
Можно генерировать [https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 юнит-тесты], чтобы быстрее находить ошибки при разработке программного обеспечения<ref>[https://research.infosupport.com/wp-content/uploads/Unit-test-generation-using-machine-Master-Thesis-Laurence-Saes.pdf Unit test generation using machine learning]</ref>.
  
Основная цель при генерации объектов для прикладных целей обычно состоит в том, чтобы научиться создавать изображения, которые человек не может отличить от изображений, полученных иных путём. Такие изображения могут использоваться, среди прочего, для более дешёвого создания модельных снимков, обложек или пейзажей. Одним из ярких примеров такого использования является создание фотографий вымышленных людей для рекламы в расчёте на то, что люди будут больше ассоциировать себя с образом, не представляющим кого-либо конкретного, но сочетающим в себе те черты, которые есть у них самих. Также генерация объектов может использоваться при воссоздании текстур старых игр в лучшем расширении (пример игры, для которой был использован такой метод – [https://ru.wikipedia.org/wiki/Resident_Evil Resident Evil] ), улучшении астрономических изображений и моделировании дорогостоящих для изучения физических процессов.
+
Генерация объектов активно развивается в наши дни и имеет множество применений, в том числе под специфические задачи в различных сферах деятельности.
  
 
=== Используемые модели ===
 
=== Используемые модели ===
  
Для достижения данной цели обычно используются [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%80%D0%BE%D0%B6%D0%B4%D0%B0%D1%8E%D1%89%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8 порождающие модели]. В таком варианте в качестве задачи ставится восстановление распределения p(x,y), то есть максимизация функции '''правдоподобия''': для набора данных <tex>X = \{x_i\}</tex> максимизировать <tex>\displaystyle \prod_i p_{model}(x_i;\theta)</tex> по параметрам модели <tex>\theta</tex>, т.е. найти <math>\theta^* = \underset{\theta}{\operatorname{argmax}} \displaystyle \prod_i p_{model}(x_i;\theta)</math>. Эта задача относится к классу задач обучения без учителя или с частичным привлечением учителя. При её решении либо работают с явными распределениями, сводя распределение <tex>p(x;y)</tex> к произведению распределений определённой структуры, либо используют неявные модели, которые не восстанавливают всю функцию плотности, а только моделируют ту часть этой функцию, которая нужна непосредственно.
+
Для достижения данной цели обычно используются [[Порождающие модели | порождающие модели]]. В таком варианте в качестве задачи ставится восстановление совместного распределения <tex>p(x,y)</tex>, где <tex>y</tex> — это один бит, отвечающий за отдельный признак (то есть тот класс, к которому должна принадлежать созданный объект; например, фотография человека), а <tex>x</tex> — это весь объект (фотография).
Стоит отметить, что простые порождающие модели, такие как наивный байесовский классификатор, не показывают достаточное качество результата, чтобы на их основе можно было сгенерировать полноценные мультимедиа объекты. Из класса порождающих моделей при генерации именно изображений особенно хорошо показали себя модели [http://neerc.ifmo.ru/wiki/index.php?title=Generative_Adversarial_Nets_(GAN) состязательных сетей], [http://neerc.ifmo.ru/wiki/index.php?title=PixelRNN_%D0%B8_PixelCNN PixelRNN и PixelCNN], а также DRAW (рисуют изображение с помощью сочетания [http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8 реккурентных НС] и [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F механизма внимания]). Также стоит отметить модель [https://en.wikipedia.org/wiki/WaveNet WaveNet], используемую для создания звуковых записей. Эта модель создана в 2016 году, а к 2018 году, после нескольких оптимизаций вычислительной сложности, она нашла применение в Google при создании образцов речи на различных языках.
+
Чаще всего порождаемый объект <tex>X</tex> представляет собой набор элементов <tex>X = \{x_i\}</tex>, что позволяет порождать объект по частям. Для изображения, например, такими частями будут являться пиксели. Таким образом, при порождении следующих частей объекта мы можем опираться на уже созданные, и тогда перед нами встаёт задача максимизация функции правдоподобия: для набора данных <tex>X = \{x_i\}</tex> максимизировать <tex>\displaystyle \prod_i p_{\operatorname{model}}(x_i,\theta)</tex> по параметрам модели <tex>\theta</tex>, т.е. найти <math>\theta^* = \underset{\theta}{\operatorname{argmax}} \displaystyle \prod_i p_{\operatorname{model}}(x_i,\theta)</math>. Эта задача относится к классу задач обучения без учителя или с частичным привлечением учителя. При её решении либо работают с явными распределениями, сводя распределение <tex>p(x,y)</tex> к произведению распределений определённой структуры, либо используют неявные модели, которые не восстанавливают всю функцию плотности, а только моделируют ту часть этой функции, которая нужна непосредственно. Стоит отметить, что простые порождающие модели, такие как наивный байесовский классификатор, не показывают достаточное качество результата, чтобы на их основе можно было сгенерировать полноценные мультимедиа объекты. Из класса порождающих моделей при генерации изображений особенно хорошо показали себя модели [[Generative Adversarial Nets (GAN) | состязательных сетей]], [[PixelRNN и PixelCNN | PixelRNN и PixelCNN]], а также DRAW (рисуют изображение с помощью сочетания [[Рекуррентные нейронные сети | рекуррентных НС]] и [[Механизм внимания | механизма внимания]]).  
 
+
<!---
=== Оверсэмплинг ===
+
== Оверсэмплинг ==
  
Основной причиной применения расширения выборки за счёт создания объектов – дисбаланс классов в уже имеющейся выборке. Этот дисбаланс может быть двух типов:
+
Основная причина применения расширения выборки за счёт создания объектов – ''дисбаланс'' классов в уже имеющейся выборке. Этот дисбаланс может быть двух типов:
 
<ul>
 
<ul>
     <li> Недостаточное представление класса в одной или нескольких входных переменных. Это явление широко распространено в реальных данных и возникает естественным образом, например, при социологических исследованиях. Так, при случайном нестратифицированном опросе программистов-женщин будет опрошено в несколько раз меньше, чем мужчин, так как мужчины больше представлены в данной профессии, что может оказаться важным при установлении связи с такой переменной, как стаж работы.
+
     <li> Недостаточное представление класса в одной или нескольких ''входных переменных''. Это явление широко распространено в реальных данных и возникает естественным образом, например, при социологических исследованиях. Так, при случайном нестратифицированном опросе программистов-женщин будет опрошено в несколько раз меньше, чем мужчин, так как мужчины больше представлены в данной профессии, что может оказаться важным при установлении связи с такой переменной, как стаж работы.
 
     </li>
 
     </li>
     <li> Недостаточное представление класса в выходной переменной. Это явление так же широко также распространено в реальных данных. Особенно часто этот эффект проявляется в медицине, где процент заболевших обычно много меньше процента здоровых обследуемых. Адекватность оценки предсказания в таких случаях помогает сохранять использование точности, полноты и F-меры.
+
     <li> Недостаточное представление класса в ''выходной переменной''. Это явление так же широко также распространено в реальных данных. Особенно часто этот эффект проявляется в медицине, где процент заболевших обычно много меньше процента здоровых обследуемых. Адекватность оценки предсказания в таких случаях помогает сохранять использование точности, полноты и F-меры.
 
     </li>
 
     </li>
 
</ul>
 
</ul>
  
Дисбаланс данных является проблемой потому, что, хотя некоторые аналитические методы (линейная и логистическая регрессия) устойчивы к дисбалансу данных, многие другие (например, нейронные сети) уязвимы к нему и снижают качество предсказания. В связи с этим возникает задача балансировки данных, которая может быть решена двумя способами: оверсэмплинг (генерация новых объектов выборки миноритарного или менее представленного класса) и андерсэмплинг (удаление из выборки объектов мажоритарного или более представленного класса). В рамках данной статьи будет рассмотрен только оверсэмплинг, так как именно он связан с генерацией объектов.
+
Дисбаланс данных является проблемой потому, что, хотя некоторые аналитические методы (''линейная и логистическая регрессия'') устойчивы к дисбалансу данных, многие другие (например, ''нейронные сети'') уязвимы к нему и снижают качество предсказания. В связи с этим возникает задача балансировки данных, которая может быть решена двумя способами: '''оверсэмплинг''' (генерация новых объектов выборки ''миноритарного'' или менее представленного класса) и '''андерсэмплинг''' (удаление из выборки объектов ''мажоритарного'' или более представленного класса). В рамках данной статьи будет рассмотрен только оверсэмплинг, так как именно он связан с генерацией объектов.
 +
 
 +
 
 +
=== Используемые методы ===
 +
 
  
  
== Используемые методы ==
 
  
 +
'''Случайный оверсэмплинг''' – создание копий нескольких объектов миноритарного класса. Этот метод включает несколько вариаций, так как могут различаться количество копий <tex>(2, 5, 10)</tex> и более для каждого объекта и доля объектов миноритарного класса, для которой создаются копии. Этот метод – один из самых ранних, для него доказана '''выбросоустойчивость''' (''robustness''). Однако его эффективность часто недостаточна.
  
=== Случайный оверсэмплинг ===
 
  
Случайный оверсэмплинг – создание копий нескольких объектов миноритарного класса. Этот метод включает несколько вариаций, так как могут различаться количество копий <tex>(2, 5, 10)</tex> и более для каждого объекта и доля объектов миноритарного класса, для которой создаются копии. Этот метод – один из самых ранних, для него доказана выбросоустойчивость (''robustness''). Однако его эффективность часто недостаточна.
 
  
  
=== SMOTE ===
 
  
 +
'''SMOTE''' (''Synthetic Minority Oversampling Technique'') – генерация искусственных примеров, не совпадающих с имеющимися в выборке. Этот алгоритм во многом основан на [[Метрический классификатор и метод ближайших соседей | методе ближайшего соседа]]. Для создания новой записи находят разность <tex>d=X_b–X_a</tex>, где <tex>X_a,X_b</tex> – векторы признаков «соседних» примеров <tex>a</tex> и <tex>b</tex> из миноритарного класса (их находят так же, как в методе ''kNN''). В данном случае необходимо и достаточно для примера <tex>b</tex> получить набор из <tex>k</tex> соседей, из которого в дальнейшем будет выбрана запись <tex>b</tex>. Далее из <tex>d</tex> путем умножения каждого его элемента на случайное число в интервале <tex>(0, 1)</tex> получают <tex>d</tex>. Вектор признаков нового примера вычисляется путем сложения <tex>X_a</tex> и <tex>d</tex>. Алгоритм SMOTE позволяет задавать количество записей, которое необходимо искусственно сгенерировать. Степень сходства примеров <tex>a</tex> и <tex>b</tex> можно регулировать путем изменения значения <tex>k</tex> (числа ближайших соседей). Пример работы алгоритма продемонстрирован на рис. 1. <br />
 +
[[File:SMOTE_GEN.gif|none|frame|Рис. 1. Пример работы алгоритма SMOTE]]
  
SMOTE (''Synthetic Minority Oversampling Technique'') – генерация искусственных примеров, не совпадающих с имеющимися в выборке. Этот алгоритм во многом основан на [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80_%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%B1%D0%BB%D0%B8%D0%B6%D0%B0%D0%B9%D1%88%D0%B8%D1%85_%D1%81%D0%BE%D1%81%D0%B5%D0%B4%D0%B5%D0%B9 методе ближайшего соседа]. Для создания новой записи находят разность <tex>d=Xb–Xa</tex>, где <tex>Xa,Xb</tex> – векторы признаков «соседних» примеров a и b из миноритарного класса (их находят так же, как в методе ''kNN''). В данном случае необходимо и достаточно для примера b получить набор из k соседей, из которого в дальнейшем будет выбрана запись b. Далее из d путем умножения каждого его элемента на случайное число в интервале <tex>(0, 1)</tex> получают <tex>d</tex>. Вектор признаков нового примера вычисляется путем сложения <tex>Xa</tex> и <tex>d</tex>. Алгоритм SMOTE позволяет задавать количество записей, которое необходимо искусственно сгенерировать. Степень сходства примеров a и b можно регулировать путем изменения значения ''k'' (числа ближайших соседей). <br />
+
Данный подход имеет недостаток в том, что «вслепую» увеличивает плотность примерами в области слабо представленного класса. Пример такого увеличения изображён на рис. 2.<br />
[[File:SMOTE_GEN.gif|frameless|SMOTE]]
 
  
Данный подход имеет недостаток в том, что «вслепую» увеличивает плотность примерами в области слабо представленного класса:<br />
+
[[File:SMOTE_GEN_DISS.gif|none|frame|Рис. 2. Пример неудачного срабатывания SMOTE]]
  
[[File:SMOTE_GEN_DISS.gif|frameless|Недостаток подхода SMOTE]]
 
  
=== ASMO ===
 
  
  
ASMO (''Adaptive Synthetic Minority Oversampling'') – алгоритм адаптивного искусственного увеличения числа примеров миноритарного класса, модифицирующий SMOTE. В случае, если миноритарные примеры равномерно распределены среди мажоритарных и имеют низкую плотность, алгоритм SMOTE только сильнее перемешает классы. В качестве решения данной проблемы был предложен алгоритм ASMO. Он применяется, если для каждого i-ого примера миноритарного класса из k ближайших соседей <tex>g (g≤k)</tex> принадлежит к мажоритарному. В этом случае на основании примеров миноритарного класса выделяется несколько кластеров и для примеров каждого кластера применяют SMOTE.
+
'''ASMO''' (''Adaptive Synthetic Minority Oversampling'') – алгоритм адаптивного искусственного увеличения числа примеров миноритарного класса, модифицирующий SMOTE. В случае, если миноритарные примеры равномерно распределены среди мажоритарных и имеют низкую плотность, алгоритм SMOTE только сильнее перемешает классы. В качестве решения данной проблемы был предложен алгоритм ASMO. Он применяется, если для каждого <tex>i</tex>-ого примера миноритарного класса из <tex>k</tex> ближайших соседей <tex>g (g≤k)</tex> принадлежит к мажоритарному. В этом случае на основании примеров миноритарного класса выделяется несколько кластеров и для примеров каждого кластера применяют SMOTE.
  
=== ADASYN ===
 
  
ADASYN (''Adaptive synthetic sampling'') – семейство методов, являющихся попыткой «адаптации» SMOTE, то есть создания объектов, с которыми на выборке будет показан лучший результат классификации. Такие методы могут: создавать больше данных на миноритарных классах, на которых обучение сложнее; искажать пространство объектов в сторону точек, у которых соседи неоднородны; просто добавлять случайное искажение к генерируемым точкам для создания естественного шума.
 
  
 +
'''ADASYN''' (''Adaptive synthetic sampling'') – семейство методов, являющихся попыткой «адаптации» SMOTE, то есть создания объектов, с которыми на выборке будет показан лучший результат классификации. Такие методы могут: создавать больше данных на миноритарных классах, на которых обучение сложнее; изменять пространство объектов в сторону точек, у которых соседи неоднородны; просто добавлять случайное изменение к генерируемым точкам для создания естественного шума.
 +
-->
  
 +
==См. также==
 +
*[[Generative Adversarial Nets (GAN)]]
 +
*[[Генерация изображения по тексту]]
 +
*[[Порождающие модели]]
 +
 +
== Примечания ==
 +
<references/>
 
== Источники ==
 
== Источники ==
  
Строка 62: Строка 98:
 
     <li>[https://en.wikipedia.org/wiki/Generative_adversarial_network Генеративно-состязательная сеть]</li>
 
     <li>[https://en.wikipedia.org/wiki/Generative_adversarial_network Генеративно-состязательная сеть]</li>
 
     <li>[https://en.wikipedia.org/wiki/WaveNet WaveNet]</li>
 
     <li>[https://en.wikipedia.org/wiki/WaveNet WaveNet]</li>
 +
    <li>[https://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0 Генератор текста] </li>
 +
<!---
 
     <li>[https://en.wikipedia.org/wiki/Oversampling_and_undersampling_in_data_analysis Оверсемплинг]</li>
 
     <li>[https://en.wikipedia.org/wiki/Oversampling_and_undersampling_in_data_analysis Оверсемплинг]</li>
    <li>[https://towardsdatascience.com/dealing-with-imbalanced-classes-in-machine-learning-d43d6fa19d2 Методы работы с небалансными классами]</li>
 
 
     <li>[https://www.kaggle.com/residentmario/oversampling-with-smote-and-adasyn Оверсемплинг с SMOTE]</li>
 
     <li>[https://www.kaggle.com/residentmario/oversampling-with-smote-and-adasyn Оверсемплинг с SMOTE]</li>
 
     <li>[https://medium.com/coinmonks/smote-and-adasyn-handling-imbalanced-data-set-34f5223e167  Методы работы с небалансными данными в SMOTE и ADASYN]</li>
 
     <li>[https://medium.com/coinmonks/smote-and-adasyn-handling-imbalanced-data-set-34f5223e167  Методы работы с небалансными данными в SMOTE и ADASYN]</li>
 +
-->
 +
    <li>[https://towardsdatascience.com/dealing-with-imbalanced-classes-in-machine-learning-d43d6fa19d2 Методы работы с небалансными классами]</li>
 
     <li>[https://basegroup.ru/community/articles/imbalance-datasets Несбалансированные датасеты]</li>
 
     <li>[https://basegroup.ru/community/articles/imbalance-datasets Несбалансированные датасеты]</li>
 +
 
</ol>
 
</ol>
 +
 +
[[Категория: Машинное обучение]]
 +
[[Категория: Порождающие модели]]
 +
[[Категория: Генерация объектов]]

Текущая версия на 19:22, 4 сентября 2022

Задача генерации объектов (англ. object generation problem) — задача, связанная с машинным обучением, заключающаяся в создании новых правдоподобных объектов на основании заданной выборки. Полученные объекты могут быть использованы как для прикладных целей (в таком случае, это чаще всего изображения), так и для генерации объектов для тренировочной выборки, когда размечать настоящие данные — долго и дорого, или их нужно анонимизировать. В зависимости от того, для какой из этих целей используется генерация объектов, постановка задачи и методы её решения несколько отличаются.

Генерация объектов для прикладных целей

Применение

Изображения

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

Генерация объектов может улучшать астрономические изображения и использоваться при моделировании дорогостоящих для изучения физических процессов. Так, в 2019 году при помощи генеративных состязательных сетей (GAN) были успешно смоделированы [1] распределения темной материи в определенном направлении в пространстве и составлены предсказания гравитационного линзирования.

В медицине активно используется генерация результатов исследований. Из-за запрета на использование анализов и осмотров без согласия пациента часто довольно тяжело получить большое количество данных, поэтому сейчас для формирования крупных датасетов стали применять GAN. Состязательные сети также могут использоваться для обнаружения глаукомных изображений, помогая ранней диагностике, которая необходима для предотвращения частичной или полной потери зрения.[2]

Рисунок 1. Пример сгенерированного изображения

Музыка и звуки

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

На сегодняшний день многие модели для генерации музыки используют долгую краткосрочную память (LSTM). Например, еще в 2002 году при помощи LSTM-сети построили[3] модель, генерирующую не только мелодию, но и аккомпанемент к ней в формате выбора аккорда из зафиксированного перечня, и, отчасти, впервые добились благозвучного результата.

В Google сейчас активно используется модель WaveNet, которая основана на сверточных сетях. WaveNet способна генерировать речь, похожую на голос любого человека, и другие звуки, включая музыку (например, композиции на пианино) [4].

Текст

Генерировать можно документы и тексты. Генераторы текстов широко используются при разработке и поисковой оптимизации сайтов: для генерации названий, описаний и содержимого. Существуют крупные англоязычные сайты, на которых весь контент пишут не журналисты, а боты — статьи автоматически рерайтятся из других источников. Русский язык, в отличие от английского, имеет сложную морфологию, поэтому появление подобных ботов-рерайтеров в рунете сильно осложнено.

Анимация и игры

Рисунок 2. Пример сгенерированных изображений по подписям.

Еще генерация объектов может использоваться при воссоздании текстур старых игр в лучшем расширении (пример игры, для которой был использован такой метод – Resident Evil). Такой подход также помогает создавать персонажей в стилистике мультфильма, нарисовав руками только пару из них, анимировать уже нарисованных героев, а также полезен для подготовки кадров фильмов или мультипликации[5]. В 2018 году исследователи из Университета Иллинойса и Института искусственного интеллекта Аллена разработали модель под названием CRAFT (Composition, Retrieval and Fusion Network)[6], которая принимает текстовые описания (или подписи) от пользователя и генерирует сцены из мультсериала «Флинтстоуны» (рис. 2).

Другое

При решении какой-либо задачи часто бывает удобно генерировать специфические объекты для ее решения. Например, одна из задач машинного обучения в медицине — генерация новых молекул, которые потенциально могут быть лекарствами. Для решения этой проблемы используют генеративные состязательные сети.

Еще одним примером может являться генерация наборов данных с заданными свойствами для задачи классификации[7]. Это, в частности, может использоваться для генерации данных для систем автоматической проверки программ или в алгоритмах предсказания стоимости изготовления детали по её чертежу и текстовым характеристикам.

Можно генерировать юнит-тесты, чтобы быстрее находить ошибки при разработке программного обеспечения[8].

Генерация объектов активно развивается в наши дни и имеет множество применений, в том числе под специфические задачи в различных сферах деятельности.

Используемые модели

Для достижения данной цели обычно используются порождающие модели. В таком варианте в качестве задачи ставится восстановление совместного распределения [math]p(x,y)[/math], где [math]y[/math] — это один бит, отвечающий за отдельный признак (то есть тот класс, к которому должна принадлежать созданный объект; например, фотография человека), а [math]x[/math] — это весь объект (фотография). Чаще всего порождаемый объект [math]X[/math] представляет собой набор элементов [math]X = \{x_i\}[/math], что позволяет порождать объект по частям. Для изображения, например, такими частями будут являться пиксели. Таким образом, при порождении следующих частей объекта мы можем опираться на уже созданные, и тогда перед нами встаёт задача максимизация функции правдоподобия: для набора данных [math]X = \{x_i\}[/math] максимизировать [math]\displaystyle \prod_i p_{\operatorname{model}}(x_i,\theta)[/math] по параметрам модели [math]\theta[/math], т.е. найти [math]\theta^* = \underset{\theta}{\operatorname{argmax}} \displaystyle \prod_i p_{\operatorname{model}}(x_i,\theta)[/math]. Эта задача относится к классу задач обучения без учителя или с частичным привлечением учителя. При её решении либо работают с явными распределениями, сводя распределение [math]p(x,y)[/math] к произведению распределений определённой структуры, либо используют неявные модели, которые не восстанавливают всю функцию плотности, а только моделируют ту часть этой функции, которая нужна непосредственно. Стоит отметить, что простые порождающие модели, такие как наивный байесовский классификатор, не показывают достаточное качество результата, чтобы на их основе можно было сгенерировать полноценные мультимедиа объекты. Из класса порождающих моделей при генерации изображений особенно хорошо показали себя модели состязательных сетей, PixelRNN и PixelCNN, а также DRAW (рисуют изображение с помощью сочетания рекуррентных НС и механизма внимания).

См. также

Примечания

Источники

  1. Генеративно-состязательная сеть
  2. WaveNet
  3. Генератор текста
  4. Методы работы с небалансными классами
  5. Несбалансированные датасеты