<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Evaleria</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Evaleria"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Evaleria"/>
		<updated>2026-05-19T18:00:37Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8&amp;diff=80634</id>
		<title>Интерпретируемые модели</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8&amp;diff=80634"/>
				<updated>2021-02-09T15:06:47Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Важность признаков */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Интерпретируемая модель''' {{---}} модель, обладающая свойством '''интерпретируемости'''.&lt;br /&gt;
&lt;br /&gt;
'''Интерпретируемость''' {{---}} это свойство модели, которое показывает, что структуру данной модели может объяснить человек.&lt;br /&gt;
При этом структура модели не противоречит данным, на которых данная модель построена, а также она сохраняет некоторые свойства предоставленных данных.&lt;br /&gt;
При интерпретации модели могут быть объяснены принципы и закономерности, которые использует сама модель для предсказания [[Общие_понятия#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B0_.D0.BE.D0.B1.D1.83.D1.87.D0.B5.D0.BD.D0.B8.D1.8F|меток класса]] на конкретных данных.&lt;br /&gt;
&lt;br /&gt;
== Практическая польза ==&lt;br /&gt;
&lt;br /&gt;
Если модель машинного обучения работает хорошо, почему мы просто не доверяем модели и игнорируем факторы, из-за которых она приняла то или иное решение?&lt;br /&gt;
Проблема в том, что используя только метрику для измерения точности предсказания, возможно такое, что мы решим задачу не полностью или даже не правильно. Нас могут интересовать причины, по которым модель сделала это предсказание.&amp;lt;ref name=&amp;quot;inv&amp;quot;&amp;gt;Doshi-Velez and Kim &amp;quot;Towards A Rigorous Science of Interpretable Machine Learning&amp;quot; 2017 Page 5&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
'''Например''': модель решает, когда нужно класть ковидного больного в палату, а когда отправлять лечиться дома. По статистике люди болеющие астмой выживают чаще, чем здоровые, и логично предположить, что их можно отправлять лечится дома, но дело в том, что этих людей врачи лечат более тщательней, поэтому они и выживают чаще. Если бы мы верили модели в слепую, то люди с астмой просто бы умирали. Поэтому нам важно понять, почему модель пришла к тому или иному выводу.&lt;br /&gt;
&lt;br /&gt;
=== Когда нужна интерпретируемость ===&lt;br /&gt;
&lt;br /&gt;
* Когда целью является получение каких-либо знаний с помощью изучения построенной модели. &lt;br /&gt;
&lt;br /&gt;
* Когда алгоритм оптимизировал неполную цель. Например, когда автомобильный инженер получает предсказания о параметрах двигателя, но ему нужно построит в целом достаточно хороший и надёжный автомобиль.&lt;br /&gt;
&lt;br /&gt;
* Для безопасности сложных систем. Такие системы, в большинстве случаев, нельзя протестировать от начала до конца. Вычислительно тяжело просмотреть все возможное входные данные и сценарии развития событий.&lt;br /&gt;
&lt;br /&gt;
* Интерпретация тренировных данных, поиск выбросов в них.&lt;br /&gt;
&lt;br /&gt;
* Поиск ошибок в выводе модели.&lt;br /&gt;
&lt;br /&gt;
* Пользователь может больше доверять модели.&lt;br /&gt;
&lt;br /&gt;
=== Когда интерпретируемость не требуется ===&lt;br /&gt;
&lt;br /&gt;
* Влияние модели мало, а сама интерпретация требует большого количества ресурсов (предложение новых покупок на основе предыдущих в онлайн магазинах). &lt;br /&gt;
&lt;br /&gt;
* Проблема хорошо разработана, и специалистов обучают ещё в университетах.&lt;br /&gt;
&lt;br /&gt;
* Класс модели широко применяется: [[Линейная регрессия|линейные модели]] (стоимость квартиры: понятно, что это метраж, расстояние до метро, школы, детского сада и т.д., но когда параметров много, то уже сложно всё это держать в голове).&lt;br /&gt;
&lt;br /&gt;
* Необходимость скрыть систему (кому давать кредит, качество работы сотрудника, поисковое ранжирование).&lt;br /&gt;
&lt;br /&gt;
== Классификая моделей ==&lt;br /&gt;
* Post-Hoc (воспринимает модель как &amp;quot;черный ящик&amp;quot;, например, нейросеть) vs Intrinsic (накладывают ограничения на сложность самой модели).&lt;br /&gt;
* Специфические (работают только для конкретной архитектуры модели) vs агностические (можно применить ко всем моделям для решения конкретной задачи).&lt;br /&gt;
* Локальные (позволяют понять предсказание для конкретного объекта) vs глобальные (понимание в целом, какие признаки влияют на предсказание).&lt;br /&gt;
&lt;br /&gt;
== Примеры моделей ==&lt;br /&gt;
=== Пример интерпретируемой модели ===&lt;br /&gt;
&lt;br /&gt;
* Допустим есть модель в банке, которая помогает решить, давать ли кредит человеку или нет. Приходит в банк Вася, модель отказывает ему в кредите, вопрос почему? Интерпретируемая модель ответит, потому что у него, допустим, плохая кредитная история или маленькая зарплата, а по не интерпретируемой модели вряд ли будет что-то понятно.&lt;br /&gt;
&lt;br /&gt;
* Есть данные и задача бинарной [[Общие_понятия#.D0.A2.D0.B8.D0.BF.D1.8B_.D0.B7.D0.B0.D0.B4.D0.B0.D1.87|классификации]], но у нас огромное количество признаков, и мы построили [[Дерево решений и случайный лес| дерево решений]] для предсказания. И, например, мы заметили, что алгоритм построил нам дерево глубины 1, но при этом точность предсказания очень высока. Это значит, что у нас классы отлично разделимы, только по одному признаку. Это и есть пример хорошей интерпретируемости, смотреть на данные самому достаточно долго, а так же эксперт, работающий с данными, мог не подозревать о том, что для успешной классификации необходим только 1 признак, но проанализировав построенное дерево, все становится очевидно.&lt;br /&gt;
&lt;br /&gt;
=== Пример эффективной в предсказании, но не интерпретируемой модели ===&lt;br /&gt;
&lt;br /&gt;
* Допустим есть данные и задача бинарной классификации, и 99% объектов имеют класс 1, остальные 0. Модель a(x) = 1, имеет точность 99%, но проинтерпретировать ее нельзя для каких-то наших исследований, особенно если нас интересуют, как возникает класс 0. Такая модель не интерпретируема, так как не информативна.&lt;br /&gt;
&lt;br /&gt;
* Важным примером, являются данные, в которых присутствует [[Вариации_регрессии#.D0.9C.D0.BE.D1.82.D0.B8.D0.B2.D0.B0.D1.86.D0.B8.D1.8F|мультиколлинеарность]] признаков. В таком случае, при обучении линейной модели, мы [[Переобучение|переобучимся]]. Для того, чтобы бороться с этой проблемой можно с помощью [[Регуляризация|регуляризации]]. Но так как, теперь мы оптимизируем несколько другую функцию, то и веса для модели будут отличатся от реальной зависимости на данных, что повлечёт за собой потерю интерпретируемости.&lt;br /&gt;
&lt;br /&gt;
== Свойства интерпретируемых моделей ==&lt;br /&gt;
&lt;br /&gt;
* Предсказуемость и моделируемость: свойства, при которых человек способен предсказывать поведение и ошибки модели, а так же умение &amp;quot;симулировать&amp;quot; их. Например: сложные физические модели, где часто возможно абстрагировать простые правила для примерного предсказания результатов.&lt;br /&gt;
&lt;br /&gt;
* Разложимость и модульность: свойства, при которых человек способен декомпозировать модель на интепретируемые компоненты. Например: деревья решений или линейный модели для небольшой размерности.&lt;br /&gt;
&lt;br /&gt;
* Доверие: пользователь доволен предсказаниями модели, также модель может показать, когда она не совсем уверена в своём предсказании.&lt;br /&gt;
&lt;br /&gt;
* Информативность: из модели можно выявить вспомогательную информацию полезную для принятия какого-либо решения.&lt;br /&gt;
&lt;br /&gt;
* Cтабильность: статистические и оптимизационные свойства&lt;br /&gt;
&lt;br /&gt;
== Способы создания интерпретируемой модели ==&lt;br /&gt;
&lt;br /&gt;
=== Использовать только интерпретируемые модели ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Int2acc.jpg|thumb|400px| рис. 1. Зависимость интерпретируемости от точности.]]&lt;br /&gt;
&lt;br /&gt;
* Линейные модели.&lt;br /&gt;
&lt;br /&gt;
* Деревья решений, списки правил, наборы правил.&lt;br /&gt;
&lt;br /&gt;
* Модели основывающиеся на предыдущем опыте.&lt;br /&gt;
&lt;br /&gt;
'''Но''' не всё хорошо описывается этими моделями.&lt;br /&gt;
&lt;br /&gt;
=== Построить интерпретируемую модель поверх эмбендинга ===&lt;br /&gt;
&lt;br /&gt;
'''Пример:''' у нас есть лук. Если “лук” находится рядом с “чесноком”, то модель думает о “луке” как об овоще, если “лук” находится рядом с “пистолетом”, “рогаткой”, то модель думает о “луке” как об оружии. &lt;br /&gt;
&lt;br /&gt;
'''Но''' модель теперь интерпретируема, но сами признаки перестают быть таковым.&lt;br /&gt;
&lt;br /&gt;
=== Важность признаков ===&lt;br /&gt;
&lt;br /&gt;
Одна из возможностей проанализировать модель {{---}} оценить, насколько её решение зависит от отдельных признаков, какой признак внёс наибольший вес для нахождения решения модели.&lt;br /&gt;
&lt;br /&gt;
Отчётливо это можно понять благодаря следующему примеру. Модель определяет кто на картинке собака или волк. Допустим выборка для обучения оказалось не самой удачной, и все картинки с волками были на снегу, а с собаками на асфальте. Соответственно модель могла начать определять собаку или волка по асфальту или снегу. Благодаря данному виду интерпретации, модель нам можешь сказать, что главным признаком для принятия решения было не само животное, а её окружение.&lt;br /&gt;
&lt;br /&gt;
Данную идею реализуют с помощью значений Шепли.&lt;br /&gt;
&lt;br /&gt;
Значения Шепли (англ. Shapley values) {{---}} метод из коалиционной теории игр, который помогает определить, как наиболее честно распределить выигрыш между игроками в зависимости от их вклада в победу. Игроки объединяются в коалиции, чтобы полуучить некоторую выгоду от этого объединения. В машинном обучении в качестве игроков выступают признаки, а в качестве выигрыша {{---}} вклад в предсказание. &lt;br /&gt;
Подходит для задач классификации и регрессии.&lt;br /&gt;
&lt;br /&gt;
Из вклада коалиций рассчитывается вклад каждого признака в итоговый прогноз. Значение Шепли {{---}} среднее между маргинальными вкладами всех возможных коалиций&amp;lt;ref name=&amp;quot;Shapley Values&amp;quot;&amp;gt;Формулы смотрите здесь [https://christophm.github.io/interpretable-ml-book/shapley.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На основе значений Шепли Люндебергом и Ли предложен метод '''SHAP''' (SHapley Additive exPlanations), объясняющий индивидуальные предсказания. Доступна его реализация на Python &amp;lt;ref name=&amp;quot;SHAP&amp;quot;&amp;gt;Реализация SHAP [https://github.com/slundberg/shap]&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Важность i-го признака здесь вычисляется по такой формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{equation*} \phi_{i}(p) =\sum_{S \subseteq \{1,2..n\} / \{i\}} \frac{|S|!(n - |S| -1)!}{n!}(p(S \cup \{ i \}) - p(S)) \end{equation*}&amp;lt;/math&amp;gt;&amp;lt;ref name=&amp;quot;habr&amp;quot;&amp;gt;Павел Трошенков &amp;quot;Как интерпретировать предсказания моделей в SHAP&amp;quot; [https://habr.com/ru/post/428213]&amp;lt;/ref&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(S \cup \{ i \})&amp;lt;/math&amp;gt; {{---}} это предсказание модели с i-тым признаком,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(S)&amp;lt;/math&amp;gt; {{---}} это предсказание модели без i-того признака,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; {{---}} количество признаков,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; {{---}} произвольный набор признаков без i-того признака.&lt;br /&gt;
&lt;br /&gt;
Видно, что вычисление требует обучения модели на всевозможных подмножествах признаках, поэтому на практике применяют приближения формулы.&lt;br /&gt;
&lt;br /&gt;
=== Суррогатные модели ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lime.png|thumb|400px| рис. 2. Построение локальной суррогатной модели&amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt;Александр Дьяконов &amp;quot;Интерпретации чёрных ящиков&amp;quot; Рис.11 [https://dyakonov.org/2018/08/28/%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B0%D1%86%D0%B8%D0%B8-%D1%87%D1%91%D1%80%D0%BD%D1%8B%D1%85-%D1%8F%D1%89%D0%B8%D0%BA%D0%BE%D0%B2/]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Для интерпретации модели (далее именуемой как черный ящик) можно использовать интерпретируемую суррогатную модель, обученную на выводе черного ящика при различных входных данных. Так как суррогатная модель будет повторять поведение черного ящика, то на её основе можно интерпретировать данный черный ящик.&lt;br /&gt;
&lt;br /&gt;
Есть два типа суррогатных моделей: глобальная и локальная. &lt;br /&gt;
* Глобальная суррогатная  модель обучена на всем выводе черного ящика. Такая модель полностью повторяет поведение черного ящика, соответственно интерпретирует его на всей выборке.&lt;br /&gt;
* Локальная суррогатная модель обучена на выводе в какой-то окрестности определенной точки (рис. 2, где ЧЯ {{---}} черный ящик). Такая модель зачастую плохо интерпретирует всю выборку, но хорошо справляется с этой задачей в данной окрестности. &lt;br /&gt;
&lt;br /&gt;
Глобальную суррогатную модель довольно сложно построить, поэтому чаще всего прибегают к локальным моделям и интерпретируют определенные объекты.&lt;br /&gt;
&lt;br /&gt;
'''LIME''' (англ. Local Interpretable Model-agnostic Explanations) &amp;lt;ref name=&amp;quot;Lime&amp;quot;&amp;gt;Marco Tulio Ribeiro, Sameer Singh, Carlos Guestrin &amp;quot;Explaining the Predictions of Any Classifier&amp;quot; [https://www.kdd.org/kdd2016/papers/files/rfp0573-ribeiroA.pdf]&amp;lt;/ref&amp;gt; {{---}} это библиотека &amp;lt;ref name=&amp;quot;lime_exp&amp;gt;Реализация Lime [https://github.com/marcotcr/lime]&amp;lt;/ref&amp;gt;, которая строит локальную суррогатную модель.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
* [[Жизненный цикл модели машинного обучения]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Doshi-Velez and Kim &amp;quot;Towards A Rigorous Science of Interpretable Machine Learning&amp;quot; 2017[https://arxiv.org/pdf/1702.08608.pdf]&lt;br /&gt;
&lt;br /&gt;
* Sanmi Koyejo &amp;quot;Interpretability&amp;quot; MACHINE LEARNING SUMMER SCHOOL 2019 [https://github.com/mlss-2019/slides/blob/master/interpretability/MLSS-interpretability-koyejo.pdf]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8&amp;diff=80633</id>
		<title>Интерпретируемые модели</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8&amp;diff=80633"/>
				<updated>2021-02-09T15:06:13Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Интерпретируемая модель''' {{---}} модель, обладающая свойством '''интерпретируемости'''.&lt;br /&gt;
&lt;br /&gt;
'''Интерпретируемость''' {{---}} это свойство модели, которое показывает, что структуру данной модели может объяснить человек.&lt;br /&gt;
При этом структура модели не противоречит данным, на которых данная модель построена, а также она сохраняет некоторые свойства предоставленных данных.&lt;br /&gt;
При интерпретации модели могут быть объяснены принципы и закономерности, которые использует сама модель для предсказания [[Общие_понятия#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B0_.D0.BE.D0.B1.D1.83.D1.87.D0.B5.D0.BD.D0.B8.D1.8F|меток класса]] на конкретных данных.&lt;br /&gt;
&lt;br /&gt;
== Практическая польза ==&lt;br /&gt;
&lt;br /&gt;
Если модель машинного обучения работает хорошо, почему мы просто не доверяем модели и игнорируем факторы, из-за которых она приняла то или иное решение?&lt;br /&gt;
Проблема в том, что используя только метрику для измерения точности предсказания, возможно такое, что мы решим задачу не полностью или даже не правильно. Нас могут интересовать причины, по которым модель сделала это предсказание.&amp;lt;ref name=&amp;quot;inv&amp;quot;&amp;gt;Doshi-Velez and Kim &amp;quot;Towards A Rigorous Science of Interpretable Machine Learning&amp;quot; 2017 Page 5&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
'''Например''': модель решает, когда нужно класть ковидного больного в палату, а когда отправлять лечиться дома. По статистике люди болеющие астмой выживают чаще, чем здоровые, и логично предположить, что их можно отправлять лечится дома, но дело в том, что этих людей врачи лечат более тщательней, поэтому они и выживают чаще. Если бы мы верили модели в слепую, то люди с астмой просто бы умирали. Поэтому нам важно понять, почему модель пришла к тому или иному выводу.&lt;br /&gt;
&lt;br /&gt;
=== Когда нужна интерпретируемость ===&lt;br /&gt;
&lt;br /&gt;
* Когда целью является получение каких-либо знаний с помощью изучения построенной модели. &lt;br /&gt;
&lt;br /&gt;
* Когда алгоритм оптимизировал неполную цель. Например, когда автомобильный инженер получает предсказания о параметрах двигателя, но ему нужно построит в целом достаточно хороший и надёжный автомобиль.&lt;br /&gt;
&lt;br /&gt;
* Для безопасности сложных систем. Такие системы, в большинстве случаев, нельзя протестировать от начала до конца. Вычислительно тяжело просмотреть все возможное входные данные и сценарии развития событий.&lt;br /&gt;
&lt;br /&gt;
* Интерпретация тренировных данных, поиск выбросов в них.&lt;br /&gt;
&lt;br /&gt;
* Поиск ошибок в выводе модели.&lt;br /&gt;
&lt;br /&gt;
* Пользователь может больше доверять модели.&lt;br /&gt;
&lt;br /&gt;
=== Когда интерпретируемость не требуется ===&lt;br /&gt;
&lt;br /&gt;
* Влияние модели мало, а сама интерпретация требует большого количества ресурсов (предложение новых покупок на основе предыдущих в онлайн магазинах). &lt;br /&gt;
&lt;br /&gt;
* Проблема хорошо разработана, и специалистов обучают ещё в университетах.&lt;br /&gt;
&lt;br /&gt;
* Класс модели широко применяется: [[Линейная регрессия|линейные модели]] (стоимость квартиры: понятно, что это метраж, расстояние до метро, школы, детского сада и т.д., но когда параметров много, то уже сложно всё это держать в голове).&lt;br /&gt;
&lt;br /&gt;
* Необходимость скрыть систему (кому давать кредит, качество работы сотрудника, поисковое ранжирование).&lt;br /&gt;
&lt;br /&gt;
== Классификая моделей ==&lt;br /&gt;
* Post-Hoc (воспринимает модель как &amp;quot;черный ящик&amp;quot;, например, нейросеть) vs Intrinsic (накладывают ограничения на сложность самой модели).&lt;br /&gt;
* Специфические (работают только для конкретной архитектуры модели) vs агностические (можно применить ко всем моделям для решения конкретной задачи).&lt;br /&gt;
* Локальные (позволяют понять предсказание для конкретного объекта) vs глобальные (понимание в целом, какие признаки влияют на предсказание).&lt;br /&gt;
&lt;br /&gt;
== Примеры моделей ==&lt;br /&gt;
=== Пример интерпретируемой модели ===&lt;br /&gt;
&lt;br /&gt;
* Допустим есть модель в банке, которая помогает решить, давать ли кредит человеку или нет. Приходит в банк Вася, модель отказывает ему в кредите, вопрос почему? Интерпретируемая модель ответит, потому что у него, допустим, плохая кредитная история или маленькая зарплата, а по не интерпретируемой модели вряд ли будет что-то понятно.&lt;br /&gt;
&lt;br /&gt;
* Есть данные и задача бинарной [[Общие_понятия#.D0.A2.D0.B8.D0.BF.D1.8B_.D0.B7.D0.B0.D0.B4.D0.B0.D1.87|классификации]], но у нас огромное количество признаков, и мы построили [[Дерево решений и случайный лес| дерево решений]] для предсказания. И, например, мы заметили, что алгоритм построил нам дерево глубины 1, но при этом точность предсказания очень высока. Это значит, что у нас классы отлично разделимы, только по одному признаку. Это и есть пример хорошей интерпретируемости, смотреть на данные самому достаточно долго, а так же эксперт, работающий с данными, мог не подозревать о том, что для успешной классификации необходим только 1 признак, но проанализировав построенное дерево, все становится очевидно.&lt;br /&gt;
&lt;br /&gt;
=== Пример эффективной в предсказании, но не интерпретируемой модели ===&lt;br /&gt;
&lt;br /&gt;
* Допустим есть данные и задача бинарной классификации, и 99% объектов имеют класс 1, остальные 0. Модель a(x) = 1, имеет точность 99%, но проинтерпретировать ее нельзя для каких-то наших исследований, особенно если нас интересуют, как возникает класс 0. Такая модель не интерпретируема, так как не информативна.&lt;br /&gt;
&lt;br /&gt;
* Важным примером, являются данные, в которых присутствует [[Вариации_регрессии#.D0.9C.D0.BE.D1.82.D0.B8.D0.B2.D0.B0.D1.86.D0.B8.D1.8F|мультиколлинеарность]] признаков. В таком случае, при обучении линейной модели, мы [[Переобучение|переобучимся]]. Для того, чтобы бороться с этой проблемой можно с помощью [[Регуляризация|регуляризации]]. Но так как, теперь мы оптимизируем несколько другую функцию, то и веса для модели будут отличатся от реальной зависимости на данных, что повлечёт за собой потерю интерпретируемости.&lt;br /&gt;
&lt;br /&gt;
== Свойства интерпретируемых моделей ==&lt;br /&gt;
&lt;br /&gt;
* Предсказуемость и моделируемость: свойства, при которых человек способен предсказывать поведение и ошибки модели, а так же умение &amp;quot;симулировать&amp;quot; их. Например: сложные физические модели, где часто возможно абстрагировать простые правила для примерного предсказания результатов.&lt;br /&gt;
&lt;br /&gt;
* Разложимость и модульность: свойства, при которых человек способен декомпозировать модель на интепретируемые компоненты. Например: деревья решений или линейный модели для небольшой размерности.&lt;br /&gt;
&lt;br /&gt;
* Доверие: пользователь доволен предсказаниями модели, также модель может показать, когда она не совсем уверена в своём предсказании.&lt;br /&gt;
&lt;br /&gt;
* Информативность: из модели можно выявить вспомогательную информацию полезную для принятия какого-либо решения.&lt;br /&gt;
&lt;br /&gt;
* Cтабильность: статистические и оптимизационные свойства&lt;br /&gt;
&lt;br /&gt;
== Способы создания интерпретируемой модели ==&lt;br /&gt;
&lt;br /&gt;
=== Использовать только интерпретируемые модели ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Int2acc.jpg|thumb|400px| рис. 1. Зависимость интерпретируемости от точности.]]&lt;br /&gt;
&lt;br /&gt;
* Линейные модели.&lt;br /&gt;
&lt;br /&gt;
* Деревья решений, списки правил, наборы правил.&lt;br /&gt;
&lt;br /&gt;
* Модели основывающиеся на предыдущем опыте.&lt;br /&gt;
&lt;br /&gt;
'''Но''' не всё хорошо описывается этими моделями.&lt;br /&gt;
&lt;br /&gt;
=== Построить интерпретируемую модель поверх эмбендинга ===&lt;br /&gt;
&lt;br /&gt;
'''Пример:''' у нас есть лук. Если “лук” находится рядом с “чесноком”, то модель думает о “луке” как об овоще, если “лук” находится рядом с “пистолетом”, “рогаткой”, то модель думает о “луке” как об оружии. &lt;br /&gt;
&lt;br /&gt;
'''Но''' модель теперь интерпретируема, но сами признаки перестают быть таковым.&lt;br /&gt;
&lt;br /&gt;
=== Важность признаков ===&lt;br /&gt;
&lt;br /&gt;
Одна из возможностей проанализировать модель {{---}} оценить, насколько её решение зависит от отдельных признаков, какой признак внёс наибольший вес для нахождения решения модели.&lt;br /&gt;
&lt;br /&gt;
Отчётливо это можно понять благодаря следующему примеру. Модель определяет кто на картинке собака или волк. Допустим выборка для обучения оказалось не самой удачной, и все картинки с волками были на снегу, а с собаками на асфальте. Соответственно модель могла начать определять собаку или волка по асфальту или снегу. Благодаря данному виду интерпретации, модель нам можешь сказать, что главным признаком для принятия решения было не само животное, а её окружение.&lt;br /&gt;
&lt;br /&gt;
Данную идею реализую с помощью значений Шепли.&lt;br /&gt;
&lt;br /&gt;
Значения Шепли (англ. Shapley values) {{---}} метод из коалиционной теории игр, который помогает определить, как наиболее честно распределить выигрыш между игроками в зависимости от их вклада в победу. Игроки объединяются в коалиции, чтобы полуучить некоторую выгоду от этого объединения. В машинном обучении в качестве игроков выступают признаки, а в качестве выигрыша {{---}} вклад в предсказание. &lt;br /&gt;
Подходит для задач классификации и регрессии.&lt;br /&gt;
&lt;br /&gt;
Из вклада коалиций рассчитывается вклад каждого признака в итоговый прогноз. Значение Шепли {{---}} среднее между маргинальными вкладами всех возможных коалиций&amp;lt;ref name=&amp;quot;Shapley Values&amp;quot;&amp;gt;Формулы смотрите здесь [https://christophm.github.io/interpretable-ml-book/shapley.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На основе значений Шепли Люндебергом и Ли предложен метод '''SHAP''' (SHapley Additive exPlanations), объясняющий индивидуальные предсказания. Доступна его реализация на Python &amp;lt;ref name=&amp;quot;SHAP&amp;quot;&amp;gt;Реализация SHAP [https://github.com/slundberg/shap]&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Важность i-го признака здесь вычисляется по такой формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{equation*} \phi_{i}(p) =\sum_{S \subseteq \{1,2..n\} / \{i\}} \frac{|S|!(n - |S| -1)!}{n!}(p(S \cup \{ i \}) - p(S)) \end{equation*}&amp;lt;/math&amp;gt;&amp;lt;ref name=&amp;quot;habr&amp;quot;&amp;gt;Павел Трошенков &amp;quot;Как интерпретировать предсказания моделей в SHAP&amp;quot; [https://habr.com/ru/post/428213]&amp;lt;/ref&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(S \cup \{ i \})&amp;lt;/math&amp;gt; {{---}} это предсказание модели с i-тым признаком,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(S)&amp;lt;/math&amp;gt; {{---}} это предсказание модели без i-того признака,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; {{---}} количество признаков,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; {{---}} произвольный набор признаков без i-того признака.&lt;br /&gt;
&lt;br /&gt;
Видно, что вычисление требует обучения модели на всевозможных подмножествах признаках, поэтому на практике применяют приближения формулы.&lt;br /&gt;
&lt;br /&gt;
=== Суррогатные модели ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lime.png|thumb|400px| рис. 2. Построение локальной суррогатной модели&amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt;Александр Дьяконов &amp;quot;Интерпретации чёрных ящиков&amp;quot; Рис.11 [https://dyakonov.org/2018/08/28/%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B0%D1%86%D0%B8%D0%B8-%D1%87%D1%91%D1%80%D0%BD%D1%8B%D1%85-%D1%8F%D1%89%D0%B8%D0%BA%D0%BE%D0%B2/]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Для интерпретации модели (далее именуемой как черный ящик) можно использовать интерпретируемую суррогатную модель, обученную на выводе черного ящика при различных входных данных. Так как суррогатная модель будет повторять поведение черного ящика, то на её основе можно интерпретировать данный черный ящик.&lt;br /&gt;
&lt;br /&gt;
Есть два типа суррогатных моделей: глобальная и локальная. &lt;br /&gt;
* Глобальная суррогатная  модель обучена на всем выводе черного ящика. Такая модель полностью повторяет поведение черного ящика, соответственно интерпретирует его на всей выборке.&lt;br /&gt;
* Локальная суррогатная модель обучена на выводе в какой-то окрестности определенной точки (рис. 2, где ЧЯ {{---}} черный ящик). Такая модель зачастую плохо интерпретирует всю выборку, но хорошо справляется с этой задачей в данной окрестности. &lt;br /&gt;
&lt;br /&gt;
Глобальную суррогатную модель довольно сложно построить, поэтому чаще всего прибегают к локальным моделям и интерпретируют определенные объекты.&lt;br /&gt;
&lt;br /&gt;
'''LIME''' (англ. Local Interpretable Model-agnostic Explanations) &amp;lt;ref name=&amp;quot;Lime&amp;quot;&amp;gt;Marco Tulio Ribeiro, Sameer Singh, Carlos Guestrin &amp;quot;Explaining the Predictions of Any Classifier&amp;quot; [https://www.kdd.org/kdd2016/papers/files/rfp0573-ribeiroA.pdf]&amp;lt;/ref&amp;gt; {{---}} это библиотека &amp;lt;ref name=&amp;quot;lime_exp&amp;gt;Реализация Lime [https://github.com/marcotcr/lime]&amp;lt;/ref&amp;gt;, которая строит локальную суррогатную модель.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
* [[Жизненный цикл модели машинного обучения]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Doshi-Velez and Kim &amp;quot;Towards A Rigorous Science of Interpretable Machine Learning&amp;quot; 2017[https://arxiv.org/pdf/1702.08608.pdf]&lt;br /&gt;
&lt;br /&gt;
* Sanmi Koyejo &amp;quot;Interpretability&amp;quot; MACHINE LEARNING SUMMER SCHOOL 2019 [https://github.com/mlss-2019/slides/blob/master/interpretability/MLSS-interpretability-koyejo.pdf]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8&amp;diff=80632</id>
		<title>Интерпретируемые модели</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8&amp;diff=80632"/>
				<updated>2021-02-09T14:46:09Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Классификая моделей */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Интерпретируемая модель''' {{---}} модель, обладающая свойством '''интерпретируемости'''.&lt;br /&gt;
&lt;br /&gt;
'''Интерпретируемость''' {{---}} это свойство модели, которое показывает, что структуру данной модели может объяснить человек.&lt;br /&gt;
При этом структура модели не противоречит данным, на которых данная модель построена, а также она сохраняет некоторые свойства предоставленных данных.&lt;br /&gt;
При интерпретации модели могут быть объяснены принципы и закономерности, которые использует сама модель для предсказания [[Общие_понятия#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B0_.D0.BE.D0.B1.D1.83.D1.87.D0.B5.D0.BD.D0.B8.D1.8F|меток класса]] на конкретных данных.&lt;br /&gt;
&lt;br /&gt;
== Практическая польза ==&lt;br /&gt;
&lt;br /&gt;
Если модель машинного обучения работает хорошо, почему мы просто не доверяем модели и игнорируем факторы, из-за которых она приняла то или иное решение?&lt;br /&gt;
Проблема в том, что используя только метрику для измерения точности предсказания, возможно такое, что мы решим задачу не полностью или даже не правильно. Нас могут интересовать причины, по которым модель сделала это предсказание.&amp;lt;ref name=&amp;quot;inv&amp;quot;&amp;gt;Doshi-Velez and Kim &amp;quot;Towards A Rigorous Science of Interpretable Machine Learning&amp;quot; 2017 Page 5&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
'''Например''': модель решает, когда нужно класть ковидного больного в палату, а когда отправлять лечиться дома. По статистике люди болеющие астмой выживают чаще, чем здоровые, и логично предположить, что их можно отправлять лечится дома, но дело в том, что этих людей врачи лечат более тщательней, поэтому они и выживают чаще. Если бы мы верили модели в слепую, то люди с астмой просто бы умирали. Поэтому нам важно понять, почему модель пришла к тому или иному выводу.&lt;br /&gt;
&lt;br /&gt;
=== Когда нужна интерпретируемость ===&lt;br /&gt;
&lt;br /&gt;
* Когда целью является получение каких-либо знаний с помощью изучения построенной модели. &lt;br /&gt;
&lt;br /&gt;
* Когда алгоритм оптимизировал неполную цель. Например, когда автомобильный инженер получает предсказания о параметрах двигателя, но ему нужно построит в целом достаточно хороший и надёжный автомобиль.&lt;br /&gt;
&lt;br /&gt;
* Для безопасности сложных систем. Такие системы, в большинстве случаев, нельзя протестировать от начала до конца. Вычислительно тяжело просмотреть все возможное входные данные и сценарии развития событий.&lt;br /&gt;
&lt;br /&gt;
* Интерпретация тренировных данных, поиск выбросов в них.&lt;br /&gt;
&lt;br /&gt;
* Поиск ошибок в выводе модели.&lt;br /&gt;
&lt;br /&gt;
* Пользователь может больше доверять модели.&lt;br /&gt;
&lt;br /&gt;
=== Когда интерпретируемость не требуется ===&lt;br /&gt;
&lt;br /&gt;
* Влияние модели мало, а сама интерпретация требует большого количества ресурсов (предложение новых покупок на основе предыдущих в онлайн магазинах). &lt;br /&gt;
&lt;br /&gt;
* Проблема хорошо разработана, и специалистов обучают ещё в университетах.&lt;br /&gt;
&lt;br /&gt;
* Класс модели широко применяется: [[Линейная регрессия|линейные модели]] (стоимость квартиры: понятно, что это метраж, расстояние до метро, школы, детского сада и т.д., но когда параметров много, то уже сложно всё это держать в голове).&lt;br /&gt;
&lt;br /&gt;
* Необходимость скрыть систему (кому давать кредит, качество работы сотрудника, поисковое ранжирование).&lt;br /&gt;
&lt;br /&gt;
== Классификая моделей ==&lt;br /&gt;
* Post-Hoc (воспринимает модель как &amp;quot;черный ящик&amp;quot;, например, нейросеть) vs Intrinsic (накладывают ограничения на сложность самой модели).&lt;br /&gt;
* Специфические (работают только для конкретной архитектуры модели) vs агностические (можно применить ко всем моделям для решения конкретной задачи).&lt;br /&gt;
* Локальные (позволяют понять предсказание для конкретного объекта) vs глобальные (понимание в целом, какие признаки влияют на предсказание).&lt;br /&gt;
&lt;br /&gt;
== Примеры моделей ==&lt;br /&gt;
=== Пример интерпретируемой модели ===&lt;br /&gt;
&lt;br /&gt;
* Допустим есть модель в банке, которая помогает решить, давать ли кредит человеку или нет. Приходит в банк Вася, модель отказывает ему в кредите, вопрос почему? Интерпретируемая модель ответит, потому что у него, допустим, плохая кредитная история или маленькая зарплата, а по не интерпретируемой модели вряд ли будет что-то понятно.&lt;br /&gt;
&lt;br /&gt;
* Есть данные и задача бинарной [[Общие_понятия#.D0.A2.D0.B8.D0.BF.D1.8B_.D0.B7.D0.B0.D0.B4.D0.B0.D1.87|классификации]], но у нас огромное количество признаков, и мы построили [[Дерево решений и случайный лес| дерево решений]] для предсказания. И, например, мы заметили, что алгоритм построил нам дерево глубины 1, но при этом точность предсказания очень высока. Это значит, что у нас классы отлично разделимы, только по одному признаку. Это и есть пример хорошей интерпретируемости, смотреть на данные самому достаточно долго, а так же эксперт, работающий с данными, мог не подозревать о том, что для успешной классификации необходим только 1 признак, но проанализировав построенное дерево, все становится очевидно.&lt;br /&gt;
&lt;br /&gt;
=== Пример эффективной в предсказании, но не интерпретируемой модели ===&lt;br /&gt;
&lt;br /&gt;
* Допустим есть данные и задача бинарной классификации, и 99% объектов имеют класс 1, остальные 0. Модель a(x) = 1, имеет точность 99%, но проинтерпретировать ее нельзя для каких-то наших исследований, особенно если нас интересуют, как возникает класс 0. Такая модель не интерпретируема, так как не информативна.&lt;br /&gt;
&lt;br /&gt;
* Важным примером, являются данные, в которых присутствует [[Вариации_регрессии#.D0.9C.D0.BE.D1.82.D0.B8.D0.B2.D0.B0.D1.86.D0.B8.D1.8F|мультиколлинеарность]] признаков. В таком случае, при обучении линейной модели, мы [[Переобучение|переобучимся]]. Для того, чтобы бороться с этой проблемой можно с помощью [[Регуляризация|регуляризации]]. Но так как, теперь мы оптимизируем несколько другую функцию, то и веса для модели будут отличатся от реальной зависимости на данных, что повлечёт за собой потерю интерпретируемости.&lt;br /&gt;
&lt;br /&gt;
== Свойства интерпретируемых моделей ==&lt;br /&gt;
&lt;br /&gt;
* Предсказуемость и моделируемость: свойства, при которых человек способен предсказывать поведение и ошибки модели, а так же умение &amp;quot;симулировать&amp;quot; их. Например: сложные физические модели, где часто возможно абстрагировать простые правила для примерного предсказания результатов.&lt;br /&gt;
&lt;br /&gt;
* Разложимость и модульность: свойства, при которых человек способен декомпозировать модель на интепретируемые компоненты. Например: деревья решений или линейный модели для небольшой размерности.&lt;br /&gt;
&lt;br /&gt;
* Доверие: пользователь доволен предсказаниями модели, также модель может показать, когда она не совсем уверена в своём предсказании.&lt;br /&gt;
&lt;br /&gt;
* Информативность: из модели можно выявить вспомогательную информацию полезную для принятия какого-либо решения.&lt;br /&gt;
&lt;br /&gt;
* Cтабильность: статистические и оптимизационные свойства&lt;br /&gt;
&lt;br /&gt;
== Способы создания интерпретируемой модели ==&lt;br /&gt;
&lt;br /&gt;
=== Использовать только интерпретируемые модели ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Int2acc.jpg|thumb|400px| рис. 1. Зависимость интерпретируемости от точности.]]&lt;br /&gt;
&lt;br /&gt;
* Линейные модели.&lt;br /&gt;
&lt;br /&gt;
* Деревья решений, списки правил, наборы правил.&lt;br /&gt;
&lt;br /&gt;
* Модели основывающиеся на предыдущем опыте.&lt;br /&gt;
&lt;br /&gt;
'''Но''' не всё хорошо описывается этими моделями.&lt;br /&gt;
&lt;br /&gt;
=== Построить интерпретируемую модель поверх эмбендинга ===&lt;br /&gt;
&lt;br /&gt;
'''Пример:''' у нас есть лук. Если “лук” находится рядом с “чесноком”, то модель думает о “луке” как об овоще, если “лук” находится рядом с “пистолетом”, “рогаткой”, то модель думает о “луке” как об оружии. &lt;br /&gt;
&lt;br /&gt;
'''Но''' модель теперь интерпретируема, но сами признаки перестают быть таковым.&lt;br /&gt;
&lt;br /&gt;
=== Важность признаков ===&lt;br /&gt;
&lt;br /&gt;
Одна из возможностей проанализировать модель — оценить, насколько её решение зависит от отдельных признаков, какой признак внёс наибольший вес для нахождения решения модели.&lt;br /&gt;
&lt;br /&gt;
Отчётливо это можно понять благодаря следующему примеру. Модель определяет кто на картинке собака или волк. Допустим выборка для обучения оказалось не самой удачной, и все картинки с волками были на снегу, а с собаками на асфальте. Соответственно модель могла начать определять собаку или волка по асфальту или снегу. Благодаря данному виду интерпретации, модель нам можешь сказать, что главным признаком для принятия решения было не само животное, а её окружение.&lt;br /&gt;
&lt;br /&gt;
Одна из реализацией данной идеи является библиотека '''SHAP'''.&lt;br /&gt;
&lt;br /&gt;
'''SHAP''' (англ. SHapley Additive exPlanations) {{---}} это библиотека, которая для оценки важности признаков рассчитываются значения Шэпли&amp;lt;ref name=&amp;quot;Shapley&amp;gt;Статья в википедии о значениях Шэпли [https://en.wikipedia.org/wiki/Shapley_value]&amp;lt;/ref&amp;gt; (происходит оценка предсказаний модели с и без данного признака). &lt;br /&gt;
&lt;br /&gt;
Важность i-го признака здесь вычисляется по такой формуле:&amp;lt;ref name=&amp;quot;exp&amp;quot;&amp;gt; Реализация Shap [https://github.com/slundberg/shap]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{equation*} \phi_{i}(p) =\sum_{S \subseteq \{1,2..n\} / \{i\}} \frac{|S|!(n - |S| -1)!}{n!}(p(S \cup \{ i \}) - p(S)) \end{equation*}&amp;lt;/math&amp;gt;&amp;lt;ref name=&amp;quot;habr&amp;quot;&amp;gt;Павел Трошенков &amp;quot;Как интерпретировать предсказания моделей в SHAP&amp;quot; [https://habr.com/ru/post/428213]&amp;lt;/ref&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(S \cup \{ i \})&amp;lt;/math&amp;gt; {{---}} это предсказание модели с i-тым признаком,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(S)&amp;lt;/math&amp;gt; {{---}} это предсказание модели без i-того признака,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; {{---}} количество признаков,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; {{---}} произвольный набор признаков без i-того признака.&lt;br /&gt;
&lt;br /&gt;
Видно, что вычисление требует обучения модели на всевозможных подмножествах признаках, поэтому на практике применяют приближения формулы.&lt;br /&gt;
&lt;br /&gt;
=== Суррогатные модели ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lime.png|thumb|400px| рис. 2. Построение локальной суррогатной модели&amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt;Александр Дьяконов &amp;quot;Интерпретации чёрных ящиков&amp;quot; Рис.11 [https://dyakonov.org/2018/08/28/%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B0%D1%86%D0%B8%D0%B8-%D1%87%D1%91%D1%80%D0%BD%D1%8B%D1%85-%D1%8F%D1%89%D0%B8%D0%BA%D0%BE%D0%B2/]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Для интерпретации модели (далее именуемой как черный ящик) можно использовать интерпретируемую суррогатную модель, обученную на выводе черного ящика при различных входных данных. Так как суррогатная модель будет повторять поведение черного ящика, то на её основе можно интерпретировать данный черный ящик.&lt;br /&gt;
&lt;br /&gt;
Есть два типа суррогатных моделей: глобальная и локальная. &lt;br /&gt;
* Глобальная суррогатная  модель обучена на всем выводе черного ящика. Такая модель полностью повторяет поведение черного ящика, соответственно интерпретирует его на всей выборке.&lt;br /&gt;
* Локальная суррогатная модель обучена на выводе в какой-то окрестности определенной точки (рис. 2, где ЧЯ {{---}} черный ящик). Такая модель зачастую плохо интерпретирует всю выборку, но хорошо справляется с этой задачей в данной окрестности. &lt;br /&gt;
&lt;br /&gt;
Глобальную суррогатную модель довольно сложно построить, поэтому чаще всего прибегают к локальным моделям и интерпретируют определенные объекты.&lt;br /&gt;
&lt;br /&gt;
'''LIME''' (англ. Local Interpretable Model-agnostic Explanations) &amp;lt;ref name=&amp;quot;Lime&amp;quot;&amp;gt;Marco Tulio Ribeiro, Sameer Singh, Carlos Guestrin &amp;quot;Explaining the Predictions of Any Classifier&amp;quot; [https://www.kdd.org/kdd2016/papers/files/rfp0573-ribeiroA.pdf]&amp;lt;/ref&amp;gt; {{---}} это библиотека &amp;lt;ref name=&amp;quot;lime_exp&amp;gt;Реализация Lime [https://github.com/marcotcr/lime]&amp;lt;/ref&amp;gt;, которая строит локальную суррогатную модель.&lt;br /&gt;
&lt;br /&gt;
== Значения Шепли ==&lt;br /&gt;
Значения Шепли (англ. Shapley values) {{---}} метод из коалиционной теории игр, который помогает определить, как наиболее честно распределить выигрыш между игроками в зависимости от их вклада в победу. Игроки объединяются в коалиции, чтобы полуучить некоторую выгоду от этого объединения. В машинном обучении в качестве игроков выступают признаки, а в качестве выигрыша {{---}} вклад в предсказание. &lt;br /&gt;
Подходит для задач классификации и регрессии.&lt;br /&gt;
&lt;br /&gt;
Из вклада коалиций рассчитывается вклад каждого признака в итоговый прогноз. Значение Шепли {{---}} среднее между маргинальными вкладами всех возможных коалиций&amp;lt;ref name=&amp;quot;Shapley Values&amp;quot;&amp;gt;Формулы смотрите здесь [https://christophm.github.io/interpretable-ml-book/shapley.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На основе значений Шепли Люндебергом и Ли предложен метод SHAP (SHapley Additive exPlanations), объясняющий индивидуальные предсказания. Доступна его реализация на Python &amp;lt;ref name=&amp;quot;SHAP&amp;quot;&amp;gt;Реализация SHAP [https://github.com/slundberg/shap]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
* [[Жизненный цикл модели машинного обучения]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Doshi-Velez and Kim &amp;quot;Towards A Rigorous Science of Interpretable Machine Learning&amp;quot; 2017[https://arxiv.org/pdf/1702.08608.pdf]&lt;br /&gt;
&lt;br /&gt;
* Sanmi Koyejo &amp;quot;Interpretability&amp;quot; MACHINE LEARNING SUMMER SCHOOL 2019 [https://github.com/mlss-2019/slides/blob/master/interpretability/MLSS-interpretability-koyejo.pdf]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8&amp;diff=80631</id>
		<title>Интерпретируемые модели</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8&amp;diff=80631"/>
				<updated>2021-02-09T14:41:12Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Значения Шепли */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Интерпретируемая модель''' {{---}} модель, обладающая свойством '''интерпретируемости'''.&lt;br /&gt;
&lt;br /&gt;
'''Интерпретируемость''' {{---}} это свойство модели, которое показывает, что структуру данной модели может объяснить человек.&lt;br /&gt;
При этом структура модели не противоречит данным, на которых данная модель построена, а также она сохраняет некоторые свойства предоставленных данных.&lt;br /&gt;
При интерпретации модели могут быть объяснены принципы и закономерности, которые использует сама модель для предсказания [[Общие_понятия#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B0_.D0.BE.D0.B1.D1.83.D1.87.D0.B5.D0.BD.D0.B8.D1.8F|меток класса]] на конкретных данных.&lt;br /&gt;
&lt;br /&gt;
== Практическая польза ==&lt;br /&gt;
&lt;br /&gt;
Если модель машинного обучения работает хорошо, почему мы просто не доверяем модели и игнорируем факторы, из-за которых она приняла то или иное решение?&lt;br /&gt;
Проблема в том, что используя только метрику для измерения точности предсказания, возможно такое, что мы решим задачу не полностью или даже не правильно. Нас могут интересовать причины, по которым модель сделала это предсказание.&amp;lt;ref name=&amp;quot;inv&amp;quot;&amp;gt;Doshi-Velez and Kim &amp;quot;Towards A Rigorous Science of Interpretable Machine Learning&amp;quot; 2017 Page 5&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
'''Например''': модель решает, когда нужно класть ковидного больного в палату, а когда отправлять лечиться дома. По статистике люди болеющие астмой выживают чаще, чем здоровые, и логично предположить, что их можно отправлять лечится дома, но дело в том, что этих людей врачи лечат более тщательней, поэтому они и выживают чаще. Если бы мы верили модели в слепую, то люди с астмой просто бы умирали. Поэтому нам важно понять, почему модель пришла к тому или иному выводу.&lt;br /&gt;
&lt;br /&gt;
=== Когда нужна интерпретируемость ===&lt;br /&gt;
&lt;br /&gt;
* Когда целью является получение каких-либо знаний с помощью изучения построенной модели. &lt;br /&gt;
&lt;br /&gt;
* Когда алгоритм оптимизировал неполную цель. Например, когда автомобильный инженер получает предсказания о параметрах двигателя, но ему нужно построит в целом достаточно хороший и надёжный автомобиль.&lt;br /&gt;
&lt;br /&gt;
* Для безопасности сложных систем. Такие системы, в большинстве случаев, нельзя протестировать от начала до конца. Вычислительно тяжело просмотреть все возможное входные данные и сценарии развития событий.&lt;br /&gt;
&lt;br /&gt;
* Интерпретация тренировных данных, поиск выбросов в них.&lt;br /&gt;
&lt;br /&gt;
* Поиск ошибок в выводе модели.&lt;br /&gt;
&lt;br /&gt;
* Пользователь может больше доверять модели.&lt;br /&gt;
&lt;br /&gt;
=== Когда интерпретируемость не требуется ===&lt;br /&gt;
&lt;br /&gt;
* Влияние модели мало, а сама интерпретация требует большого количества ресурсов (предложение новых покупок на основе предыдущих в онлайн магазинах). &lt;br /&gt;
&lt;br /&gt;
* Проблема хорошо разработана, и специалистов обучают ещё в университетах.&lt;br /&gt;
&lt;br /&gt;
* Класс модели широко применяется: [[Линейная регрессия|линейные модели]] (стоимость квартиры: понятно, что это метраж, расстояние до метро, школы, детского сада и т.д., но когда параметров много, то уже сложно всё это держать в голове).&lt;br /&gt;
&lt;br /&gt;
* Необходимость скрыть систему (кому давать кредит, качество работы сотрудника, поисковое ранжирование).&lt;br /&gt;
&lt;br /&gt;
== Классификая моделей ==&lt;br /&gt;
* Post-Hoc (позволяют объяснить результаты модели) vs Intrinsic (накладывают ограничения на сложность самой модели).&lt;br /&gt;
* Специфические (работают только для конкретной архитектуры модели) vs агностические (можно применить ко всем моделям для решения конкретной задачи).&lt;br /&gt;
* Локальные (позволяют понять предсказание для конкретного объекта) vs глобальные (понимание в целом, какие признаки влияют на предсказание).&lt;br /&gt;
&lt;br /&gt;
== Примеры моделей ==&lt;br /&gt;
=== Пример интерпретируемой модели ===&lt;br /&gt;
&lt;br /&gt;
* Допустим есть модель в банке, которая помогает решить, давать ли кредит человеку или нет. Приходит в банк Вася, модель отказывает ему в кредите, вопрос почему? Интерпретируемая модель ответит, потому что у него, допустим, плохая кредитная история или маленькая зарплата, а по не интерпретируемой модели вряд ли будет что-то понятно.&lt;br /&gt;
&lt;br /&gt;
* Есть данные и задача бинарной [[Общие_понятия#.D0.A2.D0.B8.D0.BF.D1.8B_.D0.B7.D0.B0.D0.B4.D0.B0.D1.87|классификации]], но у нас огромное количество признаков, и мы построили [[Дерево решений и случайный лес| дерево решений]] для предсказания. И, например, мы заметили, что алгоритм построил нам дерево глубины 1, но при этом точность предсказания очень высока. Это значит, что у нас классы отлично разделимы, только по одному признаку. Это и есть пример хорошей интерпретируемости, смотреть на данные самому достаточно долго, а так же эксперт, работающий с данными, мог не подозревать о том, что для успешной классификации необходим только 1 признак, но проанализировав построенное дерево, все становится очевидно.&lt;br /&gt;
&lt;br /&gt;
=== Пример эффективной в предсказании, но не интерпретируемой модели ===&lt;br /&gt;
&lt;br /&gt;
* Допустим есть данные и задача бинарной классификации, и 99% объектов имеют класс 1, остальные 0. Модель a(x) = 1, имеет точность 99%, но проинтерпретировать ее нельзя для каких-то наших исследований, особенно если нас интересуют, как возникает класс 0. Такая модель не интерпретируема, так как не информативна.&lt;br /&gt;
&lt;br /&gt;
* Важным примером, являются данные, в которых присутствует [[Вариации_регрессии#.D0.9C.D0.BE.D1.82.D0.B8.D0.B2.D0.B0.D1.86.D0.B8.D1.8F|мультиколлинеарность]] признаков. В таком случае, при обучении линейной модели, мы [[Переобучение|переобучимся]]. Для того, чтобы бороться с этой проблемой можно с помощью [[Регуляризация|регуляризации]]. Но так как, теперь мы оптимизируем несколько другую функцию, то и веса для модели будут отличатся от реальной зависимости на данных, что повлечёт за собой потерю интерпретируемости.&lt;br /&gt;
&lt;br /&gt;
== Свойства интерпретируемых моделей ==&lt;br /&gt;
&lt;br /&gt;
* Предсказуемость и моделируемость: свойства, при которых человек способен предсказывать поведение и ошибки модели, а так же умение &amp;quot;симулировать&amp;quot; их. Например: сложные физические модели, где часто возможно абстрагировать простые правила для примерного предсказания результатов.&lt;br /&gt;
&lt;br /&gt;
* Разложимость и модульность: свойства, при которых человек способен декомпозировать модель на интепретируемые компоненты. Например: деревья решений или линейный модели для небольшой размерности.&lt;br /&gt;
&lt;br /&gt;
* Доверие: пользователь доволен предсказаниями модели, также модель может показать, когда она не совсем уверена в своём предсказании.&lt;br /&gt;
&lt;br /&gt;
* Информативность: из модели можно выявить вспомогательную информацию полезную для принятия какого-либо решения.&lt;br /&gt;
&lt;br /&gt;
* Cтабильность: статистические и оптимизационные свойства&lt;br /&gt;
&lt;br /&gt;
== Способы создания интерпретируемой модели ==&lt;br /&gt;
&lt;br /&gt;
=== Использовать только интерпретируемые модели ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Int2acc.jpg|thumb|400px| рис. 1. Зависимость интерпретируемости от точности.]]&lt;br /&gt;
&lt;br /&gt;
* Линейные модели.&lt;br /&gt;
&lt;br /&gt;
* Деревья решений, списки правил, наборы правил.&lt;br /&gt;
&lt;br /&gt;
* Модели основывающиеся на предыдущем опыте.&lt;br /&gt;
&lt;br /&gt;
'''Но''' не всё хорошо описывается этими моделями.&lt;br /&gt;
&lt;br /&gt;
=== Построить интерпретируемую модель поверх эмбендинга ===&lt;br /&gt;
&lt;br /&gt;
'''Пример:''' у нас есть лук. Если “лук” находится рядом с “чесноком”, то модель думает о “луке” как об овоще, если “лук” находится рядом с “пистолетом”, “рогаткой”, то модель думает о “луке” как об оружии. &lt;br /&gt;
&lt;br /&gt;
'''Но''' модель теперь интерпретируема, но сами признаки перестают быть таковым.&lt;br /&gt;
&lt;br /&gt;
=== Важность признаков ===&lt;br /&gt;
&lt;br /&gt;
Одна из возможностей проанализировать модель — оценить, насколько её решение зависит от отдельных признаков, какой признак внёс наибольший вес для нахождения решения модели.&lt;br /&gt;
&lt;br /&gt;
Отчётливо это можно понять благодаря следующему примеру. Модель определяет кто на картинке собака или волк. Допустим выборка для обучения оказалось не самой удачной, и все картинки с волками были на снегу, а с собаками на асфальте. Соответственно модель могла начать определять собаку или волка по асфальту или снегу. Благодаря данному виду интерпретации, модель нам можешь сказать, что главным признаком для принятия решения было не само животное, а её окружение.&lt;br /&gt;
&lt;br /&gt;
Одна из реализацией данной идеи является библиотека '''SHAP'''.&lt;br /&gt;
&lt;br /&gt;
'''SHAP''' (англ. SHapley Additive exPlanations) {{---}} это библиотека, которая для оценки важности признаков рассчитываются значения Шэпли&amp;lt;ref name=&amp;quot;Shapley&amp;gt;Статья в википедии о значениях Шэпли [https://en.wikipedia.org/wiki/Shapley_value]&amp;lt;/ref&amp;gt; (происходит оценка предсказаний модели с и без данного признака). &lt;br /&gt;
&lt;br /&gt;
Важность i-го признака здесь вычисляется по такой формуле:&amp;lt;ref name=&amp;quot;exp&amp;quot;&amp;gt; Реализация Shap [https://github.com/slundberg/shap]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{equation*} \phi_{i}(p) =\sum_{S \subseteq \{1,2..n\} / \{i\}} \frac{|S|!(n - |S| -1)!}{n!}(p(S \cup \{ i \}) - p(S)) \end{equation*}&amp;lt;/math&amp;gt;&amp;lt;ref name=&amp;quot;habr&amp;quot;&amp;gt;Павел Трошенков &amp;quot;Как интерпретировать предсказания моделей в SHAP&amp;quot; [https://habr.com/ru/post/428213]&amp;lt;/ref&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(S \cup \{ i \})&amp;lt;/math&amp;gt; {{---}} это предсказание модели с i-тым признаком,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(S)&amp;lt;/math&amp;gt; {{---}} это предсказание модели без i-того признака,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; {{---}} количество признаков,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; {{---}} произвольный набор признаков без i-того признака.&lt;br /&gt;
&lt;br /&gt;
Видно, что вычисление требует обучения модели на всевозможных подмножествах признаках, поэтому на практике применяют приближения формулы.&lt;br /&gt;
&lt;br /&gt;
=== Суррогатные модели ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lime.png|thumb|400px| рис. 2. Построение локальной суррогатной модели&amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt;Александр Дьяконов &amp;quot;Интерпретации чёрных ящиков&amp;quot; Рис.11 [https://dyakonov.org/2018/08/28/%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B0%D1%86%D0%B8%D0%B8-%D1%87%D1%91%D1%80%D0%BD%D1%8B%D1%85-%D1%8F%D1%89%D0%B8%D0%BA%D0%BE%D0%B2/]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Для интерпретации модели (далее именуемой как черный ящик) можно использовать интерпретируемую суррогатную модель, обученную на выводе черного ящика при различных входных данных. Так как суррогатная модель будет повторять поведение черного ящика, то на её основе можно интерпретировать данный черный ящик.&lt;br /&gt;
&lt;br /&gt;
Есть два типа суррогатных моделей: глобальная и локальная. &lt;br /&gt;
* Глобальная суррогатная  модель обучена на всем выводе черного ящика. Такая модель полностью повторяет поведение черного ящика, соответственно интерпретирует его на всей выборке.&lt;br /&gt;
* Локальная суррогатная модель обучена на выводе в какой-то окрестности определенной точки (рис. 2, где ЧЯ {{---}} черный ящик). Такая модель зачастую плохо интерпретирует всю выборку, но хорошо справляется с этой задачей в данной окрестности. &lt;br /&gt;
&lt;br /&gt;
Глобальную суррогатную модель довольно сложно построить, поэтому чаще всего прибегают к локальным моделям и интерпретируют определенные объекты.&lt;br /&gt;
&lt;br /&gt;
'''LIME''' (англ. Local Interpretable Model-agnostic Explanations) &amp;lt;ref name=&amp;quot;Lime&amp;quot;&amp;gt;Marco Tulio Ribeiro, Sameer Singh, Carlos Guestrin &amp;quot;Explaining the Predictions of Any Classifier&amp;quot; [https://www.kdd.org/kdd2016/papers/files/rfp0573-ribeiroA.pdf]&amp;lt;/ref&amp;gt; {{---}} это библиотека &amp;lt;ref name=&amp;quot;lime_exp&amp;gt;Реализация Lime [https://github.com/marcotcr/lime]&amp;lt;/ref&amp;gt;, которая строит локальную суррогатную модель.&lt;br /&gt;
&lt;br /&gt;
== Значения Шепли ==&lt;br /&gt;
Значения Шепли (англ. Shapley values) {{---}} метод из коалиционной теории игр, который помогает определить, как наиболее честно распределить выигрыш между игроками в зависимости от их вклада в победу. Игроки объединяются в коалиции, чтобы полуучить некоторую выгоду от этого объединения. В машинном обучении в качестве игроков выступают признаки, а в качестве выигрыша {{---}} вклад в предсказание. &lt;br /&gt;
Подходит для задач классификации и регрессии.&lt;br /&gt;
&lt;br /&gt;
Из вклада коалиций рассчитывается вклад каждого признака в итоговый прогноз. Значение Шепли {{---}} среднее между маргинальными вкладами всех возможных коалиций&amp;lt;ref name=&amp;quot;Shapley Values&amp;quot;&amp;gt;Формулы смотрите здесь [https://christophm.github.io/interpretable-ml-book/shapley.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На основе значений Шепли Люндебергом и Ли предложен метод SHAP (SHapley Additive exPlanations), объясняющий индивидуальные предсказания. Доступна его реализация на Python &amp;lt;ref name=&amp;quot;SHAP&amp;quot;&amp;gt;Реализация SHAP [https://github.com/slundberg/shap]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
* [[Жизненный цикл модели машинного обучения]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Doshi-Velez and Kim &amp;quot;Towards A Rigorous Science of Interpretable Machine Learning&amp;quot; 2017[https://arxiv.org/pdf/1702.08608.pdf]&lt;br /&gt;
&lt;br /&gt;
* Sanmi Koyejo &amp;quot;Interpretability&amp;quot; MACHINE LEARNING SUMMER SCHOOL 2019 [https://github.com/mlss-2019/slides/blob/master/interpretability/MLSS-interpretability-koyejo.pdf]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8&amp;diff=80630</id>
		<title>Интерпретируемые модели</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8&amp;diff=80630"/>
				<updated>2021-02-09T14:34:47Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Интерпретируемая модель''' {{---}} модель, обладающая свойством '''интерпретируемости'''.&lt;br /&gt;
&lt;br /&gt;
'''Интерпретируемость''' {{---}} это свойство модели, которое показывает, что структуру данной модели может объяснить человек.&lt;br /&gt;
При этом структура модели не противоречит данным, на которых данная модель построена, а также она сохраняет некоторые свойства предоставленных данных.&lt;br /&gt;
При интерпретации модели могут быть объяснены принципы и закономерности, которые использует сама модель для предсказания [[Общие_понятия#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B0_.D0.BE.D0.B1.D1.83.D1.87.D0.B5.D0.BD.D0.B8.D1.8F|меток класса]] на конкретных данных.&lt;br /&gt;
&lt;br /&gt;
== Практическая польза ==&lt;br /&gt;
&lt;br /&gt;
Если модель машинного обучения работает хорошо, почему мы просто не доверяем модели и игнорируем факторы, из-за которых она приняла то или иное решение?&lt;br /&gt;
Проблема в том, что используя только метрику для измерения точности предсказания, возможно такое, что мы решим задачу не полностью или даже не правильно. Нас могут интересовать причины, по которым модель сделала это предсказание.&amp;lt;ref name=&amp;quot;inv&amp;quot;&amp;gt;Doshi-Velez and Kim &amp;quot;Towards A Rigorous Science of Interpretable Machine Learning&amp;quot; 2017 Page 5&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
'''Например''': модель решает, когда нужно класть ковидного больного в палату, а когда отправлять лечиться дома. По статистике люди болеющие астмой выживают чаще, чем здоровые, и логично предположить, что их можно отправлять лечится дома, но дело в том, что этих людей врачи лечат более тщательней, поэтому они и выживают чаще. Если бы мы верили модели в слепую, то люди с астмой просто бы умирали. Поэтому нам важно понять, почему модель пришла к тому или иному выводу.&lt;br /&gt;
&lt;br /&gt;
=== Когда нужна интерпретируемость ===&lt;br /&gt;
&lt;br /&gt;
* Когда целью является получение каких-либо знаний с помощью изучения построенной модели. &lt;br /&gt;
&lt;br /&gt;
* Когда алгоритм оптимизировал неполную цель. Например, когда автомобильный инженер получает предсказания о параметрах двигателя, но ему нужно построит в целом достаточно хороший и надёжный автомобиль.&lt;br /&gt;
&lt;br /&gt;
* Для безопасности сложных систем. Такие системы, в большинстве случаев, нельзя протестировать от начала до конца. Вычислительно тяжело просмотреть все возможное входные данные и сценарии развития событий.&lt;br /&gt;
&lt;br /&gt;
* Интерпретация тренировных данных, поиск выбросов в них.&lt;br /&gt;
&lt;br /&gt;
* Поиск ошибок в выводе модели.&lt;br /&gt;
&lt;br /&gt;
* Пользователь может больше доверять модели.&lt;br /&gt;
&lt;br /&gt;
=== Когда интерпретируемость не требуется ===&lt;br /&gt;
&lt;br /&gt;
* Влияние модели мало, а сама интерпретация требует большого количества ресурсов (предложение новых покупок на основе предыдущих в онлайн магазинах). &lt;br /&gt;
&lt;br /&gt;
* Проблема хорошо разработана, и специалистов обучают ещё в университетах.&lt;br /&gt;
&lt;br /&gt;
* Класс модели широко применяется: [[Линейная регрессия|линейные модели]] (стоимость квартиры: понятно, что это метраж, расстояние до метро, школы, детского сада и т.д., но когда параметров много, то уже сложно всё это держать в голове).&lt;br /&gt;
&lt;br /&gt;
* Необходимость скрыть систему (кому давать кредит, качество работы сотрудника, поисковое ранжирование).&lt;br /&gt;
&lt;br /&gt;
== Классификая моделей ==&lt;br /&gt;
* Post-Hoc (позволяют объяснить результаты модели) vs Intrinsic (накладывают ограничения на сложность самой модели).&lt;br /&gt;
* Специфические (работают только для конкретной архитектуры модели) vs агностические (можно применить ко всем моделям для решения конкретной задачи).&lt;br /&gt;
* Локальные (позволяют понять предсказание для конкретного объекта) vs глобальные (понимание в целом, какие признаки влияют на предсказание).&lt;br /&gt;
&lt;br /&gt;
== Примеры моделей ==&lt;br /&gt;
=== Пример интерпретируемой модели ===&lt;br /&gt;
&lt;br /&gt;
* Допустим есть модель в банке, которая помогает решить, давать ли кредит человеку или нет. Приходит в банк Вася, модель отказывает ему в кредите, вопрос почему? Интерпретируемая модель ответит, потому что у него, допустим, плохая кредитная история или маленькая зарплата, а по не интерпретируемой модели вряд ли будет что-то понятно.&lt;br /&gt;
&lt;br /&gt;
* Есть данные и задача бинарной [[Общие_понятия#.D0.A2.D0.B8.D0.BF.D1.8B_.D0.B7.D0.B0.D0.B4.D0.B0.D1.87|классификации]], но у нас огромное количество признаков, и мы построили [[Дерево решений и случайный лес| дерево решений]] для предсказания. И, например, мы заметили, что алгоритм построил нам дерево глубины 1, но при этом точность предсказания очень высока. Это значит, что у нас классы отлично разделимы, только по одному признаку. Это и есть пример хорошей интерпретируемости, смотреть на данные самому достаточно долго, а так же эксперт, работающий с данными, мог не подозревать о том, что для успешной классификации необходим только 1 признак, но проанализировав построенное дерево, все становится очевидно.&lt;br /&gt;
&lt;br /&gt;
=== Пример эффективной в предсказании, но не интерпретируемой модели ===&lt;br /&gt;
&lt;br /&gt;
* Допустим есть данные и задача бинарной классификации, и 99% объектов имеют класс 1, остальные 0. Модель a(x) = 1, имеет точность 99%, но проинтерпретировать ее нельзя для каких-то наших исследований, особенно если нас интересуют, как возникает класс 0. Такая модель не интерпретируема, так как не информативна.&lt;br /&gt;
&lt;br /&gt;
* Важным примером, являются данные, в которых присутствует [[Вариации_регрессии#.D0.9C.D0.BE.D1.82.D0.B8.D0.B2.D0.B0.D1.86.D0.B8.D1.8F|мультиколлинеарность]] признаков. В таком случае, при обучении линейной модели, мы [[Переобучение|переобучимся]]. Для того, чтобы бороться с этой проблемой можно с помощью [[Регуляризация|регуляризации]]. Но так как, теперь мы оптимизируем несколько другую функцию, то и веса для модели будут отличатся от реальной зависимости на данных, что повлечёт за собой потерю интерпретируемости.&lt;br /&gt;
&lt;br /&gt;
== Свойства интерпретируемых моделей ==&lt;br /&gt;
&lt;br /&gt;
* Предсказуемость и моделируемость: свойства, при которых человек способен предсказывать поведение и ошибки модели, а так же умение &amp;quot;симулировать&amp;quot; их. Например: сложные физические модели, где часто возможно абстрагировать простые правила для примерного предсказания результатов.&lt;br /&gt;
&lt;br /&gt;
* Разложимость и модульность: свойства, при которых человек способен декомпозировать модель на интепретируемые компоненты. Например: деревья решений или линейный модели для небольшой размерности.&lt;br /&gt;
&lt;br /&gt;
* Доверие: пользователь доволен предсказаниями модели, также модель может показать, когда она не совсем уверена в своём предсказании.&lt;br /&gt;
&lt;br /&gt;
* Информативность: из модели можно выявить вспомогательную информацию полезную для принятия какого-либо решения.&lt;br /&gt;
&lt;br /&gt;
* Cтабильность: статистические и оптимизационные свойства&lt;br /&gt;
&lt;br /&gt;
== Способы создания интерпретируемой модели ==&lt;br /&gt;
&lt;br /&gt;
=== Использовать только интерпретируемые модели ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Int2acc.jpg|thumb|400px| рис. 1. Зависимость интерпретируемости от точности.]]&lt;br /&gt;
&lt;br /&gt;
* Линейные модели.&lt;br /&gt;
&lt;br /&gt;
* Деревья решений, списки правил, наборы правил.&lt;br /&gt;
&lt;br /&gt;
* Модели основывающиеся на предыдущем опыте.&lt;br /&gt;
&lt;br /&gt;
'''Но''' не всё хорошо описывается этими моделями.&lt;br /&gt;
&lt;br /&gt;
=== Построить интерпретируемую модель поверх эмбендинга ===&lt;br /&gt;
&lt;br /&gt;
'''Пример:''' у нас есть лук. Если “лук” находится рядом с “чесноком”, то модель думает о “луке” как об овоще, если “лук” находится рядом с “пистолетом”, “рогаткой”, то модель думает о “луке” как об оружии. &lt;br /&gt;
&lt;br /&gt;
'''Но''' модель теперь интерпретируема, но сами признаки перестают быть таковым.&lt;br /&gt;
&lt;br /&gt;
=== Важность признаков ===&lt;br /&gt;
&lt;br /&gt;
Одна из возможностей проанализировать модель — оценить, насколько её решение зависит от отдельных признаков, какой признак внёс наибольший вес для нахождения решения модели.&lt;br /&gt;
&lt;br /&gt;
Отчётливо это можно понять благодаря следующему примеру. Модель определяет кто на картинке собака или волк. Допустим выборка для обучения оказалось не самой удачной, и все картинки с волками были на снегу, а с собаками на асфальте. Соответственно модель могла начать определять собаку или волка по асфальту или снегу. Благодаря данному виду интерпретации, модель нам можешь сказать, что главным признаком для принятия решения было не само животное, а её окружение.&lt;br /&gt;
&lt;br /&gt;
Одна из реализацией данной идеи является библиотека '''SHAP'''.&lt;br /&gt;
&lt;br /&gt;
'''SHAP''' (англ. SHapley Additive exPlanations) {{---}} это библиотека, которая для оценки важности признаков рассчитываются значения Шэпли&amp;lt;ref name=&amp;quot;Shapley&amp;gt;Статья в википедии о значениях Шэпли [https://en.wikipedia.org/wiki/Shapley_value]&amp;lt;/ref&amp;gt; (происходит оценка предсказаний модели с и без данного признака). &lt;br /&gt;
&lt;br /&gt;
Важность i-го признака здесь вычисляется по такой формуле:&amp;lt;ref name=&amp;quot;exp&amp;quot;&amp;gt; Реализация Shap [https://github.com/slundberg/shap]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{equation*} \phi_{i}(p) =\sum_{S \subseteq \{1,2..n\} / \{i\}} \frac{|S|!(n - |S| -1)!}{n!}(p(S \cup \{ i \}) - p(S)) \end{equation*}&amp;lt;/math&amp;gt;&amp;lt;ref name=&amp;quot;habr&amp;quot;&amp;gt;Павел Трошенков &amp;quot;Как интерпретировать предсказания моделей в SHAP&amp;quot; [https://habr.com/ru/post/428213]&amp;lt;/ref&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(S \cup \{ i \})&amp;lt;/math&amp;gt; {{---}} это предсказание модели с i-тым признаком,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(S)&amp;lt;/math&amp;gt; {{---}} это предсказание модели без i-того признака,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; {{---}} количество признаков,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; {{---}} произвольный набор признаков без i-того признака.&lt;br /&gt;
&lt;br /&gt;
Видно, что вычисление требует обучения модели на всевозможных подмножествах признаках, поэтому на практике применяют приближения формулы.&lt;br /&gt;
&lt;br /&gt;
=== Суррогатные модели ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lime.png|thumb|400px| рис. 2. Построение локальной суррогатной модели&amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt;Александр Дьяконов &amp;quot;Интерпретации чёрных ящиков&amp;quot; Рис.11 [https://dyakonov.org/2018/08/28/%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B0%D1%86%D0%B8%D0%B8-%D1%87%D1%91%D1%80%D0%BD%D1%8B%D1%85-%D1%8F%D1%89%D0%B8%D0%BA%D0%BE%D0%B2/]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Для интерпретации модели (далее именуемой как черный ящик) можно использовать интерпретируемую суррогатную модель, обученную на выводе черного ящика при различных входных данных. Так как суррогатная модель будет повторять поведение черного ящика, то на её основе можно интерпретировать данный черный ящик.&lt;br /&gt;
&lt;br /&gt;
Есть два типа суррогатных моделей: глобальная и локальная. &lt;br /&gt;
* Глобальная суррогатная  модель обучена на всем выводе черного ящика. Такая модель полностью повторяет поведение черного ящика, соответственно интерпретирует его на всей выборке.&lt;br /&gt;
* Локальная суррогатная модель обучена на выводе в какой-то окрестности определенной точки (рис. 2, где ЧЯ {{---}} черный ящик). Такая модель зачастую плохо интерпретирует всю выборку, но хорошо справляется с этой задачей в данной окрестности. &lt;br /&gt;
&lt;br /&gt;
Глобальную суррогатную модель довольно сложно построить, поэтому чаще всего прибегают к локальным моделям и интерпретируют определенные объекты.&lt;br /&gt;
&lt;br /&gt;
'''LIME''' (англ. Local Interpretable Model-agnostic Explanations) &amp;lt;ref name=&amp;quot;Lime&amp;quot;&amp;gt;Marco Tulio Ribeiro, Sameer Singh, Carlos Guestrin &amp;quot;Explaining the Predictions of Any Classifier&amp;quot; [https://www.kdd.org/kdd2016/papers/files/rfp0573-ribeiroA.pdf]&amp;lt;/ref&amp;gt; {{---}} это библиотека &amp;lt;ref name=&amp;quot;lime_exp&amp;gt;Реализация Lime [https://github.com/marcotcr/lime]&amp;lt;/ref&amp;gt;, которая строит локальную суррогатную модель.&lt;br /&gt;
&lt;br /&gt;
== Значения Шепли ==&lt;br /&gt;
Значения Шепли (англ. Shapley values) {{---}} метод из коалиционной теории игр, который помогает определить, как наиболее честно распределить выигрыш между игроками в зависимости от их вклада в победу. Игроки объединяются в коалиции, чтобы полуучить некоторую выгоду от этого объединения. В машинном обучении в качестве игроков выступают признаки, а в качестве выигрыша {{---}} вклад в предсказание. &lt;br /&gt;
Подходит для задач классификации и регрессии.&lt;br /&gt;
&lt;br /&gt;
Из вклада коалиций рассчитывается вклад каждого признака в итоговый прогноз. Значение Шепли {{---}} среднее между маргинальными вкладами всех возможных коалиций&amp;lt;ref name=&amp;quot;Shapley Values&amp;quot;&amp;gt;Формулы смотрите здесь [https://christophm.github.io/interpretable-ml-book/shapley.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
* [[Жизненный цикл модели машинного обучения]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Doshi-Velez and Kim &amp;quot;Towards A Rigorous Science of Interpretable Machine Learning&amp;quot; 2017[https://arxiv.org/pdf/1702.08608.pdf]&lt;br /&gt;
&lt;br /&gt;
* Sanmi Koyejo &amp;quot;Interpretability&amp;quot; MACHINE LEARNING SUMMER SCHOOL 2019 [https://github.com/mlss-2019/slides/blob/master/interpretability/MLSS-interpretability-koyejo.pdf]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8&amp;diff=80629</id>
		<title>Интерпретируемые модели</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8&amp;diff=80629"/>
				<updated>2021-02-09T14:05:44Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Интерпретируемая модель''' {{---}} модель, обладающая свойством '''интерпретируемости'''.&lt;br /&gt;
&lt;br /&gt;
'''Интерпретируемость''' {{---}} это свойство модели, которое показывает, что структуру данной модели может объяснить человек.&lt;br /&gt;
При этом структура модели не противоречит данным, на которых данная модель построена, а также она сохраняет некоторые свойства предоставленных данных.&lt;br /&gt;
При интерпретации модели могут быть объяснены принципы и закономерности, которые использует сама модель для предсказания [[Общие_понятия#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B0_.D0.BE.D0.B1.D1.83.D1.87.D0.B5.D0.BD.D0.B8.D1.8F|меток класса]] на конкретных данных.&lt;br /&gt;
&lt;br /&gt;
== Практическая польза ==&lt;br /&gt;
&lt;br /&gt;
Если модель машинного обучения работает хорошо, почему мы просто не доверяем модели и игнорируем факторы, из-за которых она приняла то или иное решение?&lt;br /&gt;
Проблема в том, что используя только метрику для измерения точности предсказания, возможно такое, что мы решим задачу не полностью или даже не правильно. Нас могут интересовать причины, по которым модель сделала это предсказание.&amp;lt;ref name=&amp;quot;inv&amp;quot;&amp;gt;Doshi-Velez and Kim &amp;quot;Towards A Rigorous Science of Interpretable Machine Learning&amp;quot; 2017 Page 5&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
'''Например''': модель решает, когда нужно класть ковидного больного в палату, а когда отправлять лечиться дома. По статистике люди болеющие астмой выживают чаще, чем здоровые, и логично предположить, что их можно отправлять лечится дома, но дело в том, что этих людей врачи лечат более тщательней, поэтому они и выживают чаще. Если бы мы верили модели в слепую, то люди с астмой просто бы умирали. Поэтому нам важно понять, почему модель пришла к тому или иному выводу.&lt;br /&gt;
&lt;br /&gt;
=== Когда нужна интерпретируемость ===&lt;br /&gt;
&lt;br /&gt;
* Когда целью является получение каких-либо знаний с помощью изучения построенной модели. &lt;br /&gt;
&lt;br /&gt;
* Когда алгоритм оптимизировал неполную цель. Например, когда автомобильный инженер получает предсказания о параметрах двигателя, но ему нужно построит в целом достаточно хороший и надёжный автомобиль.&lt;br /&gt;
&lt;br /&gt;
* Для безопасности сложных систем. Такие системы, в большинстве случаев, нельзя протестировать от начала до конца. Вычислительно тяжело просмотреть все возможное входные данные и сценарии развития событий.&lt;br /&gt;
&lt;br /&gt;
* Интерпретация тренировных данных, поиск выбросов в них.&lt;br /&gt;
&lt;br /&gt;
* Поиск ошибок в выводе модели.&lt;br /&gt;
&lt;br /&gt;
* Пользователь может больше доверять модели.&lt;br /&gt;
&lt;br /&gt;
=== Когда интерпретируемость не требуется ===&lt;br /&gt;
&lt;br /&gt;
* Влияние модели мало, а сама интерпретация требует большого количества ресурсов (предложение новых покупок на основе предыдущих в онлайн магазинах). &lt;br /&gt;
&lt;br /&gt;
* Проблема хорошо разработана, и специалистов обучают ещё в университетах.&lt;br /&gt;
&lt;br /&gt;
* Класс модели широко применяется: [[Линейная регрессия|линейные модели]] (стоимость квартиры: понятно, что это метраж, расстояние до метро, школы, детского сада и т.д., но когда параметров много, то уже сложно всё это держать в голове).&lt;br /&gt;
&lt;br /&gt;
* Необходимость скрыть систему (кому давать кредит, качество работы сотрудника, поисковое ранжирование).&lt;br /&gt;
&lt;br /&gt;
== Классификая моделей ==&lt;br /&gt;
* Post-Hoc (позволяют объяснить результаты модели) vs Intrinsic (накладывают ограничения на сложность самой модели).&lt;br /&gt;
* Специфические (работают только для конкретной архитектуры модели) vs агностические (можно применить ко всем моделям для решения конкретной задачи).&lt;br /&gt;
* Локальные (позволяют понять предсказание для конкретного объекта) vs глобальные (понимание в целом, какие признаки влияют на предсказание).&lt;br /&gt;
&lt;br /&gt;
== Примеры моделей ==&lt;br /&gt;
=== Пример интерпретируемой модели ===&lt;br /&gt;
&lt;br /&gt;
* Допустим есть модель в банке, которая помогает решить, давать ли кредит человеку или нет. Приходит в банк Вася, модель отказывает ему в кредите, вопрос почему? Интерпретируемая модель ответит, потому что у него, допустим, плохая кредитная история или маленькая зарплата, а по не интерпретируемой модели вряд ли будет что-то понятно.&lt;br /&gt;
&lt;br /&gt;
* Есть данные и задача бинарной [[Общие_понятия#.D0.A2.D0.B8.D0.BF.D1.8B_.D0.B7.D0.B0.D0.B4.D0.B0.D1.87|классификации]], но у нас огромное количество признаков, и мы построили [[Дерево решений и случайный лес| дерево решений]] для предсказания. И, например, мы заметили, что алгоритм построил нам дерево глубины 1, но при этом точность предсказания очень высока. Это значит, что у нас классы отлично разделимы, только по одному признаку. Это и есть пример хорошей интерпретируемости, смотреть на данные самому достаточно долго, а так же эксперт, работающий с данными, мог не подозревать о том, что для успешной классификации необходим только 1 признак, но проанализировав построенное дерево, все становится очевидно.&lt;br /&gt;
&lt;br /&gt;
=== Пример эффективной в предсказании, но не интерпретируемой модели ===&lt;br /&gt;
&lt;br /&gt;
* Допустим есть данные и задача бинарной классификации, и 99% объектов имеют класс 1, остальные 0. Модель a(x) = 1, имеет точность 99%, но проинтерпретировать ее нельзя для каких-то наших исследований, особенно если нас интересуют, как возникает класс 0. Такая модель не интерпретируема, так как не информативна.&lt;br /&gt;
&lt;br /&gt;
* Важным примером, являются данные, в которых присутствует [[Вариации_регрессии#.D0.9C.D0.BE.D1.82.D0.B8.D0.B2.D0.B0.D1.86.D0.B8.D1.8F|мультиколлинеарность]] признаков. В таком случае, при обучении линейной модели, мы [[Переобучение|переобучимся]]. Для того, чтобы бороться с этой проблемой можно с помощью [[Регуляризация|регуляризации]]. Но так как, теперь мы оптимизируем несколько другую функцию, то и веса для модели будут отличатся от реальной зависимости на данных, что повлечёт за собой потерю интерпретируемости.&lt;br /&gt;
&lt;br /&gt;
== Свойства интерпретируемых моделей ==&lt;br /&gt;
&lt;br /&gt;
* Предсказуемость и моделируемость: свойства, при которых человек способен предсказывать поведение и ошибки модели, а так же умение &amp;quot;симулировать&amp;quot; их. Например: сложные физические модели, где часто возможно абстрагировать простые правила для примерного предсказания результатов.&lt;br /&gt;
&lt;br /&gt;
* Разложимость и модульность: свойства, при которых человек способен декомпозировать модель на интепретируемые компоненты. Например: деревья решений или линейный модели для небольшой размерности.&lt;br /&gt;
&lt;br /&gt;
* Доверие: пользователь доволен предсказаниями модели, также модель может показать, когда она не совсем уверена в своём предсказании.&lt;br /&gt;
&lt;br /&gt;
* Информативность: из модели можно выявить вспомогательную информацию полезную для принятия какого-либо решения.&lt;br /&gt;
&lt;br /&gt;
* Cтабильность: статистические и оптимизационные свойства&lt;br /&gt;
&lt;br /&gt;
== Способы создания интерпретируемой модели ==&lt;br /&gt;
&lt;br /&gt;
=== Использовать только интерпретируемые модели ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Int2acc.jpg|thumb|400px| рис. 1. Зависимость интерпретируемости от точности.]]&lt;br /&gt;
&lt;br /&gt;
* Линейные модели.&lt;br /&gt;
&lt;br /&gt;
* Деревья решений, списки правил, наборы правил.&lt;br /&gt;
&lt;br /&gt;
* Модели основывающиеся на предыдущем опыте.&lt;br /&gt;
&lt;br /&gt;
'''Но''' не всё хорошо описывается этими моделями.&lt;br /&gt;
&lt;br /&gt;
=== Построить интерпретируемую модель поверх эмбендинга ===&lt;br /&gt;
&lt;br /&gt;
'''Пример:''' у нас есть лук. Если “лук” находится рядом с “чесноком”, то модель думает о “луке” как об овоще, если “лук” находится рядом с “пистолетом”, “рогаткой”, то модель думает о “луке” как об оружии. &lt;br /&gt;
&lt;br /&gt;
'''Но''' модель теперь интерпретируема, но сами признаки перестают быть таковым.&lt;br /&gt;
&lt;br /&gt;
=== Важность признаков ===&lt;br /&gt;
&lt;br /&gt;
Одна из возможностей проанализировать модель — оценить, насколько её решение зависит от отдельных признаков, какой признак внёс наибольший вес для нахождения решения модели.&lt;br /&gt;
&lt;br /&gt;
Отчётливо это можно понять благодаря следующему примеру. Модель определяет кто на картинке собака или волк. Допустим выборка для обучения оказалось не самой удачной, и все картинки с волками были на снегу, а с собаками на асфальте. Соответственно модель могла начать определять собаку или волка по асфальту или снегу. Благодаря данному виду интерпретации, модель нам можешь сказать, что главным признаком для принятия решения было не само животное, а её окружение.&lt;br /&gt;
&lt;br /&gt;
Одна из реализацией данной идеи является библиотека '''SHAP'''.&lt;br /&gt;
&lt;br /&gt;
'''SHAP''' (англ. SHapley Additive exPlanations) {{---}} это библиотека, которая для оценки важности признаков рассчитываются значения Шэпли&amp;lt;ref name=&amp;quot;Shapley&amp;gt;Статья в википедии о значениях Шэпли [https://en.wikipedia.org/wiki/Shapley_value]&amp;lt;/ref&amp;gt; (происходит оценка предсказаний модели с и без данного признака). &lt;br /&gt;
&lt;br /&gt;
Важность i-го признака здесь вычисляется по такой формуле:&amp;lt;ref name=&amp;quot;exp&amp;quot;&amp;gt; Реализация Shap [https://github.com/slundberg/shap]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{equation*} \phi_{i}(p) =\sum_{S \subseteq \{1,2..n\} / \{i\}} \frac{|S|!(n - |S| -1)!}{n!}(p(S \cup \{ i \}) - p(S)) \end{equation*}&amp;lt;/math&amp;gt;&amp;lt;ref name=&amp;quot;habr&amp;quot;&amp;gt;Павел Трошенков &amp;quot;Как интерпретировать предсказания моделей в SHAP&amp;quot; [https://habr.com/ru/post/428213]&amp;lt;/ref&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(S \cup \{ i \})&amp;lt;/math&amp;gt; {{---}} это предсказание модели с i-тым признаком,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(S)&amp;lt;/math&amp;gt; {{---}} это предсказание модели без i-того признака,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; {{---}} количество признаков,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; {{---}} произвольный набор признаков без i-того признака.&lt;br /&gt;
&lt;br /&gt;
Видно, что вычисление требует обучения модели на всевозможных подмножествах признаках, поэтому на практике применяют приближения формулы.&lt;br /&gt;
&lt;br /&gt;
=== Суррогатные модели ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lime.png|thumb|400px| рис. 2. Построение локальной суррогатной модели&amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt;Александр Дьяконов &amp;quot;Интерпретации чёрных ящиков&amp;quot; Рис.11 [https://dyakonov.org/2018/08/28/%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B0%D1%86%D0%B8%D0%B8-%D1%87%D1%91%D1%80%D0%BD%D1%8B%D1%85-%D1%8F%D1%89%D0%B8%D0%BA%D0%BE%D0%B2/]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Для интерпретации модели (далее именуемой как черный ящик) можно использовать интерпретируемую суррогатную модель, обученную на выводе черного ящика при различных входных данных. Так как суррогатная модель будет повторять поведение черного ящика, то на её основе можно интерпретировать данный черный ящик.&lt;br /&gt;
&lt;br /&gt;
Есть два типа суррогатных моделей: глобальная и локальная. &lt;br /&gt;
* Глобальная суррогатная  модель обучена на всем выводе черного ящика. Такая модель полностью повторяет поведение черного ящика, соответственно интерпретирует его на всей выборке.&lt;br /&gt;
* Локальная суррогатная модель обучена на выводе в какой-то окрестности определенной точки (рис. 2, где ЧЯ {{---}} черный ящик). Такая модель зачастую плохо интерпретирует всю выборку, но хорошо справляется с этой задачей в данной окрестности. &lt;br /&gt;
&lt;br /&gt;
Глобальную суррогатную модель довольно сложно построить, поэтому чаще всего прибегают к локальным моделям и интерпретируют определенные объекты.&lt;br /&gt;
&lt;br /&gt;
'''LIME''' (англ. Local Interpretable Model-agnostic Explanations) &amp;lt;ref name=&amp;quot;Lime&amp;quot;&amp;gt;Marco Tulio Ribeiro, Sameer Singh, Carlos Guestrin &amp;quot;Explaining the Predictions of Any Classifier&amp;quot; [https://www.kdd.org/kdd2016/papers/files/rfp0573-ribeiroA.pdf]&amp;lt;/ref&amp;gt; {{---}} это библиотека &amp;lt;ref name=&amp;quot;lime_exp&amp;gt;Реализация Lime [https://github.com/marcotcr/lime]&amp;lt;/ref&amp;gt;, которая строит локальную суррогатную модель.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
* [[Жизненный цикл модели машинного обучения]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Doshi-Velez and Kim &amp;quot;Towards A Rigorous Science of Interpretable Machine Learning&amp;quot; 2017[https://arxiv.org/pdf/1702.08608.pdf]&lt;br /&gt;
&lt;br /&gt;
* Sanmi Koyejo &amp;quot;Interpretability&amp;quot; MACHINE LEARNING SUMMER SCHOOL 2019 [https://github.com/mlss-2019/slides/blob/master/interpretability/MLSS-interpretability-koyejo.pdf]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8&amp;diff=80628</id>
		<title>Интерпретируемые модели</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8&amp;diff=80628"/>
				<updated>2021-02-09T13:59:01Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Когда нужна интерпретируемость */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Интерпретируемая модель''' {{---}} модель, обладающая свойством '''интерпретируемости'''.&lt;br /&gt;
&lt;br /&gt;
'''Интерпретируемость''' {{---}} это свойство модели, которое показывает, что структуру данной модели может объяснить человек.&lt;br /&gt;
При этом структура модели не противоречит данным, на которых данная модель построена, а также она сохраняет некоторые свойства предоставленных данных.&lt;br /&gt;
При интерпретации модели могут быть объяснены принципы и закономерности, которые использует сама модель для предсказания [[Общие_понятия#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B0_.D0.BE.D0.B1.D1.83.D1.87.D0.B5.D0.BD.D0.B8.D1.8F|меток класса]] на конкретных данных.&lt;br /&gt;
&lt;br /&gt;
== Практическая польза ==&lt;br /&gt;
&lt;br /&gt;
Если модель машинного обучения работает хорошо, почему мы просто не доверяем модели и игнорируем факторы, из-за которых она приняла то или иное решение?&lt;br /&gt;
Проблема в том, что используя только метрику для измерения точности предсказания, возможно такое, что мы решим задачу не полностью или даже не правильно. Нас могут интересовать причины, по которым модель сделала это предсказание.&amp;lt;ref name=&amp;quot;inv&amp;quot;&amp;gt;Doshi-Velez and Kim &amp;quot;Towards A Rigorous Science of Interpretable Machine Learning&amp;quot; 2017 Page 5&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
'''Например''': модель решает, когда нужно класть ковидного больного в палату, а когда отправлять лечиться дома. По статистике люди болеющие астмой выживают чаще, чем здоровые, и логично предположить, что их можно отправлять лечится дома, но дело в том, что этих людей врачи лечат более тщательней, поэтому они и выживают чаще. Если бы мы верили модели в слепую, то люди с астмой просто бы умирали. Поэтому нам важно понять, почему модель пришла к тому или иному выводу.&lt;br /&gt;
&lt;br /&gt;
=== Когда нужна интерпретируемость ===&lt;br /&gt;
&lt;br /&gt;
* Когда целью является получение каких-либо знаний с помощью изучения построенной модели. &lt;br /&gt;
&lt;br /&gt;
* Когда алгоритм оптимизировал неполную цель. Например, когда автомобильный инженер получает предсказания о параметрах двигателя, но ему нужно построит в целом достаточно хороший и надёжный автомобиль.&lt;br /&gt;
&lt;br /&gt;
* Для безопасности сложных систем. Такие системы, в большинстве случаев, нельзя протестировать от начала до конца. Вычислительно тяжело просмотреть все возможное входные данные и сценарии развития событий.&lt;br /&gt;
&lt;br /&gt;
* Интерпретация тренировных данных, поиск выбросов в них.&lt;br /&gt;
&lt;br /&gt;
* Поиск ошибок в выводе модели.&lt;br /&gt;
&lt;br /&gt;
* Пользователь может больше доверять модели.&lt;br /&gt;
&lt;br /&gt;
=== Когда интерпретируемость не требуется ===&lt;br /&gt;
&lt;br /&gt;
* Влияние модели мало, а сама интерпретация требует большого количества ресурсов (предложение новых покупок на основе предыдущих в онлайн магазинах). &lt;br /&gt;
&lt;br /&gt;
* Проблема хорошо разработана, и специалистов обучают ещё в университетах.&lt;br /&gt;
&lt;br /&gt;
* Класс модели широко применяется: [[Линейная регрессия|линейные модели]] (стоимость квартиры: понятно, что это метраж, расстояние до метро, школы, детского сада и т.д., но когда параметров много, то уже сложно всё это держать в голове).&lt;br /&gt;
&lt;br /&gt;
* Необходимость скрыть систему (кому давать кредит, качество работы сотрудника, поисковое ранжирование).&lt;br /&gt;
&lt;br /&gt;
== Примеры моделей ==&lt;br /&gt;
=== Пример интерпретируемой модели ===&lt;br /&gt;
&lt;br /&gt;
* Допустим есть модель в банке, которая помогает решить, давать ли кредит человеку или нет. Приходит в банк Вася, модель отказывает ему в кредите, вопрос почему? Интерпретируемая модель ответит, потому что у него, допустим, плохая кредитная история или маленькая зарплата, а по не интерпретируемой модели вряд ли будет что-то понятно.&lt;br /&gt;
&lt;br /&gt;
* Есть данные и задача бинарной [[Общие_понятия#.D0.A2.D0.B8.D0.BF.D1.8B_.D0.B7.D0.B0.D0.B4.D0.B0.D1.87|классификации]], но у нас огромное количество признаков, и мы построили [[Дерево решений и случайный лес| дерево решений]] для предсказания. И, например, мы заметили, что алгоритм построил нам дерево глубины 1, но при этом точность предсказания очень высока. Это значит, что у нас классы отлично разделимы, только по одному признаку. Это и есть пример хорошей интерпретируемости, смотреть на данные самому достаточно долго, а так же эксперт, работающий с данными, мог не подозревать о том, что для успешной классификации необходим только 1 признак, но проанализировав построенное дерево, все становится очевидно.&lt;br /&gt;
&lt;br /&gt;
=== Пример эффективной в предсказании, но не интерпретируемой модели ===&lt;br /&gt;
&lt;br /&gt;
* Допустим есть данные и задача бинарной классификации, и 99% объектов имеют класс 1, остальные 0. Модель a(x) = 1, имеет точность 99%, но проинтерпретировать ее нельзя для каких-то наших исследований, особенно если нас интересуют, как возникает класс 0. Такая модель не интерпретируема, так как не информативна.&lt;br /&gt;
&lt;br /&gt;
* Важным примером, являются данные, в которых присутствует [[Вариации_регрессии#.D0.9C.D0.BE.D1.82.D0.B8.D0.B2.D0.B0.D1.86.D0.B8.D1.8F|мультиколлинеарность]] признаков. В таком случае, при обучении линейной модели, мы [[Переобучение|переобучимся]]. Для того, чтобы бороться с этой проблемой можно с помощью [[Регуляризация|регуляризации]]. Но так как, теперь мы оптимизируем несколько другую функцию, то и веса для модели будут отличатся от реальной зависимости на данных, что повлечёт за собой потерю интерпретируемости.&lt;br /&gt;
&lt;br /&gt;
== Свойства интерпретируемых моделей ==&lt;br /&gt;
&lt;br /&gt;
* Предсказуемость и моделируемость: свойства, при которых человек способен предсказывать поведение и ошибки модели, а так же умение &amp;quot;симулировать&amp;quot; их. Например: сложные физические модели, где часто возможно абстрагировать простые правила для примерного предсказания результатов.&lt;br /&gt;
&lt;br /&gt;
* Разложимость и модульность: свойства, при которых человек способен декомпозировать модель на интепретируемые компоненты. Например: деревья решений или линейный модели для небольшой размерности.&lt;br /&gt;
&lt;br /&gt;
* Доверие: пользователь доволен предсказаниями модели, также модель может показать, когда она не совсем уверена в своём предсказании.&lt;br /&gt;
&lt;br /&gt;
* Информативность: из модели можно выявить вспомогательную информацию полезную для принятия какого-либо решения.&lt;br /&gt;
&lt;br /&gt;
* Cтабильность: статистические и оптимизационные свойства&lt;br /&gt;
&lt;br /&gt;
== Способы создания интерпретируемой модели ==&lt;br /&gt;
&lt;br /&gt;
=== Использовать только интерпретируемые модели ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Int2acc.jpg|thumb|400px| рис. 1. Зависимость интерпретируемости от точности.]]&lt;br /&gt;
&lt;br /&gt;
* Линейные модели.&lt;br /&gt;
&lt;br /&gt;
* Деревья решений, списки правил, наборы правил.&lt;br /&gt;
&lt;br /&gt;
* Модели основывающиеся на предыдущем опыте.&lt;br /&gt;
&lt;br /&gt;
'''Но''' не всё хорошо описывается этими моделями.&lt;br /&gt;
&lt;br /&gt;
=== Построить интерпретируемую модель поверх эмбендинга ===&lt;br /&gt;
&lt;br /&gt;
'''Пример:''' у нас есть лук. Если “лук” находится рядом с “чесноком”, то модель думает о “луке” как об овоще, если “лук” находится рядом с “пистолетом”, “рогаткой”, то модель думает о “луке” как об оружии. &lt;br /&gt;
&lt;br /&gt;
'''Но''' модель теперь интерпретируема, но сами признаки перестают быть таковым.&lt;br /&gt;
&lt;br /&gt;
=== Важность признаков ===&lt;br /&gt;
&lt;br /&gt;
Одна из возможностей проанализировать модель — оценить, насколько её решение зависит от отдельных признаков, какой признак внёс наибольший вес для нахождения решения модели.&lt;br /&gt;
&lt;br /&gt;
Отчётливо это можно понять благодаря следующему примеру. Модель определяет кто на картинке собака или волк. Допустим выборка для обучения оказалось не самой удачной, и все картинки с волками были на снегу, а с собаками на асфальте. Соответственно модель могла начать определять собаку или волка по асфальту или снегу. Благодаря данному виду интерпретации, модель нам можешь сказать, что главным признаком для принятия решения было не само животное, а её окружение.&lt;br /&gt;
&lt;br /&gt;
Одна из реализацией данной идеи является библиотека '''SHAP'''.&lt;br /&gt;
&lt;br /&gt;
'''SHAP''' (англ. SHapley Additive exPlanations) {{---}} это библиотека, которая для оценки важности признаков рассчитываются значения Шэпли&amp;lt;ref name=&amp;quot;Shapley&amp;gt;Статья в википедии о значениях Шэпли [https://en.wikipedia.org/wiki/Shapley_value]&amp;lt;/ref&amp;gt; (происходит оценка предсказаний модели с и без данного признака). &lt;br /&gt;
&lt;br /&gt;
Важность i-го признака здесь вычисляется по такой формуле:&amp;lt;ref name=&amp;quot;exp&amp;quot;&amp;gt; Реализация Shap [https://github.com/slundberg/shap]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{equation*} \phi_{i}(p) =\sum_{S \subseteq \{1,2..n\} / \{i\}} \frac{|S|!(n - |S| -1)!}{n!}(p(S \cup \{ i \}) - p(S)) \end{equation*}&amp;lt;/math&amp;gt;&amp;lt;ref name=&amp;quot;habr&amp;quot;&amp;gt;Павел Трошенков &amp;quot;Как интерпретировать предсказания моделей в SHAP&amp;quot; [https://habr.com/ru/post/428213]&amp;lt;/ref&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(S \cup \{ i \})&amp;lt;/math&amp;gt; {{---}} это предсказание модели с i-тым признаком,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(S)&amp;lt;/math&amp;gt; {{---}} это предсказание модели без i-того признака,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; {{---}} количество признаков,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; {{---}} произвольный набор признаков без i-того признака.&lt;br /&gt;
&lt;br /&gt;
Видно, что вычисление требует обучения модели на всевозможных подмножествах признаках, поэтому на практике применяют приближения формулы.&lt;br /&gt;
&lt;br /&gt;
=== Суррогатные модели ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lime.png|thumb|400px| рис. 2. Построение локальной суррогатной модели&amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt;Александр Дьяконов &amp;quot;Интерпретации чёрных ящиков&amp;quot; Рис.11 [https://dyakonov.org/2018/08/28/%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B0%D1%86%D0%B8%D0%B8-%D1%87%D1%91%D1%80%D0%BD%D1%8B%D1%85-%D1%8F%D1%89%D0%B8%D0%BA%D0%BE%D0%B2/]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Для интерпретации модели (далее именуемой как черный ящик) можно использовать интерпретируемую суррогатную модель, обученную на выводе черного ящика при различных входных данных. Так как суррогатная модель будет повторять поведение черного ящика, то на её основе можно интерпретировать данный черный ящик.&lt;br /&gt;
&lt;br /&gt;
Есть два типа суррогатных моделей: глобальная и локальная. &lt;br /&gt;
* Глобальная суррогатная  модель обучена на всем выводе черного ящика. Такая модель полностью повторяет поведение черного ящика, соответственно интерпретирует его на всей выборке.&lt;br /&gt;
* Локальная суррогатная модель обучена на выводе в какой-то окрестности определенной точки (рис. 2, где ЧЯ {{---}} черный ящик). Такая модель зачастую плохо интерпретирует всю выборку, но хорошо справляется с этой задачей в данной окрестности. &lt;br /&gt;
&lt;br /&gt;
Глобальную суррогатную модель довольно сложно построить, поэтому чаще всего прибегают к локальным моделям и интерпретируют определенные объекты.&lt;br /&gt;
&lt;br /&gt;
'''LIME''' (англ. Local Interpretable Model-agnostic Explanations) &amp;lt;ref name=&amp;quot;Lime&amp;quot;&amp;gt;Marco Tulio Ribeiro, Sameer Singh, Carlos Guestrin &amp;quot;Explaining the Predictions of Any Classifier&amp;quot; [https://www.kdd.org/kdd2016/papers/files/rfp0573-ribeiroA.pdf]&amp;lt;/ref&amp;gt; {{---}} это библиотека &amp;lt;ref name=&amp;quot;lime_exp&amp;gt;Реализация Lime [https://github.com/marcotcr/lime]&amp;lt;/ref&amp;gt;, которая строит локальную суррогатную модель.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
* [[Жизненный цикл модели машинного обучения]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Doshi-Velez and Kim &amp;quot;Towards A Rigorous Science of Interpretable Machine Learning&amp;quot; 2017[https://arxiv.org/pdf/1702.08608.pdf]&lt;br /&gt;
&lt;br /&gt;
* Sanmi Koyejo &amp;quot;Interpretability&amp;quot; MACHINE LEARNING SUMMER SCHOOL 2019 [https://github.com/mlss-2019/slides/blob/master/interpretability/MLSS-interpretability-koyejo.pdf]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B&amp;diff=80627</id>
		<title>Диалоговые системы</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B&amp;diff=80627"/>
				<updated>2021-02-09T11:06:56Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Целеориентированные диалоговые системы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Диалоговые системы стремительно набирают популярность. Это связано с тем, что&lt;br /&gt;
&lt;br /&gt;
* люди стали чаще общаться при помощи текста, используя мессенджеры &amp;lt;ref&amp;gt;[https://www.crowdynews.com/blog/messaging-apps-bots-publishers-facebook-messenger-whatsapp/ Jorrith Schaap, Are Messaging Apps The Next Frontier For Publishers?]&amp;lt;/ref&amp;gt;,&lt;br /&gt;
* могие компании заинтересованы в анализе и автоматизации общения с клиентами &amp;lt;ref&amp;gt;[https://platforma-online.ru/media/detail/issledovanie-rossiyskogo-rynka-chat-botov/ Юлия Фуколова, Исследование российского рынка чат-ботов]&amp;lt;/ref&amp;gt;,&lt;br /&gt;
* растет число «умных» бытовых предметов, которыми можно управлять &amp;lt;ref&amp;gt;[https://iot-analytics.com/state-of-the-iot-update-q1-q2-2018-number-of-iot-devices-now-7b/ Knud Lasse Lueth, State of the IoT 2018: Number of IoT devices now at 7B – Market accelerating]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Наиболее часто диалоговые системы используют в продажах, поддержке и маркетинге. Они используются для выполнения рутинных операций, которые можно свести к конкретному алгоритму, ищут и агрегируют данные, распространяют информацию.&lt;br /&gt;
&lt;br /&gt;
== Определение ==&lt;br /&gt;
&lt;br /&gt;
Диалоговые системы (англ. conversational agents, CAs) {{---}} компьютерные системы, предназначенные для общения с человеком. Они имитируют поведение человека и обеспечивают естественный способ получения информации, что позволяет значительно упростить руководство пользователя и тем самым повысить удобство взаимодействия с такими системами.&lt;br /&gt;
&lt;br /&gt;
Диалоговую систему также называют разговорным искусственным интеллектом или просто ботом.&lt;br /&gt;
&lt;br /&gt;
Диалоговая система может в разной степени являться ''целеориентированной системой'' (англ. goal/task-oriented) или ''чат-ориентированной'' (англ. chat-oriented). Как правило, чат-ориентированные системы, в отличие от целеориентированных, поддерживают большое количество доменов, но не способны различать много вопросов в рамках кажного из них.&lt;br /&gt;
&lt;br /&gt;
{{Определение | definition=&lt;br /&gt;
'''Домен (англ. domain)''' {{---}} область знаний, которая относится к запросу пользователя.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Обычно целеориентированные и чат-ориентированные системы исследуют отдельно, но на практике многие системы являются универсальными. Схема идеальной универсальной модели диалоговой системы приведена на рисунке 1. Модель является абстрактной, ее полной реализации не существует. &lt;br /&gt;
&lt;br /&gt;
[[Файл : Perfect-n2n.png | 600px | thumb | right |&lt;br /&gt;
[https://image.slidesharecdn.com/deeppavlovos2019-190529124953/95/deeppavlov-2019-23-1024.jpg?cb=1559135208 Рисунок 1]. Схема идеальной диалоговой системы]]&lt;br /&gt;
&lt;br /&gt;
Этапы обучения общего кодера (блок 3):&lt;br /&gt;
&lt;br /&gt;
* обучение с моделированием языка на данных диалога,&lt;br /&gt;
* ''тонкая настройка'' на всех специфичных для задач данных.&lt;br /&gt;
&lt;br /&gt;
Обучение блоков 4 и 5:&lt;br /&gt;
&lt;br /&gt;
* предобучение для каждой задачи,&lt;br /&gt;
* тонкая настройка на всех специфичных для задач данных.&lt;br /&gt;
&lt;br /&gt;
Блоки 6 и 7 обучаются на всех специфичных для задач данных.&lt;br /&gt;
&lt;br /&gt;
{{Определение | definition=&lt;br /&gt;
'''Тонкая настройка''' (англ. fine-turning) {{---}} подход к обучению, когда модель, обученная на большом количестве данных, повторно обучается на сравнительно небольшом количестве специфичных данных, чтобы скорректировать веса.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
История диалога (блок 0) используется, чтобы обратиться к множеству внешних источников информации (блок 1). Затем формируется полный контекст диалога, который включает персональные данные пользователя, информацию из внешних источников, историю диалога (блок 2). Контекст при помощи трансформера структурируется и передается множеству компонентов, которые решают определенные задачи: в блоке 4 выполняется оценка настроения пользования (англ. sentiment), поиск именованных сущностей (NER), [[Обработка естественного языка#Частеречная разметка | выделение частей речи (POS)]], разрешение ''кореферентности''; в блоке 5 множество специфичных диалоговых моделей выдают свой ответ.  Набор полученных ответов кодируется (блок 6) и ранжируется (блок 7) с учетом контекста.&lt;br /&gt;
&lt;br /&gt;
{{Определение | definition=&lt;br /&gt;
'''Разрешение кореферентности''' (англ. сoreference resolution) {{---}} задача поиска в тексте всех выражений, которые ссылаются на определенную сущность в тексте.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Целеориентированные диалоговые системы ==&lt;br /&gt;
&lt;br /&gt;
Задачей целеориентированных систем является достижение определенных целей при помощи общения с пользователем. Примером цели может быть поиск книги или включение света. &lt;br /&gt;
=== Классическая архитектура ===&lt;br /&gt;
&lt;br /&gt;
Классический метод построения целеориентированных систем заключается в использовании цепочки модулей (конвейера), которая изображена на рисунке 2.&lt;br /&gt;
&lt;br /&gt;
[[Файл : Ds-pipeline-to.png | 500px | thumb | right |&lt;br /&gt;
Рисунок 2. Диаграмма классической архитектуры диалоговой системы]]&lt;br /&gt;
&lt;br /&gt;
Описание модулей:&lt;br /&gt;
&lt;br /&gt;
* '''ASR'''. На вход поступает речь пользователя, которая затем [[Распознавание речи | распознается]] и переводится в текст. Результат работы компонента называют ''гипотезой'', так как полученный текст может соответствовать исходному сообщению не полностью.&lt;br /&gt;
&lt;br /&gt;
* '''NLU'''. Фраза в текстовом виде анализируется системой: определяется домен, намерение, именованные сущности. Для распознавания намерений может применяться обученный на [[Векторное представление слов | векторном представлении фраз]] классификатор. [[Обработка естественного языка#spaCy | Распознавание именованных сущеностей]] является отдельной задачей извлечения информации. Для ее решения используются [[Теория формальных языков | формальные языки]], статистические модели и их комбинации. В результате работы компонента создается формальное описание фразы {{---}} семантический фрейм.&lt;br /&gt;
&lt;br /&gt;
* '''DM'''. Состоянием диалога или контекстом является информация, которая была получена при общении с пользователем ранее. В соответствии с текущим состоянием выбирается политика поведения системы, корректируется семантический фрейм. В качестве поставщика знаний может выступать СУБД или Web API.&lt;br /&gt;
&lt;br /&gt;
* '''NLG'''. В соответствии с выбранным действием осуществляется генерация ответа пользователю на естественном языке. Для генерации применяются [[Генерация текста | генеративные модели или шаблоны]].&lt;br /&gt;
&lt;br /&gt;
{{Определение | definition=&lt;br /&gt;
'''Намерение (англ. intent)''' {{---}} желание пользователя в рамках произесенной фразы.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение | definition=&lt;br /&gt;
'''Именованная сущность (англ. named entity)''' {{---}} слово во фразе пользователя, которое можно отнести к определенному типу.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение | definition=&lt;br /&gt;
'''Слот (англ. named entity)''' {{---}} параметр запроса пользователя, ограниченный множеством допустимых значений.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Обычно после распознавания именованных сущностей выполняется ''заполнение слотов'' (англ. slot filling), в ходе которого каждая найденная сущность приводится к своей нормальной форме с учетом ее типа и множества возможных значений. Заполнение слотов позволяет не учитывать морфологию сущности при дальнейшей ее обработке. Простейшим подходом к нормализации сущностей является поиск с использованием расстояния Левенштейна. После определения типа сущности, она сравнивается с другими сущностями того же типа из базы данных. В качестве нормальной формы выбирается та, до которой расстояние наименьшее, либо можно выбрать несколько сущностей с наименьшим расстоянием и предоставить выбор пользователю (такой подход также применим для исправления опечаток).&lt;br /&gt;
&lt;br /&gt;
Для получения численного представления текста используются различные языковые модели: [[Векторное представление слов#word2vec | Word2Vec]], [https://github.com/coetaur0/ESIM ESIM], [[Генерация текста#GPT-2 | GPT]], [[Векторное представление слов#BERT | BERT]]. Каждой определяется свой способ представления слов или их последовательности для наиболее точного извлечения смысловых значений. С хорошей языковой моделью достаточно около 100 примеров для хорошей классификации намерения &amp;lt;ref&amp;gt;[https://image.slidesharecdn.com/intentdetectionbenchmarkaugust2017-170817145622/95/nlu-intent-detection-benchmark-by-intento-august-2017-31-1024.jpg?cb=1503310100 Konstantin Savenkov, Intent Detection Benchmark by Intento]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Система с классической архитектурой плохо масштабируется. Так как сценарии диалога нужно определять вручную, их становится сложно согласовывать при большом количестве.&lt;br /&gt;
&lt;br /&gt;
=== Нейросетевая архитектура ===&lt;br /&gt;
&lt;br /&gt;
Если заменить каждую часть классической архитектуры искусственной нейронной сетью, то получим архитектуру изображенную на рисунке 3.&lt;br /&gt;
&lt;br /&gt;
Входом у модели с данной архитектурой может быть компонент, который выполняет предобработку фразы пользователя и передает результаты внешним сетям (Intent Network и Belief Tracker).&lt;br /&gt;
&lt;br /&gt;
Описание каждой части:&lt;br /&gt;
&lt;br /&gt;
[[Файл : Ds-nn-to.png | 400px | thumb | right | Рисунок 3 &amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1604.04562.pdf Tsung-Hsien Wen, David Vandyke, A Network-based End-to-End Trainable Task-oriented Dialogue System]&amp;lt;/ref&amp;gt;. Нейросетевая архитектура диалоговой системы]]&lt;br /&gt;
&lt;br /&gt;
* '''Intent Network'''. Кодирующая сеть, которая преобразует последовательность токенов &amp;lt;tex&amp;gt; w_0^t, w_1^t, \ldots, w_N^t &amp;lt;/tex&amp;gt; в вектор &amp;lt;tex&amp;gt; \mathbf{z}_t &amp;lt;/tex&amp;gt;. В качестве вектора &amp;lt;tex&amp;gt; \mathbf{z}_t &amp;lt;/tex&amp;gt; может выступать скрытый слой [[Долгая краткосрочная память | LSTM-сети]] &amp;lt;tex&amp;gt; \mathbf{z}_t^N &amp;lt;/tex&amp;gt;:&amp;lt;br /&amp;gt; &amp;lt;tex&amp;gt; \mathbf{z}_t = \mathbf{z}_t^N = \operatorname{LSTM}(w_0^t, w_1^t, ..., w_N^t) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Belief Tracker'''. В реализации используется [[Рекуррентные нейронные сети | RNN-сеть]], на вход которой поступает предобработанная фраза пользователя. Дает распределение вероятностей &amp;lt;tex&amp;gt; \mathbf{p}_s^t &amp;lt;/tex&amp;gt; по всем значениям определенного слота &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Database Operator'''. Выполняет запрос к базе данных по сущностям &amp;lt;tex&amp;gt; \{ \operatorname{argmax} \mathbf{p}_s^t \} &amp;lt;/tex&amp;gt; и возвращает вектор &amp;lt;tex&amp;gt; \mathbf{x}_t &amp;lt;/tex&amp;gt;, где единицей отмечается та запись (сущность в БД), которая соответствует запросу.&lt;br /&gt;
&lt;br /&gt;
* '''Policy network'''. Объединяет системные модули. Выходом является вектор &amp;lt;tex&amp;gt; \mathbf{o}_t &amp;lt;/tex&amp;gt;, который представляет системное действие. Распределение вероятностей для каждого слота &amp;lt;tex&amp;gt; \mathbf{p}_s^t &amp;lt;/tex&amp;gt; пребразуется в вектор &amp;lt;tex&amp;gt; \mathbf{\hat p}_s^t &amp;lt;/tex&amp;gt;, который состоит из трех компонент: суммарная вероятность, вероятность, что пользователь выразил безразличие к слоту, и вероятность, что слот не был упомянут. Также вектор &amp;lt;tex&amp;gt; \mathbf{x}_t &amp;lt;/tex&amp;gt; сжимается в one-hot-вектор &amp;lt;tex&amp;gt; \mathbf{\hat x}_t &amp;lt;/tex&amp;gt;, где каждая компонента определяет количество подходящих записей.&amp;lt;br /&amp;gt; &amp;lt;tex&amp;gt; \mathbf{o}_t = \tanh(W_{zo} \mathbf{z}_t + W_{po} \mathbf{\hat p}_t + W_{xo} \mathbf{\hat x}_t), &amp;lt;/tex&amp;gt; &amp;lt;br /&amp;gt; где матрицы &amp;lt;tex&amp;gt; W_{zo} &amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;W_{po} &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; W_{xo} &amp;lt;/tex&amp;gt; {{---}} параметры, а &amp;lt;tex&amp;gt; \mathbf{\hat p}_t = \bigoplus \mathbf{\hat p}_s^t &amp;lt;/tex&amp;gt; {{---}} конкатенация.&lt;br /&gt;
&lt;br /&gt;
* '''Generation Network'''. Генерирует предложение, используя вектор действия &amp;lt;tex&amp;gt; \mathbf{o}_t &amp;lt;/tex&amp;gt; и генератор языка. Предложение содержит специальные токены, которые заменяются на сущности из базы данных по указателю.&lt;br /&gt;
&lt;br /&gt;
Данную архитектуру также называют ''сквозной'' (англ. end-to-end trainable), так как на данных обучается каждая ее часть. Модель с данной архитектурой можно обобщить на намерения, которые не наблюдались во время обучения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Преимущества и недостатки подходов к построению диалога&lt;br /&gt;
|-&lt;br /&gt;
! !! Классический (на основе правил) !! Нейросетевой&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''Преимущества''' ||&lt;br /&gt;
* Детерминированность,&lt;br /&gt;
* свободное расширение,&lt;br /&gt;
* интерпретируемость.&lt;br /&gt;
||&lt;br /&gt;
* Самостоятельно обучается,&lt;br /&gt;
* не нужно думать о структуре разговора.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''Недостатки''' ||&lt;br /&gt;
* Может быть громоздким,&lt;br /&gt;
* надо прописывать руками,&lt;br /&gt;
* сложнее разрабатывать нелинейные диалоговые модели.&lt;br /&gt;
||&lt;br /&gt;
* Черный ящик,&lt;br /&gt;
* нельзя быть уверенным в результате,&lt;br /&gt;
* сложно изменять,&lt;br /&gt;
* может долго обучаться и работать.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Чат-ориентированные диалоговые системы ==&lt;br /&gt;
&lt;br /&gt;
Данный тип систем обычно используется чтобы занять пользователя, например, во время ожидания выполнения задачи. Система поддерживает бессодержательный, но связный диалог.&lt;br /&gt;
&lt;br /&gt;
=== Системы с ограниченными ответами ===&lt;br /&gt;
&lt;br /&gt;
Системы с ограниченными ответами (англ. retrieval/example-based) по последовательности фраз выдают наиболее подходящий ответ из списка возможных. Преимуществом таких систем является то, что ответы строго контролируются: можно удалить нежелательные шутки, нецензурные или критикующие выражения.&lt;br /&gt;
&lt;br /&gt;
'''Интерактивная система неформальных ответов''' (англ. informal response interactive system, IRIS) представлена на рисунке 4. Прямоугольником обозначены функциональные модули, цилиндром {{---}} базы данных. Здесь выполняется сравнение не только текущей фразы пользователя, но и вектора текущей истории диалога с другими диалогами в базе данных, что позволяет учесть контекст.&lt;br /&gt;
&lt;br /&gt;
[[Файл : Ds-iris.png | 350px | thumb | right |&lt;br /&gt;
Рисунок 4 &amp;lt;ref&amp;gt;[https://www.aclweb.org/anthology/P12-3007.pdf Rafael E. Banchs, Haizhou Li, IRIS: a Chat-oriented Dialogue System based on the Vector Space Model]&amp;lt;/ref&amp;gt;. Архитектура IRIS]]&lt;br /&gt;
&lt;br /&gt;
Первая фраза пользователя попадает в модуль инициализации, который обеспечивает приветствие пользователя и извлечение его имени. Имя пользователя используется менеджером диалога, чтобы инициализировать вектор истории диалога. Если пользователь не известен системе (его имя отуствует в Vocabulary Learning), то система инициализирует историю случайным вектором из хранилища историй. Когда инициализация заканчивается, система спрашивает пользователя, чего он хочет.&lt;br /&gt;
&lt;br /&gt;
В каждой новой фразе менеджер диалога при помощи модуля Dynamic replacement  выполняет замену слов из словаря на плейсхолдеры (их определения, например, Иван &amp;lt;tex&amp;gt; \to &amp;lt;/tex&amp;gt; имя), после чего выполняется токенизация и векторизация фразы. Если встречаются токены, которых нет ни в истории, ни в словаре, то они считаются неизветсными (англ. unknown vocabulary terms, OOVs). Неизвестные токены обрабатываются модулем Vocabulary learning, который получает определение от пользователя или из внешнего источника информации. Система вычисляет косинусное расстояние &amp;lt;tex&amp;gt;c_1&amp;lt;/tex&amp;gt; между текущей фразой пользователя и всеми фразами, хранимыми в базе данных. Полученное значение используется, чтобы извлечь от 50 до 100 фраз, которые могут стать ответами. Затем вычисляется та же метрика, но уже между вектором текущей истории диалога (которая включает высказывания как пользователя, так и системы) и векторами других историй &amp;lt;tex&amp;gt;c_2&amp;lt;/tex&amp;gt;. Чтобы усилить последние фразы в текущей истории, используется ''коэффициент забывания''. Полученные метрики объединяются при помощи лог-линейной комбинации &amp;lt;tex&amp;gt; e^{w_1c_1 + w_2c_2} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;w_1, w_2&amp;lt;/tex&amp;gt; {{---}} настраиваемые веса, а результат используется для ранжирования потенциальных ответов. Итоговый ответ выбирается случайно среди нескольких ответов на вершине списка.&lt;br /&gt;
&lt;br /&gt;
Система также имеет модуль адаптации, который анализирует ответы пользователя и решает, исключить предыдущий ответ системы из множества возможных ответов, увеличить вероятность его выбора или уменьшить.&lt;br /&gt;
&lt;br /&gt;
Модель с такой архитектурой можно обучить на субтитрах фильмов. Данные для русского языка можно найти на Толоке&amp;lt;ref&amp;gt; [https://toloka.ai/ru/datasets Наборы данных Толоки]&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;[https://contest.yandex.ru/algorithm2018/contest/7914/enter/ Диалоги из фильмов, которые предоставлялись на соревновании Яндекс.Алгоритм 2018 (нужна регистрация)]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Системы с генерацией ответов ===&lt;br /&gt;
&lt;br /&gt;
Системы с генерацией ответов (англ. generation-based) генерируют ответ пословно. Такие системы более гибкие, но фильтровать их сложней. Часто для генерации диалога используются seq2seq-модели, другими вариантами являются расширенный [[Вариационный автокодировщик | вариационный автокодировщик]] или [[Generative Adversarial Nets (GAN) | генеративно-состязательная сеть]]. Высокую производительность при генерации диалогов позволяют получить предобученные языковые модели на основе Трансформера.&lt;br /&gt;
&lt;br /&gt;
== Существующие диалоговые системы ==&lt;br /&gt;
&lt;br /&gt;
'''[https://arxiv.org/pdf/1801.05032.pdf AliMe Assist]''' {{---}} помощник для пользователей магазина AliExpress. Его архитектура представлена на рисунке 5. Серым цветом выделены блоки, где используются методы машинного обучения. Система состоит из 3 подсистем: поиск информации или решения, выполнение задачи для клиента и простое общение в чате. Для извлечения намерения вопрос &amp;lt;tex&amp;gt; q &amp;lt;/tex&amp;gt; проверяется на соответствие шаблонам при помощи [[Бор | бора]] (англ. trie-based pattern matching). Если соответствие найти не удалось, то вопрос передается классификатору, построенному на [[Сверточные нейронные сети | сверточной сети]]. На вход сети подаются вектора слов вопроса и семантических тэгов, которые относятся к нему и контексту (предыдущему вопросу). Для получения векторного представления используется [[Векторное представление слов#fastText | FastText]]. Выбор CNN-сети вместо RNN основан на том, что первая сеть учитывает контекстную информацию слов (слова перед и после текущего слова) и работает быстрей. Точность классификации 40 намерений составляет 89,91%.&lt;br /&gt;
&lt;br /&gt;
[[Файл : Ds-alime.png | 350px | thumb | right |&lt;br /&gt;
Рисунок 5&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1801.05032.pdf Feng-Lin Li, Minghui Qiu, AliMe Assist: An Intelligent Assistant for Creating an Innovative E-commerce Experience]&amp;lt;/ref&amp;gt;. Архитектура AliMe Assist]]&lt;br /&gt;
&lt;br /&gt;
'''[https://ru.wikipedia.org/wiki/%D0%A1%D1%8F%D0%BE%D0%B0%D0%B9%D1%81 Xiaolce]''' {{---}} чат-бот, развиваемый китайским отделением Microsoft. Состоит из множества навыков, которые делятся на эмоциональные и рациональные. Имеется навык для комменирования картинок или сочинения по ним стихов. Сценарии диалога делятся на персональные и социальные. Бот старается установить эмоциональную связь с пользователем, чтобы продлить диалог с ним.&lt;br /&gt;
&lt;br /&gt;
'''[https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D1%80%D1%82%D0%B0%D0%BD%D0%B0_(%D0%B3%D0%BE%D0%BB%D0%BE%D1%81%D0%BE%D0%B2%D0%BE%D0%B9_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%BD%D0%B8%D0%BA) Microsoft Cortana]''' {{---}} виртуальный голосовой помощник. Состоит из можества навыков, натренированных на конкретные задачи.  В отличие от классической архитектуры, где выбирается подходящий навык, здесь текст проходит через все навыки, после чего выбирается подходящий ответ. Каждый навык использует контекст (результаты обработки предыдущей фразы), сформированный всеми навыками. При таком подходе требуется больше ресурсов, но он позволяет существенно увеличить точность. Схематично процесс обработки фразы пользователя представлен на рисунке 6.&lt;br /&gt;
&lt;br /&gt;
[[Файл : Ds-cortana-arch.png | 600px | thumb | right |&lt;br /&gt;
Рисунок 6&amp;lt;ref&amp;gt;[https://www.microsoft.com/en-us/research/wp-content/uploads/2016/12/CortanaLUDialog-FromSLTproceedings.pdf R. Sarikaya, P. A. Crook, AN OVERVIEW OF END–TO–END LANGUAGE UNDERSTANDING AND DIALOG MANAGEMENT FOR PERSONAL DIGITAL ASSISTANTS]&amp;lt;/ref&amp;gt;. Архитектура Кортаны]]&lt;br /&gt;
&lt;br /&gt;
[https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B8%D1%81%D0%B0_(%D0%B3%D0%BE%D0%BB%D0%BE%D1%81%D0%BE%D0%B2%D0%BE%D0%B9_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%BD%D0%B8%D0%BA)#%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0_%D0%B8_%D1%84%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D0%B0 '''Яндекс Алиса'''] {{---}} виртуальный голосовой помощник от компании Яндекс. Относится к классу чат-ориентированных систем, но имеет множество навыков, каждый из которых может быть представлен в виде целеориентированной системы. Алиса запускает навык по его активационной фразе. Фактически навык является веб-сервисом, который реализует DM и NLG модули классической архитектуры. При помщи платформы [https://dialogs.yandex.ru/developer Яндекс Диалоги] разработчики могут создавать свои навыки и монетизировать их, но перед публикацией навык проходит обязательную модерацию. Распознавание голоса выполняется сервисом [https://cloud.yandex.ru/services/speechkit SpeechKit].&lt;br /&gt;
&lt;br /&gt;
[https://ru.wikipedia.org/wiki/Siri '''Сири'''] {{---}} виртуальный помощник компании Apple. Является неотъемлемой частью iOS и доступна для большинства устройств, выпускаемых компанией. Поддерживает широкий спектр пользовательских команд, включая выполнение действий с телефоном, проверку основной информации, планирование событий и напоминаний, управление настройками устройства, поиск в интернете, взаимодействие с приложениями. Приспосабливается к каждому пользователю индивидуально, изучая его предпочтения в течение долгого времени.&lt;br /&gt;
&lt;br /&gt;
== Фреймворки ==&lt;br /&gt;
&lt;br /&gt;
Существует множество фреймворков, которые значительно упрощают построение диалоговых систем. Рассмотрим самые популярные из них.&lt;br /&gt;
&lt;br /&gt;
===  DeepPavlov.ai ===&lt;br /&gt;
&lt;br /&gt;
Основывается на таких библиотеках как [https://www.tensorflow.org/ TensorFlow], [https://keras.io/ Keras] и [https://pytorch.org/ PyTorch]. Включает множество компонентов, каждый из которых решает отдельную задачу диалоговых систем. Имеется модель для распознавания именованных сущностей, намерений, обработки истории диалога, анализа поведения пользователя и другие. Поведение агента диалоговой системы определяется набором навыков, каждый из которых строится из модулей. Когда агент получает фразу пользователя, специальный менеджер решает, какому навыку передать ее для обработки. Схема ядра представлена на рисунке 7. Пример использования на языке Python:&lt;br /&gt;
&lt;br /&gt;
  '''from''' deeppavlov.agents.default_agent.default_agent '''import''' DefaultAgent&lt;br /&gt;
  '''from''' deeppavlov.skills.pattern_matching_skill '''import''' PatternMatchingSkill&lt;br /&gt;
  '''from''' deeppavlov.agents.processors.highest_confidence_selector '''import''' HighestConfidenceSelector&lt;br /&gt;
  &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;''# Создание сконфигурированных навыков''&amp;lt;/font&amp;gt;&lt;br /&gt;
  hello = PatternMatchingSkill(responses=['Hello wordl! :)'], patterns=['hi', 'hello', 'good day'])&lt;br /&gt;
  bye = PatternMatchingSkill(['Goodbye word! :(', 'See you around.'], ['bye', 'chao', 'see you'])&lt;br /&gt;
  fallback = PatternMatchingSkill(['I don\'t understand, sorry :/', 'I can say &amp;quot;Helo world!&amp;quot; 8)'])&lt;br /&gt;
  &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;''# Создание менеджера, который выбирает наиболее вероятный навык''&amp;lt;/font&amp;gt;&lt;br /&gt;
  skill_manager = HighestConfidenceSelector()&lt;br /&gt;
  &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;''# Создание агента''&amp;lt;/font&amp;gt;&lt;br /&gt;
  HelloBot = Agent([hello, bye, fallback], skills_selector=skill_manager)&lt;br /&gt;
  &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;''# Тестирование''&amp;lt;/font&amp;gt;&lt;br /&gt;
  '''print'''(HelloBot(['Hello!', 'Boo...', 'Bye.']))&lt;br /&gt;
&lt;br /&gt;
[[Файл : Ds-dp-arch.png | 450px | thumb | right |&lt;br /&gt;
[https://image.slidesharecdn.com/deeppavlovos2019-190529124953/95/deeppavlov-2019-21-638.jpg?cb=1559135208 Рисунок 7]. Схема ядра DeepPavlov]]&lt;br /&gt;
&lt;br /&gt;
=== Rasa ===&lt;br /&gt;
&lt;br /&gt;
Архитектура схематично изображена на рисунке 8. Для передачи сообщений по каналу используются ''коннекторы''. Имеются коннекторы для [https://rasa.com/docs/rasa/connectors/telegram Телеграма], [https://rasa.com/docs/rasa/connectors/your-own-website собственного веб-сайта], [https://rasa.com/docs/rasa/connectors/slack Slack], можно создавать [https://rasa.com/docs/rasa/connectors/custom-connectors свои] коннекторы.&lt;br /&gt;
&lt;br /&gt;
[[Файл : Ds-rasa.png | 500px | thumb | right |&lt;br /&gt;
[https://rasa.com/docs/rasa/img/architecture.png Рисунок 8]. Архитектура Rasa]]&lt;br /&gt;
&lt;br /&gt;
Данные для тренировки хранятся в формате YAML &amp;lt;ref&amp;gt;[https://rasa.com/docs/rasa/training-data-format Формат тренировочных данных в Rasa]&amp;lt;/ref&amp;gt;. Имеется несколько типов тренировочных данных. Данные для NLU содержат намерения и примеры к ним. Опционально в примерах можно выделить тип сущности и ее значение или указать сентимент (настроение пользователя). Ответы бота (responses) разбиваются на именованные группы, откуда итоговый ответ выбирается случайно. Истории (stories) используются для выявления шаблонов диалога, чтобы система могла правильно реагировать на последовательности фраз пользователя, которые не были описаны явно. Каждая история описывает последовательность шагов. Шагом может быть намерение, которым определяется фраза пользователя, или действие, которым может быть группа ответов бота. Имеется возможность описать форму, чтобы пользователь мог ввести данные (например, электронную почту), и использовать ее в качестве действия. Правила похожи на истории, но они определяют последовательность шагов более строго, без применения машинного обучения.&lt;br /&gt;
&lt;br /&gt;
== Оценка качества модели ==&lt;br /&gt;
&lt;br /&gt;
Лучшие модели по качеству отслеживания состояния диалога (англ. dialogue state tracking):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Модель !! Точность связок !!  Точность слотов !! Особенности&lt;br /&gt;
|-&lt;br /&gt;
| [https://arxiv.org/abs/2006.01554 CHAN] || 52.68 || 97.69 || Использование контекстной иерархической [[Механизм внимания | сети внимания]], динамическое регулирование весов различных слотов во время обучения.&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.aclweb.org/anthology/2020.acl-main.567.pdf SAS] || 51.03 || 97.20 || Применение механизма внимания к слотам, разделение информации слотов.&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.aclweb.org/anthology/2020.acl-main.636.pdf MERET] || 50.91 || 97.07 || [[Обучение с подкреплением | Обучение с подкреплением]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Качество определяется по двум метрикам: ''точность слотов'' (англ. slot accuracy) {{---}} запрошенный слот верный, и ''точность связок'' (англ. joint goal accuracy) {{---}} каждый слот в стостоянии верный. Для оценки по данному криетрию обычно используется набор данных [http://dialogue.mi.eng.cam.ac.uk/index.php/corpus/ MultiWOZ].&lt;br /&gt;
&lt;br /&gt;
Лучшие модели по качеству заполнения слотов:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Модель !! [https://en.wikipedia.org/wiki/F-score F1] !! Особенности&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/sz128/slot_filling_and_intent_detection_of_SLU Enc-dec + BERT] || 97.17 || Применение кодера-декодера с языковой моделью BERT.&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.aclweb.org/anthology/D19-1214.pdf Stack-Propagation + BERT] || 97.0 || Использование намерений для заполнения слотов, обнаружение намерений на уровне токенов.&lt;br /&gt;
|-&lt;br /&gt;
| [https://arxiv.org/pdf/1902.10909.pdf Joint BERT] || 97.0 || Модель заполнения слотов на основе BERT.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Набор данных: [https://github.com/sonos/nlu-benchmark/tree/master/2017-06-custom-intent-engines Snips].&lt;br /&gt;
&lt;br /&gt;
Лучшие модели по качеству определения намерений: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Модель !! [https://en.wikipedia.org/wiki/Accuracy_and_precision Точность (accuracy)] !! Особенности&lt;br /&gt;
|-&lt;br /&gt;
| [https://arxiv.org/pdf/1811.05370.pdf ELMo + BLSTM-CRF] || 99.29 || Улучшение языковой модели ELMo, обучение без учителя для повышения производительности.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/sz128/slot_filling_and_intent_detection_of_SLU Enc-dec + ELMo] || 99.14 || Применение кодера-декодера с языковой моделью ELMo.&lt;br /&gt;
|-&lt;br /&gt;
| Stack-Propagation + BERT || 99.0 || -//-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Набор данных: Snips.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
*[[Синтез речи]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uLsI4fanlRI&amp;amp;t=4327s Лекция по подходам к построению диалоговых систем от Михаила Бурцева]&lt;br /&gt;
* [https://www.youtube.com/watch?v=Asftac_wcs8 Семинар Multitask vs Transfer от Антона Астахова]&lt;br /&gt;
* [http://datareview.info/article/neyronnyiy-mashinnyiy-perevod-s-primeneniem-gpu-vvodnyiy-kurs-chast-2/ Нейронный машинный перевод с применением GPU. Вводный курс. Часть 2]&lt;br /&gt;
* [https://www.cs.cmu.edu/~tianchez/data/TianchezPhdProposal.pdf Tiancheng Zhao, Learning Generative End-to-end Dialog Systems with Knowledge]&lt;br /&gt;
* [https://www.alibabacloud.com/blog/progress-in-dialog-management-model-research_596140 Alibaba Clouder, Progress in Dialog Management Model Research]&lt;br /&gt;
* [https://github.com/voicy-ai/DialogStateTracking DialogStateTracking]&lt;br /&gt;
* [https://habr.com/ru/company/abbyy/blog/437008/ NLP. Основы. Техники. Саморазвитие. Часть 1]&lt;br /&gt;
* [https://habr.com/ru/company/abbyy/blog/449514/ NLP. Основы. Техники. Саморазвитие. Часть 2: NER]&lt;br /&gt;
* [https://www.baeldung.com/java-pattern-matching-suffix-tree Fast Pattern Matching of Strings Using Suffix Tree in Java]&lt;br /&gt;
* [https://arxiv.org/pdf/1905.05709.pdf Minlie Huang, Xiaoyan Zhu, Challenges in Building Intelligent Open-domain Dialog Systems]&lt;br /&gt;
* [https://github.com/AtmaHou/Task-Oriented-Dialogue-Research-Progress-Survey Dataset and methods survey for Task-oriented Dialogue]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Обработка естественного языка]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B&amp;diff=80626</id>
		<title>Диалоговые системы</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B&amp;diff=80626"/>
				<updated>2021-02-09T11:05:29Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Целеориентированные диалоговые системы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Диалоговые системы стремительно набирают популярность. Это связано с тем, что&lt;br /&gt;
&lt;br /&gt;
* люди стали чаще общаться при помощи текста, используя мессенджеры &amp;lt;ref&amp;gt;[https://www.crowdynews.com/blog/messaging-apps-bots-publishers-facebook-messenger-whatsapp/ Jorrith Schaap, Are Messaging Apps The Next Frontier For Publishers?]&amp;lt;/ref&amp;gt;,&lt;br /&gt;
* могие компании заинтересованы в анализе и автоматизации общения с клиентами &amp;lt;ref&amp;gt;[https://platforma-online.ru/media/detail/issledovanie-rossiyskogo-rynka-chat-botov/ Юлия Фуколова, Исследование российского рынка чат-ботов]&amp;lt;/ref&amp;gt;,&lt;br /&gt;
* растет число «умных» бытовых предметов, которыми можно управлять &amp;lt;ref&amp;gt;[https://iot-analytics.com/state-of-the-iot-update-q1-q2-2018-number-of-iot-devices-now-7b/ Knud Lasse Lueth, State of the IoT 2018: Number of IoT devices now at 7B – Market accelerating]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Наиболее часто диалоговые системы используют в продажах, поддержке и маркетинге. Они используются для выполнения рутинных операций, которые можно свести к конкретному алгоритму, ищут и агрегируют данные, распространяют информацию.&lt;br /&gt;
&lt;br /&gt;
== Определение ==&lt;br /&gt;
&lt;br /&gt;
Диалоговые системы (англ. conversational agents, CAs) {{---}} компьютерные системы, предназначенные для общения с человеком. Они имитируют поведение человека и обеспечивают естественный способ получения информации, что позволяет значительно упростить руководство пользователя и тем самым повысить удобство взаимодействия с такими системами.&lt;br /&gt;
&lt;br /&gt;
Диалоговую систему также называют разговорным искусственным интеллектом или просто ботом.&lt;br /&gt;
&lt;br /&gt;
Диалоговая система может в разной степени являться ''целеориентированной системой'' (англ. goal/task-oriented) или ''чат-ориентированной'' (англ. chat-oriented). Как правило, чат-ориентированные системы, в отличие от целеориентированных, поддерживают большое количество доменов, но не способны различать много вопросов в рамках кажного из них.&lt;br /&gt;
&lt;br /&gt;
{{Определение | definition=&lt;br /&gt;
'''Домен (англ. domain)''' {{---}} область знаний, которая относится к запросу пользователя.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Обычно целеориентированные и чат-ориентированные системы исследуют отдельно, но на практике многие системы являются универсальными. Схема идеальной универсальной модели диалоговой системы приведена на рисунке 1. Модель является абстрактной, ее полной реализации не существует. &lt;br /&gt;
&lt;br /&gt;
[[Файл : Perfect-n2n.png | 600px | thumb | right |&lt;br /&gt;
[https://image.slidesharecdn.com/deeppavlovos2019-190529124953/95/deeppavlov-2019-23-1024.jpg?cb=1559135208 Рисунок 1]. Схема идеальной диалоговой системы]]&lt;br /&gt;
&lt;br /&gt;
Этапы обучения общего кодера (блок 3):&lt;br /&gt;
&lt;br /&gt;
* обучение с моделированием языка на данных диалога,&lt;br /&gt;
* ''тонкая настройка'' на всех специфичных для задач данных.&lt;br /&gt;
&lt;br /&gt;
Обучение блоков 4 и 5:&lt;br /&gt;
&lt;br /&gt;
* предобучение для каждой задачи,&lt;br /&gt;
* тонкая настройка на всех специфичных для задач данных.&lt;br /&gt;
&lt;br /&gt;
Блоки 6 и 7 обучаются на всех специфичных для задач данных.&lt;br /&gt;
&lt;br /&gt;
{{Определение | definition=&lt;br /&gt;
'''Тонкая настройка''' (англ. fine-turning) {{---}} подход к обучению, когда модель, обученная на большом количестве данных, повторно обучается на сравнительно небольшом количестве специфичных данных, чтобы скорректировать веса.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
История диалога (блок 0) используется, чтобы обратиться к множеству внешних источников информации (блок 1). Затем формируется полный контекст диалога, который включает персональные данные пользователя, информацию из внешних источников, историю диалога (блок 2). Контекст при помощи трансформера структурируется и передается множеству компонентов, которые решают определенные задачи: в блоке 4 выполняется оценка настроения пользования (англ. sentiment), поиск именованных сущностей (NER), [[Обработка естественного языка#Частеречная разметка | выделение частей речи (POS)]], разрешение ''кореферентности''; в блоке 5 множество специфичных диалоговых моделей выдают свой ответ.  Набор полученных ответов кодируется (блок 6) и ранжируется (блок 7) с учетом контекста.&lt;br /&gt;
&lt;br /&gt;
{{Определение | definition=&lt;br /&gt;
'''Разрешение кореферентности''' (англ. сoreference resolution) {{---}} задача поиска в тексте всех выражений, которые ссылаются на определенную сущность в тексте.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Целеориентированные диалоговые системы ==&lt;br /&gt;
&lt;br /&gt;
Задачей целеориентированных систем является достижение определенных целей при помощи общения с пользователем. Примером цели может быть поиск книги или включение света. &lt;br /&gt;
=== Классическая архитектура ===&lt;br /&gt;
&lt;br /&gt;
Классический метод построения целеориентированных систем заключается в использовании цепочки модулей (конвейера), которая изображена на рисунке 2.&lt;br /&gt;
&lt;br /&gt;
[[Файл : Ds-pipeline-to.png | 500px | thumb | right |&lt;br /&gt;
Рисунок 2. Диаграмма классической архитектуры диалоговой системы]]&lt;br /&gt;
&lt;br /&gt;
Описание модулей:&lt;br /&gt;
&lt;br /&gt;
* '''ASR'''. На вход поступает речь пользователя, которая затем [[Распознавание речи | распознается]] и переводится в текст. Результат работы компонента называют ''гипотезой'', так как полученный текст может соответствовать исходному сообщению не полностью.&lt;br /&gt;
&lt;br /&gt;
* '''NLU'''. Фраза в текстовом виде анализируется системой: определяется домен, намерение, именованные сущности. Для распознавания намерений может применяться обученный на [[Векторное представление слов | векторном представлении фраз]] классификатор. [[Обработка естественного языка#spaCy | Распознавание именованных сущеностей]] является отдельной задачей извлечения информации. Для ее решения используются [[Теория формальных языков | формальные языки]], статистические модели и их комбинации. В результате работы компонента создается формальное описание фразы {{---}} семантический фрейм.&lt;br /&gt;
&lt;br /&gt;
* '''DM'''. Состоянием диалога или контекстом является информация, которая была получена при общении с пользователем ранее. В соответствии с текущим состоянием выбирается политика поведения системы, корректируется семантический фрейм. В качестве поставщика знаний может выступать СУБД или Web API.&lt;br /&gt;
&lt;br /&gt;
* '''NLG'''. В соответствии с выбранным действием осуществляется генерация ответа пользователю на естественном языке. Для генерации применяются [[Генерация текста | генеративные модели или шаблоны]].&lt;br /&gt;
&lt;br /&gt;
{{Определение | definition=&lt;br /&gt;
'''Намерение (англ. intent)''' {{---}} желание пользователя в рамках произесенной фразы.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение | definition=&lt;br /&gt;
'''Именованная сущность (англ. named entity)''' {{---}} слово во фразе пользователя, которое можно отнести к определенному типу.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение | definition=&lt;br /&gt;
'''Слот (англ. named entity)''' {{---}} параметр запроса пользователя, ограниченный множеством допустимых значений.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Обычно после распознавания именованных сущностей выполняется ''заполнение слотов'' (англ. slot filling), в ходе которого каждая найденная сущность приводится к своей нормальной форме с учетом ее типа и множества возможных значений. Заполнение слотов позволяет не учитывать морфологию сущности при дальнейшей ее обработке. Простейшим подходом к нормализации сущностей является поиск с использованием расстояния Левенштейна. После определения типа сущности, она сравнивается с другими сущностями того же типа из базы данных. В качестве нормальной формы выбирается та, до которой расстояние наименьшее, либо можно выбрать несколько сущностей с наименьшим расстоянием и предоставить выбор пользователю (такой подход также применим для исправления опечаток).&lt;br /&gt;
&lt;br /&gt;
Для получения численного представления текста используются различные языковые модели: [[Векторное представление слов#word2vec | Word2Vec]], [https://github.com/coetaur0/ESIM ESIM], [[Генерация текста#GPT-2 | GPT]], [[Векторное представление слов#BERT | BERT]]. Каждой определяется свой способ представления слов или их последовательности для наиболее точного извлечения смысловых значений. С хорошей языковой моделью достаточно около 100 примеров для хорошей классификации намерения &amp;lt;ref&amp;gt;[https://image.slidesharecdn.com/intentdetectionbenchmarkaugust2017-170817145622/95/nlu-intent-detection-benchmark-by-intento-august-2017-31-1024.jpg?cb=1503310100 Konstantin Savenkov, Intent Detection Benchmark by Intento]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Система с классической архитектурой плохо масштабируется. Так как сценарии диалога нужно определять вручную, их становится сложно согласовывать при большом количестве.&lt;br /&gt;
&lt;br /&gt;
=== Нейросетевая архитектура ===&lt;br /&gt;
&lt;br /&gt;
Если заменить каждую часть классической архитектуры искусственной нейронной сетью, то получим архитектуру изображенную на рисунке 3.&lt;br /&gt;
&lt;br /&gt;
Входом у модели с данной архитектурой может быть компонент, который выполняет предобработку фразы пользователя и передает результаты внешним сетям (Intent Network и Belief Tracker).&lt;br /&gt;
&lt;br /&gt;
Описание каждой части:&lt;br /&gt;
&lt;br /&gt;
[[Файл : Ds-nn-to.png | 400px | thumb | right | Рисунок 3 &amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1604.04562.pdf Tsung-Hsien Wen, David Vandyke, A Network-based End-to-End Trainable Task-oriented Dialogue System]&amp;lt;/ref&amp;gt;. Нейросетевая архитектура диалоговой системы]]&lt;br /&gt;
&lt;br /&gt;
* '''Intent Network'''. Кодирующая сеть, которая преобразует последовательность токенов &amp;lt;tex&amp;gt; w_0^t, w_1^t, \ldots, w_N^t &amp;lt;/tex&amp;gt; в вектор &amp;lt;tex&amp;gt; \mathbf{z}_t &amp;lt;/tex&amp;gt;. В качестве вектора &amp;lt;tex&amp;gt; \mathbf{z}_t &amp;lt;/tex&amp;gt; может выступать скрытый слой [[Долгая краткосрочная память | LSTM-сети]] &amp;lt;tex&amp;gt; \mathbf{z}_t^N &amp;lt;/tex&amp;gt;:&amp;lt;br /&amp;gt; &amp;lt;tex&amp;gt; \mathbf{z}_t = \mathbf{z}_t^N = \operatorname{LSTM}(w_0^t, w_1^t, ..., w_N^t) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Belief Tracker'''. В реализации используется [[Рекуррентные нейронные сети | RNN-сеть]], на вход которой поступает предобработанная фраза пользователя. Дает распределение вероятностей &amp;lt;tex&amp;gt; \mathbf{p}_s^t &amp;lt;/tex&amp;gt; по всем значениям определенного слота &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Database Operator'''. Выполняет запрос к базе данных по сущностям &amp;lt;tex&amp;gt; \{ \operatorname{argmax} \mathbf{p}_s^t \} &amp;lt;/tex&amp;gt; и возвращает вектор &amp;lt;tex&amp;gt; \mathbf{x}_t &amp;lt;/tex&amp;gt;, где единицей отмечается та запись (сущность в БД), которая соответствует запросу.&lt;br /&gt;
&lt;br /&gt;
* '''Policy network'''. Объединяет системные модули. Выходом является вектор &amp;lt;tex&amp;gt; \mathbf{o}_t &amp;lt;/tex&amp;gt;, который представляет системное действие. Распределение вероятностей для каждого слота &amp;lt;tex&amp;gt; \mathbf{p}_s^t &amp;lt;/tex&amp;gt; пребразуется в вектор &amp;lt;tex&amp;gt; \mathbf{\hat p}_s^t &amp;lt;/tex&amp;gt;, который состоит из трех компонент: суммарная вероятность, вероятность, что пользователь выразил безразличие к слоту, и вероятность, что слот не был упомянут. Также вектор &amp;lt;tex&amp;gt; \mathbf{x}_t &amp;lt;/tex&amp;gt; сжимается в one-hot-вектор &amp;lt;tex&amp;gt; \mathbf{\hat x}_t &amp;lt;/tex&amp;gt;, где каждая компонента определяет количество подходящих записей.&amp;lt;br /&amp;gt; &amp;lt;tex&amp;gt; \mathbf{o}_t = \tanh(W_{zo} \mathbf{z}_t + W_{po} \mathbf{\hat p}_t + W_{xo} \mathbf{\hat x}_t), &amp;lt;/tex&amp;gt; &amp;lt;br /&amp;gt; где матрицы &amp;lt;tex&amp;gt; W_{zo} &amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;W_{po} &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; W_{xo} &amp;lt;/tex&amp;gt; {{---}} параметры, а &amp;lt;tex&amp;gt; \mathbf{\hat p}_t = \bigoplus \mathbf{\hat p}_s^t &amp;lt;/tex&amp;gt; {{---}} конкатенация.&lt;br /&gt;
&lt;br /&gt;
* '''Generation Network'''. Генерирует предложение, используя вектор действия &amp;lt;tex&amp;gt; \mathbf{o}_t &amp;lt;/tex&amp;gt; и генератор языка. Предложение содержит специальные токены, которые заменяются на сущности из базы данных по указателю.&lt;br /&gt;
&lt;br /&gt;
Данную архитектуру также называют ''сквозной'' (англ. end-to-end trainable), так как на данных обучается каждая ее часть. Модель с данной архитектурой можно обобщить на намерения, которые не наблюдались во время обучения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Преимущества и недостатки подходов к подстроению&lt;br /&gt;
|-&lt;br /&gt;
! !! Классический (на основе правил) !! Нейросетевой&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''Преимущества''' ||&lt;br /&gt;
* Детерминированность,&lt;br /&gt;
* свободное расширение,&lt;br /&gt;
* интерпретируемость.&lt;br /&gt;
||&lt;br /&gt;
* Самостоятельно обучается,&lt;br /&gt;
* не нужно думать о структуре разговора.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''Недостатки''' ||&lt;br /&gt;
* Может быть громоздким,&lt;br /&gt;
* надо прописывать руками,&lt;br /&gt;
* сложнее разрабатывать нелинейные диалоговые модели.&lt;br /&gt;
||&lt;br /&gt;
* Черный ящик,&lt;br /&gt;
* нельзя быть уверенным в результате,&lt;br /&gt;
* сложно изменять,&lt;br /&gt;
* может долго обучаться и работать.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Чат-ориентированные диалоговые системы ==&lt;br /&gt;
&lt;br /&gt;
Данный тип систем обычно используется чтобы занять пользователя, например, во время ожидания выполнения задачи. Система поддерживает бессодержательный, но связный диалог.&lt;br /&gt;
&lt;br /&gt;
=== Системы с ограниченными ответами ===&lt;br /&gt;
&lt;br /&gt;
Системы с ограниченными ответами (англ. retrieval/example-based) по последовательности фраз выдают наиболее подходящий ответ из списка возможных. Преимуществом таких систем является то, что ответы строго контролируются: можно удалить нежелательные шутки, нецензурные или критикующие выражения.&lt;br /&gt;
&lt;br /&gt;
'''Интерактивная система неформальных ответов''' (англ. informal response interactive system, IRIS) представлена на рисунке 4. Прямоугольником обозначены функциональные модули, цилиндром {{---}} базы данных. Здесь выполняется сравнение не только текущей фразы пользователя, но и вектора текущей истории диалога с другими диалогами в базе данных, что позволяет учесть контекст.&lt;br /&gt;
&lt;br /&gt;
[[Файл : Ds-iris.png | 350px | thumb | right |&lt;br /&gt;
Рисунок 4 &amp;lt;ref&amp;gt;[https://www.aclweb.org/anthology/P12-3007.pdf Rafael E. Banchs, Haizhou Li, IRIS: a Chat-oriented Dialogue System based on the Vector Space Model]&amp;lt;/ref&amp;gt;. Архитектура IRIS]]&lt;br /&gt;
&lt;br /&gt;
Первая фраза пользователя попадает в модуль инициализации, который обеспечивает приветствие пользователя и извлечение его имени. Имя пользователя используется менеджером диалога, чтобы инициализировать вектор истории диалога. Если пользователь не известен системе (его имя отуствует в Vocabulary Learning), то система инициализирует историю случайным вектором из хранилища историй. Когда инициализация заканчивается, система спрашивает пользователя, чего он хочет.&lt;br /&gt;
&lt;br /&gt;
В каждой новой фразе менеджер диалога при помощи модуля Dynamic replacement  выполняет замену слов из словаря на плейсхолдеры (их определения, например, Иван &amp;lt;tex&amp;gt; \to &amp;lt;/tex&amp;gt; имя), после чего выполняется токенизация и векторизация фразы. Если встречаются токены, которых нет ни в истории, ни в словаре, то они считаются неизветсными (англ. unknown vocabulary terms, OOVs). Неизвестные токены обрабатываются модулем Vocabulary learning, который получает определение от пользователя или из внешнего источника информации. Система вычисляет косинусное расстояние &amp;lt;tex&amp;gt;c_1&amp;lt;/tex&amp;gt; между текущей фразой пользователя и всеми фразами, хранимыми в базе данных. Полученное значение используется, чтобы извлечь от 50 до 100 фраз, которые могут стать ответами. Затем вычисляется та же метрика, но уже между вектором текущей истории диалога (которая включает высказывания как пользователя, так и системы) и векторами других историй &amp;lt;tex&amp;gt;c_2&amp;lt;/tex&amp;gt;. Чтобы усилить последние фразы в текущей истории, используется ''коэффициент забывания''. Полученные метрики объединяются при помощи лог-линейной комбинации &amp;lt;tex&amp;gt; e^{w_1c_1 + w_2c_2} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;w_1, w_2&amp;lt;/tex&amp;gt; {{---}} настраиваемые веса, а результат используется для ранжирования потенциальных ответов. Итоговый ответ выбирается случайно среди нескольких ответов на вершине списка.&lt;br /&gt;
&lt;br /&gt;
Система также имеет модуль адаптации, который анализирует ответы пользователя и решает, исключить предыдущий ответ системы из множества возможных ответов, увеличить вероятность его выбора или уменьшить.&lt;br /&gt;
&lt;br /&gt;
Модель с такой архитектурой можно обучить на субтитрах фильмов. Данные для русского языка можно найти на Толоке&amp;lt;ref&amp;gt; [https://toloka.ai/ru/datasets Наборы данных Толоки]&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;[https://contest.yandex.ru/algorithm2018/contest/7914/enter/ Диалоги из фильмов, которые предоставлялись на соревновании Яндекс.Алгоритм 2018 (нужна регистрация)]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Системы с генерацией ответов ===&lt;br /&gt;
&lt;br /&gt;
Системы с генерацией ответов (англ. generation-based) генерируют ответ пословно. Такие системы более гибкие, но фильтровать их сложней. Часто для генерации диалога используются seq2seq-модели, другими вариантами являются расширенный [[Вариационный автокодировщик | вариационный автокодировщик]] или [[Generative Adversarial Nets (GAN) | генеративно-состязательная сеть]]. Высокую производительность при генерации диалогов позволяют получить предобученные языковые модели на основе Трансформера.&lt;br /&gt;
&lt;br /&gt;
== Существующие диалоговые системы ==&lt;br /&gt;
&lt;br /&gt;
'''[https://arxiv.org/pdf/1801.05032.pdf AliMe Assist]''' {{---}} помощник для пользователей магазина AliExpress. Его архитектура представлена на рисунке 5. Серым цветом выделены блоки, где используются методы машинного обучения. Система состоит из 3 подсистем: поиск информации или решения, выполнение задачи для клиента и простое общение в чате. Для извлечения намерения вопрос &amp;lt;tex&amp;gt; q &amp;lt;/tex&amp;gt; проверяется на соответствие шаблонам при помощи [[Бор | бора]] (англ. trie-based pattern matching). Если соответствие найти не удалось, то вопрос передается классификатору, построенному на [[Сверточные нейронные сети | сверточной сети]]. На вход сети подаются вектора слов вопроса и семантических тэгов, которые относятся к нему и контексту (предыдущему вопросу). Для получения векторного представления используется [[Векторное представление слов#fastText | FastText]]. Выбор CNN-сети вместо RNN основан на том, что первая сеть учитывает контекстную информацию слов (слова перед и после текущего слова) и работает быстрей. Точность классификации 40 намерений составляет 89,91%.&lt;br /&gt;
&lt;br /&gt;
[[Файл : Ds-alime.png | 350px | thumb | right |&lt;br /&gt;
Рисунок 5&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1801.05032.pdf Feng-Lin Li, Minghui Qiu, AliMe Assist: An Intelligent Assistant for Creating an Innovative E-commerce Experience]&amp;lt;/ref&amp;gt;. Архитектура AliMe Assist]]&lt;br /&gt;
&lt;br /&gt;
'''[https://ru.wikipedia.org/wiki/%D0%A1%D1%8F%D0%BE%D0%B0%D0%B9%D1%81 Xiaolce]''' {{---}} чат-бот, развиваемый китайским отделением Microsoft. Состоит из множества навыков, которые делятся на эмоциональные и рациональные. Имеется навык для комменирования картинок или сочинения по ним стихов. Сценарии диалога делятся на персональные и социальные. Бот старается установить эмоциональную связь с пользователем, чтобы продлить диалог с ним.&lt;br /&gt;
&lt;br /&gt;
'''[https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D1%80%D1%82%D0%B0%D0%BD%D0%B0_(%D0%B3%D0%BE%D0%BB%D0%BE%D1%81%D0%BE%D0%B2%D0%BE%D0%B9_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%BD%D0%B8%D0%BA) Microsoft Cortana]''' {{---}} виртуальный голосовой помощник. Состоит из можества навыков, натренированных на конкретные задачи.  В отличие от классической архитектуры, где выбирается подходящий навык, здесь текст проходит через все навыки, после чего выбирается подходящий ответ. Каждый навык использует контекст (результаты обработки предыдущей фразы), сформированный всеми навыками. При таком подходе требуется больше ресурсов, но он позволяет существенно увеличить точность. Схематично процесс обработки фразы пользователя представлен на рисунке 6.&lt;br /&gt;
&lt;br /&gt;
[[Файл : Ds-cortana-arch.png | 600px | thumb | right |&lt;br /&gt;
Рисунок 6&amp;lt;ref&amp;gt;[https://www.microsoft.com/en-us/research/wp-content/uploads/2016/12/CortanaLUDialog-FromSLTproceedings.pdf R. Sarikaya, P. A. Crook, AN OVERVIEW OF END–TO–END LANGUAGE UNDERSTANDING AND DIALOG MANAGEMENT FOR PERSONAL DIGITAL ASSISTANTS]&amp;lt;/ref&amp;gt;. Архитектура Кортаны]]&lt;br /&gt;
&lt;br /&gt;
[https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B8%D1%81%D0%B0_(%D0%B3%D0%BE%D0%BB%D0%BE%D1%81%D0%BE%D0%B2%D0%BE%D0%B9_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%BD%D0%B8%D0%BA)#%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0_%D0%B8_%D1%84%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D0%B0 '''Яндекс Алиса'''] {{---}} виртуальный голосовой помощник от компании Яндекс. Относится к классу чат-ориентированных систем, но имеет множество навыков, каждый из которых может быть представлен в виде целеориентированной системы. Алиса запускает навык по его активационной фразе. Фактически навык является веб-сервисом, который реализует DM и NLG модули классической архитектуры. При помщи платформы [https://dialogs.yandex.ru/developer Яндекс Диалоги] разработчики могут создавать свои навыки и монетизировать их, но перед публикацией навык проходит обязательную модерацию. Распознавание голоса выполняется сервисом [https://cloud.yandex.ru/services/speechkit SpeechKit].&lt;br /&gt;
&lt;br /&gt;
[https://ru.wikipedia.org/wiki/Siri '''Сири'''] {{---}} виртуальный помощник компании Apple. Является неотъемлемой частью iOS и доступна для большинства устройств, выпускаемых компанией. Поддерживает широкий спектр пользовательских команд, включая выполнение действий с телефоном, проверку основной информации, планирование событий и напоминаний, управление настройками устройства, поиск в интернете, взаимодействие с приложениями. Приспосабливается к каждому пользователю индивидуально, изучая его предпочтения в течение долгого времени.&lt;br /&gt;
&lt;br /&gt;
== Фреймворки ==&lt;br /&gt;
&lt;br /&gt;
Существует множество фреймворков, которые значительно упрощают построение диалоговых систем. Рассмотрим самые популярные из них.&lt;br /&gt;
&lt;br /&gt;
===  DeepPavlov.ai ===&lt;br /&gt;
&lt;br /&gt;
Основывается на таких библиотеках как [https://www.tensorflow.org/ TensorFlow], [https://keras.io/ Keras] и [https://pytorch.org/ PyTorch]. Включает множество компонентов, каждый из которых решает отдельную задачу диалоговых систем. Имеется модель для распознавания именованных сущностей, намерений, обработки истории диалога, анализа поведения пользователя и другие. Поведение агента диалоговой системы определяется набором навыков, каждый из которых строится из модулей. Когда агент получает фразу пользователя, специальный менеджер решает, какому навыку передать ее для обработки. Схема ядра представлена на рисунке 7. Пример использования на языке Python:&lt;br /&gt;
&lt;br /&gt;
  '''from''' deeppavlov.agents.default_agent.default_agent '''import''' DefaultAgent&lt;br /&gt;
  '''from''' deeppavlov.skills.pattern_matching_skill '''import''' PatternMatchingSkill&lt;br /&gt;
  '''from''' deeppavlov.agents.processors.highest_confidence_selector '''import''' HighestConfidenceSelector&lt;br /&gt;
  &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;''# Создание сконфигурированных навыков''&amp;lt;/font&amp;gt;&lt;br /&gt;
  hello = PatternMatchingSkill(responses=['Hello wordl! :)'], patterns=['hi', 'hello', 'good day'])&lt;br /&gt;
  bye = PatternMatchingSkill(['Goodbye word! :(', 'See you around.'], ['bye', 'chao', 'see you'])&lt;br /&gt;
  fallback = PatternMatchingSkill(['I don\'t understand, sorry :/', 'I can say &amp;quot;Helo world!&amp;quot; 8)'])&lt;br /&gt;
  &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;''# Создание менеджера, который выбирает наиболее вероятный навык''&amp;lt;/font&amp;gt;&lt;br /&gt;
  skill_manager = HighestConfidenceSelector()&lt;br /&gt;
  &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;''# Создание агента''&amp;lt;/font&amp;gt;&lt;br /&gt;
  HelloBot = Agent([hello, bye, fallback], skills_selector=skill_manager)&lt;br /&gt;
  &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;''# Тестирование''&amp;lt;/font&amp;gt;&lt;br /&gt;
  '''print'''(HelloBot(['Hello!', 'Boo...', 'Bye.']))&lt;br /&gt;
&lt;br /&gt;
[[Файл : Ds-dp-arch.png | 450px | thumb | right |&lt;br /&gt;
[https://image.slidesharecdn.com/deeppavlovos2019-190529124953/95/deeppavlov-2019-21-638.jpg?cb=1559135208 Рисунок 7]. Схема ядра DeepPavlov]]&lt;br /&gt;
&lt;br /&gt;
=== Rasa ===&lt;br /&gt;
&lt;br /&gt;
Архитектура схематично изображена на рисунке 8. Для передачи сообщений по каналу используются ''коннекторы''. Имеются коннекторы для [https://rasa.com/docs/rasa/connectors/telegram Телеграма], [https://rasa.com/docs/rasa/connectors/your-own-website собственного веб-сайта], [https://rasa.com/docs/rasa/connectors/slack Slack], можно создавать [https://rasa.com/docs/rasa/connectors/custom-connectors свои] коннекторы.&lt;br /&gt;
&lt;br /&gt;
[[Файл : Ds-rasa.png | 500px | thumb | right |&lt;br /&gt;
[https://rasa.com/docs/rasa/img/architecture.png Рисунок 8]. Архитектура Rasa]]&lt;br /&gt;
&lt;br /&gt;
Данные для тренировки хранятся в формате YAML &amp;lt;ref&amp;gt;[https://rasa.com/docs/rasa/training-data-format Формат тренировочных данных в Rasa]&amp;lt;/ref&amp;gt;. Имеется несколько типов тренировочных данных. Данные для NLU содержат намерения и примеры к ним. Опционально в примерах можно выделить тип сущности и ее значение или указать сентимент (настроение пользователя). Ответы бота (responses) разбиваются на именованные группы, откуда итоговый ответ выбирается случайно. Истории (stories) используются для выявления шаблонов диалога, чтобы система могла правильно реагировать на последовательности фраз пользователя, которые не были описаны явно. Каждая история описывает последовательность шагов. Шагом может быть намерение, которым определяется фраза пользователя, или действие, которым может быть группа ответов бота. Имеется возможность описать форму, чтобы пользователь мог ввести данные (например, электронную почту), и использовать ее в качестве действия. Правила похожи на истории, но они определяют последовательность шагов более строго, без применения машинного обучения.&lt;br /&gt;
&lt;br /&gt;
== Оценка качества модели ==&lt;br /&gt;
&lt;br /&gt;
Лучшие модели по качеству отслеживания состояния диалога (англ. dialogue state tracking):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Модель !! Точность связок !!  Точность слотов !! Особенности&lt;br /&gt;
|-&lt;br /&gt;
| [https://arxiv.org/abs/2006.01554 CHAN] || 52.68 || 97.69 || Использование контекстной иерархической [[Механизм внимания | сети внимания]], динамическое регулирование весов различных слотов во время обучения.&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.aclweb.org/anthology/2020.acl-main.567.pdf SAS] || 51.03 || 97.20 || Применение механизма внимания к слотам, разделение информации слотов.&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.aclweb.org/anthology/2020.acl-main.636.pdf MERET] || 50.91 || 97.07 || [[Обучение с подкреплением | Обучение с подкреплением]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Качество определяется по двум метрикам: ''точность слотов'' (англ. slot accuracy) {{---}} запрошенный слот верный, и ''точность связок'' (англ. joint goal accuracy) {{---}} каждый слот в стостоянии верный. Для оценки по данному криетрию обычно используется набор данных [http://dialogue.mi.eng.cam.ac.uk/index.php/corpus/ MultiWOZ].&lt;br /&gt;
&lt;br /&gt;
Лучшие модели по качеству заполнения слотов:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Модель !! [https://en.wikipedia.org/wiki/F-score F1] !! Особенности&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/sz128/slot_filling_and_intent_detection_of_SLU Enc-dec + BERT] || 97.17 || Применение кодера-декодера с языковой моделью BERT.&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.aclweb.org/anthology/D19-1214.pdf Stack-Propagation + BERT] || 97.0 || Использование намерений для заполнения слотов, обнаружение намерений на уровне токенов.&lt;br /&gt;
|-&lt;br /&gt;
| [https://arxiv.org/pdf/1902.10909.pdf Joint BERT] || 97.0 || Модель заполнения слотов на основе BERT.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Набор данных: [https://github.com/sonos/nlu-benchmark/tree/master/2017-06-custom-intent-engines Snips].&lt;br /&gt;
&lt;br /&gt;
Лучшие модели по качеству определения намерений: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Модель !! [https://en.wikipedia.org/wiki/Accuracy_and_precision Точность (accuracy)] !! Особенности&lt;br /&gt;
|-&lt;br /&gt;
| [https://arxiv.org/pdf/1811.05370.pdf ELMo + BLSTM-CRF] || 99.29 || Улучшение языковой модели ELMo, обучение без учителя для повышения производительности.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/sz128/slot_filling_and_intent_detection_of_SLU Enc-dec + ELMo] || 99.14 || Применение кодера-декодера с языковой моделью ELMo.&lt;br /&gt;
|-&lt;br /&gt;
| Stack-Propagation + BERT || 99.0 || -//-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Набор данных: Snips.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
*[[Синтез речи]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uLsI4fanlRI&amp;amp;t=4327s Лекция по подходам к построению диалоговых систем от Михаила Бурцева]&lt;br /&gt;
* [https://www.youtube.com/watch?v=Asftac_wcs8 Семинар Multitask vs Transfer от Антона Астахова]&lt;br /&gt;
* [http://datareview.info/article/neyronnyiy-mashinnyiy-perevod-s-primeneniem-gpu-vvodnyiy-kurs-chast-2/ Нейронный машинный перевод с применением GPU. Вводный курс. Часть 2]&lt;br /&gt;
* [https://www.cs.cmu.edu/~tianchez/data/TianchezPhdProposal.pdf Tiancheng Zhao, Learning Generative End-to-end Dialog Systems with Knowledge]&lt;br /&gt;
* [https://www.alibabacloud.com/blog/progress-in-dialog-management-model-research_596140 Alibaba Clouder, Progress in Dialog Management Model Research]&lt;br /&gt;
* [https://github.com/voicy-ai/DialogStateTracking DialogStateTracking]&lt;br /&gt;
* [https://habr.com/ru/company/abbyy/blog/437008/ NLP. Основы. Техники. Саморазвитие. Часть 1]&lt;br /&gt;
* [https://habr.com/ru/company/abbyy/blog/449514/ NLP. Основы. Техники. Саморазвитие. Часть 2: NER]&lt;br /&gt;
* [https://www.baeldung.com/java-pattern-matching-suffix-tree Fast Pattern Matching of Strings Using Suffix Tree in Java]&lt;br /&gt;
* [https://arxiv.org/pdf/1905.05709.pdf Minlie Huang, Xiaoyan Zhu, Challenges in Building Intelligent Open-domain Dialog Systems]&lt;br /&gt;
* [https://github.com/AtmaHou/Task-Oriented-Dialogue-Research-Progress-Survey Dataset and methods survey for Task-oriented Dialogue]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Обработка естественного языка]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B8%D0%BD%D1%82%D0%B5%D0%B7_%D1%80%D0%B5%D1%87%D0%B8&amp;diff=80625</id>
		<title>Синтез речи</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B8%D0%BD%D1%82%D0%B5%D0%B7_%D1%80%D0%B5%D1%87%D0%B8&amp;diff=80625"/>
				<updated>2021-02-09T10:47:23Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Алгоритмы, основанные на нейронных сетях */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Машинное обучение]] [[Категория: Обработка естественного языка]]&lt;br /&gt;
'''Синтез речи''' (англ. speech synthesis) {{---}} процесс генерации компьютером человеческой речи. Компьютерная система, способная к синтезу речи, называется речевым синтезатором.&lt;br /&gt;
Система, генерирующая человеческую речь, основываясь на тексте, называется '''text-to-speech''' системой (сокр. TTS).&lt;br /&gt;
&lt;br /&gt;
В процессе человеческой речи нервная система транслирует некоторый текст или мысленный концепт в движение мышц, связанных с органами дыхания и речи. Затем производится генерация акустического сигнала с помощью потока воздуха из легких. Сигнал содержит как периодические компоненты (созданные с помощью вибрации органов речи), так и апериодические&lt;br /&gt;
(созданные окружающей средой и фоновым шумом). Используя изменяющиеся во времени сокращения мышц, меняются частотные характеристики акустического сигнала.&lt;br /&gt;
Задача систем генерации речи по тексту {{---}} симулировать данный процесс в каком-либо виде.&lt;br /&gt;
&lt;br /&gt;
== Этапы синтеза речи ==&lt;br /&gt;
Работу систем синтеза речи по тексту как правило можно разделить на два этапа, за которые отвечают два отдельных компонента {{---}} обработка текста и синтез речи.&lt;br /&gt;
&lt;br /&gt;
Первый этап обычно содержит несколько этапов [[Обработка естественного языка|обработки естественного языка]], такие как разбиение  на предложения, разбиение на слова, нормализация текста,&lt;br /&gt;
автоматическая морфологическая разметка и конвертация графем в фонемы (англ. grapheme-to-phoneme conversion, G2P).&lt;br /&gt;
Данный этап принимает в качестве входных параметров текст и возвращает последовательность фонем с различными выделенными лингвистическими особенностями.&lt;br /&gt;
&lt;br /&gt;
Этап синтеза речи, в свою очередь, принимает на вход последовательность фонем и возвращает синтезированную звуковую волну речи.&lt;br /&gt;
Данный этап обычно включает в себя алгоритмы предсказания [https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%81%D0%BE%D0%B4%D0%B8%D1%8F_(%D0%BB%D0%B8%D0%BD%D0%B3%D0%B2%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0)/ просодии] {{---}} характеристик речи, описывающих признаки, являющиеся дополнительными к основной артикуляции звука, такие как тон, ударение, громкость и т.д. &lt;br /&gt;
&lt;br /&gt;
== Генерация звуковой волны ==&lt;br /&gt;
&lt;br /&gt;
Обычно, синтезаторы речи не работают непосредственно с сигналом звуковой волны, а используют некоторое представление этого сигнала, например, спектрограмму. Алгоритм, способный выделить такие параметры и по ним обратно восстановить звуковую волну, называется '''вокодер''' (англ. voice encoder). Примерами таких алгоритмов являются мю-закон &amp;lt;ref name=&amp;quot;mu law&amp;quot;&amp;gt;[http://www.itu.int/rec/dologin_pub.asp?lang=e&amp;amp;id=T-REC-G.711-198811-I!!PDF-E&amp;amp;type=items/ &amp;quot;ITU-T Recommendation G.711&amp;quot;]&amp;lt;/ref&amp;gt; и восстановление сигнала по его спектрограмме. &lt;br /&gt;
&lt;br /&gt;
Мю-закон преобразует каждое значение дискретизированного сигнала &amp;lt;math&amp;gt;\textbf{x} = \{x_1, x_2, \dots, x_T\}&amp;lt;/math&amp;gt;  как&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x_t) = sign(x_t) \frac{\ln(1+\mu|x_t|)}{\ln(1+\mu)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;\mu = 255&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1 &amp;lt; x_t &amp;lt; 1&amp;lt;/math&amp;gt;, а затем кодирует сигнал как двузначное шестнадцатеричное число, которое обозначает некоторый интервал на числовой прямой&amp;lt;ref name=&amp;quot;mu law&amp;quot;&amp;gt;[http://www.itu.int/rec/dologin_pub.asp?lang=e&amp;amp;id=T-REC-G.711-198811-I!!PDF-E&amp;amp;type=items/ &amp;quot;ITU-T Recommendation G.711&amp;quot;]&amp;lt;/ref&amp;gt;. Обратное преобразование выбирает значение преобразованного сигнала &amp;lt;math&amp;gt;y_t=f(x_t)&amp;lt;/math&amp;gt; из данного номера интервала и получает оценку исходного сигнала &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; f^{-1}(y_t) = sign(y_t)(1/\mu)((1+\mu)^{|y_t|}-1), -1 &amp;lt; y_t &amp;lt; 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве представления звукового сигнала может выступать [https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0/ спектрограмма волны] {{---}} изображение, показывающее зависимость спектральной плотности мощности сигнала от времени. Спектрограммы отображают частоту и амплитуду сигнала во времени, но не содержат никакой информации о фазе сигнала, из-за чего результат обратного восстановления сигнала по спектрограмме неизбежно отличается от оригинала. Цифровая генерация спектрограммы сигнала &amp;lt;math&amp;gt;s(t)&amp;lt;/math&amp;gt; сводится к вычислению квадрата амплитуды [https://ru.wikipedia.org/wiki/%D0%9E%D0%BA%D0%BE%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5/ оконного преобразования Фурье]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;spectrogram(t, w) = |STFT(t, w)|^2&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt; {{---}} используемое окно и &amp;lt;math&amp;gt;STFT(t, w)&amp;lt;/math&amp;gt; {{---}} оконное преобразование Фурье.&lt;br /&gt;
&lt;br /&gt;
Для восстановления исходного сигнала по его спектрограмме может быть использован алгоритм Гриффина-Лима&amp;lt;ref name=&amp;quot;griffin-lim&amp;quot;&amp;gt;D. Griffin and Jae Lim, &amp;quot;Signal estimation from modified short-time Fourier transform,&amp;quot; ICASSP '83. IEEE International Conference on Acoustics, Speech, and Signal Processing, Boston, Massachusetts, USA, 1983, pp. 804-807, doi: 10.1109/ICASSP.1983.1172092.&amp;lt;/ref&amp;gt;, который основан на минимизации среднеквадратичной ошибки между оконным преобразованием Фурье оцениваемого сигнала и имеющимся преобразованием в спектрограмме.&lt;br /&gt;
&lt;br /&gt;
== Классы подходов к синтезу речи ==&lt;br /&gt;
Основными требованиями к технологиям синтеза речи являются естественность (англ. naturalness) и разборчивость (англ. intelligibility).&lt;br /&gt;
Естественность описывает, насколько генерируемая речь близка к человеческой, а разборчивость отражает, насколько сложно понять речь.&lt;br /&gt;
Идеальный синтезатор речи генерирует одновременно и натуральную, и разборчивую речь.&lt;br /&gt;
=== Конкатенативный синтез ===&lt;br /&gt;
'''Конкатенативный синтез''' (англ. concatenative synthesis) основывается на конкатенации предварительно записанных примеров человеческой речи в единую звуковую последовательность. Данный подход синтезирует наиболее естественную речь, но генерируемая речь часто содержит значительные отличия и ошибки по сравнению с человеческой речью. Примеры конкатенативного синтеза:&lt;br /&gt;
&lt;br /&gt;
* '''Синтез с выбором''' (англ. unit selection synthesis) является самым используемым подходом конкатенативного синтеза и использует большую базу данных записанной речи. При создании базы данных записанные фразы могут делиться на различные звуковые единицы, такие, как фоны, дифоны, полуфоны, слоги, морфемы, целые фразы или предложения. При запуске алгоритм генерирует выходную звуковую волну с помощью выбора наилучшей последовательности звуковых единиц из базы данных. Данный выбор обычно реализован с помощью [[Дерево решений и случайный лес|дерева решений]]. Синтез с выбором обеспечивает наиболее естественную речь, так как использует минимальную цифровую обработку сигналов. Недостатком подхода является необходимость в довольно большой базе данных звуков для достижения наибольшей естественности речи. Данный подход являлся самым популярным для общего класса задач синтеза речи, но в последнее время уступает по популярности параметрическому подходу. Примером использования синтеза с выбором является голосовой помощник Siri от Apple &amp;lt;ref name=&amp;quot;apple&amp;quot;&amp;gt;[https://machinelearning.apple.com/research/siri-voices/ Deep Learning for Siri’s Voice: On-device Deep Mixture Density Networks for Hybrid Unit Selection Synthesis.]&amp;lt;/ref&amp;gt; и голосовой помощник Алиса от компании Яндекс &amp;lt;ref&amp;gt;[https://www.seonews.ru/analytics/optimization-2018-chto-nakhoditsya-pod-kapotom-u-alisy/ Optimization 2018: что находится «под капотом» у Алисы.]&amp;lt;/ref&amp;gt;. Несмотря на то, что эти продукты используют глубокое обучение, их механизм синтеза речи основан на записанных примерах голоса.&lt;br /&gt;
&lt;br /&gt;
* '''Дифонный синтез''' (англ. diphone synthesis) является частным случаем синтеза с выбором, который использует в качестве звуковых единиц дифоны (переход от звука к звуку). Подход использует только один образец каждого дифона. База данных дифонов при этом получается сравнительно небольшой. Например, немецкий язык содержит около 800 дифонов, а испанский {{---}} около 2500. При работе алгоритма просодия входной последовательности накладывается на дифоны в базе данных с помощью различных алгоритмов цифровой обработки сигналов. Данный алгоритм значительно уступает по качеству другим подходам и кроме меньшего размера базы данных не дает весомых преимуществ, из-за чего не снискал большой популярности.&lt;br /&gt;
&lt;br /&gt;
* '''Синтез речи, ограниченный предметной областью''' (англ. domain-specific speech synthesis) также является частным случаем синтеза с выбором и использует базу данных предварительно записанных слов, фраз и предложений для составления выходной последовательности. Он используется в задачах, где вариативность и размер используемых фраз ограничены некоторой предметной областью, например, прогнозирование погоды или составление расписания транспорта. Из-за значительной простоты реализации и использования данный подход уже долго применяется в коммерческих продуктах, например, говорящие часы или калькуляторы. При этом данный подход может обеспечивать высокую естественность речи вследствие ограниченности используемой базы данных. Недостатками таких систем является ограниченность областью применимости и неспособность учитывать контекст речи, что может вызывать ощутимые ошибки в некоторых языках.&lt;br /&gt;
&lt;br /&gt;
=== Параметрический синтез ===&lt;br /&gt;
Параметрический синтез (англ. statistical parametrical synthesis) для генерации выходной звуковой волны, в отличии от конкатенативного синтеза, не использует реальные примеры речи, а строит вероятностное распределение некоторых параметров и акустических свойств звуковой волны.&lt;br /&gt;
В начале работы параметрического синтезатора с помощью вокодера извлекаются параметры&lt;br /&gt;
&amp;lt;math&amp;gt;\textbf{o} = \{o_1, \dots, o_N\}&amp;lt;/math&amp;gt; звуковой волны и лингвистические данные &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; из текста, который необходимо озвучить. Конкретный вид вектора &amp;lt;math&amp;gt;\textbf{o}&amp;lt;/math&amp;gt; зависит от используемого вокодера {{---}} это может быть как спектрограмма волны, так и некоторое другое представление сигнала, например, дискретные номера интервалов числовой прямой, получаемые с помощью мю-закона. Затем, [[Порождающие модели|порождающая модель]], например, [[Марковская цепь|скрытая марковская цепь]],&lt;br /&gt;
[[Нейронные сети, перцептрон#Сети прямого распространения|нейронная сеть прямого распространения]] или [[Рекуррентные нейронные сети|рекуррентная нейронная сеть]], обучается по выделенным параметрам &amp;lt;math&amp;gt;\textbf{o}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt;, получая параметры модели &amp;lt;math&amp;gt;\hat{\Lambda}&amp;lt;/math&amp;gt;, наиболее хорошо описывающие распределение &amp;lt;math&amp;gt;p(o|l, \Lambda)&amp;lt;/math&amp;gt;. На этапе синтеза, модель генерирует наиболее правдоподобные параметры звуковой волны, используя найденные на этапе обучения параметры модели &amp;lt;math&amp;gt;\hat{\Lambda}&amp;lt;/math&amp;gt; и лингвистическую информацию &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; текста, который необходимо озвучить:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\hat{\textbf{o}} = \arg\max\limits_{\textbf{o}}p(\textbf{o} | l, \hat{\Lambda})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходная звуковая волна генерируется вокодером на основе найденных параметров &amp;lt;math&amp;gt;\hat{\textbf{o}}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данный подход является самым популярным на сегодняшний момент, в том числе из-за того, что он позволяет использовать подходы, основанные на нейронных сетях. Современными продуктами, использующие основанный на глубоком обучении параметрический синтез являются Amazon Lex и Alexa &amp;lt;ref&amp;gt;[https://www.allthingsdistributed.com/2016/11/amazon-ai-and-alexa-for-all-aws-apps.html Bringing the Magic of Amazon AI and Alexa to Apps on AWS.] &amp;lt;/ref&amp;gt;, Google Ассистент &amp;lt;ref name=&amp;quot;cnet wavenet&amp;quot;&amp;gt;Martin, Taylor (May 9, 2018).[https://www.cnet.com/how-to/how-to-get-all-google-assistants-new-voices-right-now/  &amp;quot;Try the all-new Google Assistant voices right now&amp;quot;]. CNET.&amp;lt;/ref&amp;gt; и умные дисплеи Portal от Facebook &amp;lt;ref&amp;gt;[https://venturebeat.com/2020/05/15/facebooks-voice-synthesis-ai-generates-speech-in-500-milliseconds/ Facebook’s voice synthesis AI generates speech in 500 milliseconds.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
== Алгоритмы, основанные на нейронных сетях ==&lt;br /&gt;
Рассмотрим две популярные сети для преобразования текста в спектрограмму (Tacotron) и для синтеза речи по спектрограмме (WaveNet). &lt;br /&gt;
Для синтеза речи по спектрограмме предложено множество моделей: авторегрессионныее (WaveNet, WaveRNN, LPCNet), неавторегресионные (WaveGlow, MelGAN, WaveGrad) и разнообразные (например, можно натренировать сети GAN для генерации лиц под задачу генерации спектрограммы).&lt;br /&gt;
 &lt;br /&gt;
=== Tacotron ===&lt;br /&gt;
[[Файл:Tacotron.PNG|thumb|300px| Рисунок 1 — строение модели Tacotron&amp;lt;ref name=&amp;quot;tacotron&amp;quot;&amp;gt;Yuxuan Wang, RJ Skerry-Ryan, Daisy Stanton, Yonghui Wu, Ron J. Weiss, Navdeep Jaitly, Zongheng Yang, Ying Xiao, Zhifeng Chen, Samy Bengio, Quoc Le, Yannis Agiomyrgiannakis, Rob Clark, &amp;amp; Rif A. Saurous. (2017). Tacotron: Towards End-to-End Speech Synthesis. [https://arxiv.org/abs/1703.10135/ arXiv:1703.10135]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
[[Файл:Tacotron-cbhg.PNG|thumb|300px| Рисунок 2 —строение модуля CBHG модели Tacotron&amp;lt;ref name=&amp;quot;tacotron&amp;quot;&amp;gt;Yuxuan Wang, RJ Skerry-Ryan, Daisy Stanton, Yonghui Wu, Ron J. Weiss, Navdeep Jaitly, Zongheng Yang, Ying Xiao, Zhifeng Chen, Samy Bengio, Quoc Le, Yannis Agiomyrgiannakis, Rob Clark, &amp;amp; Rif A. Saurous. (2017). Tacotron: Towards End-to-End Speech Synthesis. [https://arxiv.org/abs/1703.10135/ arXiv:1703.10135]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
Tacotron {{---}} модель&amp;lt;ref name=&amp;quot;tacotron&amp;quot;&amp;gt;Yuxuan Wang, RJ Skerry-Ryan, Daisy Stanton, Yonghui Wu, Ron J. Weiss, Navdeep Jaitly, Zongheng Yang, Ying Xiao, Zhifeng Chen, Samy Bengio, Quoc Le, Yannis Agiomyrgiannakis, Rob Clark, &amp;amp; Rif A. Saurous. (2017). Tacotron: Towards End-to-End Speech Synthesis. [https://arxiv.org/abs/1703.10135/ arXiv:1703.10135]&amp;lt;/ref&amp;gt; параметрического синтеза речи, основанная на подходе [[Механизм внимания | seq2seq]], разработанная Google и опубликованная в 2017 году. Модель состоит из кодера, декодера с [[Механизм внимания | вниманием]] и нейронной сети для&lt;br /&gt;
пост-процессинга сигнала. Схема модели изображена на Рисунке 1.&lt;br /&gt;
&lt;br /&gt;
Кодер и сеть пост-процессинга опираются на блок CBHG, схема которого изображена на Рисунке 2. Блок состоит из набора одномерных сверточных фильтров, за которыми следуют&lt;br /&gt;
шоссейные нейронные сети (англ. highway networks)&amp;lt;ref&amp;gt;Rupesh Kumar Srivastava, Klaus Greff, and J ̈urgen Schmidhuber. Highway networks. [https://arxiv.org/abs/1505.00387/ arXiv:1505.00387], 2015.&amp;lt;/ref&amp;gt;, являющиеся модификацией [[Долгая краткосрочная память | LSTM сетей]], и двунаправленный [[Долгая краткосрочная память#Управляемые рекуррентные нейроны | управляемый рекуррентный блок]]. Входная последовательность сначала обрабатывается &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;&lt;br /&gt;
наборами сверточных фильтров с размерностью &amp;lt;math&amp;gt;1, 2, \dots, K&amp;lt;/math&amp;gt;. Эти фильтры моделируют локальную и контекстно-зависимую информацию (по аналогии с моделированием униграмм,&lt;br /&gt;
биграмм, вплоть до &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;-грамм). Выход сверточного уровня далее обрабатывается шоссейной сетью для дальнейшего выделения параметров. В конце CBHG&lt;br /&gt;
используется управляемый рекуррентный блок, который для выделения параметров опирается на контекст перед рассматриваемым символом и после рассматриваемого символа.&lt;br /&gt;
&lt;br /&gt;
Задача кодера заключается в извлечении последовательных параметров из текста. Его входом является последовательность символов, в которой каждый символ был закодирован one-hot&lt;br /&gt;
кодированием и объединен в единый непрерывный вектор. К данному входу применяется ряд нелинейных преобразований в виде сети с бутылочным горлышком (англ. bottleneck layer), что позволяет улучшить&lt;br /&gt;
обобщаемость сети и ускорить сходимость. Модуль CBHG преобразует выход нелинейных преобразований в итоговое представление текста, которая передается в декодер.&lt;br /&gt;
&lt;br /&gt;
Декодер является рекуррентной нейронной сетью с вниманием, в которой запрос внимания генерируется каждый временной промежуток. Вектор контекста соединяется с выходом ячейки внимания&lt;br /&gt;
и подается на вход декодирующим рекуррентным нейронным сетям, которые являются управляемыми рекуррентными блоками. Выходом декодера является спектрограмма звуковой волны, которая&lt;br /&gt;
передается сети пост-обработки для генерации непосредственно звуковой волны.&lt;br /&gt;
&lt;br /&gt;
В качестве сети пост-обработки используется модуль CBHG, описанный ранее. После этого спектрограмма звуковой волны передается на вход [[Синтез речи#Генерация звуковой волны | алгоритму Гриффина-Лима]], который генерирует итоговую звуковую волну.&lt;br /&gt;
&lt;br /&gt;
Модель Tacotron была значительно улучшена в последующей модификации Tacotron 2 &amp;lt;ref&amp;gt;Jonathan Shen, Ruoming Pang, Ron J. Weiss, Mike Schuster, Navdeep Jaitly, Zongheng Yang, Zhifeng Chen, Yu Zhang, Yuxuan Wang, RJ Skerry-Ryan, Rif A. Saurous, Yannis Agiomyrgiannakis, &amp;amp; Yonghui Wu. (2018). Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions. [https://arxiv.org/abs/1712.05884  arXiv:1712.05884].&amp;lt;/ref&amp;gt;, которая переработала исходную архитектуру Tacotron и объединила её с вокодером на основе WaveNet. Данная модель способна синтезировать речь высокого качества, принимая на вход только текст, который необходимо озвучить&amp;lt;ref name=&amp;quot;tacotron2&amp;quot;&amp;gt;[https://ai.googleblog.com/2017/12/tacotron-2-generating-human-like-speech.html/ Tacotron 2: Generating Human-like Speech from Text]&amp;lt;/ref&amp;gt;. Реализация данной модели доступна на [https://github.com/NVIDIA/tacotron2 Github].&lt;br /&gt;
&lt;br /&gt;
=== WaveNet ===&lt;br /&gt;
WaveNet&amp;lt;ref name=&amp;quot;wavenet&amp;quot;&amp;gt;Aaron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew Senior, &amp;amp; Koray Kavukcuoglu. (2016). WaveNet: A Generative Model for Raw Audio. [https://arxiv.org/abs/1609.03499/ arXiv:1609.03499]&amp;lt;/ref&amp;gt; является [[Порождающие модели | порождающей моделью]], использующей параметрический подход к синтезу речи. Её задача {{---}} восстановить распределение вероятностей звукового сигнала&lt;br /&gt;
&amp;lt;math&amp;gt;\textbf{x} = \{x_1, x_2, \dots, x_T\}&amp;lt;/math&amp;gt; с помощью произведения условных вероятностей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(\textbf{x})=\prod\limits_{t=1}^{T} p(x_t | x_1, x_2, \dots, x_{t-1})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, вероятность каждого сигнала &amp;lt;math&amp;gt;x_t&amp;lt;/math&amp;gt; зависит только от предыдущих сигналов. Во время обучения модель оценивает данное условное распределение вероятностей, принимая на вход сигналы из обучающей выборки одновременно. На этапе генерации модель порождает выходные сигналы с помощью полученной оценки распределения вероятности последовательно {{---}} полученный моделью сигнал в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; подается обратно на вход для генерации последующего сигнала в момент времени &amp;lt;math&amp;gt;t+1&amp;lt;/math&amp;gt;. Структура модели позволяет использовать её в широком спектре задач, например, в задачах продолжения музыкального произведения по его началу, порождения голоса конкретного человека или text-to-speech синтеза.&lt;br /&gt;
&lt;br /&gt;
Основной идеей модели является использование причинных сверточных сетей (англ. causal convolution layers) и [[Сверточные нейронные сети#Расширенная свертка (aнгл. Dilated convolution) | расширенных ]] причинных сверточных сетей (англ. dilated causal convolution layers).&lt;br /&gt;
Причинная сверточная сеть представляет собой несколько уровней сверточной нейронной сети, связанных между собой в порядке, который не нарушает последовательность&lt;br /&gt;
входного сигнала, т.е. оцениваемая в момент времени &amp;lt;math&amp;gt;t+1&amp;lt;/math&amp;gt; вероятность сигнала &amp;lt;math&amp;gt;p(x_{t+1} | x_1, x_2, \dots, x_t)&amp;lt;/math&amp;gt; не зависит от сигналов в последующие моменты времени &amp;lt;math&amp;gt;t+2, t+3, \dots, T&amp;lt;/math&amp;gt;. Причинные сверточные сети обучаются быстрее, чем [[Рекуррентные нейронные сети | рекуррентные нейронные сети]], но требуют достаточно большого количества уровней для обеспечивания большого окна восприятия сигнала (англ. signal reception window) {{---}} количество предыдущих сигналов, от которых зависит оценка сигнала в текущий момент.&lt;br /&gt;
&lt;br /&gt;
[[Файл:dilated-causal-convolutions.png|thumb|300px| Рисунок 3 —  строение причинной сверточной сети (сверху) и расширенной причинной сверточной сети (снизу)&amp;lt;ref name=&amp;quot;wavenet&amp;quot;&amp;gt;Aaron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew Senior, &amp;amp; Koray Kavukcuoglu. (2016). WaveNet: A Generative Model for Raw Audio. [https://arxiv.org/abs/1609.03499/ arXiv:1609.03499]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
Модификация причинных сверточных сетей, расширенные причинные сверточные сети, способна увеличить окно восприятия сигнала в разы и является основной идеей модели WaveNet.&lt;br /&gt;
Модификация заключается в применении свертки к области размерности большей, чем её длина, пропуская входные связи с некоторым шагом. Данный подход аналогичен применению пулинга или свертки с шагом большим единицы, но выходом расширенной причинной сверточной сети является последовательность размерности, равной размерности входной последовательности. Расширенные причинные сверточные сети способны достигать большего окна&lt;br /&gt;
восприятия сигнала, используя меньшее количество уровней, при этом сохраняя вычислительную сложность причинных сверточных сетей. Структура причинных сверточных сетей изображена на Рисунке 3.&lt;br /&gt;
&lt;br /&gt;
[[Файл:wavenet.png|thumb|300px| Рисунок 4 —  строение модели WaveNet &amp;lt;ref name=&amp;quot;wavenet&amp;quot;&amp;gt;Aaron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew Senior, &amp;amp; Koray Kavukcuoglu. (2016). WaveNet: A Generative Model for Raw Audio. [https://arxiv.org/abs/1609.03499/ arXiv:1609.03499]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
Полная структура модели WaveNet изображена на Рисунке 4. В качестве вокодера используется [[Синтез речи#Генерация звуковой волны | мю-закон]].&lt;br /&gt;
Модель представляет собой множество слоев сверточной нейронной сети, аналогично модели [[PixelRNN_и_PixelCNN | PixelCNN]].&lt;br /&gt;
Модель на вход принимает закодированную мю-законом последовательность сигналов &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt; и, опционально, некоторую дополнительную информацию, обозначаемую как вектор параметров &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, а на выходе возвращает распределение вероятностей для параметров мю-закона, по которым можно восстановить синтезированный сигнал. На этапе обучения входным сигналом &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt; является пример звука из обучающей выборки, который подается на все входы одновременно. На этапе генерации входом модели &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt; будут являться сигналы, порожденные ею в предыдущие моменты времени и передаваемые ей последовательно. Дополнительная информация &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, например, может содержать информацию о рассматриваемом тексте в задаче text-to-speech синтеза. &lt;br /&gt;
&lt;br /&gt;
Модель представляет собой набор из &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; [[Сверточные нейронные сети#Residual block | блоков с остаточной связью]], содержащих преобразование расширенной причинной свертки и функцию активации. Функция активации при этом аналогична функции, предложенной в модели Gated PixelCNN &amp;lt;ref&amp;gt;Aaron van den Oord, Nal Kalchbrenner, Oriol Vinyals, Lasse Espeholt, Alex Graves, &amp;amp; Koray Kavukcuoglu. (2016). Conditional Image Generation with PixelCNN Decoders. [https://arxiv.org/abs/1606.05328/ arXiv:1606.05328]&lt;br /&gt;
&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\textbf{y} = \tanh(W_{f, k} * \textbf{x}) \odot \sigma(W_{g,k}*\textbf{x})&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; {{---}} номер слоя модели, &amp;lt;math&amp;gt;f, g&amp;lt;/math&amp;gt; {{---}} индексы входов преобразования, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; {{---}} функция сигмоиды, &amp;lt;math&amp;gt;*&amp;lt;/math&amp;gt; {{---}} операция свертки, &amp;lt;math&amp;gt;\odot&amp;lt;/math&amp;gt; {{---}} операция покомпонентного умножения векторов и &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; {{---}} выученные параметры свертки.&lt;br /&gt;
&lt;br /&gt;
В случае использования дополнительной информации &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; модель оценивает распределение вероятностей звукового сигнала как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(\textbf{x}|\textbf{h})=\prod\limits_{t=1}^{T} p(x_t | x_1, x_2, \dots, x_{t-1}, \textbf{h})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для использования дополнительной информации &amp;lt;math&amp;gt;\textbf{h}&amp;lt;/math&amp;gt; функция активации может использовать вектор &amp;lt;math&amp;gt;\textbf{h}&amp;lt;/math&amp;gt; глобально при вычислении каждой свертки как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\textbf{y} = \tanh(W_{f, k} * \textbf{x} + V_{f,k}^T\textbf{h}) \odot \sigma(W_{g,k}*\textbf{x}+V_{g,k}^T\textbf{h})&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;V_{f,k}&amp;lt;/math&amp;gt; {{---}} выученные параметры линейной проекции. В случае, когда размерность вектора &amp;lt;math&amp;gt;\textbf{h}&amp;lt;/math&amp;gt; меньше, чем размерность &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt;, можно использовать upsampling-преобразование сверточных сетей, чтобы получить вектор размерности &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt; и использовать его вместо оригинального вектора &amp;lt;math&amp;gt;\textbf{h}&amp;lt;/math&amp;gt;. При этом &amp;lt;math&amp;gt;V_{f,k}*\textbf{h}&amp;lt;/math&amp;gt; будет являться операцией свертки размера 1.&lt;br /&gt;
&lt;br /&gt;
Самый известный пример применения WaveNet для синтеза речи является  технология Google Ассистент, которая использует WaveNet для генерации голосов ассистентов на различных&lt;br /&gt;
языках. Модель позволила значительно сократить количество записей речи актеров озвучки, требуемых для создания голосовой модели&amp;lt;ref name=&amp;quot;cnet wavenet&amp;quot;&amp;gt;Martin, Taylor (May 9, 2018).[https://www.cnet.com/how-to/how-to-get-all-google-assistants-new-voices-right-now/  &amp;quot;Try the all-new Google Assistant voices right now&amp;quot;]. CNET.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Проблемы ==&lt;br /&gt;
===Задача обработки текста===&lt;br /&gt;
Алгоритмы обработки текста могут не справляться с обработкой определенных частей речи, таких, как аббревиатуры, числа и гетеронимы. Произношение определенных слов также зависит от контекста их применения. Большинство систем синтеза речи по тексту не способны выделять контекст предложений и используют различные эвристические подходы с целью различить омографы (слова с одинаковым написанием, но различным произношением).&lt;br /&gt;
===Преобразование текста в фонемы===&lt;br /&gt;
Процесс преобразования текста в фонемы обычно подразделяется на два подхода {{---}} словарный и основанный на правилах. Словарный подход использует словарь с записанными фонетическими представлениями слов и в процессе работы производит поиск в нем с целью конвертации слова в последовательность фонем. Основанный на правилах подход использует набор правил, которые применяются к словам или частям слов с целью выделения фонем. Оба эти подхода имеют существенные недостатки и требуют усовершенствования.&lt;br /&gt;
=== Мультиязычный синтез ===&lt;br /&gt;
Работает, но интересная задача генерации данного голоса на другом языке.&lt;br /&gt;
=== Несколько голосов ===&lt;br /&gt;
Сеть перепрыгивает между голосами в середине слова.&lt;br /&gt;
=== Синтез в стиле ===&lt;br /&gt;
Сейчас реализовано с помощью вариационных автоэнкодеров. Требуется пример для стиля.  &lt;br /&gt;
=== Выразительный синтез ===&lt;br /&gt;
Непонятно, что речь должна отмечать выражением.&lt;br /&gt;
=== Оценка качества ===&lt;br /&gt;
На данный момент не существует единых критериев оценки качества синтезаторов речи. В каждом отдельном применении технологии синтеза речи могут быть в том числе свои критерии качества, связанные с предметной областью или используемым оборудованием. С другой стороны, ряд исследователей начали оценивать синтезаторы речи используя распространенные наборы данных для синтеза речи &amp;lt;ref&amp;gt;[http://festvox.org/blizzard/ Blizzard Challenge]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Популярной метрикой оценки естественности речи является '''средняя оценка мнения''' (англ. mean opinion score)&amp;lt;ref name=&amp;quot;mos&amp;quot;&amp;gt;[https://www.itu.int/rec/T-REC-P.800.2 ITU-T Recommendation P.800.2 : Mean opinion score interpretation and reporting]&amp;lt;/ref&amp;gt;. Она заключается в воспроизведении результатов работы синтезатора речи выборке людей, которые затем оценивают её качество по шкале от 1 до 5, в которой 1 означает &amp;quot;плохое&amp;quot; качество, 5 {{---}} &amp;quot;идеальное&amp;quot;. Итоговой оценкой является среднее арифметическое всех оценок. Данная метрика страдает от субъективности и предвзятости опрашиваемых людей, в частности, в подобного рода экспериментах опрашиваемые стремятся ставить оценки, располагающиеся на всей ширине интервала оценок&amp;lt;ref name=&amp;quot;bias&amp;quot;&amp;gt;Zielinski, Slawomir, Francis Rumsey, and Søren Bech. &amp;quot;On some biases encountered in modern audio quality listening tests-a review.&amp;quot; Journal of the Audio Engineering Society 56.6 (2008): 427-451.&amp;lt;/ref&amp;gt;. Из этого следует, что данная оценка не является абсолютной и её нельзя использовать для сравнения двух отдельных экспериментов кроме тех случаев, когда эксперимент поставлен особым образом, чтобы учесть данный недостаток, и даже в таком случае требуется статистический анализ данных, чтобы убедиться, что такое сравнение двух систем корректно&amp;lt;ref name=&amp;quot;mos&amp;quot;&amp;gt;[https://www.itu.int/rec/T-REC-P.800.2 ITU-T Recommendation P.800.2 : Mean opinion score interpretation and reporting]&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Модели WaveNet, Tacotron и Tacotron 2 использовали среднюю оценку мнения для сравнения своей работы с естественным языком и другими подходами. Например, WaveNet достиг оценки 4.21 и 4.08 для американского варианта английского и путунхуа, по сравнению с оценками естественного языка 4.46 и 4.25 соответственно. Работа, описывающая модель Tacotron, сравнивала модель с другими разрабатываемыми подходами&amp;lt;ref&amp;gt;Heiga Zen, Yannis Agiomyrgiannakis, Niels Egberts, Fergus Henderson, and Przemysław Szczepa-niak. Fast, compact, and high quality LSTM-RNN based statistical parametric speech synthesizersfor mobile devices.Proceedings Interspeech, 2016&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Junyoung Chung, Caglar Gulcehre, KyungHyun Cho, and Yoshua Bengio.  Empirical evaluation ofgated recurrent neural networks on sequence modeling. [https://arxiv.org/abs/1412/3555 arXiv:1412.3555], 2014.&amp;lt;/ref&amp;gt;. Tacotron смог достичь оценки в 3.82 балла для американского варианта английского, когда параметрический подход достиг 3.69, а конкатенативный - 4.09. Tacotron 2 смог достичь оценки в 4.52 балла по сравнению с оценкой записанной речи в 4.58 балла&amp;lt;ref name=&amp;quot;tacotron2&amp;quot;&amp;gt;[https://ai.googleblog.com/2017/12/tacotron-2-generating-human-like-speech.html/ Tacotron 2: Generating Human-like Speech from Text]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Нейронные сети, перцептрон ]]&lt;br /&gt;
* [[Сверточные нейронные сети ]]&lt;br /&gt;
* [[ Рекуррентные нейронные сети ]]&lt;br /&gt;
* [[ Механизм внимания ]]&lt;br /&gt;
* [[ Распознавание речи ]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* Aaron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew Senior, &amp;amp; Koray Kavukcuoglu. (2016). WaveNet: A Generative Model for Raw Audio. [https://arxiv.org/abs/1609.03499/ arXiv:1609.03499]&lt;br /&gt;
* Yuxuan Wang, RJ Skerry-Ryan, Daisy Stanton, Yonghui Wu, Ron J. Weiss, Navdeep Jaitly, Zongheng Yang, Ying Xiao, Zhifeng Chen, Samy Bengio, Quoc Le, Yannis Agiomyrgiannakis, Rob Clark, &amp;amp; Rif A. Saurous. (2017). Tacotron: Towards End-to-End Speech Synthesis. [https://arxiv.org/abs/1703.10135/ arXiv:1703.10135]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B8%D0%BD%D1%82%D0%B5%D0%B7_%D1%80%D0%B5%D1%87%D0%B8&amp;diff=80624</id>
		<title>Синтез речи</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B8%D0%BD%D1%82%D0%B5%D0%B7_%D1%80%D0%B5%D1%87%D0%B8&amp;diff=80624"/>
				<updated>2021-02-09T10:41:26Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Проблемы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Машинное обучение]] [[Категория: Обработка естественного языка]]&lt;br /&gt;
'''Синтез речи''' (англ. speech synthesis) {{---}} процесс генерации компьютером человеческой речи. Компьютерная система, способная к синтезу речи, называется речевым синтезатором.&lt;br /&gt;
Система, генерирующая человеческую речь, основываясь на тексте, называется '''text-to-speech''' системой (сокр. TTS).&lt;br /&gt;
&lt;br /&gt;
В процессе человеческой речи нервная система транслирует некоторый текст или мысленный концепт в движение мышц, связанных с органами дыхания и речи. Затем производится генерация акустического сигнала с помощью потока воздуха из легких. Сигнал содержит как периодические компоненты (созданные с помощью вибрации органов речи), так и апериодические&lt;br /&gt;
(созданные окружающей средой и фоновым шумом). Используя изменяющиеся во времени сокращения мышц, меняются частотные характеристики акустического сигнала.&lt;br /&gt;
Задача систем генерации речи по тексту {{---}} симулировать данный процесс в каком-либо виде.&lt;br /&gt;
&lt;br /&gt;
== Этапы синтеза речи ==&lt;br /&gt;
Работу систем синтеза речи по тексту как правило можно разделить на два этапа, за которые отвечают два отдельных компонента {{---}} обработка текста и синтез речи.&lt;br /&gt;
&lt;br /&gt;
Первый этап обычно содержит несколько этапов [[Обработка естественного языка|обработки естественного языка]], такие как разбиение  на предложения, разбиение на слова, нормализация текста,&lt;br /&gt;
автоматическая морфологическая разметка и конвертация графем в фонемы (англ. grapheme-to-phoneme conversion, G2P).&lt;br /&gt;
Данный этап принимает в качестве входных параметров текст и возвращает последовательность фонем с различными выделенными лингвистическими особенностями.&lt;br /&gt;
&lt;br /&gt;
Этап синтеза речи, в свою очередь, принимает на вход последовательность фонем и возвращает синтезированную звуковую волну речи.&lt;br /&gt;
Данный этап обычно включает в себя алгоритмы предсказания [https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%81%D0%BE%D0%B4%D0%B8%D1%8F_(%D0%BB%D0%B8%D0%BD%D0%B3%D0%B2%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0)/ просодии] {{---}} характеристик речи, описывающих признаки, являющиеся дополнительными к основной артикуляции звука, такие как тон, ударение, громкость и т.д. &lt;br /&gt;
&lt;br /&gt;
== Генерация звуковой волны ==&lt;br /&gt;
&lt;br /&gt;
Обычно, синтезаторы речи не работают непосредственно с сигналом звуковой волны, а используют некоторое представление этого сигнала, например, спектрограмму. Алгоритм, способный выделить такие параметры и по ним обратно восстановить звуковую волну, называется '''вокодер''' (англ. voice encoder). Примерами таких алгоритмов являются мю-закон &amp;lt;ref name=&amp;quot;mu law&amp;quot;&amp;gt;[http://www.itu.int/rec/dologin_pub.asp?lang=e&amp;amp;id=T-REC-G.711-198811-I!!PDF-E&amp;amp;type=items/ &amp;quot;ITU-T Recommendation G.711&amp;quot;]&amp;lt;/ref&amp;gt; и восстановление сигнала по его спектрограмме. &lt;br /&gt;
&lt;br /&gt;
Мю-закон преобразует каждое значение дискретизированного сигнала &amp;lt;math&amp;gt;\textbf{x} = \{x_1, x_2, \dots, x_T\}&amp;lt;/math&amp;gt;  как&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x_t) = sign(x_t) \frac{\ln(1+\mu|x_t|)}{\ln(1+\mu)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;\mu = 255&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1 &amp;lt; x_t &amp;lt; 1&amp;lt;/math&amp;gt;, а затем кодирует сигнал как двузначное шестнадцатеричное число, которое обозначает некоторый интервал на числовой прямой&amp;lt;ref name=&amp;quot;mu law&amp;quot;&amp;gt;[http://www.itu.int/rec/dologin_pub.asp?lang=e&amp;amp;id=T-REC-G.711-198811-I!!PDF-E&amp;amp;type=items/ &amp;quot;ITU-T Recommendation G.711&amp;quot;]&amp;lt;/ref&amp;gt;. Обратное преобразование выбирает значение преобразованного сигнала &amp;lt;math&amp;gt;y_t=f(x_t)&amp;lt;/math&amp;gt; из данного номера интервала и получает оценку исходного сигнала &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; f^{-1}(y_t) = sign(y_t)(1/\mu)((1+\mu)^{|y_t|}-1), -1 &amp;lt; y_t &amp;lt; 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве представления звукового сигнала может выступать [https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0/ спектрограмма волны] {{---}} изображение, показывающее зависимость спектральной плотности мощности сигнала от времени. Спектрограммы отображают частоту и амплитуду сигнала во времени, но не содержат никакой информации о фазе сигнала, из-за чего результат обратного восстановления сигнала по спектрограмме неизбежно отличается от оригинала. Цифровая генерация спектрограммы сигнала &amp;lt;math&amp;gt;s(t)&amp;lt;/math&amp;gt; сводится к вычислению квадрата амплитуды [https://ru.wikipedia.org/wiki/%D0%9E%D0%BA%D0%BE%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5/ оконного преобразования Фурье]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;spectrogram(t, w) = |STFT(t, w)|^2&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt; {{---}} используемое окно и &amp;lt;math&amp;gt;STFT(t, w)&amp;lt;/math&amp;gt; {{---}} оконное преобразование Фурье.&lt;br /&gt;
&lt;br /&gt;
Для восстановления исходного сигнала по его спектрограмме может быть использован алгоритм Гриффина-Лима&amp;lt;ref name=&amp;quot;griffin-lim&amp;quot;&amp;gt;D. Griffin and Jae Lim, &amp;quot;Signal estimation from modified short-time Fourier transform,&amp;quot; ICASSP '83. IEEE International Conference on Acoustics, Speech, and Signal Processing, Boston, Massachusetts, USA, 1983, pp. 804-807, doi: 10.1109/ICASSP.1983.1172092.&amp;lt;/ref&amp;gt;, который основан на минимизации среднеквадратичной ошибки между оконным преобразованием Фурье оцениваемого сигнала и имеющимся преобразованием в спектрограмме.&lt;br /&gt;
&lt;br /&gt;
== Классы подходов к синтезу речи ==&lt;br /&gt;
Основными требованиями к технологиям синтеза речи являются естественность (англ. naturalness) и разборчивость (англ. intelligibility).&lt;br /&gt;
Естественность описывает, насколько генерируемая речь близка к человеческой, а разборчивость отражает, насколько сложно понять речь.&lt;br /&gt;
Идеальный синтезатор речи генерирует одновременно и натуральную, и разборчивую речь.&lt;br /&gt;
=== Конкатенативный синтез ===&lt;br /&gt;
'''Конкатенативный синтез''' (англ. concatenative synthesis) основывается на конкатенации предварительно записанных примеров человеческой речи в единую звуковую последовательность. Данный подход синтезирует наиболее естественную речь, но генерируемая речь часто содержит значительные отличия и ошибки по сравнению с человеческой речью. Примеры конкатенативного синтеза:&lt;br /&gt;
&lt;br /&gt;
* '''Синтез с выбором''' (англ. unit selection synthesis) является самым используемым подходом конкатенативного синтеза и использует большую базу данных записанной речи. При создании базы данных записанные фразы могут делиться на различные звуковые единицы, такие, как фоны, дифоны, полуфоны, слоги, морфемы, целые фразы или предложения. При запуске алгоритм генерирует выходную звуковую волну с помощью выбора наилучшей последовательности звуковых единиц из базы данных. Данный выбор обычно реализован с помощью [[Дерево решений и случайный лес|дерева решений]]. Синтез с выбором обеспечивает наиболее естественную речь, так как использует минимальную цифровую обработку сигналов. Недостатком подхода является необходимость в довольно большой базе данных звуков для достижения наибольшей естественности речи. Данный подход являлся самым популярным для общего класса задач синтеза речи, но в последнее время уступает по популярности параметрическому подходу. Примером использования синтеза с выбором является голосовой помощник Siri от Apple &amp;lt;ref name=&amp;quot;apple&amp;quot;&amp;gt;[https://machinelearning.apple.com/research/siri-voices/ Deep Learning for Siri’s Voice: On-device Deep Mixture Density Networks for Hybrid Unit Selection Synthesis.]&amp;lt;/ref&amp;gt; и голосовой помощник Алиса от компании Яндекс &amp;lt;ref&amp;gt;[https://www.seonews.ru/analytics/optimization-2018-chto-nakhoditsya-pod-kapotom-u-alisy/ Optimization 2018: что находится «под капотом» у Алисы.]&amp;lt;/ref&amp;gt;. Несмотря на то, что эти продукты используют глубокое обучение, их механизм синтеза речи основан на записанных примерах голоса.&lt;br /&gt;
&lt;br /&gt;
* '''Дифонный синтез''' (англ. diphone synthesis) является частным случаем синтеза с выбором, который использует в качестве звуковых единиц дифоны (переход от звука к звуку). Подход использует только один образец каждого дифона. База данных дифонов при этом получается сравнительно небольшой. Например, немецкий язык содержит около 800 дифонов, а испанский {{---}} около 2500. При работе алгоритма просодия входной последовательности накладывается на дифоны в базе данных с помощью различных алгоритмов цифровой обработки сигналов. Данный алгоритм значительно уступает по качеству другим подходам и кроме меньшего размера базы данных не дает весомых преимуществ, из-за чего не снискал большой популярности.&lt;br /&gt;
&lt;br /&gt;
* '''Синтез речи, ограниченный предметной областью''' (англ. domain-specific speech synthesis) также является частным случаем синтеза с выбором и использует базу данных предварительно записанных слов, фраз и предложений для составления выходной последовательности. Он используется в задачах, где вариативность и размер используемых фраз ограничены некоторой предметной областью, например, прогнозирование погоды или составление расписания транспорта. Из-за значительной простоты реализации и использования данный подход уже долго применяется в коммерческих продуктах, например, говорящие часы или калькуляторы. При этом данный подход может обеспечивать высокую естественность речи вследствие ограниченности используемой базы данных. Недостатками таких систем является ограниченность областью применимости и неспособность учитывать контекст речи, что может вызывать ощутимые ошибки в некоторых языках.&lt;br /&gt;
&lt;br /&gt;
=== Параметрический синтез ===&lt;br /&gt;
Параметрический синтез (англ. statistical parametrical synthesis) для генерации выходной звуковой волны, в отличии от конкатенативного синтеза, не использует реальные примеры речи, а строит вероятностное распределение некоторых параметров и акустических свойств звуковой волны.&lt;br /&gt;
В начале работы параметрического синтезатора с помощью вокодера извлекаются параметры&lt;br /&gt;
&amp;lt;math&amp;gt;\textbf{o} = \{o_1, \dots, o_N\}&amp;lt;/math&amp;gt; звуковой волны и лингвистические данные &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; из текста, который необходимо озвучить. Конкретный вид вектора &amp;lt;math&amp;gt;\textbf{o}&amp;lt;/math&amp;gt; зависит от используемого вокодера {{---}} это может быть как спектрограмма волны, так и некоторое другое представление сигнала, например, дискретные номера интервалов числовой прямой, получаемые с помощью мю-закона. Затем, [[Порождающие модели|порождающая модель]], например, [[Марковская цепь|скрытая марковская цепь]],&lt;br /&gt;
[[Нейронные сети, перцептрон#Сети прямого распространения|нейронная сеть прямого распространения]] или [[Рекуррентные нейронные сети|рекуррентная нейронная сеть]], обучается по выделенным параметрам &amp;lt;math&amp;gt;\textbf{o}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt;, получая параметры модели &amp;lt;math&amp;gt;\hat{\Lambda}&amp;lt;/math&amp;gt;, наиболее хорошо описывающие распределение &amp;lt;math&amp;gt;p(o|l, \Lambda)&amp;lt;/math&amp;gt;. На этапе синтеза, модель генерирует наиболее правдоподобные параметры звуковой волны, используя найденные на этапе обучения параметры модели &amp;lt;math&amp;gt;\hat{\Lambda}&amp;lt;/math&amp;gt; и лингвистическую информацию &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; текста, который необходимо озвучить:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\hat{\textbf{o}} = \arg\max\limits_{\textbf{o}}p(\textbf{o} | l, \hat{\Lambda})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходная звуковая волна генерируется вокодером на основе найденных параметров &amp;lt;math&amp;gt;\hat{\textbf{o}}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данный подход является самым популярным на сегодняшний момент, в том числе из-за того, что он позволяет использовать подходы, основанные на нейронных сетях. Современными продуктами, использующие основанный на глубоком обучении параметрический синтез являются Amazon Lex и Alexa &amp;lt;ref&amp;gt;[https://www.allthingsdistributed.com/2016/11/amazon-ai-and-alexa-for-all-aws-apps.html Bringing the Magic of Amazon AI and Alexa to Apps on AWS.] &amp;lt;/ref&amp;gt;, Google Ассистент &amp;lt;ref name=&amp;quot;cnet wavenet&amp;quot;&amp;gt;Martin, Taylor (May 9, 2018).[https://www.cnet.com/how-to/how-to-get-all-google-assistants-new-voices-right-now/  &amp;quot;Try the all-new Google Assistant voices right now&amp;quot;]. CNET.&amp;lt;/ref&amp;gt; и умные дисплеи Portal от Facebook &amp;lt;ref&amp;gt;[https://venturebeat.com/2020/05/15/facebooks-voice-synthesis-ai-generates-speech-in-500-milliseconds/ Facebook’s voice synthesis AI generates speech in 500 milliseconds.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
== Алгоритмы, основанные на нейронных сетях ==&lt;br /&gt;
Рассмотрим две популярные сети для преобразования текста в спектрограмму (Tacotron) и для синтеза речи по спектрограмме (WaveNet). &lt;br /&gt;
Для синтеза речи по спектрограмме предложено множество моделей: авторегрессионныее (WaveNet, WaveRNN, LPCNet), неавторегресионные (WaveGlow, MelGAN, WaveGrad) и разнообразные (например, можно натренировать сети GAN для генерации лиц под задачу генерации спектрограммы).&lt;br /&gt;
 &lt;br /&gt;
=== Tacotron ===&lt;br /&gt;
[[Файл:Tacotron.PNG|thumb|300px| Рисунок 3 — строение модели Tacotron&amp;lt;ref name=&amp;quot;tacotron&amp;quot;&amp;gt;Yuxuan Wang, RJ Skerry-Ryan, Daisy Stanton, Yonghui Wu, Ron J. Weiss, Navdeep Jaitly, Zongheng Yang, Ying Xiao, Zhifeng Chen, Samy Bengio, Quoc Le, Yannis Agiomyrgiannakis, Rob Clark, &amp;amp; Rif A. Saurous. (2017). Tacotron: Towards End-to-End Speech Synthesis. [https://arxiv.org/abs/1703.10135/ arXiv:1703.10135]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
[[Файл:Tacotron-cbhg.PNG|thumb|300px| Рисунок 4 —строение модуля CBHG модели Tacotron&amp;lt;ref name=&amp;quot;tacotron&amp;quot;&amp;gt;Yuxuan Wang, RJ Skerry-Ryan, Daisy Stanton, Yonghui Wu, Ron J. Weiss, Navdeep Jaitly, Zongheng Yang, Ying Xiao, Zhifeng Chen, Samy Bengio, Quoc Le, Yannis Agiomyrgiannakis, Rob Clark, &amp;amp; Rif A. Saurous. (2017). Tacotron: Towards End-to-End Speech Synthesis. [https://arxiv.org/abs/1703.10135/ arXiv:1703.10135]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
Tacotron {{---}} модель&amp;lt;ref name=&amp;quot;tacotron&amp;quot;&amp;gt;Yuxuan Wang, RJ Skerry-Ryan, Daisy Stanton, Yonghui Wu, Ron J. Weiss, Navdeep Jaitly, Zongheng Yang, Ying Xiao, Zhifeng Chen, Samy Bengio, Quoc Le, Yannis Agiomyrgiannakis, Rob Clark, &amp;amp; Rif A. Saurous. (2017). Tacotron: Towards End-to-End Speech Synthesis. [https://arxiv.org/abs/1703.10135/ arXiv:1703.10135]&amp;lt;/ref&amp;gt; параметрического синтеза речи, основанная на подходе [[Механизм внимания | seq2seq]], разработанная Google и опубликованная в 2017 году. Модель состоит из кодера, декодера с [[Механизм внимания | вниманием]] и нейронной сети для&lt;br /&gt;
пост-процессинга сигнала. Схема модели изображена на Рисунке 2.&lt;br /&gt;
&lt;br /&gt;
Кодер и сеть пост-процессинга опираются на блок CBHG, схема которого изображена на Рисунке 3. Блок состоит из набора одномерных сверточных фильтров, за которыми следуют&lt;br /&gt;
шоссейные нейронные сети (англ. highway networks)&amp;lt;ref&amp;gt;Rupesh Kumar Srivastava, Klaus Greff, and J ̈urgen Schmidhuber. Highway networks. [https://arxiv.org/abs/1505.00387/ arXiv:1505.00387], 2015.&amp;lt;/ref&amp;gt;, являющиеся модификацией [[Долгая краткосрочная память | LSTM сетей]], и двунаправленный [[Долгая краткосрочная память#Управляемые рекуррентные нейроны | управляемый рекуррентный блок]]. Входная последовательность сначала обрабатывается &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;&lt;br /&gt;
наборами сверточных фильтров с размерностью &amp;lt;math&amp;gt;1, 2, \dots, K&amp;lt;/math&amp;gt;. Эти фильтры моделируют локальную и контекстно-зависимую информацию (по аналогии с моделированием униграмм,&lt;br /&gt;
биграмм, вплоть до &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;-грамм). Выход сверточного уровня далее обрабатывается шоссейной сетью для дальнейшего выделения параметров. В конце CBHG&lt;br /&gt;
используется управляемый рекуррентный блок, который для выделения параметров опирается на контекст перед рассматриваемым символом и после рассматриваемого символа.&lt;br /&gt;
&lt;br /&gt;
Задача кодера заключается в извлечении последовательных параметров из текста. Его входом является последовательность символов, в которой каждый символ был закодирован one-hot&lt;br /&gt;
кодированием и объединен в единый непрерывный вектор. К данному входу применяется ряд нелинейных преобразований в виде сети с бутылочным горлышком (англ. bottleneck layer), что позволяет улучшить&lt;br /&gt;
обобщаемость сети и ускорить сходимость. Модуль CBHG преобразует выход нелинейных преобразований в итоговое представление текста, которая передается в декодер.&lt;br /&gt;
&lt;br /&gt;
Декодер является рекуррентной нейронной сетью с вниманием, в которой запрос внимания генерируется каждый временной промежуток. Вектор контекста соединяется с выходом ячейки внимания&lt;br /&gt;
и подается на вход декодирующим рекуррентным нейронным сетям, которые являются управляемыми рекуррентными блоками. Выходом декодера является спектрограмма звуковой волны, которая&lt;br /&gt;
передается сети пост-обработки для генерации непосредственно звуковой волны.&lt;br /&gt;
&lt;br /&gt;
В качестве сети пост-обработки используется модуль CBHG, описанный ранее. После этого спектрограмма звуковой волны передается на вход [[Синтез речи#Генерация звуковой волны | алгоритму Гриффина-Лима]], который генерирует итоговую звуковую волну.&lt;br /&gt;
&lt;br /&gt;
Модель Tacotron была значительно улучшена в последующей модификации Tacotron 2 &amp;lt;ref&amp;gt;Jonathan Shen, Ruoming Pang, Ron J. Weiss, Mike Schuster, Navdeep Jaitly, Zongheng Yang, Zhifeng Chen, Yu Zhang, Yuxuan Wang, RJ Skerry-Ryan, Rif A. Saurous, Yannis Agiomyrgiannakis, &amp;amp; Yonghui Wu. (2018). Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions. [https://arxiv.org/abs/1712.05884  arXiv:1712.05884].&amp;lt;/ref&amp;gt;, которая переработала исходную архитектуру Tacotron и объединила её с вокодером на основе WaveNet. Данная модель способна синтезировать речь высокого качества, принимая на вход только текст, который необходимо озвучить&amp;lt;ref name=&amp;quot;tacotron2&amp;quot;&amp;gt;[https://ai.googleblog.com/2017/12/tacotron-2-generating-human-like-speech.html/ Tacotron 2: Generating Human-like Speech from Text]&amp;lt;/ref&amp;gt;. Реализация данной модели доступна на [https://github.com/NVIDIA/tacotron2 Github].&lt;br /&gt;
&lt;br /&gt;
=== WaveNet ===&lt;br /&gt;
WaveNet&amp;lt;ref name=&amp;quot;wavenet&amp;quot;&amp;gt;Aaron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew Senior, &amp;amp; Koray Kavukcuoglu. (2016). WaveNet: A Generative Model for Raw Audio. [https://arxiv.org/abs/1609.03499/ arXiv:1609.03499]&amp;lt;/ref&amp;gt; является [[Порождающие модели | порождающей моделью]], использующей параметрический подход к синтезу речи. Её задача {{---}} восстановить распределение вероятностей звукового сигнала&lt;br /&gt;
&amp;lt;math&amp;gt;\textbf{x} = \{x_1, x_2, \dots, x_T\}&amp;lt;/math&amp;gt; с помощью произведения условных вероятностей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(\textbf{x})=\prod\limits_{t=1}^{T} p(x_t | x_1, x_2, \dots, x_{t-1})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, вероятность каждого сигнала &amp;lt;math&amp;gt;x_t&amp;lt;/math&amp;gt; зависит только от предыдущих сигналов. Во время обучения модель оценивает данное условное распределение вероятностей, принимая на вход сигналы из обучающей выборки одновременно. На этапе генерации модель порождает выходные сигналы с помощью полученной оценки распределения вероятности последовательно {{---}} полученный моделью сигнал в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; подается обратно на вход для генерации последующего сигнала в момент времени &amp;lt;math&amp;gt;t+1&amp;lt;/math&amp;gt;. Структура модели позволяет использовать её в широком спектре задач, например, в задачах продолжения музыкального произведения по его началу, порождения голоса конкретного человека или text-to-speech синтеза.&lt;br /&gt;
&lt;br /&gt;
Основной идеей модели является использование причинных сверточных сетей (англ. causal convolution layers) и [[Сверточные нейронные сети#Расширенная свертка (aнгл. Dilated convolution) | расширенных ]] причинных сверточных сетей (англ. dilated causal convolution layers).&lt;br /&gt;
Причинная сверточная сеть представляет собой несколько уровней сверточной нейронной сети, связанных между собой в порядке, который не нарушает последовательность&lt;br /&gt;
входного сигнала, т.е. оцениваемая в момент времени &amp;lt;math&amp;gt;t+1&amp;lt;/math&amp;gt; вероятность сигнала &amp;lt;math&amp;gt;p(x_{t+1} | x_1, x_2, \dots, x_t)&amp;lt;/math&amp;gt; не зависит от сигналов&lt;br /&gt;
в последующие моменты времени &amp;lt;math&amp;gt;t+2, t+3, \dots, T&amp;lt;/math&amp;gt;. Причинные сверточные сети обучаются&lt;br /&gt;
быстрее, чем [[Рекуррентные нейронные сети | рекуррентные нейронные сети]], но требуют достаточно большого количества уровней для обеспечивания большого окна восприятия сигнала (англ. signal reception window) {{---}} количество предыдущих сигналов, от которых зависит оценка сигнала в текущий момент.&lt;br /&gt;
&lt;br /&gt;
[[Файл:dilated-causal-convolutions.png|thumb|300px| Рисунок 1 —  строение причинной сверточной сети (сверху) и расширенной причинной сверточной сети (снизу)&amp;lt;ref name=&amp;quot;wavenet&amp;quot;&amp;gt;Aaron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew Senior, &amp;amp; Koray Kavukcuoglu. (2016). WaveNet: A Generative Model for Raw Audio. [https://arxiv.org/abs/1609.03499/ arXiv:1609.03499]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
Модификация причинных сверточных сетей, расширенные причинные сверточные сети, способна увеличить окно восприятия сигнала в разы и является основной идеей модели WaveNet.&lt;br /&gt;
Модификация заключается в применении свертки к области размерности большей, чем её длина, пропуская входные связи с некоторым шагом. Данный подход аналогичен применению пулинга или свертки с шагом большим единицы, но выходом расширенной причинной сверточной сети является последовательность размерности, равной размерности входной последовательности. Расширенные причинные сверточные сети способны достигать большего окна&lt;br /&gt;
восприятия сигнала, используя меньшее количество уровней, при этом сохраняя вычислительную сложность причинных сверточных сетей. Структура причинных сверточных сетей изображена на Рисунке 1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:wavenet.png|thumb|300px| Рисунок 2 —  строение модели WaveNet &amp;lt;ref name=&amp;quot;wavenet&amp;quot;&amp;gt;Aaron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew Senior, &amp;amp; Koray Kavukcuoglu. (2016). WaveNet: A Generative Model for Raw Audio. [https://arxiv.org/abs/1609.03499/ arXiv:1609.03499]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
Полная структура модели WaveNet изображена на Рисунке 2. В качестве вокодера используется [[Синтез речи#Генерация звуковой волны | мю-закон]].&lt;br /&gt;
Модель представляет собой множество слоев сверточной нейронной сети, аналогично модели [[PixelRNN_и_PixelCNN | PixelCNN]].&lt;br /&gt;
Модель на вход принимает закодированную мю-законом последовательность сигналов &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt; и, опционально, некоторую дополнительную информацию, обозначаемую как вектор параметров &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, а на выходе возвращает распределение вероятностей для параметров мю-закона, по которым можно восстановить синтезированный сигнал. На этапе обучения входным сигналом &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt; является пример звука из обучающей выборки, который подается на все входы одновременно. На этапе генерации входом модели &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt; будут являться сигналы, порожденные ею в предыдущие моменты времени и передаваемые ей последовательно. Дополнительная информация &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, например, может содержать информацию о рассматриваемом тексте в задаче text-to-speech синтеза. &lt;br /&gt;
&lt;br /&gt;
Модель представляет собой набор из &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; [[Сверточные нейронные сети#Residual block | блоков с остаточной связью]], содержащих преобразование расширенной причинной свертки и функцию активации. Функция активации при этом аналогична функции, предложенной в модели Gated PixelCNN &amp;lt;ref&amp;gt;Aaron van den Oord, Nal Kalchbrenner, Oriol Vinyals, Lasse Espeholt, Alex Graves, &amp;amp; Koray Kavukcuoglu. (2016). Conditional Image Generation with PixelCNN Decoders. [https://arxiv.org/abs/1606.05328/ arXiv:1606.05328]&lt;br /&gt;
&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\textbf{y} = \tanh(W_{f, k} * \textbf{x}) \odot \sigma(W_{g,k}*\textbf{x})&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; {{---}} номер слоя модели, &amp;lt;math&amp;gt;f, g&amp;lt;/math&amp;gt; {{---}} индексы входов преобразования, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; {{---}} функция сигмоиды, &amp;lt;math&amp;gt;*&amp;lt;/math&amp;gt; {{---}} операция свертки, &amp;lt;math&amp;gt;\odot&amp;lt;/math&amp;gt; {{---}} операция покомпонентного умножения векторов и &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; {{---}} выученные параметры свертки.&lt;br /&gt;
&lt;br /&gt;
В случае использования дополнительной информации &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; модель оценивает распределение вероятностей звукового сигнала как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(\textbf{x}|\textbf{h})=\prod\limits_{t=1}^{T} p(x_t | x_1, x_2, \dots, x_{t-1}, \textbf{h})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для использования дополнительной информации &amp;lt;math&amp;gt;\textbf{h}&amp;lt;/math&amp;gt; функция активации может использовать вектор &amp;lt;math&amp;gt;\textbf{h}&amp;lt;/math&amp;gt; глобально при вычислении каждой свертки как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\textbf{y} = \tanh(W_{f, k} * \textbf{x} + V_{f,k}^T\textbf{h}) \odot \sigma(W_{g,k}*\textbf{x}+V_{g,k}^T\textbf{h})&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;V_{f,k}&amp;lt;/math&amp;gt; {{---}} выученные параметры линейной проекции. В случае, когда размерность вектора &amp;lt;math&amp;gt;\textbf{h}&amp;lt;/math&amp;gt; меньше, чем размерность &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt;, можно использовать upsampling-преобразование сверточных сетей, чтобы получить вектор размерности &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt; и использовать его вместо оригинального вектора &amp;lt;math&amp;gt;\textbf{h}&amp;lt;/math&amp;gt;. При этом &amp;lt;math&amp;gt;V_{f,k}*\textbf{h}&amp;lt;/math&amp;gt; будет являться операцией свертки размера 1.&lt;br /&gt;
&lt;br /&gt;
Самый известный пример применения WaveNet для синтеза речи является  технология Google Ассистент, которая использует WaveNet для генерации голосов ассистентов на различных&lt;br /&gt;
языках. Модель позволила значительно сократить количество записей речи актеров озвучки, требуемых для создания голосовой модели&amp;lt;ref name=&amp;quot;cnet wavenet&amp;quot;&amp;gt;Martin, Taylor (May 9, 2018).[https://www.cnet.com/how-to/how-to-get-all-google-assistants-new-voices-right-now/  &amp;quot;Try the all-new Google Assistant voices right now&amp;quot;]. CNET.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Проблемы ==&lt;br /&gt;
===Задача обработки текста===&lt;br /&gt;
Алгоритмы обработки текста могут не справляться с обработкой определенных частей речи, таких, как аббревиатуры, числа и гетеронимы. Произношение определенных слов также зависит от контекста их применения. Большинство систем синтеза речи по тексту не способны выделять контекст предложений и используют различные эвристические подходы с целью различить омографы (слова с одинаковым написанием, но различным произношением).&lt;br /&gt;
===Преобразование текста в фонемы===&lt;br /&gt;
Процесс преобразования текста в фонемы обычно подразделяется на два подхода {{---}} словарный и основанный на правилах. Словарный подход использует словарь с записанными фонетическими представлениями слов и в процессе работы производит поиск в нем с целью конвертации слова в последовательность фонем. Основанный на правилах подход использует набор правил, которые применяются к словам или частям слов с целью выделения фонем. Оба эти подхода имеют существенные недостатки и требуют усовершенствования.&lt;br /&gt;
=== Мультиязычный синтез ===&lt;br /&gt;
Работает, но интересная задача генерации данного голоса на другом языке.&lt;br /&gt;
=== Несколько голосов ===&lt;br /&gt;
Сеть перепрыгивает между голосами в середине слова.&lt;br /&gt;
=== Синтез в стиле ===&lt;br /&gt;
Сейчас реализовано с помощью вариационных автоэнкодеров. Требуется пример для стиля.  &lt;br /&gt;
=== Выразительный синтез ===&lt;br /&gt;
Непонятно, что речь должна отмечать выражением.&lt;br /&gt;
=== Оценка качества ===&lt;br /&gt;
На данный момент не существует единых критериев оценки качества синтезаторов речи. В каждом отдельном применении технологии синтеза речи могут быть в том числе свои критерии качества, связанные с предметной областью или используемым оборудованием. С другой стороны, ряд исследователей начали оценивать синтезаторы речи используя распространенные наборы данных для синтеза речи &amp;lt;ref&amp;gt;[http://festvox.org/blizzard/ Blizzard Challenge]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Популярной метрикой оценки естественности речи является '''средняя оценка мнения''' (англ. mean opinion score)&amp;lt;ref name=&amp;quot;mos&amp;quot;&amp;gt;[https://www.itu.int/rec/T-REC-P.800.2 ITU-T Recommendation P.800.2 : Mean opinion score interpretation and reporting]&amp;lt;/ref&amp;gt;. Она заключается в воспроизведении результатов работы синтезатора речи выборке людей, которые затем оценивают её качество по шкале от 1 до 5, в которой 1 означает &amp;quot;плохое&amp;quot; качество, 5 {{---}} &amp;quot;идеальное&amp;quot;. Итоговой оценкой является среднее арифметическое всех оценок. Данная метрика страдает от субъективности и предвзятости опрашиваемых людей, в частности, в подобного рода экспериментах опрашиваемые стремятся ставить оценки, располагающиеся на всей ширине интервала оценок&amp;lt;ref name=&amp;quot;bias&amp;quot;&amp;gt;Zielinski, Slawomir, Francis Rumsey, and Søren Bech. &amp;quot;On some biases encountered in modern audio quality listening tests-a review.&amp;quot; Journal of the Audio Engineering Society 56.6 (2008): 427-451.&amp;lt;/ref&amp;gt;. Из этого следует, что данная оценка не является абсолютной и её нельзя использовать для сравнения двух отдельных экспериментов кроме тех случаев, когда эксперимент поставлен особым образом, чтобы учесть данный недостаток, и даже в таком случае требуется статистический анализ данных, чтобы убедиться, что такое сравнение двух систем корректно&amp;lt;ref name=&amp;quot;mos&amp;quot;&amp;gt;[https://www.itu.int/rec/T-REC-P.800.2 ITU-T Recommendation P.800.2 : Mean opinion score interpretation and reporting]&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Модели WaveNet, Tacotron и Tacotron 2 использовали среднюю оценку мнения для сравнения своей работы с естественным языком и другими подходами. Например, WaveNet достиг оценки 4.21 и 4.08 для американского варианта английского и путунхуа, по сравнению с оценками естественного языка 4.46 и 4.25 соответственно. Работа, описывающая модель Tacotron, сравнивала модель с другими разрабатываемыми подходами&amp;lt;ref&amp;gt;Heiga Zen, Yannis Agiomyrgiannakis, Niels Egberts, Fergus Henderson, and Przemysław Szczepa-niak. Fast, compact, and high quality LSTM-RNN based statistical parametric speech synthesizersfor mobile devices.Proceedings Interspeech, 2016&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Junyoung Chung, Caglar Gulcehre, KyungHyun Cho, and Yoshua Bengio.  Empirical evaluation ofgated recurrent neural networks on sequence modeling. [https://arxiv.org/abs/1412/3555 arXiv:1412.3555], 2014.&amp;lt;/ref&amp;gt;. Tacotron смог достичь оценки в 3.82 балла для американского варианта английского, когда параметрический подход достиг 3.69, а конкатенативный - 4.09. Tacotron 2 смог достичь оценки в 4.52 балла по сравнению с оценкой записанной речи в 4.58 балла&amp;lt;ref name=&amp;quot;tacotron2&amp;quot;&amp;gt;[https://ai.googleblog.com/2017/12/tacotron-2-generating-human-like-speech.html/ Tacotron 2: Generating Human-like Speech from Text]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Нейронные сети, перцептрон ]]&lt;br /&gt;
* [[Сверточные нейронные сети ]]&lt;br /&gt;
* [[ Рекуррентные нейронные сети ]]&lt;br /&gt;
* [[ Механизм внимания ]]&lt;br /&gt;
* [[ Распознавание речи ]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* Aaron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew Senior, &amp;amp; Koray Kavukcuoglu. (2016). WaveNet: A Generative Model for Raw Audio. [https://arxiv.org/abs/1609.03499/ arXiv:1609.03499]&lt;br /&gt;
* Yuxuan Wang, RJ Skerry-Ryan, Daisy Stanton, Yonghui Wu, Ron J. Weiss, Navdeep Jaitly, Zongheng Yang, Ying Xiao, Zhifeng Chen, Samy Bengio, Quoc Le, Yannis Agiomyrgiannakis, Rob Clark, &amp;amp; Rif A. Saurous. (2017). Tacotron: Towards End-to-End Speech Synthesis. [https://arxiv.org/abs/1703.10135/ arXiv:1703.10135]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B8%D0%BD%D1%82%D0%B5%D0%B7_%D1%80%D0%B5%D1%87%D0%B8&amp;diff=80623</id>
		<title>Синтез речи</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B8%D0%BD%D1%82%D0%B5%D0%B7_%D1%80%D0%B5%D1%87%D0%B8&amp;diff=80623"/>
				<updated>2021-02-09T10:31:01Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Алгоритмы, основанные на нейронных сетях */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Машинное обучение]] [[Категория: Обработка естественного языка]]&lt;br /&gt;
'''Синтез речи''' (англ. speech synthesis) {{---}} процесс генерации компьютером человеческой речи. Компьютерная система, способная к синтезу речи, называется речевым синтезатором.&lt;br /&gt;
Система, генерирующая человеческую речь, основываясь на тексте, называется '''text-to-speech''' системой (сокр. TTS).&lt;br /&gt;
&lt;br /&gt;
В процессе человеческой речи нервная система транслирует некоторый текст или мысленный концепт в движение мышц, связанных с органами дыхания и речи. Затем производится генерация акустического сигнала с помощью потока воздуха из легких. Сигнал содержит как периодические компоненты (созданные с помощью вибрации органов речи), так и апериодические&lt;br /&gt;
(созданные окружающей средой и фоновым шумом). Используя изменяющиеся во времени сокращения мышц, меняются частотные характеристики акустического сигнала.&lt;br /&gt;
Задача систем генерации речи по тексту {{---}} симулировать данный процесс в каком-либо виде.&lt;br /&gt;
&lt;br /&gt;
== Этапы синтеза речи ==&lt;br /&gt;
Работу систем синтеза речи по тексту как правило можно разделить на два этапа, за которые отвечают два отдельных компонента {{---}} обработка текста и синтез речи.&lt;br /&gt;
&lt;br /&gt;
Первый этап обычно содержит несколько этапов [[Обработка естественного языка|обработки естественного языка]], такие как разбиение  на предложения, разбиение на слова, нормализация текста,&lt;br /&gt;
автоматическая морфологическая разметка и конвертация графем в фонемы (англ. grapheme-to-phoneme conversion, G2P).&lt;br /&gt;
Данный этап принимает в качестве входных параметров текст и возвращает последовательность фонем с различными выделенными лингвистическими особенностями.&lt;br /&gt;
&lt;br /&gt;
Этап синтеза речи, в свою очередь, принимает на вход последовательность фонем и возвращает синтезированную звуковую волну речи.&lt;br /&gt;
Данный этап обычно включает в себя алгоритмы предсказания [https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%81%D0%BE%D0%B4%D0%B8%D1%8F_(%D0%BB%D0%B8%D0%BD%D0%B3%D0%B2%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0)/ просодии] {{---}} характеристик речи, описывающих признаки, являющиеся дополнительными к основной артикуляции звука, такие как тон, ударение, громкость и т.д. &lt;br /&gt;
&lt;br /&gt;
== Генерация звуковой волны ==&lt;br /&gt;
&lt;br /&gt;
Обычно, синтезаторы речи не работают непосредственно с сигналом звуковой волны, а используют некоторое представление этого сигнала, например, спектрограмму. Алгоритм, способный выделить такие параметры и по ним обратно восстановить звуковую волну, называется '''вокодер''' (англ. voice encoder). Примерами таких алгоритмов являются мю-закон &amp;lt;ref name=&amp;quot;mu law&amp;quot;&amp;gt;[http://www.itu.int/rec/dologin_pub.asp?lang=e&amp;amp;id=T-REC-G.711-198811-I!!PDF-E&amp;amp;type=items/ &amp;quot;ITU-T Recommendation G.711&amp;quot;]&amp;lt;/ref&amp;gt; и восстановление сигнала по его спектрограмме. &lt;br /&gt;
&lt;br /&gt;
Мю-закон преобразует каждое значение дискретизированного сигнала &amp;lt;math&amp;gt;\textbf{x} = \{x_1, x_2, \dots, x_T\}&amp;lt;/math&amp;gt;  как&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x_t) = sign(x_t) \frac{\ln(1+\mu|x_t|)}{\ln(1+\mu)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;\mu = 255&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1 &amp;lt; x_t &amp;lt; 1&amp;lt;/math&amp;gt;, а затем кодирует сигнал как двузначное шестнадцатеричное число, которое обозначает некоторый интервал на числовой прямой&amp;lt;ref name=&amp;quot;mu law&amp;quot;&amp;gt;[http://www.itu.int/rec/dologin_pub.asp?lang=e&amp;amp;id=T-REC-G.711-198811-I!!PDF-E&amp;amp;type=items/ &amp;quot;ITU-T Recommendation G.711&amp;quot;]&amp;lt;/ref&amp;gt;. Обратное преобразование выбирает значение преобразованного сигнала &amp;lt;math&amp;gt;y_t=f(x_t)&amp;lt;/math&amp;gt; из данного номера интервала и получает оценку исходного сигнала &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; f^{-1}(y_t) = sign(y_t)(1/\mu)((1+\mu)^{|y_t|}-1), -1 &amp;lt; y_t &amp;lt; 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве представления звукового сигнала может выступать [https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0/ спектрограмма волны] {{---}} изображение, показывающее зависимость спектральной плотности мощности сигнала от времени. Спектрограммы отображают частоту и амплитуду сигнала во времени, но не содержат никакой информации о фазе сигнала, из-за чего результат обратного восстановления сигнала по спектрограмме неизбежно отличается от оригинала. Цифровая генерация спектрограммы сигнала &amp;lt;math&amp;gt;s(t)&amp;lt;/math&amp;gt; сводится к вычислению квадрата амплитуды [https://ru.wikipedia.org/wiki/%D0%9E%D0%BA%D0%BE%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5/ оконного преобразования Фурье]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;spectrogram(t, w) = |STFT(t, w)|^2&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt; {{---}} используемое окно и &amp;lt;math&amp;gt;STFT(t, w)&amp;lt;/math&amp;gt; {{---}} оконное преобразование Фурье.&lt;br /&gt;
&lt;br /&gt;
Для восстановления исходного сигнала по его спектрограмме может быть использован алгоритм Гриффина-Лима&amp;lt;ref name=&amp;quot;griffin-lim&amp;quot;&amp;gt;D. Griffin and Jae Lim, &amp;quot;Signal estimation from modified short-time Fourier transform,&amp;quot; ICASSP '83. IEEE International Conference on Acoustics, Speech, and Signal Processing, Boston, Massachusetts, USA, 1983, pp. 804-807, doi: 10.1109/ICASSP.1983.1172092.&amp;lt;/ref&amp;gt;, который основан на минимизации среднеквадратичной ошибки между оконным преобразованием Фурье оцениваемого сигнала и имеющимся преобразованием в спектрограмме.&lt;br /&gt;
&lt;br /&gt;
== Классы подходов к синтезу речи ==&lt;br /&gt;
Основными требованиями к технологиям синтеза речи являются естественность (англ. naturalness) и разборчивость (англ. intelligibility).&lt;br /&gt;
Естественность описывает, насколько генерируемая речь близка к человеческой, а разборчивость отражает, насколько сложно понять речь.&lt;br /&gt;
Идеальный синтезатор речи генерирует одновременно и натуральную, и разборчивую речь.&lt;br /&gt;
=== Конкатенативный синтез ===&lt;br /&gt;
'''Конкатенативный синтез''' (англ. concatenative synthesis) основывается на конкатенации предварительно записанных примеров человеческой речи в единую звуковую последовательность. Данный подход синтезирует наиболее естественную речь, но генерируемая речь часто содержит значительные отличия и ошибки по сравнению с человеческой речью. Примеры конкатенативного синтеза:&lt;br /&gt;
&lt;br /&gt;
* '''Синтез с выбором''' (англ. unit selection synthesis) является самым используемым подходом конкатенативного синтеза и использует большую базу данных записанной речи. При создании базы данных записанные фразы могут делиться на различные звуковые единицы, такие, как фоны, дифоны, полуфоны, слоги, морфемы, целые фразы или предложения. При запуске алгоритм генерирует выходную звуковую волну с помощью выбора наилучшей последовательности звуковых единиц из базы данных. Данный выбор обычно реализован с помощью [[Дерево решений и случайный лес|дерева решений]]. Синтез с выбором обеспечивает наиболее естественную речь, так как использует минимальную цифровую обработку сигналов. Недостатком подхода является необходимость в довольно большой базе данных звуков для достижения наибольшей естественности речи. Данный подход являлся самым популярным для общего класса задач синтеза речи, но в последнее время уступает по популярности параметрическому подходу. Примером использования синтеза с выбором является голосовой помощник Siri от Apple &amp;lt;ref name=&amp;quot;apple&amp;quot;&amp;gt;[https://machinelearning.apple.com/research/siri-voices/ Deep Learning for Siri’s Voice: On-device Deep Mixture Density Networks for Hybrid Unit Selection Synthesis.]&amp;lt;/ref&amp;gt; и голосовой помощник Алиса от компании Яндекс &amp;lt;ref&amp;gt;[https://www.seonews.ru/analytics/optimization-2018-chto-nakhoditsya-pod-kapotom-u-alisy/ Optimization 2018: что находится «под капотом» у Алисы.]&amp;lt;/ref&amp;gt;. Несмотря на то, что эти продукты используют глубокое обучение, их механизм синтеза речи основан на записанных примерах голоса.&lt;br /&gt;
&lt;br /&gt;
* '''Дифонный синтез''' (англ. diphone synthesis) является частным случаем синтеза с выбором, который использует в качестве звуковых единиц дифоны (переход от звука к звуку). Подход использует только один образец каждого дифона. База данных дифонов при этом получается сравнительно небольшой. Например, немецкий язык содержит около 800 дифонов, а испанский {{---}} около 2500. При работе алгоритма просодия входной последовательности накладывается на дифоны в базе данных с помощью различных алгоритмов цифровой обработки сигналов. Данный алгоритм значительно уступает по качеству другим подходам и кроме меньшего размера базы данных не дает весомых преимуществ, из-за чего не снискал большой популярности.&lt;br /&gt;
&lt;br /&gt;
* '''Синтез речи, ограниченный предметной областью''' (англ. domain-specific speech synthesis) также является частным случаем синтеза с выбором и использует базу данных предварительно записанных слов, фраз и предложений для составления выходной последовательности. Он используется в задачах, где вариативность и размер используемых фраз ограничены некоторой предметной областью, например, прогнозирование погоды или составление расписания транспорта. Из-за значительной простоты реализации и использования данный подход уже долго применяется в коммерческих продуктах, например, говорящие часы или калькуляторы. При этом данный подход может обеспечивать высокую естественность речи вследствие ограниченности используемой базы данных. Недостатками таких систем является ограниченность областью применимости и неспособность учитывать контекст речи, что может вызывать ощутимые ошибки в некоторых языках.&lt;br /&gt;
&lt;br /&gt;
=== Параметрический синтез ===&lt;br /&gt;
Параметрический синтез (англ. statistical parametrical synthesis) для генерации выходной звуковой волны, в отличии от конкатенативного синтеза, не использует реальные примеры речи, а строит вероятностное распределение некоторых параметров и акустических свойств звуковой волны.&lt;br /&gt;
В начале работы параметрического синтезатора с помощью вокодера извлекаются параметры&lt;br /&gt;
&amp;lt;math&amp;gt;\textbf{o} = \{o_1, \dots, o_N\}&amp;lt;/math&amp;gt; звуковой волны и лингвистические данные &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; из текста, который необходимо озвучить. Конкретный вид вектора &amp;lt;math&amp;gt;\textbf{o}&amp;lt;/math&amp;gt; зависит от используемого вокодера {{---}} это может быть как спектрограмма волны, так и некоторое другое представление сигнала, например, дискретные номера интервалов числовой прямой, получаемые с помощью мю-закона. Затем, [[Порождающие модели|порождающая модель]], например, [[Марковская цепь|скрытая марковская цепь]],&lt;br /&gt;
[[Нейронные сети, перцептрон#Сети прямого распространения|нейронная сеть прямого распространения]] или [[Рекуррентные нейронные сети|рекуррентная нейронная сеть]], обучается по выделенным параметрам &amp;lt;math&amp;gt;\textbf{o}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt;, получая параметры модели &amp;lt;math&amp;gt;\hat{\Lambda}&amp;lt;/math&amp;gt;, наиболее хорошо описывающие распределение &amp;lt;math&amp;gt;p(o|l, \Lambda)&amp;lt;/math&amp;gt;. На этапе синтеза, модель генерирует наиболее правдоподобные параметры звуковой волны, используя найденные на этапе обучения параметры модели &amp;lt;math&amp;gt;\hat{\Lambda}&amp;lt;/math&amp;gt; и лингвистическую информацию &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; текста, который необходимо озвучить:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\hat{\textbf{o}} = \arg\max\limits_{\textbf{o}}p(\textbf{o} | l, \hat{\Lambda})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходная звуковая волна генерируется вокодером на основе найденных параметров &amp;lt;math&amp;gt;\hat{\textbf{o}}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данный подход является самым популярным на сегодняшний момент, в том числе из-за того, что он позволяет использовать подходы, основанные на нейронных сетях. Современными продуктами, использующие основанный на глубоком обучении параметрический синтез являются Amazon Lex и Alexa &amp;lt;ref&amp;gt;[https://www.allthingsdistributed.com/2016/11/amazon-ai-and-alexa-for-all-aws-apps.html Bringing the Magic of Amazon AI and Alexa to Apps on AWS.] &amp;lt;/ref&amp;gt;, Google Ассистент &amp;lt;ref name=&amp;quot;cnet wavenet&amp;quot;&amp;gt;Martin, Taylor (May 9, 2018).[https://www.cnet.com/how-to/how-to-get-all-google-assistants-new-voices-right-now/  &amp;quot;Try the all-new Google Assistant voices right now&amp;quot;]. CNET.&amp;lt;/ref&amp;gt; и умные дисплеи Portal от Facebook &amp;lt;ref&amp;gt;[https://venturebeat.com/2020/05/15/facebooks-voice-synthesis-ai-generates-speech-in-500-milliseconds/ Facebook’s voice synthesis AI generates speech in 500 milliseconds.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
== Алгоритмы, основанные на нейронных сетях ==&lt;br /&gt;
Рассмотрим две популярные сети для преобразования текста в спектрограмму (Tacotron) и для синтеза речи по спектрограмме (WaveNet). &lt;br /&gt;
Для синтеза речи по спектрограмме предложено множество моделей: авторегрессионныее (WaveNet, WaveRNN, LPCNet), неавторегресионные (WaveGlow, MelGAN, WaveGrad) и разнообразные (например, можно натренировать сети GAN для генерации лиц под задачу генерации спектрограммы).&lt;br /&gt;
 &lt;br /&gt;
=== Tacotron ===&lt;br /&gt;
[[Файл:Tacotron.PNG|thumb|300px| Рисунок 3 — строение модели Tacotron&amp;lt;ref name=&amp;quot;tacotron&amp;quot;&amp;gt;Yuxuan Wang, RJ Skerry-Ryan, Daisy Stanton, Yonghui Wu, Ron J. Weiss, Navdeep Jaitly, Zongheng Yang, Ying Xiao, Zhifeng Chen, Samy Bengio, Quoc Le, Yannis Agiomyrgiannakis, Rob Clark, &amp;amp; Rif A. Saurous. (2017). Tacotron: Towards End-to-End Speech Synthesis. [https://arxiv.org/abs/1703.10135/ arXiv:1703.10135]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
[[Файл:Tacotron-cbhg.PNG|thumb|300px| Рисунок 4 —строение модуля CBHG модели Tacotron&amp;lt;ref name=&amp;quot;tacotron&amp;quot;&amp;gt;Yuxuan Wang, RJ Skerry-Ryan, Daisy Stanton, Yonghui Wu, Ron J. Weiss, Navdeep Jaitly, Zongheng Yang, Ying Xiao, Zhifeng Chen, Samy Bengio, Quoc Le, Yannis Agiomyrgiannakis, Rob Clark, &amp;amp; Rif A. Saurous. (2017). Tacotron: Towards End-to-End Speech Synthesis. [https://arxiv.org/abs/1703.10135/ arXiv:1703.10135]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
Tacotron {{---}} модель&amp;lt;ref name=&amp;quot;tacotron&amp;quot;&amp;gt;Yuxuan Wang, RJ Skerry-Ryan, Daisy Stanton, Yonghui Wu, Ron J. Weiss, Navdeep Jaitly, Zongheng Yang, Ying Xiao, Zhifeng Chen, Samy Bengio, Quoc Le, Yannis Agiomyrgiannakis, Rob Clark, &amp;amp; Rif A. Saurous. (2017). Tacotron: Towards End-to-End Speech Synthesis. [https://arxiv.org/abs/1703.10135/ arXiv:1703.10135]&amp;lt;/ref&amp;gt; параметрического синтеза речи, основанная на подходе [[Механизм внимания | seq2seq]], разработанная Google и опубликованная в 2017 году. Модель состоит из кодера, декодера с [[Механизм внимания | вниманием]] и нейронной сети для&lt;br /&gt;
пост-процессинга сигнала. Схема модели изображена на Рисунке 2.&lt;br /&gt;
&lt;br /&gt;
Кодер и сеть пост-процессинга опираются на блок CBHG, схема которого изображена на Рисунке 3. Блок состоит из набора одномерных сверточных фильтров, за которыми следуют&lt;br /&gt;
шоссейные нейронные сети (англ. highway networks)&amp;lt;ref&amp;gt;Rupesh Kumar Srivastava, Klaus Greff, and J ̈urgen Schmidhuber. Highway networks. [https://arxiv.org/abs/1505.00387/ arXiv:1505.00387], 2015.&amp;lt;/ref&amp;gt;, являющиеся модификацией [[Долгая краткосрочная память | LSTM сетей]], и двунаправленный [[Долгая краткосрочная память#Управляемые рекуррентные нейроны | управляемый рекуррентный блок]]. Входная последовательность сначала обрабатывается &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;&lt;br /&gt;
наборами сверточных фильтров с размерностью &amp;lt;math&amp;gt;1, 2, \dots, K&amp;lt;/math&amp;gt;. Эти фильтры моделируют локальную и контекстно-зависимую информацию (по аналогии с моделированием униграмм,&lt;br /&gt;
биграмм, вплоть до &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;-грамм). Выход сверточного уровня далее обрабатывается шоссейной сетью для дальнейшего выделения параметров. В конце CBHG&lt;br /&gt;
используется управляемый рекуррентный блок, который для выделения параметров опирается на контекст перед рассматриваемым символом и после рассматриваемого символа.&lt;br /&gt;
&lt;br /&gt;
Задача кодера заключается в извлечении последовательных параметров из текста. Его входом является последовательность символов, в которой каждый символ был закодирован one-hot&lt;br /&gt;
кодированием и объединен в единый непрерывный вектор. К данному входу применяется ряд нелинейных преобразований в виде сети с бутылочным горлышком (англ. bottleneck layer), что позволяет улучшить&lt;br /&gt;
обобщаемость сети и ускорить сходимость. Модуль CBHG преобразует выход нелинейных преобразований в итоговое представление текста, которая передается в декодер.&lt;br /&gt;
&lt;br /&gt;
Декодер является рекуррентной нейронной сетью с вниманием, в которой запрос внимания генерируется каждый временной промежуток. Вектор контекста соединяется с выходом ячейки внимания&lt;br /&gt;
и подается на вход декодирующим рекуррентным нейронным сетям, которые являются управляемыми рекуррентными блоками. Выходом декодера является спектрограмма звуковой волны, которая&lt;br /&gt;
передается сети пост-обработки для генерации непосредственно звуковой волны.&lt;br /&gt;
&lt;br /&gt;
В качестве сети пост-обработки используется модуль CBHG, описанный ранее. После этого спектрограмма звуковой волны передается на вход [[Синтез речи#Генерация звуковой волны | алгоритму Гриффина-Лима]], который генерирует итоговую звуковую волну.&lt;br /&gt;
&lt;br /&gt;
Модель Tacotron была значительно улучшена в последующей модификации Tacotron 2 &amp;lt;ref&amp;gt;Jonathan Shen, Ruoming Pang, Ron J. Weiss, Mike Schuster, Navdeep Jaitly, Zongheng Yang, Zhifeng Chen, Yu Zhang, Yuxuan Wang, RJ Skerry-Ryan, Rif A. Saurous, Yannis Agiomyrgiannakis, &amp;amp; Yonghui Wu. (2018). Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions. [https://arxiv.org/abs/1712.05884  arXiv:1712.05884].&amp;lt;/ref&amp;gt;, которая переработала исходную архитектуру Tacotron и объединила её с вокодером на основе WaveNet. Данная модель способна синтезировать речь высокого качества, принимая на вход только текст, который необходимо озвучить&amp;lt;ref name=&amp;quot;tacotron2&amp;quot;&amp;gt;[https://ai.googleblog.com/2017/12/tacotron-2-generating-human-like-speech.html/ Tacotron 2: Generating Human-like Speech from Text]&amp;lt;/ref&amp;gt;. Реализация данной модели доступна на [https://github.com/NVIDIA/tacotron2 Github].&lt;br /&gt;
&lt;br /&gt;
=== WaveNet ===&lt;br /&gt;
WaveNet&amp;lt;ref name=&amp;quot;wavenet&amp;quot;&amp;gt;Aaron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew Senior, &amp;amp; Koray Kavukcuoglu. (2016). WaveNet: A Generative Model for Raw Audio. [https://arxiv.org/abs/1609.03499/ arXiv:1609.03499]&amp;lt;/ref&amp;gt; является [[Порождающие модели | порождающей моделью]], использующей параметрический подход к синтезу речи. Её задача {{---}} восстановить распределение вероятностей звукового сигнала&lt;br /&gt;
&amp;lt;math&amp;gt;\textbf{x} = \{x_1, x_2, \dots, x_T\}&amp;lt;/math&amp;gt; с помощью произведения условных вероятностей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(\textbf{x})=\prod\limits_{t=1}^{T} p(x_t | x_1, x_2, \dots, x_{t-1})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, вероятность каждого сигнала &amp;lt;math&amp;gt;x_t&amp;lt;/math&amp;gt; зависит только от предыдущих сигналов. Во время обучения модель оценивает данное условное распределение вероятностей, принимая на вход сигналы из обучающей выборки одновременно. На этапе генерации модель порождает выходные сигналы с помощью полученной оценки распределения вероятности последовательно {{---}} полученный моделью сигнал в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; подается обратно на вход для генерации последующего сигнала в момент времени &amp;lt;math&amp;gt;t+1&amp;lt;/math&amp;gt;. Структура модели позволяет использовать её в широком спектре задач, например, в задачах продолжения музыкального произведения по его началу, порождения голоса конкретного человека или text-to-speech синтеза.&lt;br /&gt;
&lt;br /&gt;
Основной идеей модели является использование причинных сверточных сетей (англ. causal convolution layers) и [[Сверточные нейронные сети#Расширенная свертка (aнгл. Dilated convolution) | расширенных ]] причинных сверточных сетей (англ. dilated causal convolution layers).&lt;br /&gt;
Причинная сверточная сеть представляет собой несколько уровней сверточной нейронной сети, связанных между собой в порядке, который не нарушает последовательность&lt;br /&gt;
входного сигнала, т.е. оцениваемая в момент времени &amp;lt;math&amp;gt;t+1&amp;lt;/math&amp;gt; вероятность сигнала &amp;lt;math&amp;gt;p(x_{t+1} | x_1, x_2, \dots, x_t)&amp;lt;/math&amp;gt; не зависит от сигналов&lt;br /&gt;
в последующие моменты времени &amp;lt;math&amp;gt;t+2, t+3, \dots, T&amp;lt;/math&amp;gt;. Причинные сверточные сети обучаются&lt;br /&gt;
быстрее, чем [[Рекуррентные нейронные сети | рекуррентные нейронные сети]], но требуют достаточно большого количества уровней для обеспечивания большого окна восприятия сигнала (англ. signal reception window) {{---}} количество предыдущих сигналов, от которых зависит оценка сигнала в текущий момент.&lt;br /&gt;
&lt;br /&gt;
[[Файл:dilated-causal-convolutions.png|thumb|300px| Рисунок 1 —  строение причинной сверточной сети (сверху) и расширенной причинной сверточной сети (снизу)&amp;lt;ref name=&amp;quot;wavenet&amp;quot;&amp;gt;Aaron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew Senior, &amp;amp; Koray Kavukcuoglu. (2016). WaveNet: A Generative Model for Raw Audio. [https://arxiv.org/abs/1609.03499/ arXiv:1609.03499]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
Модификация причинных сверточных сетей, расширенные причинные сверточные сети, способна увеличить окно восприятия сигнала в разы и является основной идеей модели WaveNet.&lt;br /&gt;
Модификация заключается в применении свертки к области размерности большей, чем её длина, пропуская входные связи с некоторым шагом. Данный подход аналогичен применению пулинга или свертки с шагом большим единицы, но выходом расширенной причинной сверточной сети является последовательность размерности, равной размерности входной последовательности. Расширенные причинные сверточные сети способны достигать большего окна&lt;br /&gt;
восприятия сигнала, используя меньшее количество уровней, при этом сохраняя вычислительную сложность причинных сверточных сетей. Структура причинных сверточных сетей изображена на Рисунке 1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:wavenet.png|thumb|300px| Рисунок 2 —  строение модели WaveNet &amp;lt;ref name=&amp;quot;wavenet&amp;quot;&amp;gt;Aaron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew Senior, &amp;amp; Koray Kavukcuoglu. (2016). WaveNet: A Generative Model for Raw Audio. [https://arxiv.org/abs/1609.03499/ arXiv:1609.03499]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
Полная структура модели WaveNet изображена на Рисунке 2. В качестве вокодера используется [[Синтез речи#Генерация звуковой волны | мю-закон]].&lt;br /&gt;
Модель представляет собой множество слоев сверточной нейронной сети, аналогично модели [[PixelRNN_и_PixelCNN | PixelCNN]].&lt;br /&gt;
Модель на вход принимает закодированную мю-законом последовательность сигналов &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt; и, опционально, некоторую дополнительную информацию, обозначаемую как вектор параметров &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, а на выходе возвращает распределение вероятностей для параметров мю-закона, по которым можно восстановить синтезированный сигнал. На этапе обучения входным сигналом &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt; является пример звука из обучающей выборки, который подается на все входы одновременно. На этапе генерации входом модели &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt; будут являться сигналы, порожденные ею в предыдущие моменты времени и передаваемые ей последовательно. Дополнительная информация &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, например, может содержать информацию о рассматриваемом тексте в задаче text-to-speech синтеза. &lt;br /&gt;
&lt;br /&gt;
Модель представляет собой набор из &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; [[Сверточные нейронные сети#Residual block | блоков с остаточной связью]], содержащих преобразование расширенной причинной свертки и функцию активации. Функция активации при этом аналогична функции, предложенной в модели Gated PixelCNN &amp;lt;ref&amp;gt;Aaron van den Oord, Nal Kalchbrenner, Oriol Vinyals, Lasse Espeholt, Alex Graves, &amp;amp; Koray Kavukcuoglu. (2016). Conditional Image Generation with PixelCNN Decoders. [https://arxiv.org/abs/1606.05328/ arXiv:1606.05328]&lt;br /&gt;
&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\textbf{y} = \tanh(W_{f, k} * \textbf{x}) \odot \sigma(W_{g,k}*\textbf{x})&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; {{---}} номер слоя модели, &amp;lt;math&amp;gt;f, g&amp;lt;/math&amp;gt; {{---}} индексы входов преобразования, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; {{---}} функция сигмоиды, &amp;lt;math&amp;gt;*&amp;lt;/math&amp;gt; {{---}} операция свертки, &amp;lt;math&amp;gt;\odot&amp;lt;/math&amp;gt; {{---}} операция покомпонентного умножения векторов и &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; {{---}} выученные параметры свертки.&lt;br /&gt;
&lt;br /&gt;
В случае использования дополнительной информации &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; модель оценивает распределение вероятностей звукового сигнала как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(\textbf{x}|\textbf{h})=\prod\limits_{t=1}^{T} p(x_t | x_1, x_2, \dots, x_{t-1}, \textbf{h})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для использования дополнительной информации &amp;lt;math&amp;gt;\textbf{h}&amp;lt;/math&amp;gt; функция активации может использовать вектор &amp;lt;math&amp;gt;\textbf{h}&amp;lt;/math&amp;gt; глобально при вычислении каждой свертки как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\textbf{y} = \tanh(W_{f, k} * \textbf{x} + V_{f,k}^T\textbf{h}) \odot \sigma(W_{g,k}*\textbf{x}+V_{g,k}^T\textbf{h})&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;V_{f,k}&amp;lt;/math&amp;gt; {{---}} выученные параметры линейной проекции. В случае, когда размерность вектора &amp;lt;math&amp;gt;\textbf{h}&amp;lt;/math&amp;gt; меньше, чем размерность &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt;, можно использовать upsampling-преобразование сверточных сетей, чтобы получить вектор размерности &amp;lt;math&amp;gt;\textbf{x}&amp;lt;/math&amp;gt; и использовать его вместо оригинального вектора &amp;lt;math&amp;gt;\textbf{h}&amp;lt;/math&amp;gt;. При этом &amp;lt;math&amp;gt;V_{f,k}*\textbf{h}&amp;lt;/math&amp;gt; будет являться операцией свертки размера 1.&lt;br /&gt;
&lt;br /&gt;
Самый известный пример применения WaveNet для синтеза речи является  технология Google Ассистент, которая использует WaveNet для генерации голосов ассистентов на различных&lt;br /&gt;
языках. Модель позволила значительно сократить количество записей речи актеров озвучки, требуемых для создания голосовой модели&amp;lt;ref name=&amp;quot;cnet wavenet&amp;quot;&amp;gt;Martin, Taylor (May 9, 2018).[https://www.cnet.com/how-to/how-to-get-all-google-assistants-new-voices-right-now/  &amp;quot;Try the all-new Google Assistant voices right now&amp;quot;]. CNET.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Проблемы ==&lt;br /&gt;
=== Задача обработки текста === &lt;br /&gt;
Алгоритмы обработки текста могут не справляться с обработкой определенных частей речи, таких, как аббревиатуры, числа и гетеронимы. Произношение определенных слов также зависит от контекста их применения. Большинство систем синтеза речи по тексту не способны выделять контекст предложений и используют различные эвристические подходы с целью различить омографы (слова с одинаковым написанием, но различным произношением).&lt;br /&gt;
=== Преобразование текста в фонемы ===&lt;br /&gt;
Процесс преобразования текста в фонемы обычно подразделяется на два подхода {{---}} словарный и основанный на правилах. Словарный подход использует словарь с записанными фонетическими представлениями слов и в процессе работы производит поиск в нем с целью конвертации слова в последовательность фонем. Основанный на правилах подход использует набор правил, которые применяются к словам или частям слов с целью выделения фонем. Оба эти подхода имеют существенные недостатки и требуют усовершенствования.&lt;br /&gt;
=== Оценка качества ===&lt;br /&gt;
На данный момент не существует единых критериев оценки качества синтезаторов речи. В каждом отдельном применении технологии синтеза речи могут быть в том числе свои критерии качества, связанные с предметной областью или используемым оборудованием. С другой стороны, ряд исследователей начали оценивать синтезаторы речи используя распространенные наборы данных для синтеза речи &amp;lt;ref&amp;gt;[http://festvox.org/blizzard/ Blizzard Challenge]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Популярной метрикой оценки естественности речи является '''средняя оценка мнения''' (англ. mean opinion score)&amp;lt;ref name=&amp;quot;mos&amp;quot;&amp;gt;[https://www.itu.int/rec/T-REC-P.800.2 ITU-T Recommendation P.800.2 : Mean opinion score interpretation and reporting]&amp;lt;/ref&amp;gt;. Она заключается в воспроизведении результатов работы синтезатора речи выборке людей, которые затем оценивают её качество по шкале от 1 до 5, в которой 1 означает &amp;quot;плохое&amp;quot; качество, 5 {{---}} &amp;quot;идеальное&amp;quot;. Итоговой оценкой является среднее арифметическое всех оценок. Данная метрика страдает от субъективности и предвзятости опрашиваемых людей, в частности, в подобного рода экспериментах опрашиваемые стремятся ставить оценки, располагающиеся на всей ширине интервала оценок&amp;lt;ref name=&amp;quot;bias&amp;quot;&amp;gt;Zielinski, Slawomir, Francis Rumsey, and Søren Bech. &amp;quot;On some biases encountered in modern audio quality listening tests-a review.&amp;quot; Journal of the Audio Engineering Society 56.6 (2008): 427-451.&amp;lt;/ref&amp;gt;. Из этого следует, что данная оценка не является абсолютной и её нельзя использовать для сравнения двух отдельных экспериментов кроме тех случаев, когда эксперимент поставлен особым образом, чтобы учесть данный недостаток, и даже в таком случае требуется статистический анализ данных, чтобы убедиться, что такое сравнение двух систем корректно&amp;lt;ref name=&amp;quot;mos&amp;quot;&amp;gt;[https://www.itu.int/rec/T-REC-P.800.2 ITU-T Recommendation P.800.2 : Mean opinion score interpretation and reporting]&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Модели WaveNet, Tacotron и Tacotron 2 использовали среднюю оценку мнения для сравнения своей работы с естественным языком и другими подходами. Например, WaveNet достиг оценки 4.21 и 4.08 для американского варианта английского и путунхуа, по сравнению с оценками естественного языка 4.46 и 4.25 соответственно. Работа, описывающая модель Tacotron, сравнивала модель с другими разрабатываемыми подходами&amp;lt;ref&amp;gt;Heiga Zen, Yannis Agiomyrgiannakis, Niels Egberts, Fergus Henderson, and Przemysław Szczepa-niak. Fast, compact, and high quality LSTM-RNN based statistical parametric speech synthesizersfor mobile devices.Proceedings Interspeech, 2016&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Junyoung Chung, Caglar Gulcehre, KyungHyun Cho, and Yoshua Bengio.  Empirical evaluation ofgated recurrent neural networks on sequence modeling. [https://arxiv.org/abs/1412/3555 arXiv:1412.3555], 2014.&amp;lt;/ref&amp;gt;. Tacotron смог достичь оценки в 3.82 балла для американского варианта английского, когда параметрический подход достиг 3.69, а конкатенативный - 4.09. Tacotron 2 смог достичь оценки в 4.52 балла по сравнению с оценкой записанной речи в 4.58 балла&amp;lt;ref name=&amp;quot;tacotron2&amp;quot;&amp;gt;[https://ai.googleblog.com/2017/12/tacotron-2-generating-human-like-speech.html/ Tacotron 2: Generating Human-like Speech from Text]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Нейронные сети, перцептрон ]]&lt;br /&gt;
* [[Сверточные нейронные сети ]]&lt;br /&gt;
* [[ Рекуррентные нейронные сети ]]&lt;br /&gt;
* [[ Механизм внимания ]]&lt;br /&gt;
* [[ Распознавание речи ]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* Aaron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew Senior, &amp;amp; Koray Kavukcuoglu. (2016). WaveNet: A Generative Model for Raw Audio. [https://arxiv.org/abs/1609.03499/ arXiv:1609.03499]&lt;br /&gt;
* Yuxuan Wang, RJ Skerry-Ryan, Daisy Stanton, Yonghui Wu, Ron J. Weiss, Navdeep Jaitly, Zongheng Yang, Ying Xiao, Zhifeng Chen, Samy Bengio, Quoc Le, Yannis Agiomyrgiannakis, Rob Clark, &amp;amp; Rif A. Saurous. (2017). Tacotron: Towards End-to-End Speech Synthesis. [https://arxiv.org/abs/1703.10135/ arXiv:1703.10135]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9&amp;diff=80622</id>
		<title>Представление знаний</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9&amp;diff=80622"/>
				<updated>2021-02-08T19:47:21Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Обучение онтологий */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Представление знаний''' (англ. ''knowledge representation'') — направление в исследованиях искусственного интеллекта, посвящённое представлению информации о мире в форме, которую было бы возможно использовать в компьютерных системах для решения сложных прикладных задач. Таковыми являются, например, диагностирование заболеваний или ведение диалога на естественном языке. Представление знаний включает в себя психологические исследования по решению задач человеком для построения формализмов, которые упростили бы работу со сложными системами. &lt;br /&gt;
Примерами формализмов представления знаний являются семантические сети, архитектуры систем, правила и онтологии. &lt;br /&gt;
&lt;br /&gt;
==Графы знаний==&lt;br /&gt;
&lt;br /&gt;
===История===&lt;br /&gt;
[[Файл:Semantic_network.png|right|thumb|400px|Рис. 1. [https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D0%BC%D0%B0%D0%BD%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D1%8C Пример семантической сети]]]&lt;br /&gt;
Семантические сети&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Semantic_network Wikipedia {{---}} Semantic Network]&amp;lt;/ref&amp;gt; (рис. 1) были разработаны в 1960 году из-за растущей необходимости в инструменте для представления знаний, который мог бы охватить широкий спектр сущностей: объекты реального мира, события, ситуации и отвлечённые концепты и отношения, — в конце концов будучи применённым в задаче поддержания диалога на естественном языке. Основной целью разработки семантических сетей было решение множества задач, например, представление планов, действий, времени, верований и намерений. При этом способ решения этих задач должен был быть достаточно обобщённым. &lt;br /&gt;
&lt;br /&gt;
В 1980-х гг. Гронингенский университет и университет Твенте начали работу над совместным проектом, названным &amp;quot;Графы знаний&amp;quot;, базируясь на устройстве семантических сетей с рёбрами, ограниченными наперёд заданным количеством отношений — для упрощения алгебры на графах. В последовавшие десятилетия граница между понятиями &amp;quot;Графов знаний&amp;quot; и &amp;quot;Семантических сетей&amp;quot; размывалась всё больше.&lt;br /&gt;
&lt;br /&gt;
В 2012 году Google представили свою версию графа знаний&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Google_Knowledge_Graph Wikipedia {{---}} Google Knowledge Graph]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Определение===&lt;br /&gt;
&lt;br /&gt;
Не существует формального определения графа знаний. Однако есть ряд требований, которых следует придерживаться при его построении&amp;lt;ref&amp;gt;[https://www.authorea.com/users/6341/articles/107281-what-is-a-knowledge-graph/_show_article Wikipedia {{---}} Knowledge graph definition]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Граф знаний определяется своей структурой (сущностями и связями между ними).&lt;br /&gt;
# Утверждения внутри графа знаний являются однозначными.&lt;br /&gt;
# Граф знаний использует конечный набор типов отношений.&lt;br /&gt;
# Все указанные сущности внутри графа знаний, включая типы и отношения, должны быть определены с использованием глобальных идентификаторов с однозначными обозначениями.&lt;br /&gt;
# Утверждения в графе знаний должны иметь явно указанные (лучше всего, проверенные) источники.&lt;br /&gt;
# Граф знаний может иметь оценки неопределённостей (вероятности, с которыми истинны те или иные утверждения&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Fuzzy_logic Wikipedia {{---}} Fuzzy logic]&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Применение===&lt;br /&gt;
&lt;br /&gt;
''Вопросно-ответные системы''. Самым распространённым применением графов знаний являются вопросно-ответные системы. Графы знаний располагают огромным количеством информации, доступ к которой проще всего получать посредством схемы вопрос-ответ.&lt;br /&gt;
&lt;br /&gt;
''Хранение информации исследований''. Многие компании используют графы знаний для хранения результатов, полученных на разных стадиях исследований, которые могут быть использованы для построения понятных моделей, просчёта рисков, слежения за различными процессами и подобных задач.&lt;br /&gt;
&lt;br /&gt;
''Рекомендательные системы''. Некоторые компании используют графы знаний как фундамент для своих рекомендательных систем. Здесь графы знаний позволяют находить связи между фильмами, телепрограммами, персоналиями и другими объектами. По выявленным связям можно пытаться предсказать индивидуальные предпочтения пользователя.&lt;br /&gt;
&lt;br /&gt;
''Управление цепочками поставок''. Компании могут эффективно следить за перечнями различных составляющих, задействованного персонала, времени и других характеристик, что позволяет им передавать вещи более выгодно.&lt;br /&gt;
&lt;br /&gt;
===Открытые проблемы===&lt;br /&gt;
# '''Выявление лучших практик для построения графов знаний'''. Важной проблемой является создание единого набора эвристик и практик, которые можно было бы применить для построения графов знаний. Такой набор мог бы помочь разработчикам и исследователям в понимании и использовании графов знаний.  &lt;br /&gt;
# '''Динамически изменяемые знания'''. Знания не статичны, они зависят от времени. Например, некоторое утверждение, которое было истинным в один момент времени, может перестать быть таковым в другой. Поэтому открытой проблемой является поддержка изменений в знаниях.&lt;br /&gt;
# '''Оценка корректности и полноты графа знаний'''. Не выработаны объективные критерии оценки графов знаний. Открытой проблемой является ответ на вопрос, какое качество более важно для графа знаний: корректность (непротиворечивость), полнота или другое.&lt;br /&gt;
&lt;br /&gt;
==Онтология==&lt;br /&gt;
&lt;br /&gt;
Понятие онтологии существует как в информатике, так и в философии, однако эти понятия похожи.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Онтология (в информатике)''' {{---}} формализация знаний, включающая в себя представление, формальное именование и определение категорий, свойств и отношений между понятиями, данными и сущностями некоторой области знаний.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Термин «онтология» применительно к графам знаний это, прежде всего, способ моделирования и формального представления схемы данных, обеспечивающий гораздо большие возможности, чем традиционные базы данных или объектно-ориентированный подход. &lt;br /&gt;
&lt;br /&gt;
Согласно общепринятому определению в компьютерных науках, онтология {{---}} это способ формализации знаний, абстрактных или специфических, в какой-либо предметной области, реализованный на основе формального описания объектов, фактов и отношений между ними.&lt;br /&gt;
===Формализация===&lt;br /&gt;
&lt;br /&gt;
Для формализации используется концептуальная схема.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Концептуа́льная схе́ма'''&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Концептуальная_схема Википедия {{---}} Концептуальная схема]&amp;lt;/ref&amp;gt; — семантическая сеть из взаимосвязанных по определенным правилам понятий и концепций. Обычно такая схема состоит из структуры данных, содержащей все релевантные классы объектов, их связи и правила (теоремы, ограничения), принятые в этой области. &lt;br /&gt;
}}&lt;br /&gt;
===Философия===&lt;br /&gt;
&lt;br /&gt;
Термин «онтология» в информатике является производным от соответствующего древнего философского понятия.&lt;br /&gt;
&lt;br /&gt;
'''Общее''' с философским понятием:&lt;br /&gt;
&lt;br /&gt;
* И то, и другое — попытка представить сущности, идеи и события со всеми их взаимозависимыми свойствами и отношениями в соответствии с системой категорий.&lt;br /&gt;
* В обеих областях существует значительная работа по проблемам онтологической инженерии&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Ontology_engineering Wikipedia {{---}} Онтологическая инженерия]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Отличия''' от философского понятия:&lt;br /&gt;
&lt;br /&gt;
* Онтология в информатике должна иметь формат, который компьютер сможет легко обработать.&lt;br /&gt;
* Информационные онтологии создаются всегда с конкретными целями — решения конструкторских задач; они оцениваются больше с точки зрения применимости, чем полноты.&lt;br /&gt;
&lt;br /&gt;
В каждой научной дисциплине или области знаний создают онтологии для организации данных в виде информации и знаний. С новыми онтологиями упрощается решение задач в этих областях. Однако при решении задач возникают определённые сложности, например, языковой барьер между исследователями разных стран. Эта сложность может быть нивелирована поддержкой контролируемых словарей&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Controlled_vocabulary Wikipedia {{---}} Контролируемый словарь]&amp;lt;/ref&amp;gt; жаргона.&lt;br /&gt;
&lt;br /&gt;
===Общие компоненты онтологий===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Название !! Описание !! Пример&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''Экземпляры (объекты)'''&lt;br /&gt;
| Базовые или &amp;quot;наземные&amp;quot; объекты (индивиды).&lt;br /&gt;
| Мария, 1, Солнце.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''Классы (понятия)''' &lt;br /&gt;
| Наборы, коллекции, концепции, классы в программировании, типы объектов или виды вещей. &lt;br /&gt;
| Человек, Число, Звезда.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''Атрибуты''' &lt;br /&gt;
| Аспекты, свойства, признаки, характеристики или параметры, которые могут иметь объекты (и классы). &lt;br /&gt;
| Возраст: 21, Чётность: нет, Спектральная классификация: жёлтый карлик.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''Отношения''' &lt;br /&gt;
| Способы, которыми классы и индивиды могут быть связаны друг с другом. &lt;br /&gt;
| Люди являются Животными.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''Правила''' &lt;br /&gt;
| Высказывания в форме &amp;quot;Если ..., то ...&amp;quot; (антецедент-консеквент), описывающие логические выводы, которые могут быть сделаны из утверждения в определенной форме. &lt;br /&gt;
| Если &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; смертен, то &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; умрёт.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''Аксиомы''' &lt;br /&gt;
| Утверждения (включая правила) в логической форме, которые вместе составляют общую теорию, описываемую онтологией в её области применения. Это определение отличается от определения &amp;quot;аксиом&amp;quot; в [[Исчисление_высказываний|формальной логике]]. В ней аксиомы включают только утверждения, утверждаемые как априорное знание. Здесь же &amp;quot;аксиомы&amp;quot; также включают в себя теорию, полученную из аксиоматических утверждений. &lt;br /&gt;
| Человек смертен. Сократ {{---}} человек.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''События''' &lt;br /&gt;
| Изменение атрибутов или отношений. &lt;br /&gt;
| &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; умер (&amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; больше не является живым).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Онтологии обычно кодируются с помощью языков онтологий — специализированных [[:Основные_определения,_связанные_со_строками#Формальные_языки|формальных языков]].&lt;br /&gt;
&lt;br /&gt;
Примерами таковых являются OWL&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Web_Ontology_Language Wikipedia {{---}} OWL]&amp;lt;/ref&amp;gt;&lt;br /&gt;
, KIF&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Knowledge_Interchange_Format Wikipedia {{---}} KIF]&amp;lt;/ref&amp;gt;&lt;br /&gt;
, Common Logic&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Common_Logic Wikipedia {{---}} Common Logic]&amp;lt;/ref&amp;gt;&lt;br /&gt;
, CycL&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/CycL Wikipedia {{---}} CycL]&amp;lt;/ref&amp;gt;&lt;br /&gt;
, DAML+OIL&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/DAMLplusOIL Wikipedia {{---}} DAML+OIL]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Построение при помощи методов машинного обучения==&lt;br /&gt;
===Векторные представления графов знаний===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Knowledge-graph-tensor.jpg|200px|thumb|Рис. 2. [https://www.researchgate.net/publication/221345089_A_Three-Way_Model_for_Collective_Learning_on_Multi-Relational_Data Тензорная модель представления графов знаний.  &amp;lt;math&amp;gt;E_1 \dots E_n&amp;lt;/math&amp;gt; обозначают объекты, а &amp;lt;math&amp;gt;R_1 \dots R_m&amp;lt;/math&amp;gt; обозначают отношения]]]&lt;br /&gt;
&lt;br /&gt;
Векторные представления графов знаний (англ. ''Knowledge graph embeddings, KGE'') являются малоразмерными представлениями объектов-узлов и связей между ними в графе знаний. Они обобщают информацию о семантике и локальной структуре вершин.&lt;br /&gt;
&lt;br /&gt;
Существует множество различных моделей KGE, таких как &lt;br /&gt;
TransE&amp;lt;ref&amp;gt;[https://papers.nips.cc/paper/2013/file/1cecc7a77928ca8133fa24680a88d2f9-Paper.pdf Translating Embeddings for Modeling Multi-relational Data] {{---}} Antoine Bordes, Nicolas Usunier, Alberto Garcia-Duran, Jason Weston, Oksana Yakhnenko (2013)&amp;lt;/ref&amp;gt;, &lt;br /&gt;
TransR&amp;lt;ref&amp;gt;[https://www.aaai.org/ocs/index.php/AAAI/AAAI15/paper/view/9571 Learning Entity and Relation Embeddings for Knowledge Graph Completion] {{---}} Yankai Lin, Zhiyuan Liu, Maosong Sun, Yang Liu, Xuan Zhu (2015)&amp;lt;/ref&amp;gt;, &lt;br /&gt;
RESCAL&amp;lt;ref&amp;gt;[http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.383.2015&amp;amp;rep=rep1&amp;amp;type=pdf A Three-Way Model for Collective Learning on Multi-Relational Data] {{---}} Nickel Maximilian, Tresp Volker, Kriegel Hans-Peter (2011)&amp;lt;/ref&amp;gt;, &lt;br /&gt;
DistMult&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1412.6575 Embedding Entities and Relations for Learning and Inference in Knowledge Bases] {{---}} Bishan Yang, Wen-tau Yih, Xiaodong He, Jianfeng Gao, Li Deng (2015)&amp;lt;/ref&amp;gt;, &lt;br /&gt;
ComplEx&amp;lt;ref&amp;gt;[http://proceedings.mlr.press/v48/trouillon16.pdf Complex Embeddings for Simple Link Prediction] {{---}} Théo Trouillon, Johannes Welbl, Sebastian Riedel, Éric Gaussier, Guillaume Bouchard (2016)&amp;lt;/ref&amp;gt;, &lt;br /&gt;
и RotatE&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1902.10197.pdf RotatE: Knowledge Graph Embedding by Relational Rotation in Complex Space] {{---}} Zhiqing Sun, Zhi-Hong Deng, Jian-Yun Nie, Jian Tang (2019)&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Как пример для представления графовых данных может использоваться семантика Cреды описания ресурса (англ. ''Resource Description Framework, RDF'')&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Resource_Description_Framework Wikipedia {{---}} Resource Description Framework]&amp;lt;/ref&amp;gt; где связи представляются триплетом &amp;quot;''субъект — предикат — объект''&amp;quot;.  Для моделирования бинарных отношений на графе удобно использовать трехсторонний тензор &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, в котором две размерности образованы на основе связываемых объектов-узлов, а третья размерность содержит отношения между ними (рис. 2). Элемент тензора &amp;lt;math&amp;gt;x_{ijk} = 1&amp;lt;/math&amp;gt;, когда существует отношение (i-й объект, k-е отношение, j-й объект). В противном случае для несуществующих или неизвестных отношений &amp;lt;math&amp;gt;x_{ijk} = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Обучение онтологий===&lt;br /&gt;
[[Файл:Ontology-learning-layer-cake.png|400px|thumb|Рис. 3. Слоеный пирог обучения онтологий]]&lt;br /&gt;
&lt;br /&gt;
Процесс получения онтологий начинается с вынесения множества термов из текста и получения их синонимов. Далее они преобразуются во множество концептов. После чего выявляются связи между концептами, и в итоге формируются схемы аксиом и извлекаются аксиомы. Данный процесс называют '''слоеным пирогом обучения онтологии''' (рис. 3).&lt;br /&gt;
&lt;br /&gt;
Алгоритмы, используемые в разных слоях при построении онтологии разбивают на 3 основные группы:&lt;br /&gt;
&lt;br /&gt;
* лингвистические;&lt;br /&gt;
* статистические;&lt;br /&gt;
* логические.&lt;br /&gt;
&lt;br /&gt;
===Лингвистические методы===&lt;br /&gt;
&lt;br /&gt;
Лингвистические методы основаны на различных особенностях языка и играют ключевую роль на начальных стадиях обучения. В основном их используют для предобработки текста, а также в извлечении термов, концептов и связей.&lt;br /&gt;
&lt;br /&gt;
====Предобработка текста====&lt;br /&gt;
&lt;br /&gt;
На первой стадии текст [[:Обработка_естественного_языка#Предобработка_текста|предобрабатывается]] для уменьшения размерности и повышения точности обучаемой модели. Обычно для этого используют такие методы, как:&lt;br /&gt;
&lt;br /&gt;
* [[:Обработка_естественного_языка#Частеречная_разметка|частеречная разметка]]&amp;lt;sup&amp;gt;[на 09.01.21 не создан]&amp;lt;/sup&amp;gt; (англ. ''Part-Of-Speech tagging POS tagging'')&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Part-of-speech_tagging Wikipedia {{---}} Part-of-speech tagging]&amp;lt;/ref&amp;gt;;&lt;br /&gt;
* [[:Обработка_естественного_языка#Лемматизация|лемматиза́ция]] (англ. ''Lemmatization'')&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Lemmatisation Wikipedia {{---}} Lemmatisation]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Извлечение термов и концептов====&lt;br /&gt;
&lt;br /&gt;
Лингвистические техники также часто используют на этапе извлечения термов и концептов. Чтобы извлечь термы и концепты при помощи синтаксических структур слова помечают как части речи. Эта информация используется для извлечения синтаксических структур из предложений, таких как словосочетания и глагольные группы. Данные структуры анализируются на наличие различных слов и морфем для нахождения термов. К примеру словосочетание ''‘acute appendicitis’'' может быть извлечено в качестве кандидата на терм, так как является гипонимом к терму ''‘appendicitis’''. На китайских текстах данный метод достиг точности в &amp;lt;math&amp;gt;83.3\%&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;The head-modifier principle and multilingual term extraction {{---}} Hippisley A., Cheng D. и Ahmad K. (2005)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Распространёнными методами данного подхода являются:&lt;br /&gt;
&lt;br /&gt;
* рамки валентностей (англ. ''Subcategorization Frames'')&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Subcategorization#Subcategorization_Frames Wikipedia {{---}} Subcategorization Frames]&amp;lt;/ref&amp;gt;;&lt;br /&gt;
* извлечение коренных слов (англ. ''Seed Words Extraction'').&lt;br /&gt;
&lt;br /&gt;
====Нахождение связей====&lt;br /&gt;
&lt;br /&gt;
С помощью анализа зависимостей можно находить связи между термами используя информацию, предоставленную в [[:Контекстно-свободные_грамматики,_вывод,_лево-_и_правосторонний_вывод,_дерево_разбора#Дерево_разбора|деревьях разбора]]. Таким образом, с помощью кратчайшего пути между двумя концептами в дереве разбора можно выявить связи между ними.&lt;br /&gt;
&lt;br /&gt;
Также можно использовать [[:Регулярные_языки:_два_определения_и_их_эквивалентность|регулярные выражения]]. Например, правило ''&amp;quot;&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, как например &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, … , &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&amp;quot;'' (где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; {{---}} именная группа&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%98%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B0 Википедия {{---}} Именная группа]&amp;lt;/ref&amp;gt;) может выявить такие образцы как ''&amp;quot;сезоны года, как например лето, осень, весна и зима&amp;quot;''. Данный подход полезен для выявления связей ''&amp;quot;является&amp;quot;'' к примеру ''(лето {{---}} сезон года)''.&lt;br /&gt;
&lt;br /&gt;
===Статистические методы===&lt;br /&gt;
&lt;br /&gt;
Статистические методы основаны на статистике и не полагаются на семантику языка. Большинство статистических методов преимущественно используют вероятностные техники и в основном применяются после предобработки текста лингвистическими методами на ранних этапах обучения (извлечение термов, концептов и связей).&lt;br /&gt;
&lt;br /&gt;
====Извлечение термов и концептов====&lt;br /&gt;
&lt;br /&gt;
На этом этапе используются следующие статистические методы:&lt;br /&gt;
&lt;br /&gt;
* C/NC value&amp;lt;ref&amp;gt;Automatic Recognition of Multi-Word Terms: the&lt;br /&gt;
C-value/NC-value Method {{---}} Katerina Frantziy, Sophia Ananiadouy, Hideki Mimaz (2000)&amp;lt;/ref&amp;gt; используют для извлечения многословных терминологий {{---}} групп термов, образующих концепты. Алгоритму на вход подаётся несколько многословных термов, для каждого из которых вычисляется оценка в форме C value и NC value. C value использует частоту встречаемости терма для его извлечения, что делает его эффективным для нахождения вложенных термов, а NC value по сути является модификацией C value, которая учитывает контекст.&lt;br /&gt;
&lt;br /&gt;
* В процессе извлечения термов могут быть получены термы, не относящиеся к целевой области. Для фильтрации таких термов применяется метод сравнительного анализа (англ. ''Contrastive analysis'')&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Contrastive_analysis#:~:text=Contrastive%20analysis%20is%20the%20systematic,used%20to%20establish%20language%20genealogies.  Wikipedia {{---}} Contrastive analysis]&amp;lt;/ref&amp;gt;. Он присуждает оценку для каждого терма, в зависимости от того, насколько он релевантен для целевой области, и насколько он нерелевантен в других областях.&lt;br /&gt;
&lt;br /&gt;
* [[:Классификация_текстов_и_анализ_тональности#pLSA|Латентно-семантический анализ]] (англ. ''Latent Semantic Analysis, LSA'') используют для извлечения концептов. Этот метод основан на том, что термы, встречающиеся вместе, будут схожи по значению. LSA уменьшает размерность данных, сохраняя структуру подобия, после чего к оставшимся термам применяется мера сходства (например ''косинусное сходство''&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Cosine_similarity Wikipedia {{---}} Cosine Simularity]&amp;lt;/ref&amp;gt;) для поиска похожих слов.&lt;br /&gt;
&lt;br /&gt;
* [[:Кластеризация|Кластеризация]] группирует множества объектов на подмножества (кластеры) таким образом, чтобы объекты из одного кластера были более похожи друг на друга, чем на объекты из других кластеров.&lt;br /&gt;
&lt;br /&gt;
====Нахождение связей====&lt;br /&gt;
&lt;br /&gt;
Статистические методы также используют для выявления связей. Распространёнными техниками являются:&lt;br /&gt;
&lt;br /&gt;
* Категоризация термов (англ. ''Term subsumption'') находит связи между термами при помощи [[:Условная_вероятность|условной вероятности]]. Этот алгоритм ищет термы, являющиеся наиболее общими. Терм &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; считается более общим, чем терм &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; если &amp;lt;math&amp;gt;P(t \; | \; x) &amp;gt; P(x \; | \; t)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;P(t \; | \; x)&amp;lt;/math&amp;gt; обозначает вероятность встречи терма &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; при наличии терма &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Анализ формальных понятий (англ. ''Formal Concept Analysis, FCA'')&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Formal_concept_analysis#:~:text=Formal%20concept%20analysis%20(FCA)%20is,of%20objects%20and%20their%20properties. Wikipedia {{---}} Formal concept analysis]&amp;lt;/ref&amp;gt; основан на том, что объекты могут иметь схожие атрибуты. Алгоритм на вход принимает матрицу связей объектов и атрибутов и находит в ней все естественные кластеры, что позволяет построить иерархию концептов и атрибутов.&lt;br /&gt;
* [[:Иерархическая_кластеризация|Иерархическая кластеризация]] группирует термы в кластеры для нахождения концептов и построения иерархий.&lt;br /&gt;
* Добыча ассоциативных правил (англ. ''Association rule mining, ARM'') находит правила, предугадывающие совпадение элементов в различных базах данных, для чего обычно применяют алгоритмы Apriori&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Apriori_algorithm Wikipedia {{---}} Apriori algorithm]&amp;lt;/ref&amp;gt; и FPG&amp;lt;ref&amp;gt;[https://en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Frequent_Pattern_Mining/The_FP-Growth_Algorithm#FP-Growth_Algorithm Wikibooks {{---}} FP-Growth Algorithm]&amp;lt;/ref&amp;gt;. Тут правило подразумевает импликацию &amp;lt;math&amp;gt;X \to Y&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и  &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; {{---}} непустые подмножества множества всех элементов, такие, что  &amp;lt;math&amp;gt;X \cap Y = \varnothing&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Индуктивное логическое программирование===&lt;br /&gt;
&lt;br /&gt;
На последней стадии построения онтологии используется индуктивное логическое программирование (англ. ''Inductive Logic Programming, ILP'')&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Inductive_logic_programming Wikipedia {{---}} Inductive Logic Programming]&amp;lt;/ref&amp;gt; {{---}} раздел машинного обучения, который использует логическое программирование как форму представления примеров, фоновых знаний и гипотез. ILP необходимо для генерации аксиом по схемам аксиом (положительным и отрицательным примерам и фоновым знаниям).&lt;br /&gt;
&lt;br /&gt;
===Оценка онтологии===&lt;br /&gt;
&lt;br /&gt;
Оценка качества получения онтологии является важной частью процесса обучения. Благодаря ей можно уточнить или перестроить модели, не удовлетворяющие требованиям. Так как обучение состоит из различных этапов, процесс оценки онтологий является достаточно сложной задачей. По этой причине предлагались многочисленные техники оценки, однако их все можно разбить на следующие группы:&lt;br /&gt;
&lt;br /&gt;
====Золотой стандарт====&lt;br /&gt;
&lt;br /&gt;
Оценка с использованием золотого стандарта основана на наличии базовой онтологии. Золотой стандарт представляет собой пример идеальной онтологии в какой-то конкретной области. Сравнивая и оценивая обученную онтологию с золотым стандартом можно эффективно определить степень покрытия области знаний и консистентность. Золотым стандартом может быть как независимая онтология, так и статистическая модель, сформированная экспертами в данной области. Наличие золотого стандарта позволяет проводить регулярные и крупномасштабные оценки на различных этапах обучения. Однако получение золотого стандарта может оказаться проблемой, так как он должен быть смоделирован в условиях и с целью похожими на соответственно условия и цель обучаемой онтологии. Очень часто это приводит к выбору моделей, созданных человеком вручную.&lt;br /&gt;
&lt;br /&gt;
====Экспертная оценка====&lt;br /&gt;
&lt;br /&gt;
Экспертная оценка основана на определении различных критериев. По каждому критерию выставляется числовая оценка, после чего считается взвешенная сумма оценок. Основным недостатком данного способа являются огромные затраты времени и усилий на ручную работу, однако данный метод устарел и крайне редко применяется в оценке современных онтологий.&lt;br /&gt;
&lt;br /&gt;
====Оценка, основанная на конкретной задаче====&lt;br /&gt;
&lt;br /&gt;
Данная оценка применяется при построении онтологии для конкретных задач. Результаты, полученные в процессе решения задачи, определяют качество построенной онтологии, независимо от её структуры. Данная оценка позволяет выявить неустойчивые концепты и определить адаптивность конкретной онтологии, анализируя её эффективность в контексте различных задач. &lt;br /&gt;
&lt;br /&gt;
К примеру, создаётся онтология для улучшения поиска документов. В таком случае можно проверить, получило ли приложение более релевантные документы после применения данной онтологии. Для этого можно применить традиционные методы оценки, такие как [[:Оценка_качества_в_задачах_классификации#F.E2.82.81_score|F мера]]. &lt;br /&gt;
&lt;br /&gt;
Однако стоит отметить, что использование оценок, основанных на конкретных задачах, имеет несколько недостатков. К примеру:&lt;br /&gt;
&lt;br /&gt;
* Онтология может являться лишь малой частью приложения, и её эффект на общий результат может быть незначительным.&lt;br /&gt;
* Онтология оценивается путём применения конкретным образом для конкретной задачи, а значит модель достаточно сложно обобщить.&lt;br /&gt;
&lt;br /&gt;
====Оценка с использованием конкретных источников знаний====&lt;br /&gt;
&lt;br /&gt;
Эта оценка использует источники знаний конкретной области, чтобы определить степень покрытия этой области обучаемой онтологией. Главным преимуществом данной оценки является возможность сравнивать одну или несколько целевых онтологий с конкретными данными. Однако возникает проблема нахождения подходящего источника знаний (как и в оценке золотым стандартом).&lt;br /&gt;
&lt;br /&gt;
==Особенности применения онтологии для конкретных задач==&lt;br /&gt;
&lt;br /&gt;
===Cистема автоматической обработки текста===&lt;br /&gt;
&lt;br /&gt;
Лингвистическая онтология является одним из ключевых элементов в системе обработки текста и ее построение необходимо для решения задачи.&lt;br /&gt;
&lt;br /&gt;
Как описано выше — для построения современных онтологий всегда является актуальным извлечение термов и концептов, в данном случае семантически связанных слов из текста на естественном языке. &lt;br /&gt;
Однако общим недостатком таких онтологий является отсутствие специализированных терминов, специфичных для данной предметной области. В следствие этого появляется проблема дополнения существующей онтологии, а именно семантической сети узлами и связями из внешних источников. И так как имеется множество публичных ресурсов для дополнения новых узлов и связей, то выделяют следующие задачи:&lt;br /&gt;
&lt;br /&gt;
* Автоматизированный поиск новых узлов, связанных семантическими отношениями.&lt;br /&gt;
* Добавление новых узлов и связей в онтологию при обнаружении сущностей, признаки которых удовлетворяют заданным критериям.&lt;br /&gt;
&lt;br /&gt;
Для решения данных задач существует множество способов анализа текстовой информации для извлечения из нее семантических отношений:&lt;br /&gt;
* Методы извлечения связей, основанные на шаблонах такие как &amp;quot;Top down&amp;quot; и &amp;quot;Bottom up&amp;quot;&amp;lt;ref&amp;gt;[https://www.math.spbu.ru/user/tseytin/butdu.html Bottom-up and Top-down Approaches to Text Analysis]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* Группа методов, основанная на форматировании или на DOM&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Document_Object_Model Wikipedia {{---}} Document Object Model]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* Методы, основанные на машинном обучении. Одним из самых явных примеров реализации является [[:Векторное_представление_слов#word2vec|word2vec]], основанный на нейронных сетях.&lt;br /&gt;
&lt;br /&gt;
Последняя группа методов является наиболее современной и показывает наилучшую точность, но не позволяет достичь приемлимой точности и полноты в общем случае, так как данные методы используются для конкретной предметной области. Таким образом поиск наиболее подходящих признаков для обучения нейронных сетей необходим для применения лингвистической онтологии в данной задаче.&lt;br /&gt;
&lt;br /&gt;
====Обработка текста на русском языке====&lt;br /&gt;
&lt;br /&gt;
Чтобы применить онтологию для автоматической обработки текстов, необходимо понятиям онтологии сопоставить набор языковых выражений (слов и словосочетаний), которыми понятия могут выражаться в тексте. Для русского языка, как и для многих других языков, содержащие многозначные понятия, имеется ряд проблем.&lt;br /&gt;
&lt;br /&gt;
Хоть понятие, лексическое значение относятся к категориям мышления, при этом между ними есть существенные различия. &lt;br /&gt;
Значение включает в себя помимо понятийного содержания (сигнификативно-денотативного&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Сигнификат Wikipedia {{---}} Сигнификат]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Денотат Wikipedia {{---}} Денонат]&amp;lt;/ref&amp;gt; компонента значения), такие компоненты как оценочный, стилистический, сочетаемостный.&lt;br /&gt;
Также значение включает лишь различительные черты объектов, иногда относительно поверхностные, а понятия охватывают их наиболее глубокие существенные свойства.&lt;br /&gt;
Поэтому описать значения многих слов как совокупности общих и одновременно существенных признаков может быть очень трудно.&lt;br /&gt;
В целом, считается, что значение и понятие совпадают лишь в сфере терминологии.&lt;br /&gt;
&lt;br /&gt;
Многие понятия в русском языке сложно представить в виде формальной системы, пригодной для логического вывода, например, описать таксономические связи, по следующим причинам:&lt;br /&gt;
&lt;br /&gt;
* Из-за их нечеткости, расплывчатости.&lt;br /&gt;
&lt;br /&gt;
* Контекстной зависимости, когда реализация некоторых компонентов значения существенно зависит от контекста.&lt;br /&gt;
&lt;br /&gt;
* Существования значительных рядов синонимов, отличающихся оттенками значений, что затрудняет разбиение таких рядов на совокупность взаимосвязанных понятийных единиц. Например, сколько понятий онтологии оптимально (и на основе каких принципов) сопоставить следующему ряду слов со значением ''ОШИБКА'': ''ошибка, погрешность, недосмотр, просмотр, ляп, промах, оплошность, осечка, прокол, упущение, недочет'', а также'' ослышка, описка, опечатка, оговорка''. Таким словам обычно трудно найти точные слова-соответствия в других языках, то есть слова, имеющие такой же оттенок значения и такие же особенности употребления.&lt;br /&gt;
&lt;br /&gt;
Несмотря на описанные проблемы, разработка моделей представления знаний о мире и о языке в рамках онтологий имеет смысл. Так например появился РуТез&amp;lt;ref&amp;gt;[https://www.labinform.ru/pub/ruthes/ О лингвистической онтологии &amp;quot;Тезаурус РуТез&amp;quot;]&amp;lt;/ref&amp;gt; — онтология для автоматической обработки текста на русском языке, которая представила свое решение&amp;lt;ref&amp;gt;[https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.671.6887&amp;amp;rep=rep1&amp;amp;type=pdf RuThes Linguistic Ontology vs. Russian Wordnets]&amp;lt;/ref&amp;gt; для данных проблем.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[:Обработка_естественного_языка|Обработка естественного языка]]&lt;br /&gt;
* [[:Векторное_представление_слов|Векторное представление слов]]&lt;br /&gt;
* [[:Кластеризация|Кластеризация]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Semantic_network Wikipedia {{---}} Semantic network]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Семантическая_сеть Википедия {{---}} Семантическая сеть]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Knowledge_graph Wikipedia {{---}} Knowledge graph]&lt;br /&gt;
*[https://towardsdatascience.com/knowledge-graph-bb78055a7884 Towards Data Science {{---}} Knowledge graph]&lt;br /&gt;
*[https://www.authorea.com/users/6341/articles/107281-what-is-a-knowledge-graph/_show_article Authorea {{---}} What is a Knowledge Graph]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Ontology_(information_science) Wikipedia {{---}} Ontology]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Онтология_(информатика) Википедия {{---}} Онтология]&lt;br /&gt;
* [https://aws.amazon.com/blogs/machine-learning/training-knowledge-graph-embeddings-at-scale-with-the-deep-graph-library Training knowledge graph embeddings at scale with the Deep Graph Library] {{---}} Phi Nguyen, Xiang Song (2020)&lt;br /&gt;
* [https://www.researchgate.net/publication/221345089_A_Three-Way_Model_for_Collective_Learning_on_Multi-Relational_Data A Three-Way Model for Collective Learning on Multi-Relational Data] {{---}} Maximilian Nickel, Volker Tresp, Hans-Peter Kriegel (2011)&lt;br /&gt;
*[https://academic.oup.com/database/article/doi/10.1093/database/bay101/5116160 A survey of ontology learning techniques and applications] {{---}} Muhammad Nabeel Asim, Muhammad Wasim, Muhammad Usman Ghani Khan, Waqar Mahmood, Hafiza Mahnoor Abbasi (2018)&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Обработка естественного языка]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9&amp;diff=80621</id>
		<title>Представление знаний</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9&amp;diff=80621"/>
				<updated>2021-02-08T19:39:29Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Онтология */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Представление знаний''' (англ. ''knowledge representation'') — направление в исследованиях искусственного интеллекта, посвящённое представлению информации о мире в форме, которую было бы возможно использовать в компьютерных системах для решения сложных прикладных задач. Таковыми являются, например, диагностирование заболеваний или ведение диалога на естественном языке. Представление знаний включает в себя психологические исследования по решению задач человеком для построения формализмов, которые упростили бы работу со сложными системами. &lt;br /&gt;
Примерами формализмов представления знаний являются семантические сети, архитектуры систем, правила и онтологии. &lt;br /&gt;
&lt;br /&gt;
==Графы знаний==&lt;br /&gt;
&lt;br /&gt;
===История===&lt;br /&gt;
[[Файл:Semantic_network.png|right|thumb|400px|Рис. 1. [https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D0%BC%D0%B0%D0%BD%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D1%8C Пример семантической сети]]]&lt;br /&gt;
Семантические сети&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Semantic_network Wikipedia {{---}} Semantic Network]&amp;lt;/ref&amp;gt; (рис. 1) были разработаны в 1960 году из-за растущей необходимости в инструменте для представления знаний, который мог бы охватить широкий спектр сущностей: объекты реального мира, события, ситуации и отвлечённые концепты и отношения, — в конце концов будучи применённым в задаче поддержания диалога на естественном языке. Основной целью разработки семантических сетей было решение множества задач, например, представление планов, действий, времени, верований и намерений. При этом способ решения этих задач должен был быть достаточно обобщённым. &lt;br /&gt;
&lt;br /&gt;
В 1980-х гг. Гронингенский университет и университет Твенте начали работу над совместным проектом, названным &amp;quot;Графы знаний&amp;quot;, базируясь на устройстве семантических сетей с рёбрами, ограниченными наперёд заданным количеством отношений — для упрощения алгебры на графах. В последовавшие десятилетия граница между понятиями &amp;quot;Графов знаний&amp;quot; и &amp;quot;Семантических сетей&amp;quot; размывалась всё больше.&lt;br /&gt;
&lt;br /&gt;
В 2012 году Google представили свою версию графа знаний&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Google_Knowledge_Graph Wikipedia {{---}} Google Knowledge Graph]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Определение===&lt;br /&gt;
&lt;br /&gt;
Не существует формального определения графа знаний. Однако есть ряд требований, которых следует придерживаться при его построении&amp;lt;ref&amp;gt;[https://www.authorea.com/users/6341/articles/107281-what-is-a-knowledge-graph/_show_article Wikipedia {{---}} Knowledge graph definition]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Граф знаний определяется своей структурой (сущностями и связями между ними).&lt;br /&gt;
# Утверждения внутри графа знаний являются однозначными.&lt;br /&gt;
# Граф знаний использует конечный набор типов отношений.&lt;br /&gt;
# Все указанные сущности внутри графа знаний, включая типы и отношения, должны быть определены с использованием глобальных идентификаторов с однозначными обозначениями.&lt;br /&gt;
# Утверждения в графе знаний должны иметь явно указанные (лучше всего, проверенные) источники.&lt;br /&gt;
# Граф знаний может иметь оценки неопределённостей (вероятности, с которыми истинны те или иные утверждения&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Fuzzy_logic Wikipedia {{---}} Fuzzy logic]&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Применение===&lt;br /&gt;
&lt;br /&gt;
''Вопросно-ответные системы''. Самым распространённым применением графов знаний являются вопросно-ответные системы. Графы знаний располагают огромным количеством информации, доступ к которой проще всего получать посредством схемы вопрос-ответ.&lt;br /&gt;
&lt;br /&gt;
''Хранение информации исследований''. Многие компании используют графы знаний для хранения результатов, полученных на разных стадиях исследований, которые могут быть использованы для построения понятных моделей, просчёта рисков, слежения за различными процессами и подобных задач.&lt;br /&gt;
&lt;br /&gt;
''Рекомендательные системы''. Некоторые компании используют графы знаний как фундамент для своих рекомендательных систем. Здесь графы знаний позволяют находить связи между фильмами, телепрограммами, персоналиями и другими объектами. По выявленным связям можно пытаться предсказать индивидуальные предпочтения пользователя.&lt;br /&gt;
&lt;br /&gt;
''Управление цепочками поставок''. Компании могут эффективно следить за перечнями различных составляющих, задействованного персонала, времени и других характеристик, что позволяет им передавать вещи более выгодно.&lt;br /&gt;
&lt;br /&gt;
===Открытые проблемы===&lt;br /&gt;
# '''Выявление лучших практик для построения графов знаний'''. Важной проблемой является создание единого набора эвристик и практик, которые можно было бы применить для построения графов знаний. Такой набор мог бы помочь разработчикам и исследователям в понимании и использовании графов знаний.  &lt;br /&gt;
# '''Динамически изменяемые знания'''. Знания не статичны, они зависят от времени. Например, некоторое утверждение, которое было истинным в один момент времени, может перестать быть таковым в другой. Поэтому открытой проблемой является поддержка изменений в знаниях.&lt;br /&gt;
# '''Оценка корректности и полноты графа знаний'''. Не выработаны объективные критерии оценки графов знаний. Открытой проблемой является ответ на вопрос, какое качество более важно для графа знаний: корректность (непротиворечивость), полнота или другое.&lt;br /&gt;
&lt;br /&gt;
==Онтология==&lt;br /&gt;
&lt;br /&gt;
Понятие онтологии существует как в информатике, так и в философии, однако эти понятия похожи.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Онтология (в информатике)''' {{---}} формализация знаний, включающая в себя представление, формальное именование и определение категорий, свойств и отношений между понятиями, данными и сущностями некоторой области знаний.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Термин «онтология» применительно к графам знаний это, прежде всего, способ моделирования и формального представления схемы данных, обеспечивающий гораздо большие возможности, чем традиционные базы данных или объектно-ориентированный подход. &lt;br /&gt;
&lt;br /&gt;
Согласно общепринятому определению в компьютерных науках, онтология {{---}} это способ формализации знаний, абстрактных или специфических, в какой-либо предметной области, реализованный на основе формального описания объектов, фактов и отношений между ними.&lt;br /&gt;
===Формализация===&lt;br /&gt;
&lt;br /&gt;
Для формализации используется концептуальная схема.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Концептуа́льная схе́ма'''&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Концептуальная_схема Википедия {{---}} Концептуальная схема]&amp;lt;/ref&amp;gt; — семантическая сеть из взаимосвязанных по определенным правилам понятий и концепций. Обычно такая схема состоит из структуры данных, содержащей все релевантные классы объектов, их связи и правила (теоремы, ограничения), принятые в этой области. &lt;br /&gt;
}}&lt;br /&gt;
===Философия===&lt;br /&gt;
&lt;br /&gt;
Термин «онтология» в информатике является производным от соответствующего древнего философского понятия.&lt;br /&gt;
&lt;br /&gt;
'''Общее''' с философским понятием:&lt;br /&gt;
&lt;br /&gt;
* И то, и другое — попытка представить сущности, идеи и события со всеми их взаимозависимыми свойствами и отношениями в соответствии с системой категорий.&lt;br /&gt;
* В обеих областях существует значительная работа по проблемам онтологической инженерии&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Ontology_engineering Wikipedia {{---}} Онтологическая инженерия]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Отличия''' от философского понятия:&lt;br /&gt;
&lt;br /&gt;
* Онтология в информатике должна иметь формат, который компьютер сможет легко обработать.&lt;br /&gt;
* Информационные онтологии создаются всегда с конкретными целями — решения конструкторских задач; они оцениваются больше с точки зрения применимости, чем полноты.&lt;br /&gt;
&lt;br /&gt;
В каждой научной дисциплине или области знаний создают онтологии для организации данных в виде информации и знаний. С новыми онтологиями упрощается решение задач в этих областях. Однако при решении задач возникают определённые сложности, например, языковой барьер между исследователями разных стран. Эта сложность может быть нивелирована поддержкой контролируемых словарей&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Controlled_vocabulary Wikipedia {{---}} Контролируемый словарь]&amp;lt;/ref&amp;gt; жаргона.&lt;br /&gt;
&lt;br /&gt;
===Общие компоненты онтологий===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Название !! Описание !! Пример&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''Экземпляры (объекты)'''&lt;br /&gt;
| Базовые или &amp;quot;наземные&amp;quot; объекты (индивиды).&lt;br /&gt;
| Мария, 1, Солнце.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''Классы (понятия)''' &lt;br /&gt;
| Наборы, коллекции, концепции, классы в программировании, типы объектов или виды вещей. &lt;br /&gt;
| Человек, Число, Звезда.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''Атрибуты''' &lt;br /&gt;
| Аспекты, свойства, признаки, характеристики или параметры, которые могут иметь объекты (и классы). &lt;br /&gt;
| Возраст: 21, Чётность: нет, Спектральная классификация: жёлтый карлик.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''Отношения''' &lt;br /&gt;
| Способы, которыми классы и индивиды могут быть связаны друг с другом. &lt;br /&gt;
| Люди являются Животными.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''Правила''' &lt;br /&gt;
| Высказывания в форме &amp;quot;Если ..., то ...&amp;quot; (антецедент-консеквент), описывающие логические выводы, которые могут быть сделаны из утверждения в определенной форме. &lt;br /&gt;
| Если &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; смертен, то &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; умрёт.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''Аксиомы''' &lt;br /&gt;
| Утверждения (включая правила) в логической форме, которые вместе составляют общую теорию, описываемую онтологией в её области применения. Это определение отличается от определения &amp;quot;аксиом&amp;quot; в [[Исчисление_высказываний|формальной логике]]. В ней аксиомы включают только утверждения, утверждаемые как априорное знание. Здесь же &amp;quot;аксиомы&amp;quot; также включают в себя теорию, полученную из аксиоматических утверждений. &lt;br /&gt;
| Человек смертен. Сократ {{---}} человек.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eaecf0;&amp;quot; | '''События''' &lt;br /&gt;
| Изменение атрибутов или отношений. &lt;br /&gt;
| &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; умер (&amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; больше не является живым).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Онтологии обычно кодируются с помощью языков онтологий — специализированных [[:Основные_определения,_связанные_со_строками#Формальные_языки|формальных языков]].&lt;br /&gt;
&lt;br /&gt;
Примерами таковых являются OWL&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Web_Ontology_Language Wikipedia {{---}} OWL]&amp;lt;/ref&amp;gt;&lt;br /&gt;
, KIF&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Knowledge_Interchange_Format Wikipedia {{---}} KIF]&amp;lt;/ref&amp;gt;&lt;br /&gt;
, Common Logic&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Common_Logic Wikipedia {{---}} Common Logic]&amp;lt;/ref&amp;gt;&lt;br /&gt;
, CycL&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/CycL Wikipedia {{---}} CycL]&amp;lt;/ref&amp;gt;&lt;br /&gt;
, DAML+OIL&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/DAMLplusOIL Wikipedia {{---}} DAML+OIL]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Построение при помощи методов машинного обучения==&lt;br /&gt;
===Векторные представления графов знаний===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Knowledge-graph-tensor.jpg|200px|thumb|Рис. 2. [https://www.researchgate.net/publication/221345089_A_Three-Way_Model_for_Collective_Learning_on_Multi-Relational_Data Тензорная модель представления графов знаний.  &amp;lt;math&amp;gt;E_1 \dots E_n&amp;lt;/math&amp;gt; обозначают объекты, а &amp;lt;math&amp;gt;R_1 \dots R_m&amp;lt;/math&amp;gt; обозначают отношения]]]&lt;br /&gt;
&lt;br /&gt;
Векторные представления графов знаний (англ. ''Knowledge graph embeddings, KGE'') являются малоразмерными представлениями объектов-узлов и связей между ними в графе знаний. Они обобщают информацию о семантике и локальной структуре вершин.&lt;br /&gt;
&lt;br /&gt;
Существует множество различных моделей KGE, таких как &lt;br /&gt;
TransE&amp;lt;ref&amp;gt;[https://papers.nips.cc/paper/2013/file/1cecc7a77928ca8133fa24680a88d2f9-Paper.pdf Translating Embeddings for Modeling Multi-relational Data] {{---}} Antoine Bordes, Nicolas Usunier, Alberto Garcia-Duran, Jason Weston, Oksana Yakhnenko (2013)&amp;lt;/ref&amp;gt;, &lt;br /&gt;
TransR&amp;lt;ref&amp;gt;[https://www.aaai.org/ocs/index.php/AAAI/AAAI15/paper/view/9571 Learning Entity and Relation Embeddings for Knowledge Graph Completion] {{---}} Yankai Lin, Zhiyuan Liu, Maosong Sun, Yang Liu, Xuan Zhu (2015)&amp;lt;/ref&amp;gt;, &lt;br /&gt;
RESCAL&amp;lt;ref&amp;gt;[http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.383.2015&amp;amp;rep=rep1&amp;amp;type=pdf A Three-Way Model for Collective Learning on Multi-Relational Data] {{---}} Nickel Maximilian, Tresp Volker, Kriegel Hans-Peter (2011)&amp;lt;/ref&amp;gt;, &lt;br /&gt;
DistMult&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1412.6575 Embedding Entities and Relations for Learning and Inference in Knowledge Bases] {{---}} Bishan Yang, Wen-tau Yih, Xiaodong He, Jianfeng Gao, Li Deng (2015)&amp;lt;/ref&amp;gt;, &lt;br /&gt;
ComplEx&amp;lt;ref&amp;gt;[http://proceedings.mlr.press/v48/trouillon16.pdf Complex Embeddings for Simple Link Prediction] {{---}} Théo Trouillon, Johannes Welbl, Sebastian Riedel, Éric Gaussier, Guillaume Bouchard (2016)&amp;lt;/ref&amp;gt;, &lt;br /&gt;
и RotatE&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1902.10197.pdf RotatE: Knowledge Graph Embedding by Relational Rotation in Complex Space] {{---}} Zhiqing Sun, Zhi-Hong Deng, Jian-Yun Nie, Jian Tang (2019)&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Как пример для представления графовых данных может использоваться семантика Cреды описания ресурса (англ. ''Resource Description Framework, RDF'')&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Resource_Description_Framework Wikipedia {{---}} Resource Description Framework]&amp;lt;/ref&amp;gt; где связи представляются триплетом &amp;quot;''субъект — предикат — объект''&amp;quot;.  Для моделирования бинарных отношений на графе удобно использовать трехсторонний тензор &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, в котором две размерности образованы на основе связываемых объектов-узлов, а третья размерность содержит отношения между ними (рис. 2). Элемент тензора &amp;lt;math&amp;gt;x_{ijk} = 1&amp;lt;/math&amp;gt;, когда существует отношение (i-й объект, k-е отношение, j-й объект). В противном случае для несуществующих или неизвестных отношений &amp;lt;math&amp;gt;x_{ijk} = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Обучение онтологий===&lt;br /&gt;
[[Файл:Ontology-learning-layer-cake.png|400px|thumb|Рис. 3. Слоеный пирог обучения онтологий]]&lt;br /&gt;
&lt;br /&gt;
Процесс получения онтологий начинается с вынесения множества терминов из текста и получения их синонимов. Далее они преобразуются во множество концептов. После чего выявляются связи между концептами, и в итоге формируются схемы аксиом и извлекаются аксиомы. Данный процесс называют '''слоеным пирогом обучения онтологии''' (рис. 3).&lt;br /&gt;
&lt;br /&gt;
Алгоритмы, используемые в разных слоях при построении онтологии разбивают на 3 основные группы:&lt;br /&gt;
&lt;br /&gt;
* лингвистические;&lt;br /&gt;
* статистические;&lt;br /&gt;
* логические.&lt;br /&gt;
&lt;br /&gt;
===Лингвистические методы===&lt;br /&gt;
&lt;br /&gt;
Лингвистические методы основаны на различных особенностях языка и играют ключевую роль на начальных стадиях обучения. В основном их используют для предобработки текста, а также в извлечении термов, концептов и связей.&lt;br /&gt;
&lt;br /&gt;
====Предобработка текста====&lt;br /&gt;
&lt;br /&gt;
На первой стадии текст [[:Обработка_естественного_языка#Предобработка_текста|предобрабатывается]] для уменьшения размерности и повышения точности обучаемой модели. Обычно для этого используют такие методы, как:&lt;br /&gt;
&lt;br /&gt;
* [[:Обработка_естественного_языка#Частеречная_разметка|частеречная разметка]]&amp;lt;sup&amp;gt;[на 09.01.21 не создан]&amp;lt;/sup&amp;gt; (англ. ''Part-Of-Speech tagging POS tagging'')&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Part-of-speech_tagging Wikipedia {{---}} Part-of-speech tagging]&amp;lt;/ref&amp;gt;;&lt;br /&gt;
* [[:Обработка_естественного_языка#Лемматизация|лемматиза́ция]] (англ. ''Lemmatization'')&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Lemmatisation Wikipedia {{---}} Lemmatisation]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Извлечение термов и концептов====&lt;br /&gt;
&lt;br /&gt;
Лингвистические техники также часто используют на этапе извлечения термов и концептов. Чтобы извлечь термы и концепты при помощи синтаксических структур слова помечают как части речи. Эта информация используется для извлечения синтаксических структур из предложений, таких как словосочетания и глагольные группы. Данные структуры анализируются на наличие различных слов и морфем для нахождения термов. К примеру словосочетание ''‘acute appendicitis’'' может быть извлечено в качестве кандидата на терм, так как является гипонимом к терму ''‘appendicitis’''. На китайских текстах данный метод достиг точности в &amp;lt;math&amp;gt;83.3\%&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;The head-modifier principle and multilingual term extraction {{---}} Hippisley A., Cheng D. и Ahmad K. (2005)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Распространёнными методами данного подхода являются:&lt;br /&gt;
&lt;br /&gt;
* рамки валентностей (англ. ''Subcategorization Frames'')&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Subcategorization#Subcategorization_Frames Wikipedia {{---}} Subcategorization Frames]&amp;lt;/ref&amp;gt;;&lt;br /&gt;
* извлечение коренных слов (англ. ''Seed Words Extraction'').&lt;br /&gt;
&lt;br /&gt;
====Нахождение связей====&lt;br /&gt;
&lt;br /&gt;
С помощью анализа зависимостей можно находить связи между термами используя информацию, предоставленную в [[:Контекстно-свободные_грамматики,_вывод,_лево-_и_правосторонний_вывод,_дерево_разбора#Дерево_разбора|деревьях разбора]]. Таким образом, с помощью кратчайшего пути между двумя концептами в дереве разбора можно выявить связи между ними.&lt;br /&gt;
&lt;br /&gt;
Также можно использовать [[:Регулярные_языки:_два_определения_и_их_эквивалентность|регулярные выражения]]. Например, правило ''&amp;quot;&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, как например &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, … , &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&amp;quot;'' (где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; {{---}} именная группа&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%98%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B0 Википедия {{---}} Именная группа]&amp;lt;/ref&amp;gt;) может выявить такие образцы как ''&amp;quot;сезоны года, как например лето, осень, весна и зима&amp;quot;''. Данный подход полезен для выявления связей ''&amp;quot;является&amp;quot;'' к примеру ''(лето {{---}} сезон года)''.&lt;br /&gt;
&lt;br /&gt;
===Статистические методы===&lt;br /&gt;
&lt;br /&gt;
Статистические методы основаны на статистике и не полагаются на семантику языка. Большинство статистических методов преимущественно используют вероятностные техники и в основном применяются после предобработки текста лингвистическими методами на ранних этапах обучения (извлечение термов, концептов и связей).&lt;br /&gt;
&lt;br /&gt;
====Извлечение термов и концептов====&lt;br /&gt;
&lt;br /&gt;
На этом этапе используются следующие статистические методы:&lt;br /&gt;
&lt;br /&gt;
* C/NC value&amp;lt;ref&amp;gt;Automatic Recognition of Multi-Word Terms: the&lt;br /&gt;
C-value/NC-value Method {{---}} Katerina Frantziy, Sophia Ananiadouy, Hideki Mimaz (2000)&amp;lt;/ref&amp;gt; используют для извлечения многословных терминологий {{---}} групп термов, образующих концепты. Алгоритму на вход подаётся несколько многословных термов, для каждого из которых вычисляется оценка в форме C value и NC value. C value использует частоту встречаемости терма для его извлечения, что делает его эффективным для нахождения вложенных термов, а NC value по сути является модификацией C value, которая учитывает контекст.&lt;br /&gt;
&lt;br /&gt;
* В процессе извлечения термов могут быть получены термы, не относящиеся к целевой области. Для фильтрации таких термов применяется метод сравнительного анализа (англ. ''Contrastive analysis'')&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Contrastive_analysis#:~:text=Contrastive%20analysis%20is%20the%20systematic,used%20to%20establish%20language%20genealogies.  Wikipedia {{---}} Contrastive analysis]&amp;lt;/ref&amp;gt;. Он присуждает оценку для каждого терма, в зависимости от того, насколько он релевантен для целевой области, и насколько он нерелевантен в других областях.&lt;br /&gt;
&lt;br /&gt;
* [[:Классификация_текстов_и_анализ_тональности#pLSA|Латентно-семантический анализ]] (англ. ''Latent Semantic Analysis, LSA'') используют для извлечения концептов. Этот метод основан на том, что термы, встречающиеся вместе, будут схожи по значению. LSA уменьшает размерность данных, сохраняя структуру подобия, после чего к оставшимся термам применяется мера сходства (например ''косинусное сходство''&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Cosine_similarity Wikipedia {{---}} Cosine Simularity]&amp;lt;/ref&amp;gt;) для поиска похожих слов.&lt;br /&gt;
&lt;br /&gt;
* [[:Кластеризация|Кластеризация]] группирует множества объектов на подмножества (кластеры) таким образом, чтобы объекты из одного кластера были более похожи друг на друга, чем на объекты из других кластеров.&lt;br /&gt;
&lt;br /&gt;
====Нахождение связей====&lt;br /&gt;
&lt;br /&gt;
Статистические методы также используют для выявления связей. Распространёнными техниками являются:&lt;br /&gt;
&lt;br /&gt;
* Категоризация термов (англ. ''Term subsumption'') находит связи между термами при помощи [[:Условная_вероятность|условной вероятности]]. Этот алгоритм ищет термы, являющиеся наиболее общими. Терм &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; считается более общим, чем терм &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; если &amp;lt;math&amp;gt;P(t \; | \; x) &amp;gt; P(x \; | \; t)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;P(t \; | \; x)&amp;lt;/math&amp;gt; обозначает вероятность встречи терма &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; при наличии терма &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Анализ формальных понятий (англ. ''Formal Concept Analysis, FCA'')&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Formal_concept_analysis#:~:text=Formal%20concept%20analysis%20(FCA)%20is,of%20objects%20and%20their%20properties. Wikipedia {{---}} Formal concept analysis]&amp;lt;/ref&amp;gt; основан на том, что объекты могут иметь схожие атрибуты. Алгоритм на вход принимает матрицу связей объектов и атрибутов и находит в ней все естественные кластеры, что позволяет построить иерархию концептов и атрибутов.&lt;br /&gt;
* [[:Иерархическая_кластеризация|Иерархическая кластеризация]] группирует термы в кластеры для нахождения концептов и построения иерархий.&lt;br /&gt;
* Добыча ассоциативных правил (англ. ''Association rule mining, ARM'') находит правила, предугадывающие совпадение элементов в различных базах данных, для чего обычно применяют алгоритмы Apriori&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Apriori_algorithm Wikipedia {{---}} Apriori algorithm]&amp;lt;/ref&amp;gt; и FPG&amp;lt;ref&amp;gt;[https://en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Frequent_Pattern_Mining/The_FP-Growth_Algorithm#FP-Growth_Algorithm Wikibooks {{---}} FP-Growth Algorithm]&amp;lt;/ref&amp;gt;. Тут правило подразумевает импликацию &amp;lt;math&amp;gt;X \to Y&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и  &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; {{---}} непустые подмножества множества всех элементов, такие, что  &amp;lt;math&amp;gt;X \cap Y = \varnothing&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Индуктивное логическое программирование===&lt;br /&gt;
&lt;br /&gt;
На последней стадии построения онтологии используется индуктивное логическое программирование (англ. ''Inductive Logic Programming, ILP'')&amp;lt;ref&amp;gt;[https://wikipedia.org/wiki/Inductive_logic_programming Wikipedia {{---}} Inductive Logic Programming]&amp;lt;/ref&amp;gt; {{---}} раздел машинного обучения, который использует логическое программирование как форму представления примеров, фоновых знаний и гипотез. ILP необходимо для генерации аксиом по схемам аксиом (положительным и отрицательным примерам и фоновым знаниям).&lt;br /&gt;
&lt;br /&gt;
===Оценка онтологии===&lt;br /&gt;
&lt;br /&gt;
Оценка качества получения онтологии является важной частью процесса обучения. Благодаря ей можно уточнить или перестроить модели, не удовлетворяющие требованиям. Так как обучение состоит из различных этапов, процесс оценки онтологий является достаточно сложной задачей. По этой причине предлагались многочисленные техники оценки, однако их все можно разбить на следующие группы:&lt;br /&gt;
&lt;br /&gt;
====Золотой стандарт====&lt;br /&gt;
&lt;br /&gt;
Оценка с использованием золотого стандарта основана на наличии базовой онтологии. Золотой стандарт представляет собой пример идеальной онтологии в какой-то конкретной области. Сравнивая и оценивая обученную онтологию с золотым стандартом можно эффективно определить степень покрытия области знаний и консистентность. Золотым стандартом может быть как независимая онтология, так и статистическая модель, сформированная экспертами в данной области. Наличие золотого стандарта позволяет проводить регулярные и крупномасштабные оценки на различных этапах обучения. Однако получение золотого стандарта может оказаться проблемой, так как он должен быть смоделирован в условиях и с целью похожими на соответственно условия и цель обучаемой онтологии. Очень часто это приводит к выбору моделей, созданных человеком вручную.&lt;br /&gt;
&lt;br /&gt;
====Экспертная оценка====&lt;br /&gt;
&lt;br /&gt;
Экспертная оценка основана на определении различных критериев. По каждому критерию выставляется числовая оценка, после чего считается взвешенная сумма оценок. Основным недостатком данного способа являются огромные затраты времени и усилий на ручную работу, однако данный метод устарел и крайне редко применяется в оценке современных онтологий.&lt;br /&gt;
&lt;br /&gt;
====Оценка, основанная на конкретной задаче====&lt;br /&gt;
&lt;br /&gt;
Данная оценка применяется при построении онтологии для конкретных задач. Результаты, полученные в процессе решения задачи, определяют качество построенной онтологии, независимо от её структуры. Данная оценка позволяет выявить неустойчивые концепты и определить адаптивность конкретной онтологии, анализируя её эффективность в контексте различных задач. &lt;br /&gt;
&lt;br /&gt;
К примеру, создаётся онтология для улучшения поиска документов. В таком случае можно проверить, получило ли приложение более релевантные документы после применения данной онтологии. Для этого можно применить традиционные методы оценки, такие как [[:Оценка_качества_в_задачах_классификации#F.E2.82.81_score|F мера]]. &lt;br /&gt;
&lt;br /&gt;
Однако стоит отметить, что использование оценок, основанных на конкретных задачах, имеет несколько недостатков. К примеру:&lt;br /&gt;
&lt;br /&gt;
* Онтология может являться лишь малой частью приложения, и её эффект на общий результат может быть незначительным.&lt;br /&gt;
* Онтология оценивается путём применения конкретным образом для конкретной задачи, а значит модель достаточно сложно обобщить.&lt;br /&gt;
&lt;br /&gt;
====Оценка с использованием конкретных источников знаний====&lt;br /&gt;
&lt;br /&gt;
Эта оценка использует источники знаний конкретной области, чтобы определить степень покрытия этой области обучаемой онтологией. Главным преимуществом данной оценки является возможность сравнивать одну или несколько целевых онтологий с конкретными данными. Однако возникает проблема нахождения подходящего источника знаний (как и в оценке золотым стандартом).&lt;br /&gt;
&lt;br /&gt;
==Особенности применения онтологии для конкретных задач==&lt;br /&gt;
&lt;br /&gt;
===Cистема автоматической обработки текста===&lt;br /&gt;
&lt;br /&gt;
Лингвистическая онтология является одним из ключевых элементов в системе обработки текста и ее построение необходимо для решения задачи.&lt;br /&gt;
&lt;br /&gt;
Как описано выше — для построения современных онтологий всегда является актуальным извлечение термов и концептов, в данном случае семантически связанных слов из текста на естественном языке. &lt;br /&gt;
Однако общим недостатком таких онтологий является отсутствие специализированных терминов, специфичных для данной предметной области. В следствие этого появляется проблема дополнения существующей онтологии, а именно семантической сети узлами и связями из внешних источников. И так как имеется множество публичных ресурсов для дополнения новых узлов и связей, то выделяют следующие задачи:&lt;br /&gt;
&lt;br /&gt;
* Автоматизированный поиск новых узлов, связанных семантическими отношениями.&lt;br /&gt;
* Добавление новых узлов и связей в онтологию при обнаружении сущностей, признаки которых удовлетворяют заданным критериям.&lt;br /&gt;
&lt;br /&gt;
Для решения данных задач существует множество способов анализа текстовой информации для извлечения из нее семантических отношений:&lt;br /&gt;
* Методы извлечения связей, основанные на шаблонах такие как &amp;quot;Top down&amp;quot; и &amp;quot;Bottom up&amp;quot;&amp;lt;ref&amp;gt;[https://www.math.spbu.ru/user/tseytin/butdu.html Bottom-up and Top-down Approaches to Text Analysis]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* Группа методов, основанная на форматировании или на DOM&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Document_Object_Model Wikipedia {{---}} Document Object Model]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* Методы, основанные на машинном обучении. Одним из самых явных примеров реализации является [[:Векторное_представление_слов#word2vec|word2vec]], основанный на нейронных сетях.&lt;br /&gt;
&lt;br /&gt;
Последняя группа методов является наиболее современной и показывает наилучшую точность, но не позволяет достичь приемлимой точности и полноты в общем случае, так как данные методы используются для конкретной предметной области. Таким образом поиск наиболее подходящих признаков для обучения нейронных сетей необходим для применения лингвистической онтологии в данной задаче.&lt;br /&gt;
&lt;br /&gt;
====Обработка текста на русском языке====&lt;br /&gt;
&lt;br /&gt;
Чтобы применить онтологию для автоматической обработки текстов, необходимо понятиям онтологии сопоставить набор языковых выражений (слов и словосочетаний), которыми понятия могут выражаться в тексте. Для русского языка, как и для многих других языков, содержащие многозначные понятия, имеется ряд проблем.&lt;br /&gt;
&lt;br /&gt;
Хоть понятие, лексическое значение относятся к категориям мышления, при этом между ними есть существенные различия. &lt;br /&gt;
Значение включает в себя помимо понятийного содержания (сигнификативно-денотативного&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Сигнификат Wikipedia {{---}} Сигнификат]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Денотат Wikipedia {{---}} Денонат]&amp;lt;/ref&amp;gt; компонента значения), такие компоненты как оценочный, стилистический, сочетаемостный.&lt;br /&gt;
Также значение включает лишь различительные черты объектов, иногда относительно поверхностные, а понятия охватывают их наиболее глубокие существенные свойства.&lt;br /&gt;
Поэтому описать значения многих слов как совокупности общих и одновременно существенных признаков может быть очень трудно.&lt;br /&gt;
В целом, считается, что значение и понятие совпадают лишь в сфере терминологии.&lt;br /&gt;
&lt;br /&gt;
Многие понятия в русском языке сложно представить в виде формальной системы, пригодной для логического вывода, например, описать таксономические связи, по следующим причинам:&lt;br /&gt;
&lt;br /&gt;
* Из-за их нечеткости, расплывчатости.&lt;br /&gt;
&lt;br /&gt;
* Контекстной зависимости, когда реализация некоторых компонентов значения существенно зависит от контекста.&lt;br /&gt;
&lt;br /&gt;
* Существования значительных рядов синонимов, отличающихся оттенками значений, что затрудняет разбиение таких рядов на совокупность взаимосвязанных понятийных единиц. Например, сколько понятий онтологии оптимально (и на основе каких принципов) сопоставить следующему ряду слов со значением ''ОШИБКА'': ''ошибка, погрешность, недосмотр, просмотр, ляп, промах, оплошность, осечка, прокол, упущение, недочет'', а также'' ослышка, описка, опечатка, оговорка''. Таким словам обычно трудно найти точные слова-соответствия в других языках, то есть слова, имеющие такой же оттенок значения и такие же особенности употребления.&lt;br /&gt;
&lt;br /&gt;
Несмотря на описанные проблемы, разработка моделей представления знаний о мире и о языке в рамках онтологий имеет смысл. Так например появился РуТез&amp;lt;ref&amp;gt;[https://www.labinform.ru/pub/ruthes/ О лингвистической онтологии &amp;quot;Тезаурус РуТез&amp;quot;]&amp;lt;/ref&amp;gt; — онтология для автоматической обработки текста на русском языке, которая представила свое решение&amp;lt;ref&amp;gt;[https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.671.6887&amp;amp;rep=rep1&amp;amp;type=pdf RuThes Linguistic Ontology vs. Russian Wordnets]&amp;lt;/ref&amp;gt; для данных проблем.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[:Обработка_естественного_языка|Обработка естественного языка]]&lt;br /&gt;
* [[:Векторное_представление_слов|Векторное представление слов]]&lt;br /&gt;
* [[:Кластеризация|Кластеризация]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Semantic_network Wikipedia {{---}} Semantic network]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Семантическая_сеть Википедия {{---}} Семантическая сеть]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Knowledge_graph Wikipedia {{---}} Knowledge graph]&lt;br /&gt;
*[https://towardsdatascience.com/knowledge-graph-bb78055a7884 Towards Data Science {{---}} Knowledge graph]&lt;br /&gt;
*[https://www.authorea.com/users/6341/articles/107281-what-is-a-knowledge-graph/_show_article Authorea {{---}} What is a Knowledge Graph]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Ontology_(information_science) Wikipedia {{---}} Ontology]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Онтология_(информатика) Википедия {{---}} Онтология]&lt;br /&gt;
* [https://aws.amazon.com/blogs/machine-learning/training-knowledge-graph-embeddings-at-scale-with-the-deep-graph-library Training knowledge graph embeddings at scale with the Deep Graph Library] {{---}} Phi Nguyen, Xiang Song (2020)&lt;br /&gt;
* [https://www.researchgate.net/publication/221345089_A_Three-Way_Model_for_Collective_Learning_on_Multi-Relational_Data A Three-Way Model for Collective Learning on Multi-Relational Data] {{---}} Maximilian Nickel, Volker Tresp, Hans-Peter Kriegel (2011)&lt;br /&gt;
*[https://academic.oup.com/database/article/doi/10.1093/database/bay101/5116160 A survey of ontology learning techniques and applications] {{---}} Muhammad Nabeel Asim, Muhammad Wasim, Muhammad Usman Ghani Khan, Waqar Mahmood, Hafiza Mahnoor Abbasi (2018)&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Обработка естественного языка]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F&amp;diff=80620</id>
		<title>Кластеризация</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F&amp;diff=80620"/>
				<updated>2021-02-08T16:20:06Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Метод K-средних (Алгоритм Ллойда) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:clusters.png|thumb|300px|Пример кластеризации]]&lt;br /&gt;
'''Кластеризация''' (англ. ''cluster analysis'') {{---}} задача группировки множества объектов на подмножества ('''кластеры''') таким образом,&lt;br /&gt;
чтобы объекты из одного кластера были более похожи друг на друга, чем на объекты из других кластеров по какому-либо критерию.&lt;br /&gt;
&lt;br /&gt;
Задача кластеризации относится к классу задач обучения без учителя.&lt;br /&gt;
== Постановка задачи кластеризации ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; {{---}} множество объектов, &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt; {{---}} множество идентификаторов (меток) кластеров.&lt;br /&gt;
На множестве &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; задана функция расстояния между объектами &amp;lt;tex&amp;gt;\rho(x,x')&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Дана конечная обучающая выборка объектов &amp;lt;tex&amp;gt;X^m = \{ x_1, \dots, x_m \} \subset X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Необходимо разбить выборку на подмножества (кластеры), то есть каждому объекту &amp;lt;tex&amp;gt;x_i \in X^m&amp;lt;/tex&amp;gt; сопоставить метку &amp;lt;tex&amp;gt;y_i \in Y&amp;lt;/tex&amp;gt;,&lt;br /&gt;
таким образом чтобы объекты внутри каждого кластера были близки относительно метрики &amp;lt;tex&amp;gt;\rho&amp;lt;/tex&amp;gt;, а объекты из разных кластеров значительно различались.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Алгоритм кластеризации''' — функция &amp;lt;tex&amp;gt;a\colon X\to Y&amp;lt;/tex&amp;gt;, которая любому объекту &amp;lt;tex&amp;gt;x\in X&amp;lt;/tex&amp;gt; ставит в соответствие идентификатор кластера &amp;lt;tex&amp;gt;y\in Y&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Множество &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt; в некоторых случаях известно заранее, однако чаще ставится задача&lt;br /&gt;
определить оптимальное число кластеров, с точки зрения того или иного ''критерия качества'' кластеризации.&lt;br /&gt;
&lt;br /&gt;
Кластеризация (обучение без учителя) отличается от классификации (обучения с учителем) тем,&lt;br /&gt;
что метки объектов из обучающей выборки &amp;lt;tex&amp;gt;y_i&amp;lt;/tex&amp;gt; изначально не заданы, и даже может быть неизвестно само множество &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение задачи кластеризации объективно неоднозначно по ряду причин:&lt;br /&gt;
* Не существует однозначного критерия качества кластеризации. Известен ряд алгоритмов, осуществляющих разумную кластеризацию &amp;quot;по построению&amp;quot;, однако все они могут давать разные результаты. Следовательно, для определения качества кластеризации и оценки выделенных кластеров необходим эксперт предметной области;&lt;br /&gt;
* Число кластеров, как правило, заранее не известно и выбирается по субъективным критериям. Даже если алгоритм не требует изначального знания о числе классов, конкретные реализации зачастую требуют указать этот параметр&amp;lt;ref&amp;gt;[https://scikit-learn.org/stable/modules/clustering.html scikit-learn {{---}} Clustering]&amp;lt;/ref&amp;gt;;&lt;br /&gt;
* Результат кластеризации существенно зависит от метрики. Однако существует ряд рекомендаций по выбору метрик для определенных классов задач.&amp;lt;ref&amp;gt;Cornwell, B. (2015). Linkage Criteria for Agglomerative Hierarchical Clustering. Social Sequence Analysis, 270–274&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Число кластеров фактически является гиперпараметром для алгоритмов кластеризации. Подробнее про другие гиперпараметры и их настройку можно прочитать в статье&amp;lt;ref&amp;gt;Shalamov Viacheslav, Valeria Efimova, Sergey Muravyov, and Andrey Filchenkov. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Теорема невозможности Клейнберга ==&lt;br /&gt;
Для формализации алгоритмов кластеризации была использована аксиоматическая теория. Клейнберг постулировал три простых свойства в качестве аксиом кластеризации и доказал теорему, связывающую эти свойства.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Алгоритм кластеризации &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; является '''масштабно инвариантным''' (англ. ''scale-invariant''), если для любой функции расстояния &amp;lt;tex&amp;gt;\rho&amp;lt;/tex&amp;gt; и любой константы &amp;lt;tex&amp;gt;\alpha &amp;gt; 0&amp;lt;/tex&amp;gt; результаты кластеризации с использованием расстояний &amp;lt;tex&amp;gt;\rho&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha\cdot\rho&amp;lt;/tex&amp;gt; совпадают.&lt;br /&gt;
}} &lt;br /&gt;
Первая аксиома интуитивно понятна. Она требует, чтобы функция кластеризации не зависела от системы счисления функции расстояния и была нечувствительна к линейному растяжению и сжатию метрического пространства обучающей выборки.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Полнота''' (англ. ''Richness''). Множество результатов кластеризации алгоритма &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; в зависимости от изменения функции расстояния &amp;lt;tex&amp;gt;\rho&amp;lt;/tex&amp;gt; должно совпадать со множеством всех возможных разбиений множества объектов &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}} &lt;br /&gt;
Вторая аксиома утверждает, что алгоритм кластеризации должен уметь кластеризовать обучающую выборку на любое фиксированное разбиение для какой-то функции расстояния &amp;lt;tex&amp;gt;\rho&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Функция расстояния &amp;lt;tex&amp;gt;{\rho}'&amp;lt;/tex&amp;gt; является '''допустимым преобразованием''' функции расстояния &amp;lt;tex&amp;gt;\rho&amp;lt;/tex&amp;gt;, если&lt;br /&gt;
#&amp;lt;tex&amp;gt;{\rho}'(x_i, x_j) \leqslant \rho(x_i, x_j)&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x_j&amp;lt;/tex&amp;gt; лежат в одном кластере;&lt;br /&gt;
#&amp;lt;tex&amp;gt;{\rho}'(x_i, x_j) \geqslant \rho(x_i, x_j)&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x_j&amp;lt;/tex&amp;gt; лежат в разных кластерах.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Алгоритм кластеризации является '''согласованным''' (англ. ''consistent''), если результат кластеризации не изменяется после допустимого преобразования функции расстояния.&lt;br /&gt;
}} &lt;br /&gt;
Третья аксиома требует сохранения кластеров при уменьшении внутрикластерного расстояния и увеличении межкластерного расстояния.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:center; font-weight:bold;&amp;quot; colspan=3|Примеры преобразований с сохранением кластеров&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding:5px;&amp;quot; |[[Файл:cluster_0.png|300px]]&lt;br /&gt;
| style=&amp;quot;padding:5px;&amp;quot; |[[Файл:clusters_scale_inv.png|300px]]&lt;br /&gt;
| style=&amp;quot;padding:5px;&amp;quot; |[[Файл:cluster_consist.png|300px]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;width:305px;&amp;quot; | Исходное расположение объектов и их кластеризация&lt;br /&gt;
| style=&amp;quot;text-align:center;width:305px;&amp;quot; | Пример масштабной инвариантности. Уменьшен масштаб по оси ординат в два раза.&lt;br /&gt;
| style=&amp;quot;text-align:center;width:305px;&amp;quot; | Пример допустимого преобразования. Каждый объект в два раза приближен к центроиду своего класса. Внутриклассовое расстояние уменьшилось, межклассовое увеличилось.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Исходя из этих аксиом Клейнберг сформулировал и доказал теорему:&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Клейнберга&lt;br /&gt;
|about=о невозможности&lt;br /&gt;
|statement=Для множества объектов, состоящего из двух и более элементов, не существует алгоритма кластеризации, который был бы одновременно масштабно-инвариантным, согласованным и полным.&lt;br /&gt;
}}&lt;br /&gt;
Несмотря на эту теорему Клейнберг показал&amp;lt;ref&amp;gt;[https://www.cs.cornell.edu/home/kleinber/nips15.pdf Kleinberg J. An Impossibility Theorem for Clustering]&amp;lt;/ref&amp;gt;, &lt;br /&gt;
что иерархическая кластеризация по методу одиночной связи с различными критериями останова удовлетворяет любым двум из трех аксиом.&lt;br /&gt;
&lt;br /&gt;
== Типология задач кластеризации ==&lt;br /&gt;
=== Типы входных данных ===&lt;br /&gt;
* Признаковое описание объектов. Каждый объект описывается набором своих характеристик, называемых признаками (англ. ''features''). Признаки могут быть как числовыми, так и категориальными;&lt;br /&gt;
* Матрица расстояний между объектами. Каждый объект описывается расстоянием до всех объектов из обучающей выборки.&lt;br /&gt;
&lt;br /&gt;
Вычисление матрицы расстояний по признаковому описанию объектов может быть выполнено бесконечным числом способов в &lt;br /&gt;
зависимости от определения метрики между объектами. Выбор метрики зависит от обучающей выборки и поставленной задачи.&lt;br /&gt;
&lt;br /&gt;
=== Цели кластеризации ===&lt;br /&gt;
* Классификация объектов. Попытка понять зависимости между объектами путем выявления их кластерной структуры. Разбиение выборки на группы схожих объектов упрощает дальнейшую обработку данных и принятие решений, позволяет применить к каждому кластеру свой метод анализа (стратегия «разделяй и властвуй»). В данном случае стремятся уменьшить число кластеров для выявления наиболее общих закономерностей;&lt;br /&gt;
* Сжатие данных. Можно сократить размер исходной выборки, взяв один или несколько наиболее типичных представителей каждого кластера. Здесь важно наиболее точно очертить границы каждого кластера, их количество не является важным критерием;&lt;br /&gt;
* Обнаружение новизны (обнаружение шума). Выделение объектов, которые не подходят по критериям ни в один кластер. Обнаруженные объекты в дальнейшем обрабатывают отдельно.&lt;br /&gt;
&lt;br /&gt;
=== Методы кластеризации ===&lt;br /&gt;
* Графовые алгоритмы кластеризации. Наиболее примитивный класс алгоритмов. В настоящее время практически не применяется на практике;&lt;br /&gt;
* Вероятностные алгоритмы кластеризации. Каждый объект из обучающей выборки относится к каждому из кластеров с определенной степенью вероятности:&lt;br /&gt;
** [[EM-алгоритм]];&lt;br /&gt;
* [[Иерархическая_кластеризация|Иерархические алгоритмы кластеризации]]. Упорядочивание данных путем создания иерархии вложенных кластеров;&lt;br /&gt;
* [[K-средних|Алгоритм &amp;lt;tex&amp;gt;\mathrm{k}&amp;lt;/tex&amp;gt;-средних]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt; (англ. ''&amp;lt;tex&amp;gt;\mathrm{k}&amp;lt;/tex&amp;gt;-means''). Итеративный алгоритм, основанный на минимизации суммарного квадратичного отклонения точек кластеров от центров этих кластеров;&lt;br /&gt;
* Распространение похожести (англ. ''affinity propagation''). Распространяет сообщения о похожести между парами объектов для выбора типичных представителей каждого кластера;&lt;br /&gt;
* Сдвиг среднего значения (англ. ''mean shift''). Выбирает центроиды кластеров в областях с наибольшей плотностью;&lt;br /&gt;
* Спектральная кластеризация (англ. ''spectral clustering''). Использует собственные значения матрицы расстояний для понижения размерности перед использованием других методов кластеризации;&lt;br /&gt;
* Основанная на плотности пространственная кластеризация для приложений с шумами (англ. ''Density-based spatial clustering of applications with noise'', ''DBSCAN''). Алгоритм группирует в один кластер точки в области с высокой плотностью. Одиноко расположенные точки помечает как шум.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:cluster_comparison.png|thumb|800px|center|&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;Сравнение алгоритмов кластеризации из пакета scikit-learn&amp;lt;ref&amp;gt;[https://scikit-learn.org/stable/auto_examples/cluster/plot_cluster_comparison.html scikit-learn {{---}} Comparing different clustering algorithms on toy datasets]&amp;lt;/ref&amp;gt;&amp;lt;/div&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Меры качества кластеризации ==&lt;br /&gt;
Для оценки качества кластеризации задачу можно переформулировать в терминах задачи дискретной оптимизации. &lt;br /&gt;
Необходима так сопоставить объектам из множества &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; метки кластеров, чтобы значение выбранного функционала качества приняло наилучшее значение. &lt;br /&gt;
В качестве примера, стремятся достичь минимума среднего внутрикластерного расстояния &amp;lt;tex&amp;gt;F_0 = \dfrac{\sum_{i&amp;lt;j}{[y_i=y_j]\cdot\rho(x_i, x_j)}}{\sum_{i&amp;lt;j}[y_i=y_j]}&amp;lt;/tex&amp;gt; или максимума среднего межкластерного расстояния &amp;lt;tex&amp;gt;F_1 = \dfrac{\sum_{i&amp;lt;j}{[y_i\neq y_j]\cdot\rho(x_i, x_j)}}{\sum_{i&amp;lt;j}[y_i\neq y_j]}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Подробнее про меры качества можно прочитать в статье [[Оценка_качества_в_задаче_кластеризации|оценка качества в задаче кластеризации]].&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
=== Биология и биоинформатика ===&lt;br /&gt;
* В области экологии кластеризация используется для выделения пространственных и временных сообществ организмов в однородных условиях;&lt;br /&gt;
* Кластерный анализ используется для группировки схожих геномных последовательностей в семейство генов, которые являются консервативными структурами для многих организмов и могут выполнять схожие функции;&lt;br /&gt;
* Кластеризация помогает автоматически определять генотипы по различным частям хромосом;&lt;br /&gt;
* Алгоритмы применяются для выделения небольшого числа групп генетических вариации человеческого генома.&lt;br /&gt;
=== Медицина ===&lt;br /&gt;
* Используется в позитронно-эмиссионной томографии для автоматического выделения различных типов тканей на трехмерном изображении;&lt;br /&gt;
* Применяется для выявления шаблонов устойчивости к антибиотикам; для классификации антибиотиков по типу антибактериальной активности.&lt;br /&gt;
=== Маркетинг ===&lt;br /&gt;
Кластеризация широко используется при изучении рынка для обработки данных, полученных из различных опросов.&lt;br /&gt;
Может применяться для выделения типичных групп покупателей, разделения рынка для создания персонализированных предложений, разработки новых линий продукции.&lt;br /&gt;
=== Интернет ===&lt;br /&gt;
* Выделение групп людей на основе графа связей в социальных сетях;&lt;br /&gt;
* Повышение релевантности ответов на поисковые запросы путем группировки веб-сайтов по смысловым значениям поискового запроса.&lt;br /&gt;
=== Компьютерные науки ===&lt;br /&gt;
* Кластеризация используется в сегментации изображений для определения границ и распознавания объектов;&lt;br /&gt;
* Кластерный анализ применяется для определения образовавшихся популяционных ниш в ходе работы эволюционных алгоритмов для улучшения параметров эволюции;&lt;br /&gt;
* Подбор рекомендаций для пользователя на основе предпочтений других пользователей в данном кластере;&lt;br /&gt;
* Определение аномалий путем построения кластеров и выявления неклассифицированных объектов.&lt;br /&gt;
&lt;br /&gt;
== Псевдокод некоторых алгоритмов кластеризации ==&lt;br /&gt;
=== Метод K-средних (Алгоритм Ллойда) ===&lt;br /&gt;
Основная идея заключается в том, что на каждой итерации перевычисляется центр масс для каждого кластера, полученного на предыдущем шаге, затем объекты снова разбиваются на кластеры в соответствии с тем, какой из новых центров оказался ближе по выбранной метрике. Алгоритм завершается, когда на какой-то итерации не происходит изменения внутрикластерного расстояния.&lt;br /&gt;
&lt;br /&gt;
Алгоритм минимизирует сумму квадратов внутрикластерных расстояний:&lt;br /&gt;
&amp;lt;tex&amp;gt; \sum_{i = 1}^{m} ||x_i - \mu_{a_i}||^2 \: \to \: \min_{ \{a_i\}, \{\mu_a\}}, \: \: ||x_i - \mu_a||^2 = \sum_{j = 1}^{n} (f_j(x_i) - \mu_{a_j})^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подаётся выборка &amp;lt;tex&amp;gt;X^m = \{ x_1, \dots, x_m \}&amp;lt;/tex&amp;gt; и количество кластеров &amp;lt;tex&amp;gt;K = |Y|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На выходе получаем центры кластеров &amp;lt;tex&amp;gt;\mu_a&amp;lt;/tex&amp;gt; для кластеров &amp;lt;tex&amp;gt;a \in Y&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tex&amp;gt;\mu_a := init(X^m)&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Инициализируем произвольно начальное приближение для центров кластеров &amp;lt;tex&amp;gt;a \in Y&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;. (Можно наиболее удалённые друг от друга объекты выборки)&lt;br /&gt;
  &amp;lt;tex&amp;gt;A := [ -1 \: | \: for \: x_i \in X^m ]&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Инициализируем массив отображений из объектов выборки в их кластеры&amp;lt;/font&amp;gt;&lt;br /&gt;
  &amp;lt;tex&amp;gt;changed := True&amp;lt;/tex&amp;gt;&lt;br /&gt;
  &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;tex&amp;gt;while&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt; &amp;lt;tex&amp;gt;changed&amp;lt;/tex&amp;gt;:  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Повторяем пока &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt; изменяются&amp;lt;/font&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt;changed := False&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;tex&amp;gt;for&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt; &amp;lt;tex&amp;gt;x_i \in X^m&amp;lt;/tex&amp;gt;:  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Относим каждый &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; к ближайшему центру&amp;lt;/font&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;A_{i, old} := A_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;A_i := arg \min_{a \in Y} ||x_i - \mu_a||&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;tex&amp;gt;if&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt; &amp;lt;tex&amp;gt;A_i \neq A_{i, old}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
              &amp;lt;tex&amp;gt;changed := True&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;tex&amp;gt;for&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt; &amp;lt;tex&amp;gt;a \in Y&amp;lt;/tex&amp;gt;:  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Вычисляем новые положения центров&amp;lt;/font&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;\mu_a := \frac{\sum_{i = 1}^{m}[A_i = a] x_i}{\sum_{i = 1}^{m}[A_i = a]}&amp;lt;/tex&amp;gt;&lt;br /&gt;
  &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;tex&amp;gt;return&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt; &amp;lt;tex&amp;gt;\mu_a, \: A&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Возвращаем центры кластеров и распределение по ним объектов выборки&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DBSCAN ===&lt;br /&gt;
Основная идея метода заключается в том, что алгоритм разделит заданный набор точек в некотором пространстве на группы точек, которые лежат друг от друга на большом расстоянии. Объекты, которые лежат отдельно от скоплений с большой плотностью, будут помечены как шумовые.&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подаётся набор точек, параметры &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; (радиус окружности) и &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; (минимальное число точек в окрестности). Для выполнения кластеризации потребуется поделить точки на четыре вида: основные точки, прямо достижимые, достижимые и шумовые. &lt;br /&gt;
* Точка является ''основной'', если в окружности с центром в этой точке и радиусом &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; находится как минимум &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; точек. &lt;br /&gt;
* Точка &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; является ''прямо достижимой'' из основной точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; находится на расстоянии, не большем &amp;lt;tex&amp;gt;{\epsilon}&amp;lt;/tex&amp;gt; от точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Точка &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; является ''достижимой'' из &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, если существует путь &amp;lt;tex&amp;gt;p_1, \dots, p_n&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;p_1 = a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_n = b&amp;lt;/tex&amp;gt;, где каждая точка &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; прямо достижима из точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; .&lt;br /&gt;
* Все остальные точки, которые не достижимы из основных точек, считаются ''шумовыми''.&lt;br /&gt;
&lt;br /&gt;
Основная точка вместе со всеми достижимыми из нее точками формирует ''кластер''. В кластер будут входить как основные, так и неосновные точки. Таким образом, каждый кластер содержит по меньшей мере одну основную точку.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с произвольной точки из набора, которая еще не просматривалась. Для точки ищется &amp;lt;tex&amp;gt;{\epsilon}&amp;lt;/tex&amp;gt;-окрестность. Если она не содержит как минимум &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; точек, то помечается как шумовая, иначе образуется кластер &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;, который включает все точки из окрестности. Если точка из окрестности уже является частью другого кластера &amp;lt;tex&amp;gt;C_j&amp;lt;/tex&amp;gt;, то все точки данного кластера добавляются в кластер &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;. Затем выбирается и обрабатывается новая, не посещённая ранее точка, что ведёт к обнаружению следующего кластера или шума.&lt;br /&gt;
&lt;br /&gt;
На выходе получаем разбиение на кластеры и шумовые объекты. Каждый из полученных кластеров &amp;lt;tex&amp;gt;C_j&amp;lt;/tex&amp;gt; является непустым множеством точек и удовлетворяет двум условиям:&lt;br /&gt;
* Любые две точки в кластере попарно связаны (то есть найдется такая точка в кластере, из которой достижимы обе этих точки).&lt;br /&gt;
* Если точка достижима из какой-либо точки кластера, то она принадлежит кластеру.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим код:&lt;br /&gt;
&lt;br /&gt;
Пусть для каждого &amp;lt;tex&amp;gt;x \in X^m&amp;lt;/tex&amp;gt; имеем посчитанной его &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt;-окрестность &amp;lt;tex&amp;gt;U_{\epsilon}(x) = \{x' \in X^m \: | \: \rho(x, x') \lt \epsilon\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tex&amp;gt;U := X^m&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Непомеченные объекты&amp;lt;/font&amp;gt;&lt;br /&gt;
  &amp;lt;tex&amp;gt;A := [ -1 \: | \: for \: x_i \in X^m ]&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Инициализируем массив отображений из объектов выборки в их кластеры&amp;lt;/font&amp;gt;&lt;br /&gt;
  &amp;lt;tex&amp;gt;a := 0&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Количество кластеров&amp;lt;/font&amp;gt;&lt;br /&gt;
  &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;tex&amp;gt;while&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt; &amp;lt;tex&amp;gt;U \neq \varnothing&amp;lt;/tex&amp;gt;:  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Пока в выборке есть непомеченные объекты&amp;lt;/font&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt;x := rand(U)&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Берём случайную непомеченную точку&amp;lt;/font&amp;gt;&lt;br /&gt;
      &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;tex&amp;gt;if&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt; &amp;lt;tex&amp;gt;|U_{\epsilon}(x) &amp;lt; m|&amp;lt;/tex&amp;gt;:&lt;br /&gt;
          &amp;lt;tex&amp;gt;mark[x]&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;:=&amp;lt;/tex&amp;gt; &amp;quot;&amp;lt;tex&amp;gt;noise&amp;lt;/tex&amp;gt;&amp;quot;  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Пометим &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; как, возможно, шумовой&amp;lt;/font&amp;gt;&lt;br /&gt;
      &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;tex&amp;gt;else&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;:&lt;br /&gt;
          &amp;lt;tex&amp;gt;K := U_{\epsilon}(x)&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;a := a + 1&amp;lt;/tex&amp;gt; &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Создадим новый кластер K&amp;lt;/font&amp;gt;&lt;br /&gt;
          &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;tex&amp;gt;for&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt; &amp;lt;tex&amp;gt;x' \in K&amp;lt;/tex&amp;gt;:&lt;br /&gt;
              &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;tex&amp;gt;if&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt; &amp;lt;tex&amp;gt;x' \in U&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;mark[x']&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;==&amp;lt;/tex&amp;gt; &amp;quot;&amp;lt;tex&amp;gt;noise&amp;lt;/tex&amp;gt;&amp;quot;:  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Если &amp;lt;tex&amp;gt;x'&amp;lt;/tex&amp;gt; не помечен или помечен как шумовой&amp;lt;/font&amp;gt;&lt;br /&gt;
                  &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;tex&amp;gt;if&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt; &amp;lt;tex&amp;gt;|U_{\epsilon}(x')| \geq m&amp;lt;/tex&amp;gt;:&lt;br /&gt;
                      &amp;lt;tex&amp;gt;mark[x'] :=&amp;lt;/tex&amp;gt; &amp;quot;&amp;lt;tex&amp;gt;interior&amp;lt;/tex&amp;gt;&amp;quot;  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Пометим &amp;lt;tex&amp;gt;x'&amp;lt;/tex&amp;gt; как внутренний кластера &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
                      &amp;lt;tex&amp;gt;K := K \cup U_{\epsilon}(x')&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Добавим вместе с &amp;lt;tex&amp;gt;x'&amp;lt;/tex&amp;gt; всю его окрестность&amp;lt;/font&amp;gt;&lt;br /&gt;
                  &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;tex&amp;gt;else&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;:&lt;br /&gt;
                      &amp;lt;tex&amp;gt;mark[x'] :=&amp;lt;/tex&amp;gt; &amp;quot;&amp;lt;tex&amp;gt;frontier&amp;lt;/tex&amp;gt;&amp;quot;  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Пометим &amp;lt;tex&amp;gt;x'&amp;lt;/tex&amp;gt; как граничный кластера &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
          &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;tex&amp;gt;for&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt; &amp;lt;tex&amp;gt;x_i \in K&amp;lt;/tex&amp;gt;:&lt;br /&gt;
              &amp;lt;tex&amp;gt;A_i := a&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;U := U \setminus K&amp;lt;/tex&amp;gt; &lt;br /&gt;
  &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;tex&amp;gt;return&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt; &amp;lt;tex&amp;gt;a, \: A, \: mark&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# Возвращаем количество кластеров, распределение по кластерам и метки объектов (внутренние, граничные или шумовые)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DBSCAN находит практическое применение во многих реальных задачах, например, в маркетинге: необходимо предложить покупателю релевантный товар, который подойдет под его заказ. Выбрать такой товар можно, если посмотреть на похожие заказы других покупателей {{---}} в таком случае похожие заказы образуют кластер вещей, которые часто берут вместе. Похожим образом с помощью DBSCAN можно исследовать и находить общие интересы людей, делить их на социальные группы, моделировать поведение посетителей сайта. Алгоритм также может использоваться для [[Сегментация изображений|сегментации изображений]].&lt;br /&gt;
&lt;br /&gt;
== Пример кода ==&lt;br /&gt;
=== Пример на языке R ===&lt;br /&gt;
{{Main|Примеры кода на R}}&lt;br /&gt;
Для реализации алгоритма ''k-средних'' используется пакет &amp;lt;code&amp;gt;ClusterR&amp;lt;/code&amp;gt;. В нем реализовано 2 функции:  &amp;lt;code&amp;gt;KMeans_arma()&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;KMeans_rcpp()&amp;lt;/code&amp;gt;. В примере далее рассмотрена реализация с использованием функции &amp;lt;code&amp;gt;KMeans_arma()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# importing package and its' dependencies&amp;lt;/font&amp;gt;&lt;br /&gt;
 library(ClusterR)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# reading data&amp;lt;/font&amp;gt;&lt;br /&gt;
 data &amp;lt;- read.csv(&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&amp;quot;data.csv&amp;quot;&amp;lt;/font&amp;gt;)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# evaluating model&amp;lt;/font&amp;gt;&lt;br /&gt;
 model &amp;lt;- KMeans_arma(data, &amp;lt;font color=&amp;quot;#660099&amp;quot;&amp;gt;clusters&amp;lt;/font&amp;gt; = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;2&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#660099&amp;quot;&amp;gt;n_iter&amp;lt;/font&amp;gt; = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;10&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#660099&amp;quot;&amp;gt;seed_mode&amp;lt;/font&amp;gt; = &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&amp;quot;random_subset&amp;quot;&amp;lt;/font&amp;gt;, &lt;br /&gt;
                      &amp;lt;font color=&amp;quot;#660099&amp;quot;&amp;gt;verbose&amp;lt;/font&amp;gt; = T, &amp;lt;font color=&amp;quot;#660099&amp;quot;&amp;gt;CENTROIDS&amp;lt;/font&amp;gt; = NULL)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;# predicting results&amp;lt;/font&amp;gt;&lt;br /&gt;
 predictions &amp;lt;- predict_KMeans(test_data, model)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Оценка_качества_в_задаче_кластеризации|Оценка качества в задаче кластеризации]]&lt;br /&gt;
* [[EM-алгоритм|EM-алгоритм]]&lt;br /&gt;
* [[Иерархическая_кластеризация|Иерархическая кластеризация]]&lt;br /&gt;
* [[k-средних|&amp;lt;tex&amp;gt;\mathrm{k}&amp;lt;/tex&amp;gt;-средних]]&amp;lt;sup&amp;gt;[на 28.01.18 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/%D0%9A%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7 Википедия {{---}} Кластерный анализ]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Cluster_analysis Wikipedia {{---}} Cluster analysis]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F MachineLearning {{---}} Кластеризация] &lt;br /&gt;
* [http://www.machinelearning.ru/wiki/images/c/ca/Voron-ML-Clustering.pdf К.В.Воронцов Лекции по алгоритмам кластеризации и многомерного шкалирования]&lt;br /&gt;
* [https://www.cs.cornell.edu/home/kleinber/nips15.pdf Kleinberg J. An Impossibility Theorem for Clustering]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Кластеризация]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%B5%D1%81%D1%82%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0&amp;diff=80619</id>
		<title>Обработка естественного языка</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%B5%D1%81%D1%82%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0&amp;diff=80619"/>
				<updated>2021-02-07T17:41:34Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Векторизация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Обработка естественного языка''' (''Natural Language Processing, NLP'') {{---}} пересечение [[Машинное обучение | машинного обучения]] и математической лингвистики&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B3%D0%B2%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0 Математическая лингвистика]&amp;lt;/ref&amp;gt;, направленное на изучение методов анализа и синтеза естественного языка. Сегодня NLP применяется во многих сферах, в том числе в голосовых помощниках, автоматических переводах текста и фильтрации текста. Основными тремя направлениями являются: [[Распознавание речи | распознавание речи]]  (Speech Recognition), понимание естественного языка (Natural Language Understanding&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Natural-language_understanding  Natural Language Understanding]&amp;lt;/ref&amp;gt; ) и генерация естественного языка (Natural Language Generation&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Natural-language_generation Natural Language Generation]&amp;lt;/ref&amp;gt;).&lt;br /&gt;
== Задачи ==&lt;br /&gt;
{{Определение &lt;br /&gt;
|definition=&lt;br /&gt;
'''Корпус''' {{---}} подобранная и обработанная по определённым правилам совокупность текстов, используемых в качестве базы для исследования языка.&lt;br /&gt;
}}&lt;br /&gt;
NLP решает большой набор задач, который можно разбить по уровням (в скобках). Среди этих задач, можно выделить следующие:&lt;br /&gt;
* Распознавание текста, речи, синтез речи (сигнал);&lt;br /&gt;
* Морфологический анализ, канонизация (слово);&lt;br /&gt;
* POS-тэгирование, распознавание именованных сущностей, выделение слов (словосочетание);&lt;br /&gt;
* Синтаксический разбор, токенизация предложений (предложение);&lt;br /&gt;
* Извлечение отношений, определение языка, анализ эмоциональной окраски (абзац);&lt;br /&gt;
* Аннотация документа, перевод, анализ тематики (документ);&lt;br /&gt;
* Дедубликация, информационный поиск (корпус).&lt;br /&gt;
&lt;br /&gt;
== Основные подходы ==&lt;br /&gt;
=== Предобработка текста ===&lt;br /&gt;
Предобработка текста переводит текст на естественном языке в формат удобный для дальнейшей работы. Предобработка состоит из различных этапов, которые могут отличаться в зависимости от задачи и реализации. Далее приведен один из возможных набор этапов:&lt;br /&gt;
* Перевод всех букв в тексте в нижний или верхний регистры;&lt;br /&gt;
* Удаление цифр (чисел) или замена на текстовый эквивалент (обычно используются регулярные выражения);&lt;br /&gt;
* Удаление пунктуации. Обычно реализуется как удаление из текста символов из заранее заданного набора;&lt;br /&gt;
* Удаление пробельных символов (whitespaces);&lt;br /&gt;
* Токенизация (обычно реализуется на основе регулярных выражений);&lt;br /&gt;
* Удаление стоп слов;&lt;br /&gt;
* Стемминг;&lt;br /&gt;
* Лемматизация;&lt;br /&gt;
* Векторизация.&lt;br /&gt;
&lt;br /&gt;
=== Стемминг ===&lt;br /&gt;
Количество корректных словоформ, значения которых схожи, но написания отличаются суффиксами, приставками, окончаниями и прочим, очень велико, что усложняет создание словарей и дальнейшую обработку. Стемминг позволяет привести слово к его основной форме. Суть подхода в нахождении основы слова, для этого с конца и начала слова последовательно отрезаются его части. Правила отсекания для стеммера создаются заранее, и чаще всего представляют из себя регулярные выражения, что делает данный подход трудоемким, так как при подключении очередного языка нужны новые лингвистические исследования. Вторым недостатком подхода является возможная потеря информации при отрезании частей, например, мы можем потерять информацию о части речи. &lt;br /&gt;
&lt;br /&gt;
=== Лемматизация ===&lt;br /&gt;
Данный подход является альтернативой стемминга. Основная идея в приведении слова к словарной форме {{---}} лемме. Например для русского языка:&lt;br /&gt;
* для существительных — именительный падеж, единственное число;&lt;br /&gt;
* для прилагательных — именительный падеж, единственное число, мужской род;&lt;br /&gt;
* для глаголов, причастий, деепричастий {{---}} глагол в инфинитиве несовершенного вида.&lt;br /&gt;
&lt;br /&gt;
=== Векторизация ===&lt;br /&gt;
{{main|Векторное представление слов}}&lt;br /&gt;
Большинство математических моделей работают в векторных пространствах больших размерностей, поэтому необходимо отобразить текст в векторном пространстве. Основным походом является мешок слов (bag-of-words): для документа формируется вектор размерности словаря, для каждого слова выделяется своя размерность, для документа записывается признак насколько часто слово встречается в нем, получаем вектор. Наиболее распространенным методом для вычисления признака является TF-IDF&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/TF-IDF TF-IDF]&amp;lt;/ref&amp;gt; (TF {{---}} частота слова, term frequency, IDF {{---}} обратная частота документа, inverse document frequency). TF вычисляется, например, счетчиком вхождения слова. IDF обычно вычисляют как логарифм от числа документов в корпусе, разделённый на количество документов, где это слово представлено. Таким образом, если какое-то слово встретилось во всех документах корпуса, то такое слово не будет никуда добавлено. Плюсами мешка слов является простая реализация, однако данный метод теряет часть информации, например, порядок слов. &lt;br /&gt;
Для уменьшения потери информации можно использовать мешок N-грамм (добавлять не только слова, но и словосочетания), или использовать методы векторных представлений слов это, например, позволяет снизить ошибку на словах с одинаковыми написаниями, но разными значениями.&lt;br /&gt;
&lt;br /&gt;
=== Дедубликация ===&lt;br /&gt;
Так как количество схожих документов в большом корпусе может быть велико, необходимо избавляться от дубликатов. Так как каждый документ может быть представлен как вектор, то мы можем определить их близость, взяв косинус или другую метрику. Минусом является то, что для больших корпусов полный перебор по всем документам будет невозможен. Для оптимизации можно использовать локально-чувствительный хеш, который поместит близко похожие объекты.&lt;br /&gt;
&lt;br /&gt;
=== Семантический анализ ===&lt;br /&gt;
Семантический (смысловой) анализ текста {{---}} выделение семантических отношений, формировании семантического представления. В общем случае семантическое представление является графом, семантической сетью, отражающим бинарные отношения между двумя узлами — смысловыми единицами текста. Глубина семантического анализа может быть разной, а в реальных системах чаще всего строится только лишь синтаксико-семантическое представление текста или отдельных предложений.&lt;br /&gt;
Семантический анализ применяется в задачах анализа тональности текста&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Sentiment_analysis Анализ тональности текста]&amp;lt;/ref&amp;gt;(Sentiment analysis), например, для автоматизированного определения положительности отзывов.&lt;br /&gt;
&lt;br /&gt;
=== Распознавание именованных сущностей и извлечение отношений ===&lt;br /&gt;
Именованные сущности {{---}} объекты из текста, которые могут быть отнесены к одной из заранее заявленных категорий (например, организации, личности, адреса). Идентификация ссылок на подобные сущности в тексте является задачей распознавания именованных сущностей.&lt;br /&gt;
 Станкевич Андрей Сергеевич {{---}} лауреат специальной премии корпорации IBM.&lt;br /&gt;
 '''Станкевич Андрей Сергеевич'''[личность] {{---}} лауреат специальной премии корпорации '''IBM'''[компания].&lt;br /&gt;
Определение семантических отношений между именованными сущностями или другими объектами текста, является задачей извлечения отношений. Примеры отношений: (автор,книга), (организация,главный_офис).&lt;br /&gt;
&lt;br /&gt;
Эти два подхода применяются во многих задачах, например, извлечение синонимов из текста, автоматическом построении онтологий и реализованы во многих работающих системах, например, NELL&amp;lt;ref&amp;gt;[http://rtw.ml.cmu.edu/rtw/ NELL]&amp;lt;/ref&amp;gt; и Snowball&amp;lt;ref&amp;gt;[http://www.mathcs.emory.edu/~eugene/papers/dl00.pdf Snowball]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Использование N-грамм ===&lt;br /&gt;
{{Определение &lt;br /&gt;
|definition=&lt;br /&gt;
'''N-грамма''' {{---}} последовательность из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов.&lt;br /&gt;
}}&lt;br /&gt;
В NLP N-граммы используются для построения вероятностных моделей, задач схожести текстов, категоризации текста и языка. &lt;br /&gt;
&lt;br /&gt;
Построив N-граммную модель можно определить вероятность употребления заданной фразы в тексте. N-граммная модель рассчитывает вероятность последнего слова N-граммы, если известны все предыдущие, при этом полагается, что вероятность появления каждого слова зависит только от предыдущих слов.&lt;br /&gt;
&lt;br /&gt;
Использование N-грамм применяется в задаче выявления плагиата. Текст разбивается на несколько фрагментов, представленных N-граммами. Сравнение N-грамм друг с другом позволяет определить степень сходства документов. Аналогичным способом можно решать задачу исправления орфографических ошибок, подбирая слова кандидаты для замены.&lt;br /&gt;
&lt;br /&gt;
=== Частеречная разметка ===&lt;br /&gt;
Частеречная разметка (POS-тэгирование, англ. part-of-speech tagging) используется в NLP для определения части речи и грамматических характеристик слов в тексте с приписыванием им соответствующих тегов. Модель необходима, когда значение слова зависит от контекста. Например, в предложениях &amp;quot;Столовая ложка&amp;quot; и &amp;quot;Школьная столовая&amp;quot; слово &amp;quot;столовая&amp;quot; имеет разные части речи. POS-тэгирование позволяет сопоставить слову в тексте специальный тэг на основе его значения и контекста.&lt;br /&gt;
&lt;br /&gt;
Алгоритмы частеречной разметки делятся на несколько групп:&lt;br /&gt;
* ''Стохастический метод''. Такой метод имеет два похожих друг на друга подхода. Первый подход основывается на частоте встречаемости слова с конкретным тэгом: если определенное слово встречается чаще всего с тэгом &amp;quot;существительное&amp;quot;, то скорее всего и сейчас оно будет иметь такой тэг. Второй вариант использует n-граммы {{---}} анализируя входную последовательность, алгоритм высчитывает вероятность, что в данном контексте будет определенный тэг. В конце просчета вероятностей выбирается тэг, который имеет наибольшую вероятность. Библиотека TextBlob&amp;lt;ref&amp;gt;[https://textblob.readthedocs.io/en/dev/ TextBlob]&amp;lt;/ref&amp;gt; в своей основе использует стохастический метод.&lt;br /&gt;
* ''Основанные на правилах''. Метод основан на заранее известных правилах. Алгоритм состоит из двух стадий. Сначала расставляются потенциальные тэги всем словам на основе словаря или по какому-либо другому принципу. Далее, если у какого-нибудь слова оказалось несколько тэгов, правильный тэг выбирается на основе рукописных правил. Правил должно быть много, чтобы решить все возникшие неопределенности и учесть все случаи. Например, правило: слова длиной меньше трех символов являются частицами, местоимениями или предлогами. Однако такое правило не учитывает некоторые короткие слова из других частей речи. В библиотеке NLTK&amp;lt;ref&amp;gt;[https://www.nltk.org/ NLTK]&amp;lt;/ref&amp;gt; используется данный метод.&lt;br /&gt;
* ''С использованием [[Скрытые Марковские модели|скрытой марковской модели]]''. Пусть в нашей Марковской модели ''тэги'' будут '''скрытыми состояниями''', которые производят '''наблюдаемое событие''' {{---}} ''слова''. С математической точки зрения, мы хотим найти такую ''последовательность тэгов (C)'', которая будет максимизировать условную вероятность &amp;lt;tex&amp;gt;P(C|W)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;C = C_1, C_2, \dots C_T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;W = W_1, W_2, \dots W_T&amp;lt;/tex&amp;gt;. Воспользовавшись формулой Байеса получим, что максимизировать необходимо следующее выражение: &amp;lt;tex&amp;gt;p(C_1, C_2, \dots C_T) \cdot p(W_1, W_2, \dots W_T | C_1, C_2, \dots C_T)&amp;lt;/tex&amp;gt;. Библиотека spaCy&amp;lt;ref&amp;gt;[https://spacy.io/ spaCy]&amp;lt;/ref&amp;gt; основана на скрытой марковской модели.&lt;br /&gt;
&lt;br /&gt;
POS-тэгирование является неотъемлемой частью обработки естественного языка. Без частеречной разметки становится невозможным дальнейший анализ текста из-за возникновения неопределенностей в значениях слов. Данный алгоритм используется при решении таких задач как перевод на другой язык, определение смысла текста, проверка на пунктуационные и речевые ошибки. Также можно автоматизировать процесс определения хештегов у постов и статей, выделяя существительные в приведенном тексте.&lt;br /&gt;
&lt;br /&gt;
Благодаря частому использованию POS-тэгирования на практике, существует много встроенных библиотек с готовыми реализациями. Например, NLTK, scikit-learn&amp;lt;ref&amp;gt;[https://scikit-learn.org scikit-learn]&amp;lt;/ref&amp;gt;, spaCy, TextBlob, HunPOS&amp;lt;ref&amp;gt;[https://code.google.com/archive/p/hunpos/ HunPOS]&amp;lt;/ref&amp;gt;, Standford POS Tagger&amp;lt;ref&amp;gt;[https://nlp.stanford.edu/software/tagger.shtml Stanford]&amp;lt;/ref&amp;gt; и другие. Примеры использования некоторых библиотек:&lt;br /&gt;
* TextBlob (''стохастический метод''):&lt;br /&gt;
 from textblob import TextBlob  &lt;br /&gt;
 text = (&amp;quot;The quick brown fox jumps over the lazy dog&amp;quot;)  &lt;br /&gt;
 blob_object = TextBlob(text) &lt;br /&gt;
 print(blob_object.tags) &lt;br /&gt;
 '''output:''' [('The', 'DT'), ('quick', 'JJ'), ('brown', 'JJ'), ('fox', 'NN'), ('jumps', 'VBZ'), ('over', 'IN'), ('the', 'DT'), ('lazy', 'JJ'), ('dog', 'NN')]&lt;br /&gt;
* NLTK (''основанный на правилах''):&lt;br /&gt;
 import nltk&lt;br /&gt;
 from nltk.tokenize import word_tokenize&lt;br /&gt;
 text = word_tokenize(&amp;quot;Hello welcome to the world of to learn Categorizing and POS Tagging with NLTK and Python&amp;quot;)&lt;br /&gt;
 nltk.pos_tag(text)&lt;br /&gt;
 '''output:''' [('Hello', 'NNP'), ('welcome', 'NN'), ('to', 'TO'), ('the', 'DT'), ('world', 'NN'), ('of', 'IN'), ('to', 'TO'), ('learn', 'VB'), ('Categorizing', 'NNP'), ('and', 'CC'), ('POS', 'NNP'), ('Tagging', 'NNP'), ('with', 'IN'), ('NLTK', 'NNP'), ('and', 'CC'), ('Python', 'NNP')]&lt;br /&gt;
* spaCy (''с использованием скрытой марковской модели''):&lt;br /&gt;
 import spacy&lt;br /&gt;
 nlp = spacy.load(&amp;quot;en_core_web_sm&amp;quot;)&lt;br /&gt;
 doc = nlp(&amp;quot;The quick brown fox jumps over the lazy dog&amp;quot;)&lt;br /&gt;
 for token in doc:&lt;br /&gt;
    print((token.text, token.pos_))&lt;br /&gt;
 '''output:''' [('The', 'DT'), ('quick', 'JJ'), ('brown', 'JJ'), ('fox', 'NN'), ('jumps', 'NNS'), ('over', 'IN'), ('the', 'DT'), ('lazy', 'JJ'), ('dog', 'NN')]&lt;br /&gt;
* HunPOS:&lt;br /&gt;
 from os.path import expanduser&lt;br /&gt;
 home = expanduser(&amp;quot;~&amp;quot;)&lt;br /&gt;
 from nltk.tag.hunpos import HunposTagger&lt;br /&gt;
 _path_to_bin = home + '/hunpos-1.0-linux/hunpos-tag'&lt;br /&gt;
 _path_to_model = home + '/hunpos-1.0-linux/en_wsj.model'&lt;br /&gt;
 ht = HunposTagger(path_to_model=_path_to_model, path_to_bin=_path_to_bin)&lt;br /&gt;
 text = &amp;quot;The quick brown fox jumps over the lazy dog&amp;quot;&lt;br /&gt;
 ht.tag(text.split())&lt;br /&gt;
 '''output:''' [('The', 'DT'), ('quick', 'JJ'), ('brown', 'JJ'), ('fox', 'NN'), ('jumps', 'NNS'), ('over', 'IN'), ('the', 'DT'), ('lazy', 'JJ'), ('dog', 'NN')]&lt;br /&gt;
* Stanford POS tagger&lt;br /&gt;
 from os.path import expanduser&lt;br /&gt;
 home = expanduser(&amp;quot;~&amp;quot;)&lt;br /&gt;
 from nltk.tag.stanford import POSTagger&lt;br /&gt;
 _path_to_model = home + '/stanford-postagger/models/english-bidirectional-distsim.tagger'&lt;br /&gt;
 _path_to_jar = home + '/stanford-postagger/stanford-postagger.jar'&lt;br /&gt;
 st = POSTagger(path_to_model=_path_to_model, path_to_jar=_path_to_jar)&lt;br /&gt;
 text = &amp;quot;The quick brown fox jumps over the lazy dog&amp;quot;&lt;br /&gt;
 st.tag(text.split())&lt;br /&gt;
 '''output:''' [('The', 'DT'), ('quick', 'JJ'), ('brown', 'JJ'), ('fox', 'NN'), ('jumps', 'VBZ'), ('over', 'IN'), ('the', 'DT'), ('lazy', 'JJ'), ('dog', 'NN')]&lt;br /&gt;
&lt;br /&gt;
== Библиотеки для NLP ==&lt;br /&gt;
=== NLTK (Natural Language ToolKit)&amp;lt;ref&amp;gt;[https://www.nltk.org/ NLTK]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
Пакет библиотек и программ для символьной и статистической обработки естественного языка, написанных на Python. Содержит графические представления и примеры данных. Поддерживает работу с множеством языков, в том числе, русским.&lt;br /&gt;
&lt;br /&gt;
Плюсы:&lt;br /&gt;
* Наиболее известная и многофункциональная библиотека для NLP;&lt;br /&gt;
* Большое количество сторонних расширений;&lt;br /&gt;
* Быстрая токенизация предложений;&lt;br /&gt;
* Поддерживается множество языков.&lt;br /&gt;
Минусы&lt;br /&gt;
* Медленная;&lt;br /&gt;
* Сложная в изучении и использовании;&lt;br /&gt;
* Работает со строками;&lt;br /&gt;
* Не использует нейронные сети;&lt;br /&gt;
* Нет встроенных векторов слов.&lt;br /&gt;
&lt;br /&gt;
=== spaCy&amp;lt;ref&amp;gt;[https://spacy.io/ spaCy]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
Библиотека, написанная на языке Cypthon, позиционируется как самая быстрая NLP библиотека. Имеет множество возможностей, в том числе, разбор зависимостей на основе меток, распознавание именованных сущностей, пометка частей речи, векторы расстановки слов. Не поддерживает русский язык.&lt;br /&gt;
&lt;br /&gt;
Плюсы:&lt;br /&gt;
* Самая быстрая библиотека для NLP;&lt;br /&gt;
* Простая в изучении и использовании;&lt;br /&gt;
* Работает с объектами, а не строками;&lt;br /&gt;
* Есть встроенные вектора слов;&lt;br /&gt;
* Использует нейронные сети для тренировки моделей.&lt;br /&gt;
Минусы&lt;br /&gt;
* Менее гибкая по сравнению с NLTK;&lt;br /&gt;
* Токенизация предложений медленнее, чем в NLTK;&lt;br /&gt;
* Поддерживает маленькое количество языков.&lt;br /&gt;
&lt;br /&gt;
=== scikit-learn&amp;lt;ref&amp;gt;[https://scikit-learn.org scikit-learn]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
Библиотека scikit-learn предоставляет реализацию целого ряда алгоритмов для обучения с учителем и обучения без учителя через интерфейс для Python. Построена поверх SciPy. Ориентирована в первую очередь на моделирование данных, имеет достаточно функций, чтобы использоваться для NLP в связке с другими библиотеками.&lt;br /&gt;
&lt;br /&gt;
Плюсы:&lt;br /&gt;
* Большое количество алгоритмов для построения моделей;&lt;br /&gt;
* Содержит функции для работы с Bag-of-Words моделью;&lt;br /&gt;
* Хорошая документация.&lt;br /&gt;
Минусы&lt;br /&gt;
* Плохой препроцессинг, что вынуждает использовать ее в связке с другой библиотекой (например, NLTK);&lt;br /&gt;
* Не использует нейронные сети для препроцессинга текста.&lt;br /&gt;
&lt;br /&gt;
=== gensim&amp;lt;ref&amp;gt;[https://radimrehurek.com/gensim/ gensim]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
Python библиотека для моделирования, тематического моделирования документов и извлечения подобия для больших корпусов. В gensim реализованы популярные NLP алгоритмы, например, word2vec. Большинство реализаций могут использовать несколько ядер.&lt;br /&gt;
&lt;br /&gt;
Плюсы:&lt;br /&gt;
* Работает с большими датасетами;&lt;br /&gt;
* Поддерживает глубокое обучение;&lt;br /&gt;
* word2vec, tf-idf vectorization, document2vec.&lt;br /&gt;
Минусы&lt;br /&gt;
* Заточена под модели без учителя;&lt;br /&gt;
* Не содержит достаточного функционала, необходимого для NLP, что вынуждает использовать ее вместе с другими библиотеками.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Балто-славянские языки имеют сложную морфологию, что может ухудшить качество обработки текста, а также ограничить использование ряда библиотек. Для работы со специфичной русской морфологией можно использовать, например, морфологический анализатор '''pymorphy2'''&amp;lt;ref&amp;gt;[https://github.com/kmike/pymorphy2 pymorphy2]&amp;lt;/ref&amp;gt; и библиотеку для поиска и извлечения именованных сущностей '''Natasha'''&amp;lt;ref&amp;gt;[https://github.com/natasha/natasha Natasha]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примеры использования NLTK ==&lt;br /&gt;
* Разбиение на предложения:&lt;br /&gt;
 text = &amp;quot;Предложение. Предложение, которое содержит запятую. Восклицательный знак! Вопрос?&amp;quot; &lt;br /&gt;
 sents = nltk.sent_tokenize(text)&lt;br /&gt;
 print(sents)&lt;br /&gt;
 '''output:''' ['Предложение.', 'Предложение, которое содержит запятую.', 'Восклицательный знак!', 'Вопрос?']&lt;br /&gt;
* Токенизация:&lt;br /&gt;
 from nltk.tokenize import RegexpTokenizer&lt;br /&gt;
 sent = &amp;quot;В этом предложении есть много слов, мы их разделим.&amp;quot;&lt;br /&gt;
 tokenizer = RegexpTokenizer(r'\w+')&lt;br /&gt;
 print(tokenizer.tokenize(sent))&lt;br /&gt;
 '''output:''' ['В', 'этом', 'предложении', 'есть', 'много', 'слов', 'мы', 'их', 'разделим']&lt;br /&gt;
&lt;br /&gt;
 from nltk import word_tokenize&lt;br /&gt;
 sent = &amp;quot;В этом предложении есть много слов, мы их разделим.&amp;quot;&lt;br /&gt;
 print(word_tokenize(sent))&lt;br /&gt;
 '''output:''' ['В', 'этом', 'предложении', 'есть', 'много', 'слов', ',', 'мы', 'их', 'разделим', '.']&lt;br /&gt;
* Стоп слова:&lt;br /&gt;
 from nltk.corpus import stopwords&lt;br /&gt;
 stop_words=set(stopwords.words('english'))&lt;br /&gt;
 print(stop_words)&lt;br /&gt;
 '''output:''' {'should', 'wouldn', 'do', 'over', 'her', 'what', 'aren', 'once', 'same', 'this', 'needn', 'other', 'been', 'with', 'all' ...&lt;br /&gt;
&lt;br /&gt;
* Стемминг и лемматизация:&lt;br /&gt;
 from nltk.stem.porter import PorterStemmer&lt;br /&gt;
 porter_stemmer = PorterStemmer()&lt;br /&gt;
 print(porter_stemmer.stem(&amp;quot;crying&amp;quot;))&lt;br /&gt;
 '''output:''' cri&lt;br /&gt;
&lt;br /&gt;
 from nltk.stem.lancaster import LancasterStemmer&lt;br /&gt;
 lancaster_stemmer = LancasterStemmer()&lt;br /&gt;
 print(lancaster_stemmer.stem(&amp;quot;crying&amp;quot;))&lt;br /&gt;
 '''output:''' cry&lt;br /&gt;
&lt;br /&gt;
 from nltk.stem import SnowballStemmer&lt;br /&gt;
 snowball_stemmer = SnowballStemmer(&amp;quot;english&amp;quot;)&lt;br /&gt;
 print(snowball_stemmer.stem(&amp;quot;crying&amp;quot;)) &lt;br /&gt;
 '''output:''' cri&lt;br /&gt;
&lt;br /&gt;
 from nltk.stem import WordNetLemmatizer&lt;br /&gt;
 wordnet_lemmatizer = WordNetLemmatizer()&lt;br /&gt;
 print(wordnet_lemmatizer.lemmatize(&amp;quot;came&amp;quot;, pos=&amp;quot;v&amp;quot;))&lt;br /&gt;
 '''output:''' come&lt;br /&gt;
&lt;br /&gt;
== Пример кода на языке Scala ==&lt;br /&gt;
[https://github.com/IlyaHalsky/neerc-wiki-ml-scala/blob/master/nlp/TrainViveknSentiment.scala Пример реализации алгоримтма NLP] на основе Apache Spark ML&amp;lt;ref&amp;gt;[https://spark.apache.org/docs/latest/ml-guide.html Apache Spark MLlib]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Распознавание речи]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Natural_language_processing] {{---}} статья на Википедии&lt;br /&gt;
# [http://www.nltk.org/book/ Natural Language Processing with Python] {{---}} Analyzing Text with the Natural Language Toolkit&lt;br /&gt;
# [http://www.cs.colorado.edu/~martin/slp2.html Speech and Language Processing]&lt;br /&gt;
[[Категория: Машинное обучение]] [[Категория: Обработка естественного языка]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D0%BB%D0%BE%D0%B2&amp;diff=80618</id>
		<title>Векторное представление слов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D0%BB%D0%BE%D0%B2&amp;diff=80618"/>
				<updated>2021-02-07T17:34:07Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* BERT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Векторное представление слов''' (англ. ''word embedding'') {{---}} общее название для различных подходов к моделированию языка и обучению представлений в обработке естественного языка, направленных на сопоставление словам из некоторого словаря векторов небольшой размерности.&lt;br /&gt;
&lt;br /&gt;
== One-hot encoding ==&lt;br /&gt;
[[Файл:One-hot-encoding.png|thumb|right|220px| Рисунок 1. Пример one-hot encoding для словаря из 9 слов. [https://www.shanelynn.ie/get-busy-with-word-embeddings-introduction/ Источник]]] &lt;br /&gt;
Пусть число различных слов равно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;. Сопоставим слову с номером &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; вектор длины &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, в котором &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-тая координата равна единице, а все остальные {{---}} нулям (рис. 1). Недостатком one-hot encoding является то, что по векторным представлениям нельзя судить о схожести смысла слов. Также вектора имеют очень большой размер, из-за чего их неэффективно хранить в памяти.&lt;br /&gt;
&lt;br /&gt;
== word2vec ==&lt;br /&gt;
[[Файл:Words-space.png|thumb|right|400px|Рисунок 2. Полученные векторы-слова отражают различные грамматические и семантические [https://towardsdatascience.com/word-embedding-with-word2vec-and-fasttext-a209c1d3e12c концепции].&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;W_{king} + (W_{woman} - W_{man}) = W_{queen}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;W_{walked} - W_{walking} = W_{swam} - W_{swimming}&amp;lt;/math&amp;gt;]]&lt;br /&gt;
word2vec {{---}} способ построения сжатого пространства векторов слов, использующий нейронные сети. Принимает на вход большой текстовый корпус и сопоставляет каждому слову вектор. Сначала он создает словарь, а затем вычисляет векторное представление слов. Векторное представление основывается на контекстной близости: слова, встречающиеся в тексте рядом с одинаковыми словами (а следовательно, имеющие схожий смысл) (рис. 2), в векторном представлении имеют высокое ''косинусное сходство'' (англ. [https://en.wikipedia.org/wiki/Cosine_similarity cosine similarity]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\text{similarity}(\mathbf{A}, \mathbf{B}) = \cos(\theta) = {\mathbf{A} \cdot \mathbf{B} \over \|\mathbf{A}\| \|\mathbf{B}\|} = \frac{ \sum\limits_{i=1}^{n}{A_i  B_i} }{ \sqrt{\sum\limits_{i=1}^{n}{A_i^2}}  \sqrt{\sum\limits_{i=1}^{n}{B_i^2}} },&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В word2vec существуют две основных модели обучения: ''Skip-gram'' (рис. 3) и ''CBOW'' (англ. ''Continuous Bag of Words'') (рис. 4). В модели ''Skip-gram'' по слову предсказываются слова из его контекста, а в модели ''CBOW'' по контексту подбирается наиболее вероятное слово. На выходном слое используется функция &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; или его вариация, чтобы получить на выходе распределение вероятности каждого слова. В обеих моделях входные и выходные слова подаются в one-hot encoding, благодаря чему при умножении на матрицу &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt;, соединяющую входной и скрытый слои, происходит выбор одной строки &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt;. Размерность &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; является гиперпараметром алгоритма, а обученная матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; {{---}} выходом, так как ее строки содержат векторные представления слов.&lt;br /&gt;
&lt;br /&gt;
Для ускорения обучения моделей ''Skip-gram'' и CBOW используются модификации &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt;, такие как иерархический &amp;lt;math&amp;gt;softmax&amp;lt;/math&amp;gt; и ''negative sampling'', позволяющие вычислять распределение вероятностей быстрее, чем за линейное время от размера словаря.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:skip-gram.png|270px|thumb|Рисунок 3. [http://www.claudiobellei.com/2018/01/06/backprop-word2vec/ Схема сети для модели Skip-gram]]]&lt;br /&gt;
 |[[Файл:cbow.png|260px|thumb|Рисунок 4. [http://www.claudiobellei.com/2018/01/06/backprop-word2vec/ Схема сети для модели CBOW]]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== fastText ==&lt;br /&gt;
Недостатком word2vec является то, что с его помощью не могут быть представлены слова, не встречающиеся в обучающей выборке. fastText решает эту проблему с помощью &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;-грамм символов. Например, &amp;lt;math&amp;gt;3&amp;lt;/math&amp;gt;-граммами для слова ''яблоко'' являются ''ябл'', ''бло'', ''лок'', ''око''. Модель fastText строит векторные представления &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;-грамм, а векторным представлением слова является сумма векторных представлений всех его &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;-грамм. Части слов с большой вероятностью встречаются и в других словах, что позволяет выдавать векторные представления и для редких слов.&lt;br /&gt;
&lt;br /&gt;
== Примеры кода с использованием библиотеки Gensim ==&lt;br /&gt;
=== Загрузка предобученной модели русского корпуса ===&lt;br /&gt;
 '''import''' gensim&lt;br /&gt;
 '''import''' gensim.downloader '''as''' download_api&lt;br /&gt;
 russian_model = download_api.load(&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;'word2vec-ruscorpora-300'&amp;lt;/font&amp;gt;)&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;# ''Выведем первые 10 слов корпуса.&amp;lt;br&amp;gt;# ''В модели &amp;quot;word2vec-ruscorpora-300&amp;quot; после слова указывается часть речи: NOUN (существительное), ADJ (прилагательное) и так далее.''&amp;lt;br&amp;gt;# ''Но существуют также предоубученные модели без разделения слов по частям речи, смотри [https://github.com/RaRe-Technologies/gensim-data репозиторий]''&amp;lt;/font&amp;gt;&lt;br /&gt;
 list(russian_model.vocab.keys())[:&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;10&amp;lt;/font&amp;gt;]&lt;br /&gt;
 ''&amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;# ['весь_DET', 'человек_NOUN', 'мочь_VERB', 'год_NOUN', 'сказать_VERB', 'время_NOUN', 'говорить_VERB', 'становиться_VERB', 'знать_VERB', 'самый_DET']&amp;lt;/font&amp;gt;''&amp;lt;br&amp;gt; &lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;# ''Поиск наиболее близких по смыслу слов.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 russian_model.most_similar(&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;'кошка_NOUN'&amp;lt;/font&amp;gt;)&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;''#  [('кот_NOUN', 0.7570087909698486), ('котенок_NOUN', 0.7261239290237427), ('собака_NOUN', 0.6963180303573608),''&lt;br /&gt;
 #  ''('мяукать_VERB', 0.6411399841308594), ('крыса_NOUN', 0.6355636119842529), ('собачка_NOUN', 0.6092042922973633),''&lt;br /&gt;
 #  ''('щенок_NOUN', 0.6028496026992798), ('мышь_NOUN', 0.5975362062454224), ('пес_NOUN', 0.5956044793128967),''&lt;br /&gt;
 #  ''('кошечка_NOUN', 0.5920293927192688)]''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;# ''Вычисление сходства слов''&amp;lt;/font&amp;gt;&lt;br /&gt;
 russian_model.similarity(&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;'мужчина_NOUN'&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;'женщина_NOUN'&amp;lt;/font&amp;gt;)&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;''# 0.85228276''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;# ''Поиск лишнего слова''&amp;lt;/font&amp;gt;&lt;br /&gt;
 russian_model.doesnt_match(&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;'завтрак_NOUN хлопья_NOUN обед_NOUN ужин_NOUN'&amp;lt;/font&amp;gt;.split())&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;# ''хлопья_NOUN''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;# ''Аналогия: Женщина + (Король - Мужчина) = Королева''&amp;lt;/font&amp;gt;&lt;br /&gt;
 russian_model.most_similar(positive=[&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;'король_NOUN'&amp;lt;/font&amp;gt;,&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;'женщина_NOUN'&amp;lt;/font&amp;gt;], negative=[&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;'мужчина_NOUN'&amp;lt;/font&amp;gt;], topn=1)&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;# ''[('королева_NOUN', 0.7313904762268066)]''&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;# ''Аналогия: Франция = Париж + (Германия - Берлин)''&amp;lt;/font&amp;gt;&lt;br /&gt;
 russian_model.most_similar(positive=[&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;'париж_NOUN'&amp;lt;/font&amp;gt;,&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;'германия_NOUN'&amp;lt;/font&amp;gt;], negative=[&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;'берлин_NOUN'&amp;lt;/font&amp;gt;], topn=1)&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;# ''[('франция_NOUN', 0.8673800230026245)]''&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Обучение модели word2vec и fastText на текстовом корпусе ===&lt;br /&gt;
 '''from''' gensim.models.word2vec '''import''' Word2Vec&lt;br /&gt;
 '''from''' gensim.models.fasttext '''import''' FastText&lt;br /&gt;
 '''import''' gensim.downloader '''as''' download_api&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;# ''Скачаем небольшой текстовый корпус (32 Мб) и откроем его как итерируемый набор предложений: iterable(list(string))''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;# ''В этом текстовом корпусе часть речи для слов не указывается''&amp;lt;/font&amp;gt;&lt;br /&gt;
 corpus = download_api.load(&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;'text8'&amp;lt;/font&amp;gt;)&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;# ''Обучим модели word2vec и fastText''&amp;lt;/font&amp;gt;&lt;br /&gt;
 word2vec_model = Word2Vec(corpus, size=&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;100&amp;lt;/font&amp;gt;, workers=&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;4&amp;lt;/font&amp;gt;)&lt;br /&gt;
 fastText_model = FastText(corpus, size=&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;100&amp;lt;/font&amp;gt;, workers=&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;4&amp;lt;/font&amp;gt;)&amp;lt;br&amp;gt;&lt;br /&gt;
 word2vec_model.most_similar(&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;'car'&amp;lt;/font&amp;gt;)[:&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;3&amp;lt;/font&amp;gt;]&lt;br /&gt;
 ''&amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;# [('driver', 0.8033335208892822), ('motorcycle', 0.7368553876876831), ('cars', 0.7001584768295288)]&amp;lt;/font&amp;gt;''&amp;lt;br&amp;gt; &lt;br /&gt;
 fastText_model.most_similar('car')[:3]&lt;br /&gt;
 ''&amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;# [('lcar', 0.8733218908309937), ('boxcar', 0.8559106588363647), ('ccar', 0.8268736004829407)]&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ELMO ==&lt;br /&gt;
[[File:ElmoExplain.jpg|600px|thumb| Рисунок 5. [https://www.topbots.com/generalized-language-models-cove-elmo/ Архитектура и принцип работы ELMO]]]&lt;br /&gt;
&amp;lt;i&amp;gt;ELMO&amp;lt;/i&amp;gt; {{---}} это многослойная двунаправленная [[:Рекуррентные_нейронные_сети|рекуррентная нейронная сеть]] c [[:Долгая_краткосрочная_память|LSTM]] (рис. 5).&lt;br /&gt;
При использовании word2vec или fastText не учитывается семантическая неоднозначность слов.&lt;br /&gt;
Так, word2vec назначает слову один вектор независимо от контекста.&lt;br /&gt;
&amp;lt;i&amp;gt;ELMO&amp;lt;/i&amp;gt; решает эту проблему. В основе стоит идея использовать скрытые состояния языковой модели многослойной [[:Долгая_краткосрочная_память|LSTM]].&lt;br /&gt;
&lt;br /&gt;
Было замечено, что нижние слои сети отвечают за синтаксис и грамматику, а верхние {{---}} за смысл слов.&lt;br /&gt;
Пусть даны токены &amp;lt;math&amp;gt;t_{1}, ..., t_{N}&amp;lt;/math&amp;gt;, на которые поделено предложение. Будем считать логарифм правдоподобия метки слова в обоих направлениях, учитывая контекст слева и контекст справа, то есть на основании данных от начала строки до текущего символа и данных от текущего символа и до конца строки.&lt;br /&gt;
Таким образом, модель предсказывает вероятность следующего токена с учетом истории.&lt;br /&gt;
&lt;br /&gt;
Пусть есть &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; слоев сети. Входные и выходные данные будем представлять в виде векторов, кодируя слова. Тогда каждый результирующий вектор будем считать на основании множества:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\left \{ {x_{k}^{LM}}, \overrightarrow{h_{k, j}^{LM}}, \overleftarrow{h_{k, j}^{LM}} | j = 1, ..., L \right \} = \left \{ h_{k, j}^{LM} | j = 1, ..., L \right \}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;x_{k}^{LM}&amp;lt;/math&amp;gt; {{---}} входящий токен, а &amp;lt;math&amp;gt;\overrightarrow{h_{k, j}^{LM}}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overleftarrow{h_{k, j}^{LM}}&amp;lt;/math&amp;gt; {{---}} скрытые слои в одном и в другом направлении.&lt;br /&gt;
&lt;br /&gt;
Тогда результат работы ELMO будет представлять из себя выражение:&lt;br /&gt;
&amp;lt;math&amp;gt;ELMO_{k}^{task} = \gamma^{taks}\sum_{j=0}^{L} s_{i}^{task}h_{k,j}^{LM}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обучаемый общий масштабирующий коэффициент &amp;lt;math&amp;gt;\gamma^{task}&amp;lt;/math&amp;gt; регулирует то, как могут отличаться друг от друга по норме векторные представления слов.&lt;br /&gt;
&lt;br /&gt;
Коэффициенты &amp;lt;math&amp;gt;s_{i}^{task}&amp;lt;/math&amp;gt; {{---}} это обучаемые параметры, нормализованные функцией &amp;lt;math&amp;gt;Softmax&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель применяют дообучая ее: изначально берут предобученную &amp;lt;i&amp;gt;ELMO&amp;lt;/i&amp;gt;, а затем корректируют &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;s_{i}&amp;lt;/math&amp;gt; под конкретную задачу. Тогда вектор, который подается в используемую модель для обучения, будет представлять собой взвешенную сумму значений этого векторах на всех скрытых слоях &amp;lt;i&amp;gt;ELMO&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На данный момент предобученную модель ELMO можно [https://tfhub.dev/google/elmo/3 загрузить] и использовать в языке программирования Python.&lt;br /&gt;
&lt;br /&gt;
== BERT ==&lt;br /&gt;
{{main|BERT (языковая модель)}}&lt;br /&gt;
[[File:Bert.png|500px|thumb|Рисунок 6. [https://towardsdatascience.com/bert-why-its-been-revolutionizing-nlp-5d1bcae76a13 Архитектура BERT]]]&lt;br /&gt;
&amp;lt;i&amp;gt;BERT&amp;lt;/i&amp;gt; {{---}} это многослойный двунаправленный [[:Автокодировщик|кодировщик]] Transformer. В данной архитектуре (рис. 6) используется двунаправленное [[:Механизм внимания|самовнимание]] (англ. self-attention). &lt;br /&gt;
Модель используется в совокупности с некоторым классификатором, на вход которого подается результат работы &amp;lt;i&amp;gt;BERT&amp;lt;/i&amp;gt; {{---}} векторное представление входных данных.&lt;br /&gt;
В основе обучения модели лежат две идеи.&lt;br /&gt;
&lt;br /&gt;
Первая заключается в том, чтобы заменить &amp;lt;math&amp;gt;15\%&amp;lt;/math&amp;gt; слов масками и обучить сеть предсказывать эти слова. &lt;br /&gt;
&lt;br /&gt;
Второй трюк состоит в том, чтобы дополнительно научить &amp;lt;i&amp;gt;BERT&amp;lt;/i&amp;gt; определять, может ли одно предложение идти после другого. &lt;br /&gt;
&lt;br /&gt;
Точно так же, как и в обычном трансформере, &amp;lt;i&amp;gt;BERT&amp;lt;/i&amp;gt; принимает на вход последовательность слов, которая затем продвигается вверх по стеку энкодеров.&lt;br /&gt;
Каждый слой энкодера применяет самовнимание и передает результаты в сеть прямого распространения, после чего направляет его следующему энкодеру.&lt;br /&gt;
&lt;br /&gt;
Для каждой позиции на выход подается вектор размерностью &amp;lt;math&amp;gt;hiddenSize&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;768&amp;lt;/math&amp;gt; в базовой модели).&lt;br /&gt;
Этот вектор может быть использован как входной вектор для классификатора.&lt;br /&gt;
&lt;br /&gt;
Bert поддерживается в качестве модели в языке Python, которую можно [https://github.com/google-research/bert загрузить].&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Обработка естественного языка]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Word_embedding Word embedding] {{---}} статья о векторных представлениях в английской Википедии&lt;br /&gt;
* [https://youtu.be/Wq414SDmOCM (YouTube) Обработка естественного языка] {{---}} лекция на русском Даниила Полыковского в курсе Техносферы&lt;br /&gt;
* [https://youtu.be/ERibwqs9p38 (YouTube) Word Vector Representations: word2vec] {{---}} лекция на английском в Стэнфордском Университете&lt;br /&gt;
* [https://arxiv.org/abs/1301.3781 word2vec article] {{---}} оригинальная статья по word2vec от Томаса Миколова&lt;br /&gt;
* [https://code.google.com/archive/p/word2vec/ word2vec code] {{---}} исходный код word2vec на Google Code&lt;br /&gt;
* [https://rare-technologies.com/word2vec-tutorial Gensim tutorial on word2vec] {{---}} небольшое руководство по работе с word2vec в библиотеке Gensim&lt;br /&gt;
* [https://radimrehurek.com/gensim/models/fasttext.html Gensim documentation on fastText] {{---}} документация по fastText в библиотеке Gensim&lt;br /&gt;
* [https://github.com/RaRe-Technologies/gensim-data Gensim Datasets] {{---}} репозиторий предобученных моделей для библиотеки Gensim&lt;br /&gt;
* [https://fasttext.cc/ fastText] {{---}} NLP библиотека от Facebook &lt;br /&gt;
* [https://arxiv.org/pdf/1607.04606.pdf fastText article] {{---}} оригинальная статья по fastText от Piotr Bojanowski&lt;br /&gt;
* [https://rusvectores.org/ru/ RusVectōrēs] {{---}} онлайн сервис для работы с семантическими отношениями русского языка&lt;br /&gt;
* [https://arxiv.org/abs/1810.04805/ Cornell univerity arxiv] {{---}} оригинальная статья про Bert&lt;br /&gt;
* [https://arxiv.org/abs/1802.05365/ Cornell univerity arxiv] {{---}} оригинальная статья с описанием ELMO&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]] [[Категория: Обработка естественного языка]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=80616</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=80616"/>
				<updated>2021-01-28T17:47:13Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Компьютерное зрение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Интерпретируемые модели]]&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Анализ временных рядов]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
*[[Графовые нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Рекурсивные нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Проблемы нейронных сетей]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Сиамская нейронная сеть]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
*[[Сети глубокого доверия]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Оценка положения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Определение положения человека]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Распознавание изогнутого текста]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Карта глубины]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Вписывание части изображения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Блендинг изображений]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Генерация объектов]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)|Порождающие состязательные сети, Generative Adversarial Networks (GAN)]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача трансляции изображений]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Генерация текста]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Генерация изображения по тексту]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
*[[BERT (языковая модель)]]&lt;br /&gt;
*[[Синтез речи]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Диалоговые системы]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
*[[Синтетические наборы данных]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Виды обучения=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение в реальном времени]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Автоматическое машинное обучение==&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;br /&gt;
&lt;br /&gt;
==Обучение с подкреплением==&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Реализация=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Многопоточность в машинном обучении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Scala]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Kotlin]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Kotlin в Jupyter Notebook]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Машинное обучение на мобильных телефонах]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Применение машинного обучения на практике=&lt;br /&gt;
*[[Анализ социальных сетей]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Машинное обучение в медицине]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Deepfake|Генерация дипфейков с помощью нейронных сетей]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Представление знаний]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача планирования движения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Машинное обучение в астрономии]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Компьютерное зрение в микроскопии]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение на больших данных]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Дополнение к ранжированию]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Расположение объектов на изображении]]&lt;br /&gt;
*[[Распознавание текста на изображении]]&lt;br /&gt;
*[[Определение геометрии изображения]]&lt;br /&gt;
*[[Анализ видео]]&lt;br /&gt;
*[[Обнаружение и обработка дорожных знаков и пешеходов]]&lt;br /&gt;
*[[Трансформер]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D1%87%D0%B5%D0%BB%D0%BE%D0%B2%D0%B5%D0%BA%D0%B0&amp;diff=80615</id>
		<title>Определение положения человека</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D1%87%D0%B5%D0%BB%D0%BE%D0%B2%D0%B5%D0%BA%D0%B0&amp;diff=80615"/>
				<updated>2021-01-28T17:46:51Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Определение положения человека''' (англ. ''Human pose estimation'') {{---}} частный случай задачи [[Сегментация изображений | сегментации изображения]] из раздела [[Компьютерное зрение | компьютерного зрения]] о нахождении и локализации частей тела человека на изображениях или видео (рассматривается как последовательность изображений). Чаще всего позицией человека называют набор соединённых ключевых точек (англ. ''Joint''), соответствующих суставам (плечи, локти, кисти, тазобедренные суставы, колени, стопы) и другим ключевым точкам (шея, голова, центр торса). Эту задачу можно рассматривать в двух или трёх измерениях, от чего зависит сложность задачи и практические применения результатов. Также задачу можно разделить на два подтипа: определение положения для одного человека (англ. ''Single Person Pose Estimation''), определение положения для нескольких человек (англ. ''Multi Person Pose Estimation'')&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
=== Определение положения одного человека (англ. ''Single Person Pose Estimation'') ===&lt;br /&gt;
Задача заключается в определении положения одного человека по фото или видео. Важным условием является то, что на изображении должен быть только один человек, иначе гарантировать корректное выполнение невозможно. В качестве результата необходимо получить набор соединённых точек, указывающих на соответствующие части тела. Сложности заключаются в том, чтобы отделить друг от друга разные части тела, корректно определять положение конечностей, скрытых за другими объектами, а также корректно отличать левые части тела от правых, независимо от поворота человека на изображении.&lt;br /&gt;
{|align=&amp;quot;left&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[file:InputSingle.jpg|200px|thumb| Рисунок 1 Исходная картинка. [[http://sysu-hcp.net/lip/posechallenge.php Источник]]]]&lt;br /&gt;
|[[file:outputSingle.jpg|200px|thumb| Рисунок 2 Результат работы алгоритма для одного человека. [[http://sysu-hcp.net/lip/posechallenge.php Источник]]]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Определение положений нескольких людей (англ. ''Multi Person Pose Estimation'') ===&lt;br /&gt;
Эта задача имеет более высокую сложность, так как необходимо обнаружить множество человек на изображении, а затем определить положение для каждого человека из множества обнаруженных людей. Основная сложность в том, чтобы корректно определить и отличить друг от друга части тела, принадлежащие разным людям, а также решить все сложности связанные с '''Single Person Pose Estimation'''.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;left&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[file:InputMulti.png|200px|thumb| Рисунок 3 Исходная картинка с несколькими людьми [[https://medium.com/beyondminds/an-overview-of-human-pose-estimation-with-deep-learning-d49eb656739b Источник]]]]&lt;br /&gt;
|[[file:InnerMulti.png|200px|thumb| Рисунок 4 Промежуточный этап разделения людей [[https://medium.com/beyondminds/an-overview-of-human-pose-estimation-with-deep-learning-d49eb656739b Источник]]]]&lt;br /&gt;
|[[file:OutputMulti.png|200px|thumb| Рисунок 5 Итоговый результат работы алгоритма [[https://medium.com/beyondminds/an-overview-of-human-pose-estimation-with-deep-learning-d49eb656739b Источник]]]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Область применения ==&lt;br /&gt;
# '''Кинематограф и анимация''' {{---}} популярные технологии CGI&amp;lt;ref name=&amp;quot;CGI&amp;quot;&amp;gt;[https://ru.wikipedia.org/wiki/CGI_(%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0) CGI]&amp;lt;/ref&amp;gt; (англ. ''computer-generated imagery'', буквально «изображения, сгенерированные компьютером») и захват движения&amp;lt;ref name=&amp;quot;motion-capture&amp;quot;&amp;gt;[https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D1%85%D0%B2%D0%B0%D1%82_%D0%B4%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F Захват движения]&amp;lt;/ref&amp;gt; (англ. ''Motion capture''), позволяют создавать движущиеся изображения и графику, используя для анимации движения специального актера. Несмотря на то, что в настоящий момент чаще используется маркерный способ, при котором актер надевает костюм с датчиками движения, в последние годы большое развитие получил безмаркерный способ, основанный на компьютерном зрении.&lt;br /&gt;
# '''Видеоигры''' {{---}} широко применяется в дополненной реальности (англ. ''Augmented Reality'', '''AR'''&amp;lt;ref name=&amp;quot;AR&amp;quot;&amp;gt;[https://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C Дополненная реальность]&amp;lt;/ref&amp;gt;) и виртуальной реальности (англ. ''Virtual Reality'',  '''VR'''&amp;lt;ref name=&amp;quot;VR&amp;quot;&amp;gt;[https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C Виртуальная реальность]&amp;lt;/ref&amp;gt;). Также в консольных игровых решениях используется трекинг (англ. ''Motion tracking''), отслеживающий положения игрока в некотором радиусе перед камерой. Помимо этого, определение положения человека необходимо непосредственно в производстве видеоигр, для этого, опять же, используется технология CGI&amp;lt;ref name=&amp;quot;CGI&amp;quot;/&amp;gt;.&lt;br /&gt;
# '''Человеко-компьютерное взаимодействие''' (англ. ''Human-computer interaction'') {{---}} здесь определение положения человека используется для взаимодействия с роботами или компьютерами, для отдачи команд компьютерным системам.  Примером такого взаимодействия можно назвать уже упомянутый захват движения при игре на консолях.&lt;br /&gt;
# '''Биомеханика спорта''' (англ. ''Sport motion analysis'') {{---}} анализ движений при тренировке и соревнованиях. Используется для лучшего понимания процессов, происходящих при занятии спортом, для предотвращения травм и растяжений,  и для установления новых рекордов. Информация, полученная в ходе анализа, используется также для создания профессионального инвентаря.&lt;br /&gt;
&lt;br /&gt;
== Методы решения ==&lt;br /&gt;
===DeepPose (2014)===&lt;br /&gt;
{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[file:challenging.png|300px|thumb| Рисунок 6 Примеры результатов работы алгоритма [[https://arxiv.org/pdf/1312.4659.pdf Источник]]]]&lt;br /&gt;
|}&lt;br /&gt;
DeepPose&amp;lt;ref name=&amp;quot;DeepPose&amp;quot;&amp;gt;[https://arxiv.org/pdf/1312.4659.pdf DeepPose: Human Pose Estimation via Deep Neural Networks, Alexander Toshev, Christian Szegedy, 2014]&amp;lt;/ref&amp;gt; {{---}} первая значимая разработка с использованием [[глубокое обучение|глубокого обучения]] для задачи определения положения человека. Модель продемонстрировала высокую эффективность и превзошла существовавшие на тот момент решения. &lt;br /&gt;
&lt;br /&gt;
Оценка позы формулируется как задача совместной [[линейная регрессия|регрессии]] по ключевым точкам (англ. ''Joint'') и решается при помощи [[сверточные нейронные сети|сверточных нейронных сетей]] [[глубокое обучение|глубокого обучения]] (англ. ''convolutional DNN''). Полное изображение и 7-слойная обобщенная глубокая [[сверточные нейронные сети|сверточная нейронная сеть]] используются в качестве входных данных для [[линейная регрессия|регрессии]] по местоположению каждого сустава тела. У этого решения есть два преимущества.&lt;br /&gt;
&lt;br /&gt;
Во-первых, глубокая нейронная сеть (англ. DNN) может захватывать полный контекст каждой ключевой точки {{---}} каждый регрессор сустава использует полное изображение&lt;br /&gt;
как входной сигнал. &lt;br /&gt;
&lt;br /&gt;
Во-вторых, данный подход существенно проще формулируется в сравнении с методами, основанными на графических моделях {{---}} нет необходимости явно проектировать представления элементов и детекторы для отдельных частей тела; нет необходимости явно разрабатывать топологию модели и взаимодействия между суставами. Вместо этого для решения данной задачи можно обучить обобщенную сверточную DNN.&lt;br /&gt;
&lt;br /&gt;
Кроме того, авторы используют каскад основанных на DNN предсказателей позы. Такой каскад позволяет повысить точность (англ. precision) совместной локализации ключевых точек. Начиная с начальной оценки позы, на основе полного изображения обучаются регрессоры на основе DNN, который уточняют совместные прогнозы с помощью фрагментов изображений с более высоким разрешением.&lt;br /&gt;
&lt;br /&gt;
Важной особенностью является то, что обрабатывается человек целиком, что позволяет корректно определять позу, даже если некоторые суставы скрыты.&lt;br /&gt;
&lt;br /&gt;
С архитектурной точки зрения модель основана на AlexNet&amp;lt;ref name=&amp;quot;alexNet&amp;quot;&amp;gt;[https://neurohive.io/ru/vidy-nejrosetej/alexnet-svjortochnaja-nejronnaja-set-dlja-raspoznavanija-izobrazhenij/ Сверточная нейросеть AlexNet, Павел Глек, 2018]&amp;lt;/ref&amp;gt; (7 слоёв) и дополнительном финальном слое, выводящем пары координат ключевых точек. Обучение модели производится с использованием [[функция потерь и эмпирический риск|функции потерь]] L2&amp;lt;ref name=&amp;quot;regularization&amp;quot;&amp;gt;[http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F L2 регуляризация]&amp;lt;/ref&amp;gt; для регрессии (англ. ''L2 loss for regression'').&lt;br /&gt;
{|align=&amp;quot;left&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[file:Deepposeschema.PNG|800px|thumb| Рисунок 7 Слева: схематичное изображение глубокой нейронной сети для регрессии. Мы визуализируем слои сети с соответствующими размерами, где сверточные слои {{---}} голубые, а полносвязные {{---}} зеленые. Параметр свободных слоёв не показан. &amp;lt;br&amp;gt;Справа: на шаге $s$, a уточняющий регрессор применяется на фрагменте изображения чтобы улучшить результат предыдущего шага &lt;br /&gt;
 [[https://arxiv.org/pdf/1312.4659.pdf Источник]]]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[file:Deepposepcp.png|400px|thumb| Рисунок 8 [[https://arxiv.org/pdf/1312.4659.pdf Источник]]]]&lt;br /&gt;
|}&lt;br /&gt;
Оценка эффективности решения проводилась на нескольких наборах данных, в частности на LSP (Leeds sports dataset)&amp;lt;ref name=&amp;quot;LSP&amp;quot;&amp;gt;[https://sam.johnson.io/research/lsp.html LSP dataset]&amp;lt;/ref&amp;gt; и FLIC (Frames Labeled In Cinema)&amp;lt;ref name=&amp;quot;FLIC&amp;quot;&amp;gt;[https://bensapp.github.io/flic-dataset.html FLIC dataset]&amp;lt;/ref&amp;gt;. На наборе данных LSP оценивался процент корректно определенных частей (англ. ''Percentage of Correct Parts'', '''''PCP'''''). Сводная таблица представлена на рисунке 8. Оценка производилась на первом, втором и третьем слоях, а также на пяти других решениях: Dantone et al.&amp;lt;ref name=&amp;quot;Dantone&amp;quot;&amp;gt;M. Dantone, J. Gall, C. Leistner, and L. Van Gool. Human pose estimation using body parts dependent joint regressors. In CVPR, 2013&amp;lt;/ref&amp;gt;, Tian et al.&amp;lt;ref name=&amp;quot;Tian&amp;quot;&amp;gt;Y. Tian, C. L. Zitnick, and S. G. Narasimhan. Exploring the spatial hierarchy of mixture models for human pose estimation. In ECCV, 2012&amp;lt;/ref&amp;gt;, Johnson et al.&amp;lt;ref name=&amp;quot;Johnson&amp;quot;&amp;gt;S. Johnson and M. Everingham. Learning effective human pose estimation from inaccurate annotation. In CVPR, 2011&amp;lt;/ref&amp;gt;, Wang et al.&amp;lt;ref name=&amp;quot;Wang&amp;quot;&amp;gt;F. Wang and Y. Li. Beyond physical connections: Tree models in human pose estimation. In CVPR, 2013&amp;lt;/ref&amp;gt;, Pishchulin&amp;lt;ref name=&amp;quot;Pishchulin&amp;quot;&amp;gt;L. Pishchulin, M. Andriluka, P. Gehler, and B. Schiele. Poselet conditioned pictorial structures. In CVPR, 2013&amp;lt;/ref&amp;gt;. Наилучший результат в столбце выделен жирным.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===AlphaPose (2015)===&lt;br /&gt;
{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[file:AlphaPoseResult.png|300px|thumb| Рисунок 9. Результат работы AlphaPose. [[https://arxiv.org/pdf/1612.00137.pdf Источник]]]]&lt;br /&gt;
|}&lt;br /&gt;
AlphaPose&amp;lt;ref name=&amp;quot;AlphaPose&amp;quot;&amp;gt;[https://arxiv.org/abs/1612.00137 RMPE: Regional Multi-Person Pose Estimation, Hao-Shu Fang1, Shuqin Xie, Yu-Wing Tai, Cewu Lu1, 2018]&amp;lt;/ref&amp;gt; позволяет решать проблему определения положения как одного, так и нескольких человек в режиме реального времени. Данное решение задачи региональной оценки позы для нескольких человек (англ. ''Region Multi Person Estimation'', '''''RMPE''''') призвано облегчить оценку позы при наличии неточных окружающих рамок (англ. ''bounding box'') человека. Решение доступно для общего пользования и опубликовано на [https://github.com/MVIG-SJTU/AlphaPose GitHub].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Структура решения состоит из трех компонентов: симметричная сеть пространственных преобразователей (англ. ''Symmetric Spatial Transformer Network'', '''''SSTN'''''), параметрическое не-максимальное подавление позы (англ. ''Parametric Pose Non-maximum Suppression'', '''NMS'''&amp;lt;ref name=&amp;quot;NMS&amp;quot;&amp;gt;[https://towardsdatascience.com/non-maximum-suppression-nms-93ce178e177c Non-maximum Suppression, Sambasivarao. K, 2019]&amp;lt;/ref&amp;gt;)) и генератор предложений с указанием позы (англ. ''Pose-Guided Proposals Generator'', '''''PGPG'''''). &lt;br /&gt;
&lt;br /&gt;
На рисунке 10 показан процесс работы решения. Сеть симметричных пространственных преобразователей состоит из сети пространственных преобразователей (англ. ''Spatial Transformer Network'', '''''STN''''') и сети обратных пространственных преобразований (англ. ''Spatial De-Transformer Network'', '''''SDTN'''''). Модуль '''''STN''''' отдает результаты своей работы на вход определителю поз (англ. ''Single Person Pose Estimator'', '''''SPPE'''''), который, в свою очередь отдает свои результаты модулю '''''SDTN'''''. '''''STN''''' получает предположения относительно людей {{---}} выделенные окружающими рамками потенциальные фигуры, а '''''SDTN''''' генерирует окончательные предположения о позах людей.  Параллельный определитель поз (англ. ''Single Person Pose Estimator'', '''''SPPE''''') действует как дополнительный регуляризатор на этапе обучения. Наконец, выполняется параметрическое не-максимальное подавление позы (англ. ''Parametric Pose Non-maximum Suppression'', '''NMS'''&amp;lt;ref name=&amp;quot;NMS&amp;quot;&amp;gt;[https://towardsdatascience.com/non-maximum-suppression-nms-93ce178e177c Non-maximum Suppression, Sambasivarao. K, 2019]&amp;lt;/ref&amp;gt;) для устранения избыточных оценок позы. В отличие от традиционного обучения, мы обучаем модуль '''''SSTN + SPPE''''' на изображениях, сгенерированных генератором предложений с указанием позы (англ. ''Pose-Guided Proposals Generator'', '''''PGPG''''').&lt;br /&gt;
&lt;br /&gt;
Если говорить о внутренних нюансах реализации решения, '''''STN''''' базируется на ResNet18&amp;lt;ref name=&amp;quot;ResNet&amp;quot;&amp;gt;[https://docs.exponenta.ru/deeplearning/ref/resnet18.html Non-maximum ResNet18]&amp;lt;/ref&amp;gt;, детектор людей {{---}} на VGG&amp;lt;ref name=&amp;quot;VGG&amp;quot;&amp;gt;[https://arxiv.org/abs/1409.1556 Very Deep Convolutional Networks for Large-Scale Image Recognition&lt;br /&gt;
Karen Simonyan, Andrew Zisserman, 2014]&amp;lt;/ref&amp;gt; SSD-500&amp;lt;ref name=&amp;quot;SSD&amp;quot;&amp;gt;[https://arxiv.org/abs/1512.02325 SSD: Single Shot MultiBox Detector, Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, Alexander C. Berg, 2015]&amp;lt;/ref&amp;gt;, '''''SPPE''''' представляет собой 8 последовательных сетей вида &amp;quot;песочые часы&amp;quot; (англ. ''8-stack hourglass network''&amp;lt;ref name=&amp;quot;hourglassnetwork&amp;quot;&amp;gt;[https://arxiv.org/abs/1603.06937 Stacked Hourglass Networks for Human Pose Estimation, Alejandro Newell, Kaiyu Yang, Jia Deng, 2016]&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;left&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[file:AlphaPose.png|800px|thumb| Рисунок 10. Процесс работы решения. [[https://arxiv.org/pdf/1612.00137.pdf Источник]]]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Так как AlphaPose, как и OpenPose, является решением, работающим в реальном времени, то сравнение этих двух решений наиболее интересно. На наборе данных MPII Human Pose&amp;lt;ref name=&amp;quot;MPII&amp;quot;&amp;gt;[http://human-pose.mpi-inf.mpg.de/ MPII Human Pose]&amp;lt;/ref&amp;gt; было выполнено сравнение вероятности корректности определения ключевой точки (англ. ''Probability of Correct Keypoint'', '''''PCK'''''). Результаты представлены в таблице на рисунке 11.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;left&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[file:AlphaPoseTestResults.png|800px|thumb| Рисунок 11. Результаты на датасете MPII в сравнении с OpenPose. [[https://arxiv.org/pdf/1612.00137.pdf Источник]]]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DeepCut (2016)===&lt;br /&gt;
{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[file:Deepcutexamle.png|400px|thumb| Рисунок 12 [[https://arxiv.org/pdf/1511.06645.pdf Источник]]]]&lt;br /&gt;
|}&lt;br /&gt;
DeepCut&amp;lt;ref name=&amp;quot;DeepCut&amp;quot;&amp;gt;[https://arxiv.org/pdf/1511.06645.pdf DeepCut: Joint Subset Partition and Labeling for Multi Person Pose Estimation, Leonid Pishchulin, Eldar Insafutdinov, Siyu Tang, Bjoern Andres, Mykhaylo Andriluka, Peter Gehler, and Bernt Schiele, 2016]&amp;lt;/ref&amp;gt; решает задачу определения поз для нескольких людей (англ. ''Multi person Pose estimation'') и находится в открытом [https://github.com/eldar/deepcut доступе]. &lt;br /&gt;
&lt;br /&gt;
Данный подход предполагает одновременное решение задач определения частей тела и отделения друг от друга частей тела разных людей: определяется количество людей в сцене, идентифицируются закрытые части тела и устраняется неоднозначность частей тела людей, находящихся в непосредственной близости друг от друга. Это отличает данное решение от многих других, сначала выявляющих людей, а затем оценивающие их положения. &lt;br /&gt;
&lt;br /&gt;
Авторы предлагают разделение и разметку набора гипотез о частях тела, созданных с помощью детекторов частей на основе [[сверточные нейронные сети|CNN]]. Неявно выполняется не-максимальное подавление (англ. ''Non-maximum Suppression'', '''NMS'''&amp;lt;ref name=&amp;quot;NMS&amp;quot;&amp;gt;[https://towardsdatascience.com/non-maximum-suppression-nms-93ce178e177c Non-maximum Suppression, Sambasivarao. K, 2019]&amp;lt;/ref&amp;gt;) для набора возможных частей и производится группировка, чтобы сформировать конфигурации частей тела с учетом геометрических ограничений и ограничений внешнего вида.&lt;br /&gt;
&lt;br /&gt;
Пример работы алгоритма представлен на рисунке 12: (a) начальное определение возможных частей и попарных связей между всеми обнаруженными частями, которые (b) кластеризуются по принадлежности одному человеку (один цвет {{---}} один человек) и каждая часть помечается меткой соответствующего этой части класса (разные цвета и символы относятся к разным частям тела); (c) демонстрация результата.&lt;br /&gt;
&lt;br /&gt;
Для оценки эффективности решения проводилось сравнение нескольких вариантов архитектуры, использующих DeepCut друг с другом и с тремя другими решениями. Использовались наборы данных LSP (Leeds Sport Poses)&amp;lt;ref name=&amp;quot;LSP&amp;quot;&amp;gt;[https://sam.johnson.io/research/lsp.html LSP dataset]&amp;lt;/ref&amp;gt;, LSPET (LSP Extended)&amp;lt;ref name=&amp;quot;LSPET&amp;quot;&amp;gt;[https://dbcollection.readthedocs.io/en/latest/datasets/leeds_sports_pose_extended.html LSPET dataset]&amp;lt;/ref&amp;gt; и MPII Human Pose&amp;lt;ref name=&amp;quot;MPII&amp;quot;&amp;gt;[http://human-pose.mpi-inf.mpg.de/ MPII Human Pose]&amp;lt;/ref&amp;gt;. Были рассмотрены два варианта архитектуры, использующие DeepCut SP (Single Person) и DeepCut MP (Multi Person), совмещающие в себе DeepCut и адаптированная быстрая [[сверточные нейронные сети|сверточная нейронная сеть]] на основе регионов (англ. ''Adapted Fast R-CNN''&amp;lt;ref name=&amp;quot;FastR-CNN&amp;quot;&amp;gt;[https://arxiv.org/abs/1504.08083 Fast R-CNN, Ross Girshick, 2015]&amp;lt;/ref&amp;gt;, '''''AFR-CNN''''') в одном случае и DeepCut и плотные [[сверточные нейронные сети]] (англ. ''Dense-CNN'') в другом. Также в сравнении участвовали решения Tompson et al.&amp;lt;ref name=&amp;quot;Tompson&amp;quot;&amp;gt;[J. J. Tompson, A. Jain, Y. LeCun, and C. Bregler. Joint training of a convolutional network and a graphical model for human pose estimation. In NIPS’14]&amp;lt;/ref&amp;gt;, Chen&amp;amp;Yuille&amp;lt;ref name=&amp;quot;Chen&amp;amp;Yuille&amp;quot;&amp;gt;[X. Chen and A. Yuille. Articulated pose estimation by a graphical model with image dependent pairwise relations. In NIPS’14]&amp;lt;/ref&amp;gt;, Fan et al.&amp;lt;ref name=&amp;quot;Fan&amp;quot;&amp;gt;[X. Fan, K. Zheng, Y. Lin, and S. Wang. Combining local appearance and holistic view: Dual-source deep neural networks for human pose estimation. In CVPR’15]&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Оценивалась вероятность корректности определения ключевой точки (англ. ''Probability of Correct Keypoint'', '''''PCK'''''). На рисунке 13 представлены графики данной величины от нормализованного расстояния между ключевыми точками (близкорасположенные точки корректно определить сложнее). На рисунке 14 {{---}} таблица, отражающая качество определения тех или иных частей тела, вероятности корректности определения ключевой точки (PCK) и площадь под кривой ошибок (англ. ''area under ROC curve'', '''''AUC''''').&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;left&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[file:Deepcutgraphics.png|400px|thumb| Рисунок 13 [[https://arxiv.org/pdf/1511.06645.pdf Источник]]]]&lt;br /&gt;
|[[file:Deepcuttable.png|400px|thumb| Рисунок 14 [[https://arxiv.org/pdf/1511.06645.pdf Источник]]]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===OpenPose (2019)===&lt;br /&gt;
{|align=&amp;quot;left&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[file:Openpose.jpg|300px|thumb| Рисунок 15 Примеры результатов работы алгоритма [[https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/README.md Источник]]]]&lt;br /&gt;
|}&lt;br /&gt;
OpenPose&amp;lt;ref name=&amp;quot;OpenPose&amp;quot;&amp;gt;[https://arxiv.org/pdf/1812.08008.pdf OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields, Zhe Cao, Gines Hidalgo, Tomas Simon, Shih-En Wei, and Yaser Sheikh, 2019]&amp;lt;/ref&amp;gt; {{---}} первая система, решающая задачу определения поз для нескольких людей (англ. ''Multi person Pose estimation'') в режиме реального времени c открытым [https://github.com/CMU-Perceptual-Computing-Lab/openpose исходным кодом]. &lt;br /&gt;
&lt;br /&gt;
Определяет 135 ключевых точек для каждого человека. Поддерживает определение не только крупных частей, но и отдельных пальцев и их движений. Для обучения использовался CMU Panoptic Studio dataset&amp;lt;ref name=&amp;quot;CMU Panoptic Studio dataset&amp;quot;&amp;gt;[http://domedb.perception.cs.cmu.edu/ CMU Panoptic Studio dataset]&amp;lt;/ref&amp;gt;, состоящий из съемок людей с большого числа ракурсов в специальном куполе, оснащенном 500 камерами&amp;lt;ref name=&amp;quot;OpenPose – ИИ для понимания роботами языка тела из CMU&amp;quot;&amp;gt;[https://robotics.ua/news/ai/6256-cmu_openpose_ai_dlya_ponimaniya_robotami_yazyka_tela ИИ для понимания роботами языка тела из CMU, 2017]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{|align=&amp;quot;left&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[file:Openpose example.png|800px|thumb|Рисунок 16 [[https://arxiv.org/pdf/1611.08050.pdf Источник]]]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[file:Openposeschema.png|500px|thumb|Рисунок 17 [[https://arxiv.org/pdf/1611.08050.pdf Источник]]]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Логика архитектуры OpenPose следующая: во-первых, входное RGB-изображение (рисунок 16а) подается как вход в многослойную CNN с двумя ветвями. &lt;br /&gt;
&lt;br /&gt;
Две ветви означают, что CNN производит два разных вывода. На рисунке 17 верхняя ветвь, показанная бежевым цветом, предсказывает карты достоверности (англ. ''confidence map'') (рисунок 16b) расположения различных частей тела. Нижняя ветвь, показанная синим цветом, предсказывает поля сходства фрагментов (англ. ''affinity field'', '''''PAFs''''') (рисунок 16c), которые представляют степень связи между различными частями тела.&lt;br /&gt;
&lt;br /&gt;
Многослойность означает следующее: на первом слое (левая половина рисунка 17) сеть создает начальный набор карт достоверности обнаружения $S$ и набор полей сходства для части $L$. Затем на каждом последующем слое (правая половина рисунка 17) прогнозы из обеих ветвей на предыдущем этапе и характеристики исходного изображения $F$, объединяются (объединение обозначено знаком $+$ на рисунке 17) и используются для получения более точных прогнозов. В реализации OpenPose последним этапом $t$ выбран шестой.&lt;br /&gt;
&lt;br /&gt;
На рисунке 18 показаны преимущества многослойной архитектуры. В этом примере мы наблюдаем некоторую начальную путаницу между левой и правой частями тела на первых нескольких этапах. Но по мере того, как слой увеличивается, сеть начинает лучше различать их.&lt;br /&gt;
&lt;br /&gt;
В конце карты достоверности и поля сходства обрабатываются методом жадного вывода&amp;lt;ref name=&amp;quot;GreedyInference&amp;quot;&amp;gt;[https://vtechworks.lib.vt.edu/handle/10919/81860 Greedy Inference Algorithms for Structured and Neural Models, Sun, Qing, 2018]&amp;lt;/ref&amp;gt; (рисунок 16d) для вывода двумерных ключевых точек для всех людей на изображении (рисунок 16e).&lt;br /&gt;
{|align=&amp;quot;left&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[file:Openposestagebystage.png|600px|thumb|Рисунок 18. Результаты на слоях 1, 3 и 6 [[https://arxiv.org/pdf/1611.08050.pdf Источник]]]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[file:Openpose vs competition.png|300px|thumb| Рисунок 19 [[https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/README.md Источник]]]]&lt;br /&gt;
|}&lt;br /&gt;
Важной особенностью является скорость работы данного решения. На рисунке 18 представлено сравнение времени работы трех доступных библиотек, решающих задачу определения положения человека (в одинаковых условиях на одинаковом аппаратном обеспечении): OpenPose, Alpha-Pose&amp;lt;ref name=&amp;quot;Alpha-Pose&amp;quot;&amp;gt;[https://github.com/MVIG-SJTU/AlphaPose AlphaPose, Hao-Shu Fang, Shuqin Xie, Yu-Wing Tai and Cewu Lu, 2018]&amp;lt;/ref&amp;gt; (fast Pytorch version), и Mask R-CNN&amp;lt;ref name=&amp;quot;MaskR-CNN&amp;quot;&amp;gt;[https://arxiv.org/abs/1703.06870 Mask R-CNN, Kaiming He, Georgia Gkioxari, Piotr Dollár, Ross Girshick, 2018]&amp;lt;/ref&amp;gt;. Время исполнения OpenPose является постоянным, в то время как у Alpha-Pose и Mask R-CNN линейно растет с числом людей на исходных данных.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Задача нахождения объектов на изображении | Нахождение объектов на изображении]]&lt;br /&gt;
* [[Оценка положения | Оценка положения]]&lt;br /&gt;
* [[Компьютерное зрение | Компьютерное зрение]]&lt;br /&gt;
* [[Обнаружение и обработка дорожных знаков и пешеходов | Обнаружение и обработка дорожных знаков и пешеходов]]&lt;br /&gt;
* [[Сверточные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [https://nanonets.com/blog/human-pose-estimation-2d-guide/  Guide to Human Pose Estimation, Sudharshan Chandra Babu, 2019]&lt;br /&gt;
* [https://arxiv.org/pdf/2006.01423.pdf Monocular Human Pose Estimation Yucheng Chena, Yingli Tianb, Mingyi Hea, 2020]&lt;br /&gt;
* [https://arxiv.org/abs/1312.4659 DeepPose: Human Pose Estimation via Deep Neural Networks, Alexander Toshev, Christian Szegedy, 2014]&lt;br /&gt;
* [https://arxiv.org/abs/1511.06645 DeepCut: Joint Subset Partition and Labeling for Multi Person Pose Estimation, Leonid Pishchulin, Eldar Insafutdinov, Siyu Tang, Bjoern Andres, Mykhaylo Andriluka, Peter Gehler, Bernt Schiele, 2016]&lt;br /&gt;
* [https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/README.md OpenPose github page]&lt;br /&gt;
* [https://medium.com/analytics-vidhya/understanding-openpose-with-code-reference-part-1-b515ba0bbc73 Understanding OpenPose (with code reference)— Part 1]&lt;br /&gt;
* [https://arxiv.org/pdf/1612.00137.pdf RMPE: Regional Multi-Person Pose Estimation, Hao-Shu Fang1, Shuqin Xie1, Yu-Wing Tai2, Cewu Lu, 2018]&lt;br /&gt;
* [https://www.mvig.org/research/alphapose.html Shanghai Jiao Tong University, Machine Vision and Intelligence Group]&lt;br /&gt;
* [https://arxiv.org/abs/1612.00137 RMPE: Regional Multi-Person Pose Estimation, Hao-Shu Fang1, Shuqin Xie, Yu-Wing Tai, Cewu Lu, 2018]&lt;br /&gt;
* [https://arxiv.org/pdf/1812.08008.pdf OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields, Zhe Cao, Gines Hidalgo, Tomas Simon, Shih-En Wei, and Yaser Sheikh, 2019]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE&amp;diff=80614</id>
		<title>Анализ видео</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE&amp;diff=80614"/>
				<updated>2021-01-28T17:46:08Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Трекинг''' — определение местоположения объекта (нескольких объектов) во времени.&lt;br /&gt;
&lt;br /&gt;
Задача отслеживания объектов на видео является одной из самых интересных задач в информационных технологиях. На первый взгляд, видеопоток можно рассматривать как последовательность отдельных кадров, поэтому применимы многие алгоритмы, использующиеся для обработки обычных изображений. Сегодня к задаче распознавания объектов также широко применяются методы классификации, а именно, строятся системы, которые определяют к какому классу (изображение содержит объект или изображение не содержит объект) относится изображение.&lt;br /&gt;
&lt;br /&gt;
С другой стороны, видеопоток обладает свойством связности: каждый последующий кадр не сильно отличается от предыдущего, поэтому возможно применение алгоритмов, основанных на этом свойстве. Одной из интересных задач в этой области является трекинг перемещений объектов на видео. В работе &amp;lt;ref&amp;gt;[http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.115.2861&amp;amp;rep=rep1&amp;amp;type=pdf A Survey on Visual Surveillance of Object Motion and Behaviors]&amp;lt;/ref&amp;gt; алгоритмы отслеживания разделены на четыре основные категории: отслеживание областей, отслеживание по активному контуру, отслеживание по характерным признакам, отслеживание по модели.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Распознавание изображений ==&lt;br /&gt;
&lt;br /&gt;
Для детектирования объекта на изображении применяются алгоритмы распознавания. Алгоритм распознавания изображений принимает картинку в качестве входных данных и выводит, что содержится на данном изображении.&lt;br /&gt;
&lt;br /&gt;
Классификация изображений производится поэтапно. На первом шаге входное изображение зачастую предварительно обрабатывается для нормализации контраста и яркости, а также на этом шаге входное изображение обрезается и масштабируется до фиксированного размера.&lt;br /&gt;
&lt;br /&gt;
На втором шаге необходимо упростить изображение путем извлечения важной информации, так как исходное изображение содержит слишком много дополнительной информации, которая не требуется для классификации. Этот шаг называется извлечением признаков. Существует достаточно большое количество признаков, используемых в компьютерном зрении, — это признаки Хаара, HOG (Histogram of Oriented Gradients), SIFT (Scale-Invariant Feature Transform), SURF (Speeded Up Robust Feature) и другие.&lt;br /&gt;
&lt;br /&gt;
На третьем шаге алгоритм классификации принимает вектор признаков в качестве входных данных и выводит к какому классу принадлежит изображение.&lt;br /&gt;
[[Файл: VideoAnalysis1.png|мини|250px|Типы «признаков», использованные в алгоритме]]&lt;br /&gt;
&lt;br /&gt;
=== Метод Виолы-Джонса ===&lt;br /&gt;
&lt;br /&gt;
Основной принцип алгоритмы Виолы-Джонса, основанный на признаках Хаара, заключается в сканировании изображения с помощью сканирующего окна, которое позволяет обнаружить заданный объект. Однако признаки, предложенные Виолой и Джонсом, содержат более одной прямоугольной области и несколько сложнее. На иллюстрации показано ''четыре'' различных типа признаков. Величина каждого признака вычисляется как сумма пикселей в белых прямоугольниках, из которой вычитается сумма пикселей в чёрных областях. Прямоугольные признаки более примитивны, чем steerable filter, и, несмотря на то, что они чувствительны к вертикальным и горизонтальным особенностям изображений, результат их поиска более груб. Однако, при хранении изображения в интегральном формате проверка прямоугольного признака на конкретной позиции проводится за константное время, что является их преимуществом по сравнению с более точными вариантами. Каждая прямоугольная область в используемых признаках всегда смежна с другим прямоугольником, поэтому расчёт признака с ''двумя'' прямоугольниками состоит из ''шести'' обращений в интегральный массив, для признака с ''тремя'' прямоугольниками - из ''восьми'', и с ''четырьмя'' прямоугольниками - из ''девяти''.&lt;br /&gt;
&lt;br /&gt;
== Отслеживание объекта ==&lt;br /&gt;
&lt;br /&gt;
Отслеживанием называется поиск объекта в последовательных кадрах видео. Отслеживание объекта в некоторых случаях может выполняться при помощи алгоритмов детектирования. При детектировании основная идея заключается в том, чтобы сначала определить регионы интереса (ключевые точки), которые будут независимы к преобразованиям. Затем для каждого региона интереса строится его векторное представление — дескриптор. Далее на каждом кадре будет выполняться поиск объекта и выделение его местоположения прямоугольником.&lt;br /&gt;
&lt;br /&gt;
При трекинге целью является нахождение объекта в текущем кадре, если он успешно отслеживался во всех предыдущих кадрах. Так как объект был отслежен до текущего кадра, известны параметры модели движения: скорость и направление движения объекта в предыдущих кадрах. Поэтому можно предсказать новое местоположение объекта, опираясь на его модель движения, и оно будет очень близко к реальному новому положению объекта.&lt;br /&gt;
&lt;br /&gt;
=== Visual object tracking ===&lt;br /&gt;
'''VOT''' (''Visual object tracking'')&lt;br /&gt;
* Рассматривается отслеживание одного объекта&lt;br /&gt;
* Объект уже выделен на первом кадре&lt;br /&gt;
* &amp;quot;Model-free&amp;quot; — нет ничего, кроме одного изображения на первом кадре, т.е. не можем детектировать объект&lt;br /&gt;
* &amp;quot;Short-term&amp;quot; — отслеживаем на коротких промежутках времени, не применяем повторное обнаружение&lt;br /&gt;
* Не используются будущие кадры, только предыдущие&lt;br /&gt;
&lt;br /&gt;
==== Пример алгоритма ====&lt;br /&gt;
[[Файл:Tracking_of_ladon.jpg|left|мини|600px|Трекинг ладони]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
## Находим 100 контрольных точек с помощью метода поиска локальных особенностей (Harris corners) в рамке руки&lt;br /&gt;
## Вычисляем медиану &lt;br /&gt;
## Вычисляем цветовую статистику в окрестности центра&lt;br /&gt;
## Разметить в рамке руки все пиксели, похожие на кожу&lt;br /&gt;
# Слежение&lt;br /&gt;
## Отслеживаем контрольные точки&lt;br /&gt;
## Если точка нарушает условия ''стаи'', то удаляем её&lt;br /&gt;
# Инициализация новых контрольных точек&lt;br /&gt;
## Ищем особенности (Harris corners)&lt;br /&gt;
## Если точка не на коже, то удаляем её&lt;br /&gt;
&lt;br /&gt;
  '''Input''' : Pretrained CNN filters {&amp;lt;tex&amp;gt;w_1&amp;lt;/tex&amp;gt;,..., &amp;lt;tex&amp;gt;w_5&amp;lt;/tex&amp;gt;}&lt;br /&gt;
          Initial target state &amp;lt;tex&amp;gt;x_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''Output''': Estimated target states &amp;lt;tex&amp;gt;x^*_t&amp;lt;/tex&amp;gt; &lt;br /&gt;
  1: Randomly initialize the last layer &amp;lt;tex&amp;gt;w_6&amp;lt;/tex&amp;gt;.&lt;br /&gt;
  2: Train a bounding box regression model.&lt;br /&gt;
  3: Draw positive samples &amp;lt;tex&amp;gt;S^+_1&amp;lt;/tex&amp;gt; and negative samples &amp;lt;tex&amp;gt;S^-_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
  4: Update {&amp;lt;tex&amp;gt;w_4, w_5, w_6&amp;lt;/tex&amp;gt;} using &amp;lt;tex&amp;gt;S^+_1&amp;lt;/tex&amp;gt; and &amp;lt;tex&amp;gt;S^-_1&amp;lt;/tex&amp;gt;;&lt;br /&gt;
  5: &amp;lt;tex&amp;gt;T_s&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\leftarrow&amp;lt;/tex&amp;gt; {1} and &amp;lt;tex&amp;gt;T_l&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\leftarrow&amp;lt;/tex&amp;gt; {1}.&lt;br /&gt;
  6: '''repeat'''&lt;br /&gt;
  7:    Draw target candidate samples &amp;lt;tex&amp;gt;x^i_t&amp;lt;/tex&amp;gt;;&lt;br /&gt;
  8:    Find the optimal target state &amp;lt;tex&amp;gt;x^*_t&amp;lt;/tex&amp;gt; by Eq. (1).&lt;br /&gt;
  9:    '''if''' &amp;lt;tex&amp;gt;f^+(x^*_t)&amp;lt;/tex&amp;gt; &amp;gt; 0.5 '''then'''&lt;br /&gt;
 10:      Draw training samples &amp;lt;tex&amp;gt;S^+_t&amp;lt;/tex&amp;gt; and &amp;lt;tex&amp;gt;S^-_t&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 11:      &amp;lt;tex&amp;gt;T_s \leftarrow T_s&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;}, &amp;lt;tex&amp;gt;T_l \leftarrow T_l&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;}.&lt;br /&gt;
 12:      '''if''' |&amp;lt;tex&amp;gt;T_s&amp;lt;/tex&amp;gt;| &amp;gt; &amp;lt;tex&amp;gt;\tau_s&amp;lt;/tex&amp;gt; '''then''' &amp;lt;tex&amp;gt;T_s \leftarrow T_s&amp;lt;/tex&amp;gt; \ {&amp;lt;tex&amp;gt;min_{\upsilon \in T_s} \upsilon&amp;lt;/tex&amp;gt;}. &lt;br /&gt;
 13:      '''if''' |&amp;lt;tex&amp;gt;T_l&amp;lt;/tex&amp;gt;| &amp;gt; &amp;lt;tex&amp;gt;\tau_l&amp;lt;/tex&amp;gt; '''then''' &amp;lt;tex&amp;gt;T_l \leftarrow T_l&amp;lt;/tex&amp;gt; \ {&amp;lt;tex&amp;gt;min_{\upsilon \in T_l} \upsilon&amp;lt;/tex&amp;gt;}. &lt;br /&gt;
 14:      Adjust &amp;lt;tex&amp;gt;x^*_t&amp;lt;/tex&amp;gt; using bounding box regression.&lt;br /&gt;
 15:    '''if''' &amp;lt;tex&amp;gt;f^+(x^*_t)&amp;lt;/tex&amp;gt; &amp;lt; 0.5 '''then'''&lt;br /&gt;
 16:      Update {&amp;lt;tex&amp;gt;w_4, w_5, w_6&amp;lt;/tex&amp;gt;} using &amp;lt;tex&amp;gt;S^+_{\upsilon \in T_s}&amp;lt;/tex&amp;gt; and &amp;lt;tex&amp;gt;S^-_{\upsilon \in T_s}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 17:    '''else''' '''if''' &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; mod 10 = 0 '''then'''&lt;br /&gt;
 18:      Update {&amp;lt;tex&amp;gt;w_4, w_5, w_6&amp;lt;/tex&amp;gt;} using &amp;lt;tex&amp;gt;S^+_{\upsilon \in T_l}&amp;lt;/tex&amp;gt; and &amp;lt;tex&amp;gt;S^-_{\upsilon \in T_l}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 19: '''until''' end of sequence&lt;br /&gt;
&lt;br /&gt;
(1): &amp;lt;tex&amp;gt;x^* = \underset{x^i}{\arg\max} f^+(x^i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
=== Multiple object tracking ===&lt;br /&gt;
'''MOT''' (''Multiple object tracking'')&lt;br /&gt;
* Задача &amp;quot;выделения и сопровождения множества объектов&amp;quot;&lt;br /&gt;
** Нужно найти все объекты на кадрах&lt;br /&gt;
** Определить сколько у нас разных &amp;quot;экземпляров&amp;quot; объектов&lt;br /&gt;
** Найти на каких кадрах виден каждый экземпляр и где он именно&lt;br /&gt;
* Обобщение задачи &amp;quot;выделение объектов на изображении&amp;quot; на случайном видео&lt;br /&gt;
* В отличие от VOT:&lt;br /&gt;
** Работает со множеством объектов&lt;br /&gt;
** На длительных промежутках времени&lt;br /&gt;
** Есть модель объектов (возможность повторного обнаружения)&lt;br /&gt;
** Разрешено &amp;quot;заглядывать в будущее&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Пример алгоритма ====&lt;br /&gt;
# Поиск голов на ключевых кадрах&lt;br /&gt;
# Построение треклетов&lt;br /&gt;
## Визуальное сопровождение&lt;br /&gt;
## Получаем гипотезы движения объектов между ключевыми кадрами (треклеты)&lt;br /&gt;
# Объединение треклетов в траектории&lt;br /&gt;
## Алгоритм MCMC DA&lt;br /&gt;
### Построение выборки из распределения &lt;br /&gt;
### Алгоритм Метрополиса — Гастингса&lt;br /&gt;
### Элемент с максимальной вероятностью&lt;br /&gt;
## Восстановление положения на промежуточных кадрах&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Multiple Object Tracking Tutorial =====&lt;br /&gt;
&lt;br /&gt;
 function MultipleObjectTrackingExample()&lt;br /&gt;
 // Create objects used for reading video and displaying the results.&lt;br /&gt;
 videoObjects = setupVideoObjects('atrium.mp4');&lt;br /&gt;
 // Create objects used for detecting objects in the foreground of the video.&lt;br /&gt;
 minBlobArea = 400; % Minimum blob size, in pixels, to be considered as a detection&lt;br /&gt;
 detectorObjects = setupDetectorObjects(minBlobArea);&lt;br /&gt;
&lt;br /&gt;
===== Create the Multi-Object Tracker =====&lt;br /&gt;
&lt;br /&gt;
 tracker = multiObjectTracker(...&lt;br /&gt;
    'FilterInitializationFcn', @initDemoFilter, ...&lt;br /&gt;
    'AssignmentThreshold', 30, ...&lt;br /&gt;
    'DeletionThreshold', 22, ...&lt;br /&gt;
    'ConfirmationThreshold', [6 10] ...&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
===== Define a Kalman Filter =====&lt;br /&gt;
&lt;br /&gt;
  function filter = initDemoFilter(detection)&lt;br /&gt;
    // Initialize a Kalman filter for this example.&lt;br /&gt;
    // Define the initial state.&lt;br /&gt;
    state = [detection.Measurement(1); 0; detection.Measurement(2); 0];&lt;br /&gt;
    // Define the initial state covariance.&lt;br /&gt;
    stateCov = diag([50, 50, 50, 50]);&lt;br /&gt;
    // Create the tracking filter.&lt;br /&gt;
    filter = trackingKF('MotionModel', '2D Constant Velocity', ...&lt;br /&gt;
        'State', state, ...&lt;br /&gt;
        'StateCovariance', stateCov, ...&lt;br /&gt;
        'MeasurementNoise', detection.MeasurementNoise(1:2,1:2) ...&lt;br /&gt;
        );&lt;br /&gt;
    end&lt;br /&gt;
  // Count frames to create a sense of time.&lt;br /&gt;
  frameCount = 0;&lt;br /&gt;
  while hasFrame(videoObjects.reader)&lt;br /&gt;
     // Read a video frame and detect objects in it.&lt;br /&gt;
     frameCount = frameCount + 1;                                // Promote frame count&lt;br /&gt;
     frame = readFrame(videoObjects.reader);                     // Read frame&lt;br /&gt;
     [detections, mask] = detectObjects(detectorObjects, frame); // Detect objects in video frame&lt;br /&gt;
     // Run the tracker on the preprocessed detections.&lt;br /&gt;
     confirmedTracks = updateTracks(tracker, detections, frameCount);&lt;br /&gt;
     // Display the tracking results on the video.&lt;br /&gt;
     displayTrackingResults(videoObjects, confirmedTracks, frame, mask);&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
===== Create Video Objects =====&lt;br /&gt;
 &lt;br /&gt;
    function videoObjects = setupVideoObjects(filename)&lt;br /&gt;
        // Initialize video I/O&lt;br /&gt;
        // Create objects for reading a video from a file, drawing the tracked&lt;br /&gt;
        // objects in each frame, and playing the video.&lt;br /&gt;
        // Create a video file reader.&lt;br /&gt;
        videoObjects.reader = VideoReader(filename);&lt;br /&gt;
        // Create two video players: one to display the video,&lt;br /&gt;
        // and one to display the foreground mask.&lt;br /&gt;
        videoObjects.maskPlayer  = vision.VideoPlayer('Position', [20, 400, 700, 400]);&lt;br /&gt;
        videoObjects.videoPlayer = vision.VideoPlayer('Position', [740, 400, 700, 400]);&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
===== Create Detector Objects =====&lt;br /&gt;
&lt;br /&gt;
    function detectorObjects = setupDetectorObjects(minBlobArea)&lt;br /&gt;
        // Create System objects for foreground detection and blob analysis&lt;br /&gt;
        // The foreground detector segments moving objects from the&lt;br /&gt;
        // background. It outputs a binary mask, where the pixel value of 1&lt;br /&gt;
        // corresponds to the foreground and the value of 0 corresponds to&lt;br /&gt;
        // the background.&lt;br /&gt;
        detectorObjects.detector = vision.ForegroundDetector('NumGaussians', 3, ...&lt;br /&gt;
            'NumTrainingFrames', 40, 'MinimumBackgroundRatio', 0.7);&lt;br /&gt;
        // Connected groups of foreground pixels are likely to correspond to&lt;br /&gt;
        // moving objects.  The blob analysis System object finds such&lt;br /&gt;
        // groups (called 'blobs' or 'connected components') and computes&lt;br /&gt;
        // their characteristics, such as their areas, centroids, and the&lt;br /&gt;
        // bounding boxes.&lt;br /&gt;
        detectorObjects.blobAnalyzer = vision.BlobAnalysis('BoundingBoxOutputPort', true, ...&lt;br /&gt;
            'AreaOutputPort', true, 'CentroidOutputPort', true, ...&lt;br /&gt;
            'MinimumBlobArea', minBlobArea);&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
===== Detect Objects =====&lt;br /&gt;
&lt;br /&gt;
    function [detections, mask] = detectObjects(detectorObjects, frame)&lt;br /&gt;
        // Expected uncertainty (noise) for the blob centroid.&lt;br /&gt;
        measurementNoise = 100*eye(2);&lt;br /&gt;
        // Detect foreground.&lt;br /&gt;
        mask = detectorObjects.detector.step(frame);&lt;br /&gt;
        // Apply morphological operations to remove noise and fill in holes.&lt;br /&gt;
        mask = imopen(mask, strel('rectangle', [6, 6]));&lt;br /&gt;
        mask = imclose(mask, strel('rectangle', [50, 50]));&lt;br /&gt;
        mask = imfill(mask, 'holes');&lt;br /&gt;
        // Perform blob analysis to find connected components.&lt;br /&gt;
        [~, centroids, bboxes] = detectorObjects.blobAnalyzer.step(mask);&lt;br /&gt;
        // Formulate the detections as a list of objectDetection objects.&lt;br /&gt;
        numDetections = size(centroids, 1);&lt;br /&gt;
        detections = cell(numDetections, 1);&lt;br /&gt;
        for i = 1:numDetections&lt;br /&gt;
            detections{i} = objectDetection(frameCount, centroids(i,:), ...&lt;br /&gt;
                'MeasurementNoise', measurementNoise, ...&lt;br /&gt;
                'ObjectAttributes', {bboxes(i,:)});&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
===== Display Tracking Results =====&lt;br /&gt;
&lt;br /&gt;
    function displayTrackingResults(videoObjects, confirmedTracks, frame, mask)&lt;br /&gt;
        % Convert the frame and the mask to uint8 RGB.&lt;br /&gt;
        frame = im2uint8(frame);&lt;br /&gt;
        mask = uint8(repmat(mask, [1, 1, 3])) .* 255;&lt;br /&gt;
        if ~isempty(confirmedTracks)&lt;br /&gt;
            // Display the objects. If an object has not been detected&lt;br /&gt;
            // in this frame, display its predicted bounding box.&lt;br /&gt;
            numRelTr = numel(confirmedTracks);&lt;br /&gt;
            boxes = zeros(numRelTr, 4);&lt;br /&gt;
            ids = zeros(numRelTr, 1, 'int32');&lt;br /&gt;
            predictedTrackInds = zeros(numRelTr, 1);&lt;br /&gt;
            for tr = 1:numRelTr&lt;br /&gt;
                // Get bounding boxes.&lt;br /&gt;
                boxes(tr, :) = confirmedTracks(tr).ObjectAttributes{1}{1};&lt;br /&gt;
                // Get IDs.&lt;br /&gt;
                ids(tr) = confirmedTracks(tr).TrackID;&lt;br /&gt;
                if confirmedTracks(tr).IsCoasted&lt;br /&gt;
                    predictedTrackInds(tr) = tr;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            predictedTrackInds = predictedTrackInds(predictedTrackInds &amp;gt; 0);&lt;br /&gt;
            // Create labels for objects that display the predicted rather&lt;br /&gt;
            // than the actual location.&lt;br /&gt;
            labels = cellstr(int2str(ids));&lt;br /&gt;
            isPredicted = cell(size(labels));&lt;br /&gt;
            isPredicted(predictedTrackInds) = {' predicted'};&lt;br /&gt;
            labels = strcat(labels, isPredicted);&lt;br /&gt;
            // Draw the objects on the frame.&lt;br /&gt;
            frame = insertObjectAnnotation(frame, 'rectangle', boxes, labels);&lt;br /&gt;
            // Draw the objects on the mask.&lt;br /&gt;
            mask = insertObjectAnnotation(mask, 'rectangle', boxes, labels);&lt;br /&gt;
        end&lt;br /&gt;
        // Display the mask and the frame.&lt;br /&gt;
        videoObjects.maskPlayer.step(mask);&lt;br /&gt;
        videoObjects.videoPlayer.step(frame);&lt;br /&gt;
    end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Основные трудности ===&lt;br /&gt;
* Вычислительная нагрузка&lt;br /&gt;
** Нужно обрабатывать &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; кадров в секунду&lt;br /&gt;
* Изменение по времени&lt;br /&gt;
** Вид объекта меняется от кадра к кадру из-за ракурса, изменения освещения, внутренний изменений&lt;br /&gt;
* Взаимодействие объектов&lt;br /&gt;
** Перекрытие объектов&lt;br /&gt;
** Визуальное сходство объектов&lt;br /&gt;
* Для оценки качества работы алгоритмов слежения и настройки параметров требуются размеченные эталонные данные&lt;br /&gt;
* Подготовить эталонные данные для видео существенно сложнее, чем для изображения&lt;br /&gt;
** Один эталонный пример для выделения объектов — ''одно'' изображение&lt;br /&gt;
** Один эталонный пример для отслеживания объектов — ''одно'' видео&lt;br /&gt;
* Сейчас есть хорошие конкурсы, но объём данных по прежнему ограничен, особенно для MOT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Вырезание объекта на изображении]]&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
1. [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.115.2861&amp;amp;rep=rep1&amp;amp;type=pdf Hu W. M., Tan T. N., Wang L., Maybank S. A survey of visual surveillance of object motion and behaviors // IEEE Transactions on System, Man, and Cybernetics (T-SMC), Part C. – 2004. Vol. 34(3). – P. 334-352.]&lt;br /&gt;
&lt;br /&gt;
2. Лавелина Е.С., Закуанова М.Р., Масловская М.А. ОТСЛЕЖИВАНИЕ ОБЪЕКТОВ В ВИДЕОПОТОКЕ // Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ: сб. ст. по мат. LIV междунар. студ. науч.-практ. конф. № 6(53). URL: https://sibac.info/archive/technic/6(53).pdf (дата обращения: 20.04.2020)&lt;br /&gt;
&lt;br /&gt;
3. [https://compscicenter.ru/media/courses/2018-spring/spb-images-and-video-2/slides/images_and_video_2_lecture_080518.pdf Анализ изображений и видео. Часть 2]&lt;br /&gt;
&lt;br /&gt;
4. [https://arxiv.org/pdf/1510.07945.pdf Learning Multi-Domain Convolutional Neural Networks for Visual Tracking]&lt;br /&gt;
&lt;br /&gt;
5. [https://www.mathworks.com/help/driving/examples/multiple-object-tracking-tutorial.html Multiple object tracking tutorial]&lt;br /&gt;
&lt;br /&gt;
{{В разработке}}&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=80613</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=80613"/>
				<updated>2021-01-28T17:38:57Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Интерпретируемые модели]]&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Анализ временных рядов]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
*[[Графовые нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Рекурсивные нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Проблемы нейронных сетей]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Сиамская нейронная сеть]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
*[[Сети глубокого доверия]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Оценка положения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Определение положения человека]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Распознавание изогнутого текста]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Карта глубины]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Вписывание части изображения]]&lt;br /&gt;
*[[Блендинг изображений]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Генерация объектов]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)|Порождающие состязательные сети, Generative Adversarial Networks (GAN)]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача трансляции изображений]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Генерация текста]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Генерация изображения по тексту]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
*[[BERT (языковая модель)]]&lt;br /&gt;
*[[Синтез речи]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Диалоговые системы]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
*[[Синтетические наборы данных]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Виды обучения=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение в реальном времени]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Автоматическое машинное обучение==&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;br /&gt;
&lt;br /&gt;
==Обучение с подкреплением==&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Реализация=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Многопоточность в машинном обучении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Scala]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Kotlin]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Kotlin в Jupyter Notebook]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Машинное обучение на мобильных телефонах]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Применение машинного обучения на практике=&lt;br /&gt;
*[[Анализ социальных сетей]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Машинное обучение в медицине]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Deepfake|Генерация дипфейков с помощью нейронных сетей]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Представление знаний]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача планирования движения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Машинное обучение в астрономии]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Компьютерное зрение в микроскопии]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение на больших данных]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Дополнение к ранжированию]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Расположение объектов на изображении]]&lt;br /&gt;
*[[Распознавание текста на изображении]]&lt;br /&gt;
*[[Определение геометрии изображения]]&lt;br /&gt;
*[[Анализ видео]]&lt;br /&gt;
*[[Обнаружение и обработка дорожных знаков и пешеходов]]&lt;br /&gt;
*[[Трансформер]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=78828</id>
		<title>Известные наборы данных</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=78828"/>
				<updated>2021-01-18T20:35:38Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Обзор==&lt;br /&gt;
&lt;br /&gt;
Для многих алгоритмов машинного обучения требуется большое количество данных. Кроме того, что моделям нужны данные для обучения, нужно сравнивать эффективность разных моделей. Поскольку поиск хороших наборов данных и их разметка {{---}} трудная задача, на помощь приходят уже собранные и размеченные наборы данных, для которых зачастую уже опубликованы результаты каких-то алгоритмов, и можно оценить, насколько хорошо работает исследуемая модель. &lt;br /&gt;
&lt;br /&gt;
В этой статье рассмотрены с примерами несколько популярных наборов данных. Другие классические наборы можно посмотреть, например, на википедии&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/List_of_datasets_for_machine-learning_research[https://en.wikipedia.org/wiki/List_of_datasets_for_machine-learning_research]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Набор данных&lt;br /&gt;
! Какие объекты&lt;br /&gt;
! Число объектов&lt;br /&gt;
! Число классов&lt;br /&gt;
! Доля ошибок лучшего опубликованного алгоритма&lt;br /&gt;
|-&lt;br /&gt;
| Iris&lt;br /&gt;
| Данные измерений четырех параметров цветков ириса&lt;br /&gt;
| 150&lt;br /&gt;
| 3&lt;br /&gt;
| N/A, малый размер набора данных&lt;br /&gt;
|-&lt;br /&gt;
| MNIST&lt;br /&gt;
| Рукописные цифры, черно-белые изображения 32х32 пикселя&lt;br /&gt;
| 70 000&lt;br /&gt;
| 10&lt;br /&gt;
| 0.18% &amp;lt;ref&amp;gt;https://arxiv.org/pdf/1805.01890.pdf[https://arxiv.org/pdf/1805.01890.pdf]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| CIFAR-10&lt;br /&gt;
| Фотографии объектов разных классов, цветные изображения 32х32 пикселя&lt;br /&gt;
| 60 000&lt;br /&gt;
| 10&lt;br /&gt;
| 1.23% &amp;lt;ref&amp;gt;https://arxiv.org/pdf/1805.09501.pdf[https://arxiv.org/pdf/1805.09501.pdf]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ImageNet&lt;br /&gt;
| Фотографии с указанием классов объектов на изображении и их позиций&lt;br /&gt;
| Больше 14 миллионов&lt;br /&gt;
| Больше 21 тысячи&lt;br /&gt;
| Большое количество различных метрик, см. ImageNet Competition. 1-5% на классификацию&lt;br /&gt;
|-&lt;br /&gt;
| ADE20K&lt;br /&gt;
| Фотографии с указанием семантической сегментации сущностей на них. Для каждого объекта также приведена его сегментация на части&lt;br /&gt;
| 22 210 (434 826 вхождений объектов)&lt;br /&gt;
| 3 169&lt;br /&gt;
| 17.93% &amp;lt;ref&amp;gt;https://arxiv.org/pdf/2004.08955v1.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Coco&lt;br /&gt;
| Фотографии сложных повседневных сцен, содержащих объекты в их естественном окружении.&lt;br /&gt;
| 328 000 изображений (более 2.5 миллионов вхождений объектов)&lt;br /&gt;
| 91&lt;br /&gt;
| Много метрик. Зависит, в частности, от площади, занимаемой объектом на изображении. &amp;lt;ref&amp;gt;http://cocodataset.org/#detection-leaderboard[http://cocodataset.org/#detection-leaderboard]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Fashion-MNIST&lt;br /&gt;
| Черно-белые фотографии различных видов одежды, 28x28 пикселей.&lt;br /&gt;
| 60000 изображений + 10000 тестовых изображений&lt;br /&gt;
| 10&lt;br /&gt;
| 3.3% (WRN40-4 8.9M params) &amp;lt;ref&amp;gt;https://github.com/zalandoresearch/fashion-mnist[https://github.com/zalandoresearch/fashion-mnist]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Boston housing&lt;br /&gt;
| Данные о недвижимости в районах Бостона.&lt;br /&gt;
| 506&lt;br /&gt;
| 13&lt;br /&gt;
| RMSE-1.33055&lt;br /&gt;
|-&lt;br /&gt;
| Caltech-UCSD Birds 200&lt;br /&gt;
| Данные о видах птиц&lt;br /&gt;
| 11788&lt;br /&gt;
| 200&lt;br /&gt;
| не описано&lt;br /&gt;
|-&lt;br /&gt;
| 102 Category Flower&lt;br /&gt;
| Данные о видах цветов&lt;br /&gt;
| 8189&lt;br /&gt;
| 102&lt;br /&gt;
| не описано&lt;br /&gt;
|-&lt;br /&gt;
| Visual Genome&lt;br /&gt;
| Данные о связи объектов на картинке с текстом&lt;br /&gt;
| 108077 &lt;br /&gt;
| 76340 объектов, 15626 атрибутов, 47 зависимостей&lt;br /&gt;
| Слишком много метрик &amp;lt;ref&amp;gt;https://arxiv.org/pdf/1602.07332.pdf [https://arxiv.org/pdf/1602.07332.pdf]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| CelebA&lt;br /&gt;
| Изображения знаменитостей, охватывающие большие вариации поз&lt;br /&gt;
| Больше 200 тысяч &lt;br /&gt;
| 202 599 изображений лиц, 10 177 уникальных личностей, 5 ориентиров, 40 бинарных атрибутов&lt;br /&gt;
| не описано&lt;br /&gt;
|- &lt;br /&gt;
| Cityscapes&lt;br /&gt;
| Изображения городских улиц 50 городов с указанием семантической сегментации сущностей на них. Для каждого объекта также приведена его сегментация на части&lt;br /&gt;
| 5000 изображений с разрешением 1024 * 2048, предварительно разделенных на наборы для обучения (2975), проверки (500) и тестирования (1525) + 20000 изображений с грубыми аннотациями&lt;br /&gt;
| 30 &lt;br /&gt;
| не описано&lt;br /&gt;
|-&lt;br /&gt;
| ICDAR 2017 &amp;quot;COCO Text&amp;quot;&lt;br /&gt;
| набор данных, основанный на датасете &amp;quot;MS COCO&amp;quot;&amp;lt;ref&amp;gt;https://vision.cornell.edu/se3/wp-content/uploads/2019/01/ICDAR2017b.pdf&amp;lt;/ref&amp;gt;, где собраны обычные изображения ежедневных сцен, на которых, возможно, присутствует текст&lt;br /&gt;
| 63686 изображений, 43686 {{---}} обучающая выборка,10000 {{---}} валидирующая выборка, 10000 {{---}} тестовая&lt;br /&gt;
| 173589 слов&lt;br /&gt;
| не описано&lt;br /&gt;
|-&lt;br /&gt;
| Pointing'04&lt;br /&gt;
| Изображения лиц людей с разными углами поворота и наклона&lt;br /&gt;
| 15 сетов по 186 изображений в каждом&lt;br /&gt;
| 93&lt;br /&gt;
| 7.9% &amp;lt;ref&amp;gt;https://www.researchgate.net/publication/221125207_Generalized_subspace_based_high_dimensional_density_estimation&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| FASSEG&lt;br /&gt;
| Изображения лиц людей с разными углами поворота, как в оригинале, так и в сегментированном виде&lt;br /&gt;
| Часть frontal01: 70, часть frontal02: 70, часть multipose01: 200&lt;br /&gt;
| frontal01 и frontal02 {{---}} разделяют изображение на 6 различных сегментов, multipose01 {{---}} 13 углов поворота&lt;br /&gt;
| 7.73% &amp;lt;ref&amp;gt;https://github.com/massimomauro/FASSEG-repository/blob/master/papers/multiclass_face_segmentation_ICIP2015.pdf&amp;lt;/ref&amp;gt; для сегментации,  22.6% &amp;lt;ref&amp;gt;https://github.com/massimomauro/FASSEG-repository/blob/master/papers/pose_estimation_by_segmentation_ICME2017.pdf&amp;lt;/ref&amp;gt; для определения поз&lt;br /&gt;
|-&lt;br /&gt;
| MPI&lt;br /&gt;
| Изображения повседневной деятельности людей в различных позах&lt;br /&gt;
| 25 тысяч&lt;br /&gt;
| 410&lt;br /&gt;
| ~10% &amp;lt;ref&amp;gt;http://human-pose.mpi-inf.mpg.de/#results&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Iris==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
Iris {{---}} небольшой набор данных для задачи классификации, опубликованный еще в 1936 году Робертом Фишером, используя данные биолога Эдгара Андерсона. В этом наборе данных представлены по 50 описаний цветков одного из трех типов {{---}} Ирис щетинистый (Iris setosa), Ирис виргинский (Iris virginica) и Ирис разноцветный (Iris versicolor). &lt;br /&gt;
&lt;br /&gt;
Для каждого цветка измерены четыре величины {{---}} длина чашелистника (англ. sepal length), ширина чашелистника (sepal width), длина лепестка (англ. petal length), ширина лепестка (англ. petal width). Все цветки промаркированы одним из трех типов, что позволяет тестировать на нем алгоритмы классификации. Интересное наблюдение {{---}} один из классов цветков линейно отделим от двух других.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Длина чашелистника&lt;br /&gt;
! Ширина чашелистника&lt;br /&gt;
! Длина лепестка&lt;br /&gt;
! Ширина лепестка&lt;br /&gt;
! Класс&lt;br /&gt;
|-&lt;br /&gt;
| 5.1&lt;br /&gt;
| 3.5&lt;br /&gt;
| 1.4&lt;br /&gt;
| 0.2&lt;br /&gt;
| setosa&lt;br /&gt;
|-&lt;br /&gt;
| 7.0&lt;br /&gt;
| 3.2&lt;br /&gt;
| 4.7&lt;br /&gt;
| 1.4&lt;br /&gt;
| versicolor&lt;br /&gt;
|-&lt;br /&gt;
| 6.3&lt;br /&gt;
| 3.3&lt;br /&gt;
| 6.0&lt;br /&gt;
| 2.5&lt;br /&gt;
| virginica&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
  from sklearn.datasets import load_iris&lt;br /&gt;
  from sklearn.ensemble import RandomForestClassifier&lt;br /&gt;
&lt;br /&gt;
  iris=load_iris()&lt;br /&gt;
  X = iris.data&lt;br /&gt;
  Y = iris.target&lt;br /&gt;
  X, Y = shuffle(X, Y)&lt;br /&gt;
  n = len(iris.data)&lt;br /&gt;
  train = n // 2&lt;br /&gt;
  clf = RandomForestClassifier(n_estimators=100, max_depth=2, random_state=0)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
   % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
       type  precision    recall  f1-score   support&lt;br /&gt;
          0       1.00      1.00      1.00        28&lt;br /&gt;
          1       0.95      0.88      0.91        24&lt;br /&gt;
          2       0.88      0.96      0.92        23&lt;br /&gt;
  avg / total     0.95      0.95      0.95        75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MNIST==&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
[[Файл:MnistExamples.png|мини| Рисунок 1. Примеры изображений из датасета MNIST [https://en.wikipedia.org/wiki/MNIST_database#/media/File:MnistExamples.png Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
Набор данных MNIST {{---}} большой (порядка 60 000 тренировочных и 10 000 проверочных объектов, помеченных на принадлежность одному из десяти классов {{---}} какая цифра изображена на картинке) набор картинок с рукописными цифрами, часто используемый для тестирования различных алгоритмов распознавания образов. Он содержит черно-белые картинки размера 28x28 пикселей, исходно взятые из набора образцов из бюро переписи населения США, к которым были добавлены тестовые образцы, написанные студентами американских университетов. На рисунке 1 представлены примеры рукописных цифр из данного датасета.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
На сайте&amp;lt;ref&amp;gt;http://yann.lecun.com/exdb/mnist/[http://yann.lecun.com/exdb/mnist/]&amp;lt;/ref&amp;gt; MNIST можно найти список лучших результатов, достигнутых алгоритмами на это наборе данных. Так, худший из записанных результатов достигнут простым линейным классификатором (12% ошибок), а подавляющее большинство лучших результатов получены алгоритмами на основе нейронных сетей. Так, ансамбль из 35 сверточных нейронных сетей в 2012 году сумел получить всего 0.23% ошибок на наборе данных, что является очень хорошим результатом, вполне сравнимым с человеком.&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
Простой пример, скачивающий набор данных и запускающий на нем один из классификаторов. Даже с уменьшением набора данных в сто раз и не самым подходящим классификатором точность выше половины угаданных цифр {{---}} заметно лучше, чем случайная разметка. С результатом работы данного кода можно ознакомиться на рисунке 2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  from sklearn.datasets import fetch_mldata&lt;br /&gt;
  from numpy import arange&lt;br /&gt;
  import random&lt;br /&gt;
  from sklearn.tree import DecisionTreeClassifier&lt;br /&gt;
  from sklearn import datasets, svm, metrics&lt;br /&gt;
&lt;br /&gt;
[[Файл:Mnist-predict.png|мини|Рисунок 2. Результат работы классификатора]]&lt;br /&gt;
&lt;br /&gt;
  mnist = fetch_mldata('MNIST original')&lt;br /&gt;
  indices = arange(len(mnist.data))&lt;br /&gt;
  randidx = random.sample(list(indices), 500)&lt;br /&gt;
  mnist.data = mnist.data[randidx]&lt;br /&gt;
  mnist.target = mnist.target[randidx]&lt;br /&gt;
  X = mnist.data&lt;br /&gt;
  Y = mnist.target&lt;br /&gt;
  train = len(X)//2&lt;br /&gt;
  clf = DecisionTreeClassifier(criterion=&amp;quot;entropy&amp;quot;, max_depth=5)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
     % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
    digit    precision    recall  f1-score   support&lt;br /&gt;
        0         0.68      0.58      0.62        26&lt;br /&gt;
        1         0.71      0.87      0.78        23&lt;br /&gt;
        2         0.29      0.24      0.26        25&lt;br /&gt;
        3         0.64      0.28      0.39        25&lt;br /&gt;
        4         0.50      0.54      0.52        28&lt;br /&gt;
        5         0.46      0.46      0.46        24&lt;br /&gt;
        6         0.47      0.62      0.54        24&lt;br /&gt;
        7         0.66      0.78      0.71        27&lt;br /&gt;
        8         0.32      0.60      0.42        15&lt;br /&gt;
        9         0.59      0.39      0.47        33&lt;br /&gt;
  avg/total       0.54      0.53      0.52       250&lt;br /&gt;
&lt;br /&gt;
==CIFAR-10==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:Cifar-10.png|мини|Рисунок 3. Примеры изображений из датасета CIFAR-10 [https://medium.com/@jannik.zuern/training-a-cifar-10-classifier-in-the-cloud-using-tensorflow-and-google-colab-f3a5fbdfe24d Источник]]]&lt;br /&gt;
CIFAR-10 (Canadian Institute For Advanced Research) {{---}} еще один большой набор изображений, который обычно используется для тестирования алгоритмов машинного обучения. Он содержит 60 000 цветных картинок размером 32х32 пикселя, размеченных в один из десяти классов: самолеты, автомобили, коты, олени, собаки, лягушки, лошади, корабли и грузовики. В наборе данных по 6000 картинок каждого класса, примеры некоторых из них приведены на рисунке 3. CIFAR-10 является размеченным подмножеством заметно большего набора данных, состоящего примерно из восьмидесяти миллионов изображений.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
С момента публикации CIFAR-10 вышло много статей, авторы которых пытаются добиться максимальной точности на этом наборе данных. В среднем более хорошие результаты показывают различные сверточные нейронные сети с различными вариантами настройки и дополнительной предобработки данных.&lt;br /&gt;
&lt;br /&gt;
На википедии&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/CIFAR-10#Research_Papers_Claiming_State-of-the-Art_Results_on_CIFAR-10[https://en.wikipedia.org/wiki/CIFAR-10#Research_Papers_Claiming_State-of-the-Art_Results_on_CIFAR-10]&amp;lt;/ref&amp;gt;  можно найти таблицу лучших публикаций с процентами ошибки на этом наборе данных. Так, лучший на сегодняшний момент алгоритм, опубликованный в мае 2018 года, допускает ошибку всего порядка 1.48%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
Простой код, скачивающий CIFAR-10 из интернета и запускающий на нем стандартный классификатор.&lt;br /&gt;
&lt;br /&gt;
  from keras.datasets import cifar10&lt;br /&gt;
  from sklearn.utils import shuffle    &lt;br /&gt;
&lt;br /&gt;
  (x_train, y_train), (x_test, y_test) = cifar10.load_data()&lt;br /&gt;
  X, Y = shuffle(x_train, y_train)&lt;br /&gt;
  n = 1000&lt;br /&gt;
  X, Y = X[:n], Y[:n]&lt;br /&gt;
  X, Y = X.reshape((n, -1)), Y.reshape((n,))&lt;br /&gt;
  train = n // 2&lt;br /&gt;
  clf = DecisionTreeClassifier(criterion=&amp;quot;entropy&amp;quot;, max_depth=5)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
   % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ImageNet==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:Imagenet.png|мини| Рисунок 4. Пример разметки объектов в датасете ImageNet [http://www.image-net.org/challenges/LSVRC/2014/ Источник]]]&lt;br /&gt;
&lt;br /&gt;
База данных Imagenet {{---}} проект по созданию и сопровождению массивной базы данных аннотированных изображений. Аннотация изображений происходит путем краудсорсинга сообществом. Из-за этого достигается большое количество размеченных данных.&lt;br /&gt;
&lt;br /&gt;
Особенность данного набора данных {{---}} про каждую картинку известно несколько фактов вида &amp;quot;в этом прямоугольнике есть автомобиль&amp;quot; (см. рис. 4), что в совокупности с индексом по типам объектов, которые есть на изображениях, позволяет обучить алгоритм для распознавания объектов какой-то конкретной категории. На август 2017 года в ImageNet 14 197 122 изображения, разбитых на 21 841 категорию.&lt;br /&gt;
&lt;br /&gt;
===Imagenet Challenge===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Imagenet-contest.png|мини| Рисунок 5. Лучшие результаты на Imagenet Challenge за различные годы [https://en.wikipedia.org/wiki/File:ImageNet_error_rate_history_(just_systems).svg Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
Вместе с публикацией набора данных стартовал конкурс ImageNet Large Scale Visual Recognition Challenge (ILSVRC&amp;lt;ref&amp;gt;http://www.image-net.org/challenges/LSVRC/[http://www.image-net.org/challenges/LSVRC/]&amp;lt;/ref&amp;gt;). В его рамках участникам предлагается достигнуть наибольшей точности при классификации набора изображений. Организаторы использовали около тысячи различных категорий объектов, которые нужно классифицировать. На примере этого конкурса хорошо видно, как в 2010-е годы люди научились заметно лучше распознавать образы на изображениях, уже в 2017 году большинство участвующих команд преодолели порог в 95% правильных ответов. История улучшения результатов представлена на рисунке 5. Эта задача, проблема компьютерного зрения, имеет огромное практическое значение во многих прикладных областях.&lt;br /&gt;
&lt;br /&gt;
==ADE20K==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:ADE20K_merged.png|мини|300px|Рисунок 6. Изображение из ADE20K и его разбиение на части.]]&lt;br /&gt;
ADE20K {{---}} набор изображений с размеченными сущностями, который хорошо подходит для задачи [[Сегментация изображений|семантической сегментации данных]] в компьютерном зрении, пример разметки приведен на рисунке 6. Особенность этого набора состоит в том, что кроме объектов приводится также информация об их составных частях: например, если на изображении находится человек, то в дополнение к местоположению его фигуры будет также приведено положение его глаз и носа.&lt;br /&gt;
&lt;br /&gt;
Подобные наборы данных часто страдают от несогласованности меток при их разметке сообществом. Для ADE20K эта проблема была решена {{---}} все изображения размечал только один человек, что обусловило высокую согласованность меток.&lt;br /&gt;
&lt;br /&gt;
===Структура данных &amp;lt;ref&amp;gt;https://groups.csail.mit.edu/vision/datasets/ADE20K/#Description&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Всего в наборе данных находится 22 210 изображений, из них 20 210 составляют набор для обучения, а 2 000 {{---}} набор для проверки. Максимальный размер изображения {{---}} 4500x6000p. Минимальный {{---}} 130x96p. Средний размер изображений равен 1.5Мп. К каждому изображению прилагается его RGB-оригинал (*.jpg), сегментация на сущности (*_seg.png), несколько изображений с сегментацией на части (*_seg_N.png, где N {{---}} это число) и описание признаков на изображении (*.txt). &lt;br /&gt;
&lt;br /&gt;
ADE20K также содержит дополнительный файл на языке MATLAB, который позволяет загрузить изображения и информацию об их признаках.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
Основными метриками для этого набора данных являются пиксельная точность (англ. Pixel accuracy), которая состоит из доли корректно классифицированных пикселей, и [[Оценка качества в задаче кластеризации#Индекс Жаккара (англ. Jaccard Index)|индекс Жаккара]]. На момент создания ADE20K, лучшие алгоритмы машинного обучения давали пиксельную точность равную ~76% и индекс Жаккара равный ~0.34 на проверочном множестве&amp;lt;ref&amp;gt;https://arxiv.org/pdf/1608.05442.pdf&amp;lt;/ref&amp;gt;. Сейчас лучшей нейронной сетью для этого набора данных является [https://arxiv.org/pdf/2004.08955v1.pdf ResNeSt], который позволяет достичь 82.07% пиксельной точности и индекс Жаккара 46.91%.&lt;br /&gt;
&lt;br /&gt;
==COCO==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Coco-examples.jpg|мини|400px| Рисунок 7. Пример изображений из MS Coco [http://cocodataset.org/images/coco-examples.jpg Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
MS COCO (англ. ''Common Objects in Context'') {{---}} большой набор изображений. Состоит из более чем 330000 изображений (220000  {{---}} размеченных), с более чем 1.5 милионов объектов на них. Примеры изображений приведены на рисунке 7. Все объекты находятся в их естественном окружении (контексте). Изображения, как правило, содержат объекты разных классов (только 10% имеют единственный класс). Все изображения сопровождаются аннотациями, хранящихся в json формате. Подробнее о структуре аннотаций можно прочитать [http://cocodataset.org/#format-data здесь].&lt;br /&gt;
&lt;br /&gt;
COCO имеет пять типов аннотаций для разных задач:&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* Обнаружение ключевых точек. Обнаружение объектов и локализация их ключевых точек.&lt;br /&gt;
* Сегментация окружения (англ. ''Stuff Segmentation''). В отличии от задачи обнаружения объектов (человек, кот, машина), здесь внимание фокусируется на том, что его окружает (трава, стена, небо). Метки классов организованы в иерархическом порядке (напр., ''stuff → outdoor-stuff → sky → clouds''). Чтобы добиться совместимости с задачей обнаружения объектов, используются следующие идентификаторы категорий:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Идентификатор&lt;br /&gt;
! Соответствие&lt;br /&gt;
|-&lt;br /&gt;
|1-91 || категории объектов (не используются в сегментации окружения)&lt;br /&gt;
|-&lt;br /&gt;
|92-182 || категории окружения&lt;br /&gt;
|-&lt;br /&gt;
|183 || категория &amp;quot;другое&amp;quot; (выбирается для &amp;quot;объектов&amp;quot;)&lt;br /&gt;
|}&lt;br /&gt;
* Паноптическая сегментация (англ. ''Panoptic Segmentation'') {{---}} обединение задач семантической сегментации ([[Сегментация изображений]]) и обнаружения объектов. Задача состоит в том, чтобы классифицировать все пиксели изображения на принадлежность к некоторому классу, а также определить, к какому из экземпляров данного класса они относятся. &lt;br /&gt;
* Аннотирование изображения (англ. ''Caption Evaluation''). Генерация сопроводительной подписи к изображению.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
Результат задачи зависит от многих факторов. Например, для задачи обнаружения объекта, наилучшие результаты алгоритмы показывают на крупных объектах. &lt;br /&gt;
Более подробно с метриками можно ознакомиться [http://cocodataset.org/#detection-leaderboard здесь].&lt;br /&gt;
Приведем лишь результаты детектора [https://arxiv.org/abs/1512.03385 ResNet] (bbox) - победителя 2015 Detection Challenge.&lt;br /&gt;
Графики, изображенные на рисунках 8 и 9, представляют из себя семейство кривых Pressision Recall для различных метрик.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:Detection-analysis-person.jpg|мини| Рисунок 8. PR кривые для класса &amp;quot;Person&amp;quot; [http://cocodataset.org/images/detection-analysis-person.jpg Оригинал]]]&lt;br /&gt;
 |[[Файл:Detection-analysis-all.jpg|мини|Рисунок 9. Усредненные значения для всех классов [http://cocodataset.org/images/detection-analysis-all.jpg Оригинал]]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
&lt;br /&gt;
Пример использования [https://github.com/cocodataset COCO API] на python:&lt;br /&gt;
&lt;br /&gt;
  %matplotlib inline&lt;br /&gt;
  from pycocotools.coco import COCO&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  import skimage.io as io&lt;br /&gt;
  import matplotlib.pyplot as plt&lt;br /&gt;
  import pylab&lt;br /&gt;
  pylab.rcParams['figure.figsize'] = (8.0, 10.0)&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  dataDir='..'&lt;br /&gt;
  dataType='val2017'&lt;br /&gt;
  annFile='{}/annotations/instances_{}.json'.format(dataDir,dataType)&lt;br /&gt;
  &lt;br /&gt;
  coco=COCO(annFile)&lt;br /&gt;
  &lt;br /&gt;
  cats = coco.loadCats(coco.getCatIds())&lt;br /&gt;
  nms=[cat['name'] for cat in cats]&lt;br /&gt;
  print('COCO categories: \n{}\n'.format(' '.join(nms)))&lt;br /&gt;
  &lt;br /&gt;
  nms = set([cat['supercategory'] for cat in cats])&lt;br /&gt;
  print('COCO supercategories: \n{}'.format(' '.join(nms)))&lt;br /&gt;
  &lt;br /&gt;
  # get all images containing given categories, select one at random&lt;br /&gt;
  catIds = coco.getCatIds(catNms=['person','dog','skateboard']);&lt;br /&gt;
  imgIds = coco.getImgIds(catIds=catIds );&lt;br /&gt;
  imgIds = coco.getImgIds(imgIds = [324158])&lt;br /&gt;
  img = coco.loadImgs(imgIds[np.random.randint(0,len(imgIds))])[0]&lt;br /&gt;
  &lt;br /&gt;
  # load and display image&lt;br /&gt;
  # I = io.imread('%s/images/%s/%s'%(dataDir,dataType,img['file_name']))&lt;br /&gt;
  # use url to load image&lt;br /&gt;
  I = io.imread(img['coco_url'])&lt;br /&gt;
  plt.axis('off')&lt;br /&gt;
  plt.imshow(I)&lt;br /&gt;
  plt.show()&lt;br /&gt;
&lt;br /&gt;
[[Файл:Coco-1.png |мини| center|Рисунок 10. Пример изображения из датасета COCO [https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoDemo.ipynb Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
  # load and display instance annotations&lt;br /&gt;
  plt.imshow(I); plt.axis('off')&lt;br /&gt;
  annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)&lt;br /&gt;
  anns = coco.loadAnns(annIds)&lt;br /&gt;
  coco.showAnns(anns)&lt;br /&gt;
&lt;br /&gt;
[[Файл:Coco-2.png|мини|center|Рисунок 11. Пример обнаруженного объекта [https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoDemo.ipynb Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
==Fashion-MNIST==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:FMNIST.png|мини|Рисунок 12. Пример изображений из Fashion-MNIST]]&lt;br /&gt;
Fashion-MNIST {{---}} это набор изображений, взятых из статей [https://jobs.zalando.com/en/tech/?gh_src=nevh2y1 Zalando], состоящий из обучающего набора из 60000 примеров и тестового набора из 10000 примеров. Каждый пример представляет собой черно-белое изображение 28x28 (см. рис. 12), связанное с меткой из 10 классов. Создатели Fashion-MNIST предложили его в качестве прямой замены исходного набора данных MNIST, состоящего из рукописных цифр, для сравнительного анализа алгоритмов машинного обучения. Он имеет одинаковый размер изображения и структуру разделений для обучения и тестирования. Аргументировали необходимость такой замены тем, что исходный набор данных MNIST действительно хорошо отражает возможность алгоритма хоть что-то классифицировать, но если алгоритм работает на стандартном MNIST, он все равно может не сработать на других примерах данных. Также на наборе данных MNIST научились достигать слишком высоких результатов точности (97% для классических алгоритмов машинного обучения и 99.7% для сверточных нейронных сетей), в то время как MNIST не отражает современных сложных проблем компьютерного зрения. Это позволило сделать предположение о том, что набор данных MNIST слишком простой по современным меркам и его требуется заменить.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
На сайте&amp;lt;ref&amp;gt;https://github.com/zalandoresearch/fashion-mnist&amp;lt;/ref&amp;gt; набора данных можно найти список лучших результатов, достигнутых алгоритмами на этом наборе данных. Так как задача классификации набора данных Fashion-MNIST сложнее, чем в случае стандартного набора MNIST, в таблице представлены только алгоритмы глубокого обучения, т.к. только для них эта задача имеет смысл. Так, худший из записанных результатов достигнут сверточной нейронной сетью с 3 сверточными слоями и одним слоем пулинга (12.4% ошибок), а подавляющее большинство лучших результатов получены боле сложными архитектурами. Лучший результат был достигнут WRN сетью и составляет всего 3.3% ошибки.&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
&lt;br /&gt;
Простой код, скачивающий Fashion-MNIST с использованием NumPy и запускающий на нем стандартный классификатор.&lt;br /&gt;
&lt;br /&gt;
  import mnist_reader&lt;br /&gt;
  from sklearn.datasets import load_iris&lt;br /&gt;
  from sklearn.ensemble import RandomForestClassifier&lt;br /&gt;
  from sklearn.utils import shuffle&lt;br /&gt;
  x_train, y_train = mnist_reader.load_mnist('data/fashion', kind='train')&lt;br /&gt;
  x_test, y_test = mnist_reader.load_mnist('data/fashion', kind='t10k')&lt;br /&gt;
  X, Y = shuffle(x_train, y_train)&lt;br /&gt;
  n = 1000&lt;br /&gt;
  X, Y = X[:n], Y[:n]&lt;br /&gt;
  X, Y = X.reshape((n, -1)), Y.reshape((n,))&lt;br /&gt;
  train = n // 2&lt;br /&gt;
  clf = DecisionTreeClassifier(criterion=&amp;quot;entropy&amp;quot;, max_depth=5)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
   % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
==Boston Housing==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
Boston Housing содержит данные, собранные Службой переписи населения США (англ. ''U.S Census Service''), касающиеся недвижимости в районах Бостона. Набор данных состоит из 13 признаков и 506 строк и также предоставляет такую информацию, как уровень преступности (CRIM), ставка налога на недвижимость (TAX), возраст людей, которым принадлежит дом (AGE), соотношение числа учащихся и преподавателей в районе (PTRATIO) и другие. Данный набор данных используется для предсказания следующих целевых переменных: средняя стоимость дома (MEDV) и уровень закиси азота (NOX).&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
Для решения задачи предсказания средней стоимости дома используется множественная линейная регрессия. Метрикой качества модели выступает корень из среднеквадратичной ошибки ([[Оценка качества в задачах классификации и регрессии|англ. ''root-mean-square error, RMSE'' ]]). В среднем, значение RMSE на данном наборе данных находится в районе 3,5-5 в зависимости от выбранной модели. Однако на соревновании на сайте [https://www.kaggle.com/sagarnildass/predicting-boston-house-prices Kaggle] пользователь [https://www.kaggle.com/c/boston-housing/leaderboard MayankSatnalika] получил результат 1.33055.&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
&lt;br /&gt;
Простой код, загружающий набор данных из библиотеки sklearn с использованием NumPy и Pandas и запускающий на нем алгоритм линейной регрессии.&lt;br /&gt;
  import pandas as pd&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  from sklearn.datasets import load_boston&lt;br /&gt;
  from sklearn.model_selection import train_test_split&lt;br /&gt;
  from sklearn.linear_model import LinearRegression&lt;br /&gt;
  from sklearn.metrics import mean_squared_error&lt;br /&gt;
  boston_dataset = load_boston()&lt;br /&gt;
  boston = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)&lt;br /&gt;
  boston['MEDV'] = boston_dataset.target&lt;br /&gt;
  X = pd.DataFrame(np.c_[boston['LSTAT'], boston['RM']], columns=['LSTAT', 'RM'])&lt;br /&gt;
  Y = boston['MEDV']&lt;br /&gt;
  X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=5)&lt;br /&gt;
  lin_model = LinearRegression()&lt;br /&gt;
  lin_model.fit(X_train, Y_train)&lt;br /&gt;
  y_train_predict = lin_model.predict(X_train)&lt;br /&gt;
  rmse = (np.sqrt(mean_squared_error(Y_train, y_train_predict)))# 5.6371293350711955&lt;br /&gt;
  y_test_predict = lin_model.predict(X_test)&lt;br /&gt;
  rmse = (np.sqrt(mean_squared_error(Y_test, y_test_predict)))# 5.13740078470291&lt;br /&gt;
&lt;br /&gt;
==Caltech-UCSD Birds 200 (CUB)==&lt;br /&gt;
[[Файл:cub_dataset_logo.jpg |мини|Рисунок 13. Пример изображений из CUB [http://www.vision.caltech.edu/visipedia/collage.jpg Оригинал]]] &lt;br /&gt;
===Описание===&lt;br /&gt;
Caltech-UCSD Birds 200 {{---}} это набор данных, содержащий изображения птиц. Данный набор включает в себя фотографии 200 видов птиц. Большинство видов птиц, представленных в наборе данных, являются североамериканскими. Общее количество категорий птиц составляет 200, в набор данных 2010 года включены 6033 изображения, а в набор данных 2011 года {{---}} 11 788 изображений, некоторые из них приведены на рисунке 13. &lt;br /&gt;
&lt;br /&gt;
===Поиск и аннотация изображений===&lt;br /&gt;
Изображения для набора данных были получены с сайта Flickr и отфильтрованы с помощью Amazon Mechanical Turk. Каждое изображение аннотировано границей области, содержащей птицу, грубой сегментацией птиц, набором меток атрибутов и текстовым описанием. Примеры аннотированных изображений представлены на рисунке 14.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot; &lt;br /&gt;
 |[[Файл:birds_annotations.png|800px|мини|Рисунок 14. Изображения и аннотации из CUB-200]] &lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==102 Category Flower==&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:flowers-examples.jpg|мини|Рисунок 15. Примеры изображений из Oxford Flowers 102]]&lt;br /&gt;
Oxford Flowers 102 {{---}} набор данных, состоящий из цветов, встречающихся в Соединенном Королевстве. Набор стоит состоит из 102 видов цветов и содержит от 40 до 258 изображений каждого вида. Примеры изображений из данного датасета приведены на рисунке 15. Все изображения имеют крупный масштаб. Цветы представлены в различных ракурсах и вариациях освещения. Кроме того, в наборе присутствуют виды цветов очень похожие друг на друга. Графы соседства цветков по различным признакам представлены на рисунках 16 и 17.&lt;br /&gt;
&lt;br /&gt;
Набор данных делится на обучающий набор, проверочный набор и тестовый наборы. Каждый обучающий и проверочный наборы состоят из 10 изображений на класс (всего 1020 изображений). Тестовый набор состоит из оставшихся 6149 изображений (минимум 20 изображений на класс).&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:cad_Shapeiso.jpg|мини|Рисунок 16. Граф соседства по форме [https://www.robots.ox.ac.uk/~vgg/data/flowers/102/shapeiso.jpg Оригинал]]]&lt;br /&gt;
 |[[Файл:cad_Colouriso.jpg|мини|Рисунок 17. Граф соседства по цвету [https://www.robots.ox.ac.uk/~vgg/data/flowers/102/colouriso.jpg Оригинал]]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Visual Genome==&lt;br /&gt;
[[Файл:Visual_Genome_учфьзду.png|мини| 600px|Рисунок 18. Результат визуализации]]&lt;br /&gt;
===Описание===&lt;br /&gt;
Visual Genome {{---}} это набор данных, связывающий изображения со словесным описанием их содержимого. Является исчерпывающим набором данных для обучения и тестирования моделей компьютерного зрения, обеспечивает обширный анализ содержимого в изображениях с учетом зависимостей между объектами. Это позволяет использовать набор данных для решения большого количества различных задач: от поиска объектов до поиска отношений, требующих дальнейшего вывода, и даже задачи, связанные с ответами на вопросы.&lt;br /&gt;
&lt;br /&gt;
Изображение часто представляет сложную картину, которую невозможно полностью раскрыть одним предложением. Существующие наборы данных, такие как Flickr 30K, ориентированы на высокоточное описание всего изображения в целом. Вместо этого для каждого изображения в Visual Genome собираются более 50 описаний для разных регионов изображения, обеспечивая тем самым намного более полный набор описаний.&lt;br /&gt;
&lt;br /&gt;
Набор данных содержит более 108К изображений, каждое из которых имеет в среднем 35 объектов, 26 атрибутов и 21 парное отношение между объектами. В данном наборе данных происходит канонизация объектов, атрибутов, отношений и словосочетаний в описаниях регионов и пар вопрос-ответ в синсеты из [https://ru.wikipedia.org/wiki/WordNet WordNet]. Cинсет {{---}} это набор данных, элементы в котором считаются семантически эквивалентными для поиска или восстановления информации. Visual Genome является самым большим набором данных с описаниями изображений, объектов, атрибутов, отношений и пар вопрос-ответ.&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
Пример использования [https://visualgenome.org/api/v0/api_home.html Visual Genome API] на python:&lt;br /&gt;
&lt;br /&gt;
  import matplotlib.pyplot as plt&lt;br /&gt;
  from matplotlib.patches import Rectangle&lt;br /&gt;
  from src import api as vg&lt;br /&gt;
  from PIL import Image as PIL_Image&lt;br /&gt;
  import requests&lt;br /&gt;
  %matplotlib inline&lt;br /&gt;
  from StringIO import StringIO&lt;br /&gt;
  ids = vg.GetImageIdsInRange(startIndex=0, endIndex=1)&lt;br /&gt;
  image_id = ids[0]&lt;br /&gt;
  image = vg.GetImageData(id=image_id)&lt;br /&gt;
  regions = vg.GetRegionDescriptionsOfImage(id=image_id)&lt;br /&gt;
  fig = plt.gcf()&lt;br /&gt;
  fig.set_size_inches(18.5, 10.5)&lt;br /&gt;
  def visualize_regions(image, regions):&lt;br /&gt;
      response = requests.get(image.url)&lt;br /&gt;
      img = PIL_Image.open(StringIO(response.content))&lt;br /&gt;
      plt.imshow(img)&lt;br /&gt;
      ax = plt.gca()&lt;br /&gt;
      for region in regions:&lt;br /&gt;
          ax.add_patch(Rectangle((region.x, region.y),&lt;br /&gt;
                                 region.width,&lt;br /&gt;
                                 region.height,&lt;br /&gt;
                                 fill=False,&lt;br /&gt;
                                 edgecolor='red',&lt;br /&gt;
                                 linewidth=3))&lt;br /&gt;
          ax.text(region.x, region.y, region.phrase, style='italic', bbox={'facecolor':'white', 'alpha':0.7, 'pad':10})&lt;br /&gt;
      fig = plt.gcf()&lt;br /&gt;
      plt.tick_params(labelbottom='off', labelleft='off')&lt;br /&gt;
      plt.show()&lt;br /&gt;
  visualize_regions(image, regions[:8])&lt;br /&gt;
Результат работы кода представлен на рисунке 18.&lt;br /&gt;
&lt;br /&gt;
==CelebA==&lt;br /&gt;
[[Файл:CelebA.jpg|мини|Рисунок 19. Пример изображений из CelebA [http://mmlab.ie.cuhk.edu.hk/projects/CelebA/overview.png Оригинал]]]&lt;br /&gt;
===Описание===&lt;br /&gt;
CelebA (CelebFaces Attributes Dataset) {{---}} это крупномасштабный набор данных атрибутов лиц, содержащий более 200 тысяч изображений знаменитостей (см. рис. 19). Изображения в этом наборе данных охватывают большие вариации поз и беспорядок на фоне. CelebA имеет большое разнообразие, большое количество и богатые аннотации: 10 177 уникальных личностей, 202 599 изображений лиц и 5 ориентиров, 40 бинарных аннотаций атрибутов на изображение. Эти данные были первоначально собраны исследователями из MMLAB&amp;lt;ref&amp;gt;http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html[http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html]&amp;lt;/ref&amp;gt;, Китайского университета Гонконга.&lt;br /&gt;
&lt;br /&gt;
Набор данных можно использовать в качестве обучающих и тестовых наборов для следующих задач компьютерного зрения: распознавание атрибутов лица, обнаружение лиц и локализация ориентиров (или части лица).&lt;br /&gt;
&lt;br /&gt;
===Пример атрибутов===&lt;br /&gt;
Ниже приведен пример некоторых бинарных атрибутов в CelebA, где отдельный атрибут {{---}} одна из характеристик лица. Оригинал примера доступен [https://towardsdatascience.com/celeba-attribute-prediction-and-clustering-with-keras-3d148063098d здесь].&lt;br /&gt;
Более подробно со всеми атрибутами можно ознакомиться [https://www.tensorflow.org/datasets/catalog/celeb_a здесь]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Идентификатор изображения&lt;br /&gt;
! Короткая щетина&lt;br /&gt;
! Круги под глазами&lt;br /&gt;
! Лысый&lt;br /&gt;
! Челка&lt;br /&gt;
! Большие губы&lt;br /&gt;
! Большой нос&lt;br /&gt;
! Темные волосы&lt;br /&gt;
|-&lt;br /&gt;
| 146596.jpg&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 027415.jpg&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 031426.jpg&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0 &lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CityScapes==&lt;br /&gt;
[[Файл:CityscapesZuerich.jpg|мини|Рисунок 20. Пример изображения из CityScapes [https://www.cityscapes-dataset.com/examples/ Источник]]]&lt;br /&gt;
===Описание===&lt;br /&gt;
CityScapes&amp;lt;ref&amp;gt;https://www.cityscapes-dataset.com/&amp;lt;/ref&amp;gt; {{---}} это набор данных, состоящий из разнообразных городских уличных сцен в 50 разных городах в разное время года. Данный набор хорошо подходит для задач компьютерного зрения, таких как: [[Сегментация изображений|семантическая сегментация данных]], сегментация на уровне экземпляра и вывод несоответствия стереопар. Пример изображения из данного датасета представлен на рисунке 20.&lt;br /&gt;
&lt;br /&gt;
===Структура данных &amp;lt;ref&amp;gt;https://www.cityscapes-dataset.com/dataset-overview/#features&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Всего в наборе данных находится 25 000 изображений, из них 5000 составляют набор с более детальными аннотациями изображений с разрешением 1024 * 2048, предварительно разделенных на наборы для обучения {{---}} 2975, проверки {{---}} 500 и тестирования {{---}} 1525. Оставшиеся 20 000 изображений имеют грубые аннотации, позволяющие применять методы, использующие большие объемы данных со слабой маркировкой.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
Основной метрикой для этого набора данных является [[Оценка качества в задаче кластеризации#Индекс Жаккара (англ. Jaccard Index)|индекс Жаккара]]. Также, хорошо известно, что глобальная мера [[Оценка качества в задаче кластеризации#Индекс Жаккара (англ. Jaccard Index)|индекс Жаккара]] смещена в сторону экземпляров объектов, которые покрывают большую область изображения. В уличных сценах с их сильным изменением масштаба это может быть проблематично.&lt;br /&gt;
Чтобы решить эту проблему, создатели датасета дополнительно оценивают семантическую маркировку, используя метрику пересечения по объединению на уровне экземпляра {{---}}&amp;lt;math&amp;gt;&lt;br /&gt;
iIoU = \dfrac{iTP}{iTP + FP + iFN}&lt;br /&gt;
&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iTP&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;FP&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;iFN&amp;lt;/math&amp;gt; обозначают количество истинно положительных, ложноположительных и ложно отрицательных пикселей соответственно. Сейчас лучшей нейронной сетью для этого набора данных в задаче семантической сегментации данных является [https://www.cityscapes-dataset.com/benchmarks/#scene-labeling-task DAHUA-ARI], которая позволяет достичь индекс Жаккара 85.8% и iIoU 70.6% для классов, индекс Жаккара 93.2% и iIoU 85.4% для категорий, соответственно.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ICDAR==&lt;br /&gt;
[[Файл:ICDAR2017.png|мини|Рисунок 21. Пример изображения из датасета ICDAR2017 Competition on Multi-lingual Scene Text Detection and Script Identification (MLT) [https://arxiv.org/pdf/1812.05219.pdf Источник]]]&lt;br /&gt;
===Описание===&lt;br /&gt;
ICDAR&amp;lt;ref&amp;gt;https://rrc.cvc.uab.es/&amp;lt;/ref&amp;gt; (англ. International Conference on Document Analysis and Recognition) {{---}} это международная конференция по анализу и распознаванию текста и одноименное семейство набора данных, состоящее из фотографий (см. рис. 21, 22 и 23), на которых изображен текст на разных языках. Данные наборы создаются для соревнований RRC (англ.Robust Reading Competition), где требуется решить следующие задачи: обнаружение текста, сегментация текста, распознавание символов, сквозное распознавание, распознавание скриптов, ответы на вопросы, связанные с изображениями.&lt;br /&gt;
Ниже приведен анализ наборов данных ICDAR2013, ICDAR2015, ICDAR2017, ICDAR2019.&lt;br /&gt;
&lt;br /&gt;
===ICDAR 2013===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Наименование датасета&lt;br /&gt;
! Тип текста&lt;br /&gt;
! Количество объектов&lt;br /&gt;
! Количество обучающих объектов&lt;br /&gt;
! Количество тестовых объектов&lt;br /&gt;
! Количество слов&lt;br /&gt;
! Количество обучающих слов&lt;br /&gt;
! Количество тестовых слов&lt;br /&gt;
! Язык текста на изображениях&lt;br /&gt;
! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| ICDAR 2013 &amp;quot;Born Digital Images&amp;quot;&lt;br /&gt;
| изображения, извлеченные с веб-страниц и сообщений электронной почты&lt;br /&gt;
| 561&lt;br /&gt;
| 420 &lt;br /&gt;
| 141 &lt;br /&gt;
| 5003&lt;br /&gt;
| 3564&lt;br /&gt;
| 1439&lt;br /&gt;
| Английский&lt;br /&gt;
| обнаружение текста, сегментация текста, распознавание символов&lt;br /&gt;
|-&lt;br /&gt;
| ICDAR 2013 &amp;quot;Focused Scene Text&amp;quot; &lt;br /&gt;
| изображения с текстом  на вывесках, логотипах и т.д.&lt;br /&gt;
| 462&lt;br /&gt;
| 229 &lt;br /&gt;
| 233 &lt;br /&gt;
| 1943&lt;br /&gt;
| 848 &lt;br /&gt;
| 1095 &lt;br /&gt;
| Английский&lt;br /&gt;
| обнаружение текста, сегментация текста, распознавание символов&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ICDAR 2015===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Наименование датасета&lt;br /&gt;
! Тип текста&lt;br /&gt;
! Количество объектов&lt;br /&gt;
! Количество обучающих объектов&lt;br /&gt;
! Количество тестовых объектов&lt;br /&gt;
! Количество слов&lt;br /&gt;
! Количество обучающих слов&lt;br /&gt;
! Количество тестовых слов&lt;br /&gt;
! Язык текста на изображениях&lt;br /&gt;
! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| ICDAR 2015 &amp;quot;Born Digital Images&amp;quot;&lt;br /&gt;
| изображения, извлеченные с веб-страниц и сообщений электронной почты&lt;br /&gt;
| 561&lt;br /&gt;
| 420 &lt;br /&gt;
| 141 &lt;br /&gt;
| 5003&lt;br /&gt;
| 3564&lt;br /&gt;
| 1439&lt;br /&gt;
| Английский&lt;br /&gt;
| обнаружение текста, сегментация текста, распознавание символов, сквозное распознавание&lt;br /&gt;
|-&lt;br /&gt;
| ICDAR 2015 &amp;quot;Focused Scene Text&amp;quot; &lt;br /&gt;
| изображения с текстом  на вывесках, логотипах и т.д.&lt;br /&gt;
| 462&lt;br /&gt;
| 229 &lt;br /&gt;
| 233 &lt;br /&gt;
| 1943&lt;br /&gt;
| 848 &lt;br /&gt;
| 1095 &lt;br /&gt;
| Английский&lt;br /&gt;
| обнаружение текста, сегментация текста, распознавание символов, сквозное распознавание&lt;br /&gt;
|-&lt;br /&gt;
| ICDAR 2015 &amp;quot;Incidental Scene Text&amp;quot; &lt;br /&gt;
| изображения, на которых текст попал в поле зрения камеры Google Glass случайно&amp;lt;ref&amp;gt;https://rrc.cvc.uab.es/?ch=4&amp;lt;/ref&amp;gt;&lt;br /&gt;
| 1670 (1500 публичных)&lt;br /&gt;
| 1000&lt;br /&gt;
| 500&lt;br /&gt;
| 17548&lt;br /&gt;
| -&lt;br /&gt;
| - &lt;br /&gt;
| Английский&lt;br /&gt;
| обнаружение текста, сегментация текста, распознавание символов, сквозное распознавание&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ICDAR 2017===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Наименование датасета&lt;br /&gt;
! Тип текста&lt;br /&gt;
! Количество объектов&lt;br /&gt;
! Количество обучающих объектов&lt;br /&gt;
! Количество тестовых объектов&lt;br /&gt;
! Количество слов&lt;br /&gt;
! Количество обучающих слов&lt;br /&gt;
! Количество тестовых слов&lt;br /&gt;
! Язык текста на изображениях&lt;br /&gt;
! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| ICDAR 2017 &amp;quot;COCO-Text&amp;quot;&lt;br /&gt;
| набор данных, основанный на датасете &amp;quot;MS COCO&amp;quot;&amp;lt;ref&amp;gt;https://vision.cornell.edu/se3/wp-content/uploads/2019/01/ICDAR2017b.pdf&amp;lt;/ref&amp;gt;, где собраны обычные изображения ежедневных сцен, на которых, возможно, есть текст&lt;br /&gt;
| 63686&lt;br /&gt;
| 43686 &lt;br /&gt;
| 10000 {{---}} валидирующая выборка, 10000 {{---}} тестовая&lt;br /&gt;
| 173589&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| Французский&lt;br /&gt;
| сквозное распознавание&lt;br /&gt;
|-&lt;br /&gt;
| ICDAR 2017 &amp;quot;Multi-lingual Scene Text&amp;quot; &lt;br /&gt;
| изображения с текстом на 9 различных языках&lt;br /&gt;
| 18 000&lt;br /&gt;
| - &lt;br /&gt;
| - &lt;br /&gt;
| 107 547(тренировочные + валидирующие слова)&lt;br /&gt;
| - &lt;br /&gt;
| -&lt;br /&gt;
| Английский, Арабский, Бенгальский, Китайский, Французский, Немецкий, Японский, Корейский&lt;br /&gt;
| обнаружение текста, сегментация текста&lt;br /&gt;
|-&lt;br /&gt;
| ICDAR 2017 &amp;quot;French Street Name Signs&amp;quot; &lt;br /&gt;
| изображения, на которых есть названия француззских улиц&lt;br /&gt;
| 1 081 422, где каждое изображение содержит до 4 объектов с названией улицы&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| - &lt;br /&gt;
| - &lt;br /&gt;
| Английский&lt;br /&gt;
| обнаружение текста, сегментация текста, распознавание символов, сквозное распознавание&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ICDAR 2019===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Наименование датасета&lt;br /&gt;
! Тип текста&lt;br /&gt;
! Количество объектов&lt;br /&gt;
! Количество обучающих объектов&lt;br /&gt;
! Количество тестовых объектов&lt;br /&gt;
! Количество слов&lt;br /&gt;
! Количество обучающих слов&lt;br /&gt;
! Количество тестовых слов&lt;br /&gt;
! Язык текста на изображениях&lt;br /&gt;
! Задачи&lt;br /&gt;
|-&lt;br /&gt;
| ICDAR 2019 &amp;quot;COCO-Text&amp;quot;&lt;br /&gt;
| набор данных, основанный на датасете &amp;quot;MS COCO&amp;quot;&amp;lt;ref&amp;gt;https://vision.cornell.edu/se3/wp-content/uploads/2019/01/ICDAR2017b.pdf&amp;lt;/ref&amp;gt;, где собраны обычные изображения ежедневных сцен, на которых, возможно, есть текст&lt;br /&gt;
| 63686&lt;br /&gt;
| 43686 &lt;br /&gt;
| 10000 {{---}} валидирующая выборка, 10000 {{---}} тестовая&lt;br /&gt;
| 173589&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| Французский&lt;br /&gt;
| сквозное распознавание&lt;br /&gt;
|-&lt;br /&gt;
| ICDAR 2019 &amp;quot;Multi-lingual Scene Text&amp;quot;&amp;lt;ref&amp;gt;https://arxiv.org/pdf/1907.00945.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
| изображения с текстом на 10 различных языках&lt;br /&gt;
| 20 000 (2 000 для каждого языка) + 277 000 сгенерированных изображения&lt;br /&gt;
| 10 000&lt;br /&gt;
| 10 000 &lt;br /&gt;
| -&lt;br /&gt;
| - &lt;br /&gt;
| -&lt;br /&gt;
| Английский, Арабский, Бенгальский, Деванагари, Китайский, Французский, Немецкий, Японский, Корейский&lt;br /&gt;
| обнаружение текста, идентификация скрипта, сквозное распознавание&lt;br /&gt;
|-&lt;br /&gt;
| ICDAR 2019 &amp;quot;Scene Text Visual Question Answering&amp;quot; &lt;br /&gt;
| набор данных, включающий&lt;br /&gt;
23 038 изображений с 31 791 парой вопросов и ответов,&lt;br /&gt;
где ответ всегда основан на присутствующих текстовых экземплярах&lt;br /&gt;
на изображении.&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| - &lt;br /&gt;
| - &lt;br /&gt;
| Английский&lt;br /&gt;
| ответ на вопрос, связанный с изображением&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot; &lt;br /&gt;
 |[[Файл:ICDARSamples.png |600px|thumb|Рисунок 22. Сэмплы из датасетов ICDAR 2011, ICDAR 2015, ICDAR 2017]] &lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot; &lt;br /&gt;
 |[[Файл:ICDAR2019Sample.png |600px|thumb|Рисунок 23. Сэмпл из датасета ICDAR 2019 &amp;quot;Scene Text Visual Question Answering&amp;quot;]] &lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Pointing'04==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
Pointing'04 &amp;lt;ref&amp;gt;http://crowley-coutaz.fr/FGnet/reports/Pointing04-Proceedings.pdf&amp;lt;/ref&amp;gt; {{---}} база данных изображений лиц в разных положениях для 15-ти человек. Для каждого человека представлено 93 положения головы, при этом каждая фотография предложена в двух вариантах освещения и масштаба (две разные сессии). Снимки, сделанные во время первого сеанса, используются в качестве обучающих данных, а изображения из второго сеанса используются в качестве данных тестирования. 93 положения включают комбинации 13-и вариантов поворота и 7-и вариантов наклона вместе с двумя крайними случаями наклона при отсутствии поворота.&lt;br /&gt;
&lt;br /&gt;
===Пример сета изображений===&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot; &lt;br /&gt;
 |[[Файл:Pointing.png|600px|thumb|Рисунок 24. Пример сета изображений Pointing'04 [https://www.researchgate.net/publication/221545772_Evaluation_of_Head_Pose_Estimation_for_Studio_Data Источник]]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==FASSEG==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
Репозиторий FASSEG &amp;lt;ref&amp;gt;http://massimomauro.github.io/FASSEG-repository/&amp;lt;/ref&amp;gt; (англ. FAce Semantic SEGmentation ) состоит из двух наборов данных (Frontal01 и Frontal02) для сегментации лиц в фронтальном положении и одного набора данных (Multipose01) с лицами в нескольких определенных положениях.&lt;br /&gt;
&lt;br /&gt;
Frontal01 содержит 70 сегментированных изображений лиц и исходные изображения RGB. Исходные лица в основном взяты из наборов данных [http://cbcl.mit.edu/software-datasets/FaceData2.html MIT-CBCL] и [http://www.fei.edu.br/~cet/facedatabase.html FEI].&lt;br /&gt;
&lt;br /&gt;
Frontal02 {{---}} это «высокоточный» Frontal01. Он содержит те же изображения, что и Frontal01, но с гораздо более точной сегментацией.&lt;br /&gt;
&lt;br /&gt;
Multipose01 содержит более 200 размеченных лиц в 13-ти положениях с углом поворота от -90 градусов до 90 градусов включительно. Исходные лица взяты из базы данных [http://crowley-coutaz.fr/FGnet/reports/Pointing04-Proceedings.pdf Pointing'04].&lt;br /&gt;
&lt;br /&gt;
===Сегментация===&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot; &lt;br /&gt;
 |[[Файл:FASSEG3.png|300px|thumb|Рисунок 25. Сегментация изображения [https://github.com/massimomauro/FASSEG-repository/blob/master/papers/multiclass_face_segmentation_ICIP2015.pdf Источник]]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Изображение размечается на 6 сегментов (см. рис. 25):&lt;br /&gt;
*глаза;&lt;br /&gt;
*нос;&lt;br /&gt;
*рот;&lt;br /&gt;
*волосы (вместе с бровями);&lt;br /&gt;
*фон изображения;&lt;br /&gt;
*кожа.&lt;br /&gt;
&lt;br /&gt;
===Примеры изображений===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot; &lt;br /&gt;
 |[[Файл:FASSEG1.png|300px|thumb|Рисунок 26. Пример изображений из датасетов Frontal01 и Frontal02 [https://raw.githubusercontent.com/massimomauro/FASSEG-dataset/master/other/V1V2_diff.png Оригинал]]]&lt;br /&gt;
 |[[Файл:FASSEG2.png|400px|thumb|Рисунок 27. Пример изображений из датасета Multipose01 [https://github.com/massimomauro/FASSEG-repository/blob/master/papers/pose_estimation_by_segmentation_ICME2017.pdf Источник]]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MPI==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
MPI Human Pose &amp;lt;ref&amp;gt;http://human-pose.mpi-inf.mpg.de/&amp;lt;/ref&amp;gt; (англ. Max Planck Institute) {{---}} это набор данных, позволяющий определять различные виды активности человека по позам на изображениях и аннотациям к ним. Набор данных включает около 25 тысяч изображений, содержащих более 40 тысяч людей с указанным положением отдельных частей тела. Изображения систематически собирались с использованием установленной таксономии повседневной деятельности человека. В целом набор данных охватывает 410 видов деятельности человека, каждое изображение снабжено меткой активности. Каждое изображение было извлечено из видео с YouTube и снабжено предшествующими и последующими кадрами без аннотации. Кроме того, для тестового набора приложены более детальные аннотации, включая сгибы частей тела и ориентации туловища и головы.&lt;br /&gt;
&lt;br /&gt;
===Структура датасета и примеры изображений===&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot; &lt;br /&gt;
 |[[Файл: MPI1.jpg|500px|thumb|Рисунок 28. Пример изображений из подкласса датасета MPI [http://human-pose.mpi-inf.mpg.de/#dataset Источник]]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Датасет представлен двадцатью различными классами активности: езда на велосипеде, упражнения, танцы, рыбалка и охота, домашняя активность, ремонт, отдых, активность на природе, игра на музыкальных инструментах, религиозная деятельность, бег, самоуход, спорт, передвижение на транспорте, волонтерство, прогулки, активность на воде, зимние виды активности, разное.&lt;br /&gt;
&lt;br /&gt;
Каждый класс также разделен на уникальные подклассы. Пример такого разделения приведен на рисунке 28.&lt;br /&gt;
&lt;br /&gt;
Датасет снабжен документацией с описанием структуры объектов и методами взаимодействия с ними, всю необходимую информацию по датасету, как и сами исходники, можно получить по [http://human-pose.mpi-inf.mpg.de/ ссылке].&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Сегментация изображений]]&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;br /&gt;
[[Категория: Классификация и регрессия]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=77416</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=77416"/>
				<updated>2021-01-11T08:18:18Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Кластеризация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Многопоточность в машинном обучении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
*[[Графовые нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Рекурсивные нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Сети глубокого доверия]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Оценка положения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
&lt;br /&gt;
=Виды обучения=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение в реальном времени]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Автоматическое машинное обучение==&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;br /&gt;
&lt;br /&gt;
==Обучение с подкреплением==&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Примеры кода=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Scala]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Kotlin]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Kotlin в Jupyter Notebook]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Дополнение к ранжированию]]&lt;br /&gt;
*[[Генерация объектов]]&lt;br /&gt;
*[[Распознавание текста на изображении]]&lt;br /&gt;
*[[Анализ видео]]&lt;br /&gt;
*[[Обнаружение и обработка дорожных знаков и пешеходов]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B5%D1%82%D0%B8_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B4%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%8F&amp;diff=76868</id>
		<title>Сети глубокого доверия</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B5%D1%82%D0%B8_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B4%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%8F&amp;diff=76868"/>
				<updated>2021-01-08T20:59:57Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* См. также */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Сети глубокого доверия''' {{---}} это вероятностные [[Порождающие модели|генеративные модели]], которые состоят из нескольких слоев стохастических скрытых переменных. Скрытые переменные обычно имеют двоичные значения и часто называются скрытыми узлами или детекторами признаков. Два верхних слоя имеют ненаправленные, симметричные связи между ними и образуют ассоциативную память. Между оставшимися парами соседних слоёв есть только направленные связи от верхнего к нижнему. Состояния узлов в нижнем слое представляют вектор данных.&lt;br /&gt;
&lt;br /&gt;
Два наиболее значимых свойства сетей глубокого доверия:&lt;br /&gt;
# Существует эффективная послойная процедура для обучения нисходящих весов, которая определяет, как переменные в одном слое зависят от переменных в слое выше.&lt;br /&gt;
# После обучения скрытых переменных в каждом слое могут быть выведены значения за один проход снизу вверх, который начинается с наблюдаемого вектора данных в нижнем слое и использует веса в обратном направлении.&lt;br /&gt;
Сети глубокого доверия обучаются по одному слою за раз, обрабатывая значения скрытых переменных в одном слое в тот момент, когда они выводятся из данных для обучения следующего слоя. Это эффективное, жадное обучение может сопровождаться или сочетаться с другими процедурами обучения, которые точно настраивают все веса для улучшения генеративных или дискриминационных характеристик всей сети.&lt;br /&gt;
&lt;br /&gt;
Дискриминирующая тонкая настройка может быть выполнена путем добавления последнего слоя переменных, которые представляют желаемые выходные данные и производные [[Обратное распространение ошибки|ошибок обратного распространения]]. Когда сети со многими скрытыми слоями применяются к высокоструктурированным входным данным, таким как изображения, обратное распространение работает намного лучше, если детекторы признаков в скрытых слоях инициализируются путем обучения глубокой сети доверия, которая моделирует структуру во входных данных.&lt;br /&gt;
&lt;br /&gt;
== Как развивались сети глубокого доверия ==&lt;br /&gt;
&lt;br /&gt;
В нейронных сетях первого поколения использовались [[Нейронные сети, перцептрон|перцептроны]], которые идентифицировали конкретный объект или что-либо еще, принимая во внимание «вес» или предварительные свойства. Однако перцептроны могут быть эффективны только на базовом уровне и бесполезны для передовых технологий. Для решения этих проблем во втором поколении нейронных сетей была введена концепция обратного распространения, при которой полученный вывод сравнивается с желаемым выводом, а значение ошибки было снижено до нуля. [[Метод опорных векторов (SVM)|Метод опорных векторов]] позволил создать больше контрольных примеров, ссылаясь на ранее введенные контрольные примеры. Затем последовали циклические графы, называемые сетями доверия, которые помогли в решении проблем, связанных с выводом и проблемами обучения. За этим последовали  сети глубокого доверия, которые помогли создать непредвзятые значения для хранения в конечных узлах.&lt;br /&gt;
&lt;br /&gt;
== Композиция простых обучающих модулей ==&lt;br /&gt;
[[Файл:Rbmimage4.png |400px|thumb| right| Рис. 1 Распределение restricted Boltzmann machine]]&lt;br /&gt;
Глубокая сеть доверия может рассматриваться как набор простых обучающих модулей, каждый из которых представляет собой ограниченную машину Больцмана&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9E%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%91%D0%BE%D0%BB%D1%8C%D1%86%D0%BC%D0%B0%D0%BD%D0%B0 restricted Boltzmann machine, RBM]&amp;lt;/ref&amp;gt;, которая содержит слой видимых узлов, представляющий данные, и слой скрытых узлов, которые обучаются представлению особенностей, которые захватывают более высокие порядки корреляции в данных. Ограниченные машины Больцмана могут быть сложены и обучены [[Теорема Радо-Эдмондса (жадный алгоритм)|жадным алгоритмом]], чтобы сформировать так называемые глубокие сети доверия, которые моделируют совместное распределение между наблюдаемым вектором &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; и скрытыми слоями &amp;lt;math&amp;gt;h^{k}&amp;lt;/math&amp;gt; следующим образом:&lt;br /&gt;
 &amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;P(x, h^1, \ldots, h^l)=\left( \prod\limits_{k = 0}^{l - 2}P(h^k|h^{k + 1}) \right) P(h^{l - 1}|h^l)&amp;lt;/tex&amp;gt;,&amp;lt;/center&amp;gt; &lt;br /&gt;
где $x=h^0$, $P(h^{k-1}|h^{k})$ {{---}} условное распределение для видимых узлов, обусловленных скрытыми узлами RBM на уровне &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, и $P(h^{l - 1}|h^l)$ {{---}} это видимое-скрытое совместное распределение в RBM верхнего уровня. Это показано на рисунке 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ограниченная машина Больцмана (RBM) ==&lt;br /&gt;
[[Файл:Bolcman.jpg |400px| thumb | right |Рис 2. Визуализация RBM]]&lt;br /&gt;
Если вы знаете, что такое факторный анализ, то RBM можно рассматривать как двоичную версию факторного анализа. Таким образом, вместо множества факторов, определяющих вывод, мы можем иметь двоичную переменную в форме 0 или 1.&lt;br /&gt;
&lt;br /&gt;
Например: если вы читаете книгу, а затем судите эту книгу по двухзначной шкале: это либо вам нравится книга, либо вам не нравится книга. В таких сценариях мы можем использовать RBM, которые помогут нам определить причину, по которой мы делаем такой выбор.&lt;br /&gt;
&lt;br /&gt;
RBM используют вероятностный подход для нейронных сетей, и поэтому их также называют стохастическими нейронными сетями.&lt;br /&gt;
Если мы разложим RBM, то становится ясно, что они состоят из трех частей:&lt;br /&gt;
# Один входной слой, так называемые &amp;quot;Видимые узлы&amp;quot;.&lt;br /&gt;
# Один скрытый слой. &lt;br /&gt;
# Узлы смещения.&lt;br /&gt;
В приведенном выше примере видимые узлы {{---}} это не что иное, как то, нравится ли вам книга или нет. Скрытые узлы помогают найти то, что заставило вас одобрить эту книгу. Узлы смещения добавлены, чтобы включить различные виды свойств, разных книг.&lt;br /&gt;
Простая визуализация Ограниченной машины Больцмана показана на рисунке 2. &lt;br /&gt;
&lt;br /&gt;
Зеленым отмечены видимые узлы, красным скрытые, а белые узлы с меткой &amp;quot;bias&amp;quot; соответствуют узлам смещения.&lt;br /&gt;
&lt;br /&gt;
Сети глубокого доверия имеют две фазы:&lt;br /&gt;
# Фаза предварительного обучения.&lt;br /&gt;
# Фаза тонкой настройки.&lt;br /&gt;
Фаза предварительного обучения {{---}} это не что иное, как несколько уровней RBN, в то время как фаза тонкой настройки {{---}} это нейронная сеть с прямой связью. Визуализация обеих фаз показана на рисунке 3 ниже&lt;br /&gt;
[[Файл:Vis2f.png |600px|thumb| center| Рис. 3 Визуализация фаз RBM]]&lt;br /&gt;
&lt;br /&gt;
Алгоритм обучения глубокой сети доверия, состоит из нескольких этапов:&lt;br /&gt;
#  Нахождение признаков видимых узлов, используя алгоритм контрастной дивергенции.&lt;br /&gt;
#  Нахождение скрытых признаков объектов, найденных в предыдущем шаге.&lt;br /&gt;
&lt;br /&gt;
== Реализация ==&lt;br /&gt;
Мы начнем с определения класса для глубокой сети доверия, который назовем DBN (Deep belief network), который будет хранить уровни многослойного перцептрона MLP (Multilayer perceptron) вместе со связанными с ними RBM. Поскольку мы используем  RBM для инициализации MLP, код будет отражать эту идею, насколько это возможно. Далее будут приведены RBM, используемые для инициализации сети, и MLP, используемый для классификации.&lt;br /&gt;
 from __future__ import print_function, division&lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 import timeit&lt;br /&gt;
 import numpy&lt;br /&gt;
 import theano&lt;br /&gt;
 import theano.tensor as T&lt;br /&gt;
&lt;br /&gt;
 from theano.sandbox.rng_mrg import MRG_RandomStreams&lt;br /&gt;
 from logistic_sgd import LogisticRegression, load_data&lt;br /&gt;
 from mlp import HiddenLayer&lt;br /&gt;
 from rbm import RBM&lt;br /&gt;
&lt;br /&gt;
 class DBN(object):&lt;br /&gt;
     def __init__(self, numpy_rng, theano_rng=None, n_ins=784, hidden_layers_sizes=[500, 500], n_outs=10):&lt;br /&gt;
        self.sigmoid_layers = []&lt;br /&gt;
        self.rbm_layers = []&lt;br /&gt;
        self.params = []&lt;br /&gt;
        self.n_layers = len(hidden_layers_sizes)&lt;br /&gt;
        assert self.n_layers &amp;gt; 0&lt;br /&gt;
        if not theano_rng:&lt;br /&gt;
            theano_rng = MRG_RandomStreams(numpy_rng.randint(2 ** 30))&lt;br /&gt;
        # allocate symbolic variables for the data&lt;br /&gt;
        # the data is presented as rasterized images&lt;br /&gt;
        self.x = T.matrix('x')&lt;br /&gt;
        # the labels are presented as 1D vector of [int] labels&lt;br /&gt;
        self.y = T.ivector('y')&lt;br /&gt;
&amp;lt;code&amp;gt;self.sigmoid_layers&amp;lt;/code&amp;gt; будет хранить графики прямой связи, которые вместе образуют MLP, в то время как &amp;lt;code&amp;gt;self.rbm_layers&amp;lt;/code&amp;gt; будет хранить RBM, используемые для предварительной подготовки каждого уровня MLP.&lt;br /&gt;
Следующим шагом мы строим сигмоидные слои &amp;lt;code&amp;gt;n_layers&amp;lt;/code&amp;gt; (мы используем класс &amp;lt;code&amp;gt;HiddenLayer&amp;lt;/code&amp;gt;, введенный в Multilayer Perceptron, с единственной модификацией, в которой мы заменили нелинейность от &amp;lt;tex&amp;gt;tanh&amp;lt;/tex&amp;gt; на логистическую функцию $s(x) = \frac{1}{1 + e^{-x}}$ и &amp;lt;code&amp;gt;n_layers&amp;lt;/code&amp;gt; RBM, где &amp;lt;code&amp;gt;n_layers&amp;lt;/code&amp;gt; {{---}} это глубина нашей модели. Мы связываем сигмоидные слои так, что они образуют MLP, и строим каждый RBM таким образом, чтобы они разделяли весовую матрицу и скрытое смещение с соответствующим сигмоидным слоем.&lt;br /&gt;
 for i in range(self.n_layers):&lt;br /&gt;
     if i == 0:&lt;br /&gt;
         input_size = n_ins&lt;br /&gt;
     else:&lt;br /&gt;
         input_size = hidden_layers_sizes[i - 1]&lt;br /&gt;
     if i == 0:&lt;br /&gt;
         layer_input = self.x&lt;br /&gt;
     else:&lt;br /&gt;
         layer_input = self.sigmoid_layers[-1].output&lt;br /&gt;
     sigmoid_layer = HiddenLayer(rng=numpy_rng,&lt;br /&gt;
                                 input=layer_input,&lt;br /&gt;
                                 n_in=input_size,&lt;br /&gt;
                                 n_out=hidden_layers_sizes[i],&lt;br /&gt;
                                 activation=T.nnet.sigmoid)&lt;br /&gt;
     # add the layer to our list of layers&lt;br /&gt;
     self.sigmoid_layers.append(sigmoid_layer)&lt;br /&gt;
     self.params.extend(sigmoid_layer.params)&lt;br /&gt;
     # Construct an RBM that shared weights with this layer&lt;br /&gt;
     rbm_layer = RBM(numpy_rng=numpy_rng,&lt;br /&gt;
                     theano_rng=theano_rng,&lt;br /&gt;
                     input=layer_input,&lt;br /&gt;
                     n_visible=input_size,&lt;br /&gt;
                     n_hidden=hidden_layers_sizes[i],&lt;br /&gt;
                     W=sigmoid_layer.W,&lt;br /&gt;
                     hbias=sigmoid_layer.b)&lt;br /&gt;
     self.rbm_layers.append(rbm_layer)&lt;br /&gt;
&lt;br /&gt;
Осталось только сложить один последний уровень логистической регрессии, чтобы сформировать MLP. Мы будем использовать класс &amp;lt;code&amp;gt;LogisticRegression&amp;lt;/code&amp;gt;:&lt;br /&gt;
 self.logLayer = LogisticRegression(input=self.sigmoid_layers[-1].output,&lt;br /&gt;
                                    n_in=hidden_layers_sizes[-1],&lt;br /&gt;
                                    n_out=n_outs)&lt;br /&gt;
 self.params.extend(self.logLayer.params)&lt;br /&gt;
 self.finetune_cost = self.logLayer.negative_log_likelihood(self.y)&lt;br /&gt;
 self.errors = self.logLayer.errors(self.y)&lt;br /&gt;
Класс также предоставляет метод, который генерирует обучающие функции для каждой из RBM. Они возвращаются в виде списка, где элемент &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; является функцией, которая реализует один этап обучения для RBM на уровне &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 def pretraining_functions(self, train_set_x, batch_size, k):&lt;br /&gt;
      index = T.lscalar('index') # index to a minibatch&lt;br /&gt;
Чтобы иметь возможность изменять скорость обучения во время обучения, мы связываем с ней переменную &amp;lt;code&amp;gt;Theano&amp;lt;/code&amp;gt;, которая имеет значение по умолчанию.&lt;br /&gt;
 learning_rate = T.scalar('lr')  # learning rate to use&lt;br /&gt;
 # begining of a batch, given `index`&lt;br /&gt;
 batch_begin = index * batch_size&lt;br /&gt;
 # ending of a batch given `index`&lt;br /&gt;
 batch_end = batch_begin + batch_size&lt;br /&gt;
 pretrain_fns = []&lt;br /&gt;
 for rbm in self.rbm_layers:&lt;br /&gt;
     # get the cost and the updates list&lt;br /&gt;
     # using CD-k here (persisent=None) for training each RBM.&lt;br /&gt;
     # TODO: change cost function to reconstruction error&lt;br /&gt;
     cost, updates = rbm.get_cost_updates(learning_rate, persistent=None, k=k)&lt;br /&gt;
     # compile the theano function&lt;br /&gt;
     fn = theano.function(&lt;br /&gt;
         inputs=[index, theano.In(learning_rate, value=0.1)],&lt;br /&gt;
         outputs=cost,&lt;br /&gt;
         updates=updates,&lt;br /&gt;
         givens={&lt;br /&gt;
             self.x: train_set_x[batch_begin:batch_end]&lt;br /&gt;
         }&lt;br /&gt;
     )&lt;br /&gt;
     # append `fn` to the list of functions&lt;br /&gt;
     pretrain_fns.append(fn)&lt;br /&gt;
 return pretrain_fns&lt;br /&gt;
&lt;br /&gt;
Теперь любая функция &amp;lt;code&amp;gt;pretrain_fns[i]&amp;lt;/code&amp;gt; принимает в качестве аргумента индекс и, опционально, &amp;lt;code&amp;gt;lr&amp;lt;/code&amp;gt; {{---}} скорость обучения. Обратите внимание, что имена параметров {{---}} это имена, данные переменным &amp;lt;code&amp;gt;Theano&amp;lt;/code&amp;gt; (например, &amp;lt;code&amp;gt;lr&amp;lt;/code&amp;gt;) при их создании, а не имена переменных python (например, &amp;lt;code&amp;gt;learning_rate&amp;lt;/code&amp;gt;). Имейте это в виду при работе с &amp;lt;code&amp;gt;Theano&amp;lt;/code&amp;gt;. При желании, если вы укажете &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; (количество шагов Гиббса, которые нужно выполнить на CD или PCD), это также станет аргументом функции.&lt;br /&gt;
&lt;br /&gt;
Точно так же класс &amp;lt;code&amp;gt;DBN&amp;lt;/code&amp;gt; включает метод для построения функций, необходимых для тонкой настройки (&amp;lt;code&amp;gt;train_model&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;validate_model&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;test_model&amp;lt;/code&amp;gt;).&lt;br /&gt;
 def build_finetune_functions(self, datasets, batch_size, learning_rate):&lt;br /&gt;
         (train_set_x, train_set_y) = datasets[0]&lt;br /&gt;
         (valid_set_x, valid_set_y) = datasets[1]&lt;br /&gt;
         (test_set_x, test_set_y) = datasets[2]&lt;br /&gt;
         # compute number of minibatches for training, validation and testing&lt;br /&gt;
         n_valid_batches = valid_set_x.get_value(borrow=True).shape[0]&lt;br /&gt;
         n_valid_batches //= batch_size&lt;br /&gt;
         n_test_batches = test_set_x.get_value(borrow=True).shape[0]&lt;br /&gt;
         n_test_batches //= batch_size&lt;br /&gt;
         index = T.lscalar('index')  # index to a [mini]batch&lt;br /&gt;
         # compute the gradients with respect to the model parameters&lt;br /&gt;
         gparams = T.grad(self.finetune_cost, self.params)&lt;br /&gt;
         # compute list of fine-tuning updates&lt;br /&gt;
         updates = []&lt;br /&gt;
         for param, gparam in zip(self.params, gparams):&lt;br /&gt;
             updates.append((param, param - gparam * learning_rate))&lt;br /&gt;
         train_fn = theano.function(&lt;br /&gt;
             inputs=[index],&lt;br /&gt;
             outputs=self.finetune_cost,&lt;br /&gt;
             updates=updates,&lt;br /&gt;
             givens={&lt;br /&gt;
                 self.x: train_set_x[&lt;br /&gt;
                     index * batch_size: (index + 1) * batch_size&lt;br /&gt;
                 ],&lt;br /&gt;
                 self.y: train_set_y[&lt;br /&gt;
                     index * batch_size: (index + 1) * batch_size&lt;br /&gt;
                 ]&lt;br /&gt;
             }&lt;br /&gt;
         )&lt;br /&gt;
         test_score_i = theano.function(&lt;br /&gt;
             [index],&lt;br /&gt;
             self.errors,&lt;br /&gt;
             givens={&lt;br /&gt;
                 self.x: test_set_x[&lt;br /&gt;
                     index * batch_size: (index + 1) * batch_size&lt;br /&gt;
                 ],&lt;br /&gt;
                 self.y: test_set_y[&lt;br /&gt;
                     index * batch_size: (index + 1) * batch_size&lt;br /&gt;
                 ]&lt;br /&gt;
             }&lt;br /&gt;
         )&lt;br /&gt;
         valid_score_i = theano.function(&lt;br /&gt;
             [index],&lt;br /&gt;
             self.errors,&lt;br /&gt;
             givens={&lt;br /&gt;
                 self.x: valid_set_x[&lt;br /&gt;
                     index * batch_size: (index + 1) * batch_size&lt;br /&gt;
                 ],&lt;br /&gt;
                 self.y: valid_set_y[&lt;br /&gt;
                     index * batch_size: (index + 1) * batch_size&lt;br /&gt;
                 ]&lt;br /&gt;
             }&lt;br /&gt;
         )&lt;br /&gt;
         # Create a function that scans the entire validation set&lt;br /&gt;
         def valid_score():&lt;br /&gt;
             return [valid_score_i(i) for i in range(n_valid_batches)]&lt;br /&gt;
         # Create a function that scans the entire test set&lt;br /&gt;
         def test_score():&lt;br /&gt;
             return [test_score_i(i) for i in range(n_test_batches)]&lt;br /&gt;
         return train_fn, valid_score, test_score&lt;br /&gt;
Обратите внимание, что возвращенные &amp;lt;code&amp;gt;valid_score&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;test_score&amp;lt;/code&amp;gt; являются не функциями &amp;lt;code&amp;gt;Theano&amp;lt;/code&amp;gt;, а скорее функциями Python. Они зацикливаются на всем наборе проверки и на всем наборе тестов, чтобы создать список потерь, полученных на этих наборах&lt;br /&gt;
&lt;br /&gt;
В конце концов&lt;br /&gt;
несколько строк кода ниже создают глубокую сеть доверия:&lt;br /&gt;
 numpy_rng = numpy.random.RandomState(123)&lt;br /&gt;
 print('... building the model')&lt;br /&gt;
 # construct the Deep Belief Network&lt;br /&gt;
 dbn = DBN(numpy_rng=numpy_rng, n_ins=28 * 28,&lt;br /&gt;
           hidden_layers_sizes=[1000, 1000, 1000],&lt;br /&gt;
           n_outs=10)&lt;br /&gt;
Эта сеть состоит из двух этапов: (1) этап предварительного обучения и (2) этап точной настройки.&lt;br /&gt;
&lt;br /&gt;
На этапе предварительного обучения мы перебираем все слои сети. Для каждого уровня мы используем скомпилированную функцию &amp;lt;code&amp;gt;anano&amp;lt;/code&amp;gt;, которая определяет вход в RBM &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-го уровня и выполняет один шаг CD-k в этом RBM. Эта функция применяется к обучающему набору для фиксированного числа эпох, заданных &amp;lt;code&amp;gt;pretraining_epochs&amp;lt;/code&amp;gt;.&lt;br /&gt;
 print('... getting the pretraining functions')&lt;br /&gt;
 pretraining_fns = dbn.pretraining_functions(train_set_x=train_set_x,&lt;br /&gt;
                                             batch_size=batch_size,&lt;br /&gt;
                                             k=k)&lt;br /&gt;
 print('... pre-training the model')&lt;br /&gt;
 start_time = timeit.default_timer()&lt;br /&gt;
 # Pre-train layer-wise&lt;br /&gt;
 for i in range(dbn.n_layers):&lt;br /&gt;
     # go through pretraining epochs&lt;br /&gt;
     for epoch in range(pretraining_epochs):&lt;br /&gt;
         # go through the training set&lt;br /&gt;
         c = []&lt;br /&gt;
         for batch_index in range(n_train_batches):&lt;br /&gt;
             c.append(pretraining_fns[i](index=batch_index,&lt;br /&gt;
                                         lr=pretrain_lr))&lt;br /&gt;
         print('Pre-training layer %i, epoch %d, cost ' % (i, epoch), end=' ')&lt;br /&gt;
         print(numpy.mean(c, dtype='float64'))&lt;br /&gt;
 &lt;br /&gt;
 end_time = timeit.default_timer()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
==Источники информации==&lt;br /&gt;
#[http://deeplearning.net/tutorial/DBN.html Статья Deeplearning о применении DBN] &lt;br /&gt;
#[https://en.wikipedia.org/wiki/Deep_belief_network wikipedia dbn] {{---}} Статья про DBN в Wikipedia&lt;br /&gt;
#[https://www.cs.toronto.edu/~hinton/nipstutorial/nipstut3.pdf 2007 NIPS Tutorial on: Deep Belief Nets]&lt;br /&gt;
#[https://pathmind.com/wiki/restricted-boltzmann-machine A Beginner's Guide to Restricted Boltzmann Machines]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Сети глубокого доверия]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=Batch-normalization&amp;diff=76867</id>
		<title>Batch-normalization</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=Batch-normalization&amp;diff=76867"/>
				<updated>2021-01-08T20:45:50Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Описание метода */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Пакетная нормализация''' (англ. batch-normalization) {{---}} метод, который позволяет повысить производительность и стабилизировать работу [[Нейронные сети, перцептрон | искусственных нейронных сетей]]. Суть данного метода заключается в том, что некоторым слоям нейронной сети на вход подаются данные, предварительно обработанные и имеющие нулевое [[Математическое ожидание случайной величины|математическое ожидание]] и единичную [[Дисперсия случайной величины|дисперсию]]. Впервые данный метод был представлен в &amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1502.03167.pdf Ioffe S., Szegedy C. {{---}} Batch normalization: Accelerating deep network training by reducing internal covariate shift, 2016]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Идея==&lt;br /&gt;
Нормализация входного слоя нейронной сети обычно выполняется путем масштабирования данных, подаваемых в функции активации. Например, когда есть признаки со значениями от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; и некоторые признаки со значениями от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;, то их необходимо нормализовать, чтобы ускорить обучение. Нормализацию данных можно выполнить и в скрытых слоях нейронных сетей, что и делает метод пакетной нормализации.&lt;br /&gt;
===Пакет===&lt;br /&gt;
Предварительно, напомним, что такое '''пакет''' (англ. batch). Возможны два подхода к реализации алгоритма градиентного спуска для обучения нейросетевых моделей: стохастический и пакетный&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=Метод_стохастического_градиента Метод стохастического градиента]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* [[Стохастический градиентный спуск|Стохастический градиентный спуск]] (англ. stochastic gradient descent) {{---}} реализация, в которой на каждой итерации алгоритма из обучающей выборки каким-то (случайным) образом выбирается только один объект;&lt;br /&gt;
* Пакетный (батч) (англ. batch gradient descent) {{---}} реализация градиентного спуска, когда на каждой итерации обучающая выборка просматривается целиком, и только после этого изменяются веса модели.&lt;br /&gt;
&lt;br /&gt;
Также существует &amp;quot;золотая середина&amp;quot; между стохастическим градиентным спуском и пакетным градиентным спуском {{---}} когда просматривается только некоторое подмножество обучающей выборки фиксированного размера (англ. batch-size). В таком случае такие подмножества принято называть мини-пакетом (англ. mini-batch). Здесь и далее, мини-пакеты будем также называть пакетом.&lt;br /&gt;
&lt;br /&gt;
===Ковариантный сдвиг===&lt;br /&gt;
[[Файл:covariate-shift1.png|600px|thumb|Рисунок &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Верхние две строки роз показывают первое подмножество данных, а нижние две строки показывают другое подмножество. Два подмножества имеют разные пропорции изображения роз. На графиках показано распределение двух классов в пространстве объектов с использованием красных и зеленых точек. Синяя линия показывает границу между двумя классами. Иллюстрация из [https://www.learnopencv.com/batch-normalization-in-deep-networks/ статьи].]]&lt;br /&gt;
Пакетная нормализация уменьшает величину, на которую смещаются значения узлов в скрытых слоях (т.н. '''[[Ковариация случайных величин|ковариантный]] сдвиг''' (англ. covariance shift)).&lt;br /&gt;
&lt;br /&gt;
Ковариантный сдвиг {{---}} это ситуация, когда распределения значений признаков в обучающей и тестовой выборке имеют разные параметры (математическое ожидание, дисперсия и т.д.). Ковариантность в данном случае относится к значениям признаков.&lt;br /&gt;
&lt;br /&gt;
Проиллюстрируем ковариантный сдвиг примером.&lt;br /&gt;
Пусть есть [[Глубокое обучение|глубокая нейронная сеть]], которая обучена определять находится ли на изображении роза.&lt;br /&gt;
И нейронная сеть была обучена на изображениях только красных роз.&lt;br /&gt;
Теперь, если попытаться использовать обученную модель для обнаружения роз различных цветов, то, очевидно, точность работы модели будет неудовлетворительной.&lt;br /&gt;
Это происходит из-за того, что обучающая и тестовая выборки содержат изображения красных роз и роз различных цветов в разных пропорциях.&lt;br /&gt;
Другими словами, если модель обучена отображению из множества &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; в множество &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt; и если пропорция элементов в &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; изменяется, то появляется необходимость обучить модель заново, чтобы &amp;quot;выровнять&amp;quot; пропорции элементов в &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Когда пакеты содержат изображения разных классов, распределенные в одинаковой пропорции на всем множестве, то ковариантный сдвиг незначителен.&lt;br /&gt;
Однако, когда пакеты выбираются только из одного или двух подмножеств (в данном случае, красные розы и розы различных цветов), то ковариантный сдвиг возрастает.&lt;br /&gt;
Это довольно сильно замедляет процесс обучения модели. На Рисунке &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; изображена разница в пропорциях.&lt;br /&gt;
&lt;br /&gt;
Простой способ решить проблему ковариантного сдвига для входного слоя {{---}} это случайным образом перемешать данные перед созданием пакетов.&lt;br /&gt;
Но для скрытых слоев нейронной сети такой метод не подходит, так как распределение входных данных для каждого узла скрытых слоев изменяется каждый раз, когда происходит обновление параметров в предыдущем слое.&lt;br /&gt;
Эта проблема называется '''внутренним ковариантным сдвигом''' (англ. internal covariate shift).&lt;br /&gt;
Для решения данной проблемы часто приходится использовать низкий [[Стохастический градиентный спуск|темп обучения]] (англ. learning rate) и методы [[wikipedia:ru:Регуляризация_(математика)|регуляризации]] при обучении модели.&lt;br /&gt;
Другим способом устранения внутреннего ковариантного сдвига является метод пакетной нормализации.&lt;br /&gt;
&lt;br /&gt;
===Свойства пакетной нормализации===&lt;br /&gt;
Кроме того, использование пакетной нормализации обладает еще несколькими дополнительными полезными свойствами:&lt;br /&gt;
* достигается более быстрая сходимость моделей, несмотря на выполнение дополнительных вычислений;&lt;br /&gt;
* пакетная нормализация позволяет каждому слою сети обучаться более независимо от других слоев;&lt;br /&gt;
* становится возможным использование более высокого темпа обучения, так как пакетная нормализация гарантирует, что выходы узлов нейронной сети не будут иметь слишком больших или малых значений;&lt;br /&gt;
* пакетная нормализация в каком-то смысле также является механизмом регуляризации: данный метод привносит в выходы узлов скрытых слоев некоторый шум, аналогично методу [[Практики реализации нейронных сетей#Dropout|dropout]];&lt;br /&gt;
* модели становятся менее чувствительны к начальной инициализации весов.&lt;br /&gt;
&lt;br /&gt;
==Описание метода==&lt;br /&gt;
Опишем устройство метода пакетной нормализации. Пусть на вход некоторому слою нейронной сети поступает вектор размерности &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;x = (x^{(1)}, \ldots, x^{(d)})&amp;lt;/tex&amp;gt;. Нормализуем данный вектор по каждой размерности &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\hat{x}^{(k)} = \displaystyle \frac{x^{(k)} - E(x^{(k)})}{\sqrt{D(x^{(k)})}}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где математическое ожидание и дисперсия считаются по всей обучающей выборке. Такая нормализация входа слоя нейронной сети может изменить представление данных в слое. Чтобы избежать данной проблемы, вводятся два параметра сжатия и сдвига нормализованной величины для каждого &amp;lt;tex&amp;gt;x^{(k)}&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;\gamma^{(k)}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\beta^{(k)}&amp;lt;/tex&amp;gt; {{---}} которые действуют следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y^{(k)} = \gamma^{(k)} \hat{x}^{(k)} + \beta^{(k)}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данные параметры настраиваются в процессе обучения вместе с остальными [[Модель_алгоритма_и_ее_выбор|параметрами модели]].&lt;br /&gt;
&lt;br /&gt;
Пусть обучение модели производится с помощью пакетов &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; размера &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;B = \{x_{1},\ldots, x_{m}\}&amp;lt;/tex&amp;gt;. Здесь нормализация применяется к каждому элементу входа с номером &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; отдельно, поэтому в &amp;lt;tex&amp;gt;x^{(k)}&amp;lt;/tex&amp;gt; индекс опускается для ясности изложения. Пусть были получены нормализованные значения пакета &amp;lt;tex&amp;gt;\hat{x}_{1},\ldots, \hat{x}_{m}&amp;lt;/tex&amp;gt;. После применения операций сжатия и сдвига были получены &amp;lt;tex&amp;gt;y_{1},\ldots, y_{m}&amp;lt;/tex&amp;gt;. Обозначим данную функцию пакетной нормализации следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;BN_{\gamma, \beta}: \{x_{1},\ldots, x_{m}\} \rightarrow \{y_{1},\ldots, y_{m}\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда алгоритм пакетной нормализации можно представить так:&lt;br /&gt;
&lt;br /&gt;
 '''Вход''': значения &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; из пакета &amp;lt;tex&amp;gt;B = \{x_{1},\ldots, x_{m}\}&amp;lt;/tex&amp;gt;; настраиваемые параметры &amp;lt;tex&amp;gt;\gamma, \beta&amp;lt;/tex&amp;gt;; константа &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; для вычислительной устойчивости.&lt;br /&gt;
 '''Выход''': &amp;lt;tex&amp;gt;\{y_{i} = BN_{\gamma, \beta}(x_{i})\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;\mu_{B} = \displaystyle \frac{1}{m} \sum_{i=1}^{m} x_{i}&amp;lt;/tex&amp;gt; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// математическое ожидание пакета&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;\sigma_{B}^{2} = \displaystyle \frac{1}{m} \sum_{i=1}^{m} (x_{i} - \mu_{B})^{2}&amp;lt;/tex&amp;gt; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// дисперсия пакета&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;\hat{x}_{i} = \displaystyle \frac{x_{i} - \mu_{B}}{\sqrt{\sigma_{B}^{2} + \epsilon}}&amp;lt;/tex&amp;gt; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// нормализация&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;y_{i} = \gamma \hat{x}_{i} + \beta \equiv BN_{\gamma, \beta}(x_{i}) &amp;lt;/tex&amp;gt; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// сжатие и сдвиг&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что если &amp;lt;tex&amp;gt;\beta=\mu_{B}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\gamma=\sqrt{\sigma_{B}^{2} + \epsilon}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;y_{i}&amp;lt;/tex&amp;gt; равен &amp;lt;tex&amp;gt;x_{i}&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;BN_{\gamma, \beta}(\cdot)&amp;lt;/tex&amp;gt; является тождественным отображением.&lt;br /&gt;
Таким образом, использование пакетной нормализации не может привести к снижению точности, поскольку оптимизатор просто может использовать нормализацию как тождественное отображение.&lt;br /&gt;
&lt;br /&gt;
==Обучение нейронных сетей с пакетной нормализацией==&lt;br /&gt;
[[Файл:BNcircuit.png|700px|thumb|Рисунок &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;. [[Настройка_глубокой_сети#Граф вычислений|Граф вычислений]] слоя пакетной нормализации алгоритмом обратного распространения ошибки. Слева-направо черными стрелками показана работа алгоритма в прямом направлении. А справа-налево красными стрелками {{---}} в обратном направлении, где вычисляется градиент функции потерь. Здесь &amp;lt;tex&amp;gt;N=m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;D=d&amp;lt;/tex&amp;gt;. Иллюстрация из [https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html статьи].]]&lt;br /&gt;
&lt;br /&gt;
Для обучения нейронных сетей необходимо вычислять [[wikipedia:ru:Градиент|градиент]] [[wikipedia:en:Loss_function|функции потерь]] &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;. В случае использования метода пакетной нормализации градиент вычисляется следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\displaystyle \frac{\partial l}{\partial \hat{x}_{i}} = \frac{\partial l}{\partial y_{i}} \cdot \gamma&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\displaystyle \frac{\partial l}{\partial \sigma_{B}^{2}} = \sum_{i=1}^{m}\frac{\partial l}{\partial \hat{x}_{i}} \cdot (x_{i} - \mu_{B}) \cdot \frac{-1}{2}(\sigma_{B}^{2} + \epsilon)^{-3/2}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\displaystyle \frac{\partial l}{\partial \mu_{B}} = \left(\sum_{i=1}^{m}\frac{\partial l}{\partial \hat{x}_{i}} \cdot \frac{-1}{\sqrt{\sigma_{B}^{2} + \epsilon}}\right) + \frac{\partial l}{\partial \sigma_{B}^{2}} \cdot \frac{\sum_{i=1}^{m}-2(x_{i}-\mu_{B})}{m}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (3)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\displaystyle \frac{\partial l}{\partial x_{i}} = \frac{\partial l}{\partial \hat{x}_{i}} \cdot \frac{1}{\sqrt{\sigma_{B}^{2} + \epsilon}} + \frac{\partial l}{\partial \sigma_{B}^{2}} \cdot \frac{2(x_{i}-\mu_{B})}{m} + \frac{\partial l}{\partial \mu_{B}} \cdot \frac{1}{m}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (4)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\displaystyle \frac{\partial l}{\partial \gamma} = \sum_{i=1}^{m}\frac{\partial l}{\partial y_{i}} \cdot \hat{x}_{i}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (5)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\displaystyle \frac{\partial l}{\partial \beta} = \sum_{i=1}^{m}\frac{\partial l}{\partial y_{i}}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (6)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На Рисунке &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; изображен [[Настройка_глубокой_сети#Граф вычислений|граф вычислений]] слоя пакетной нормализации алгоритмом обратного распространения ошибки.&lt;br /&gt;
&lt;br /&gt;
В прямом направлении, как и описано в алгоритме метода, из входа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вычисляется среднее значение по каждой размерности признакового пространства. Затем полученный вектор средних значение вычитается из каждого элемента обучающей выборки. Далее вычисляется дисперсия,  и с помощью нее вычисляется знаменатель для нормализации. Затем полученное значение инвертируется и умножается на разницу входа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и средних значений. В конце применяются параметры &amp;lt;tex&amp;gt;\gamma&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В обратном направлении вычисляются производные необходимых функций. В следующей таблице подробнее изображены шаги вычисления градиента функции потерь (иллюстрации из [https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html статьи], здесь &amp;lt;tex&amp;gt;N=m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;D=d&amp;lt;/tex&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
{| cellpadding = &amp;quot;20&amp;quot; class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Шаг !! Изображение !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 1&lt;br /&gt;
|[[Файл:step9.png|300px]]&lt;br /&gt;
|Сначала вычисляется производная по параметру &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;, как в уравнении &amp;lt;tex&amp;gt;(6)&amp;lt;/tex&amp;gt;, так как к нему применяется только операции суммирования. И значение градиента выхода передается без изменений.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 2&lt;br /&gt;
|[[Файл:step8.png|300px]]&lt;br /&gt;
|Далее, пользуясь правилом вычисления производной при умножении, как в уравнении &amp;lt;tex&amp;gt;(5)&amp;lt;/tex&amp;gt;, вычисляется градиент по параметру &amp;lt;tex&amp;gt;\gamma&amp;lt;/tex&amp;gt;. Градиент выхода умножается на данную константу, получая уравнение &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt;, и передается в следующий узел.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 3&lt;br /&gt;
|[[Файл:step7.png|300px]]&lt;br /&gt;
|Данный шаг вычисляется аналогично предыдущему, применяя правило вычисления производной при умножении.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 4&lt;br /&gt;
|[[Файл:step6.png|300px]]&lt;br /&gt;
|Пользуясь производной обратной величины, вычисляем следующий узел графа.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 5&lt;br /&gt;
|[[Файл:step5.png|300px]]&lt;br /&gt;
|Вычисляем производную квадратного корня с добавлением &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 6&lt;br /&gt;
|[[Файл:step4.png|300px]]&lt;br /&gt;
|Вычисляем производную суммы по всем компонентам входного вектора, получая матрицу.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 7&lt;br /&gt;
|[[Файл:step3.png|300px]]&lt;br /&gt;
|Получаем производную квадрата входящей функции.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 8&lt;br /&gt;
|[[Файл:step2.png|300px]]&lt;br /&gt;
|На данном шаге в одном узле сходятся ветки, поэтому полученные производные просто складываются, получая уравнение &amp;lt;tex&amp;gt;(2)&amp;lt;/tex&amp;gt; для производной по дисперсии.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 9&lt;br /&gt;
|[[Файл:step1.png|300px]]&lt;br /&gt;
|Аналогично шагу 6 вычисляем матрицу по сумме для производной по математическому ожиданию, получая формулу &amp;lt;tex&amp;gt;(3)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 10&lt;br /&gt;
|[[Файл:step0.png|300px]]&lt;br /&gt;
|В начальной вершине получаем уравнение &amp;lt;tex&amp;gt;(4)&amp;lt;/tex&amp;gt;, складывая входящие производные.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Пакетная нормализация в [[Сверточные нейронные сети | свёрточных сетях]]==&lt;br /&gt;
Пакетная нормализация может быть применена к любой функции активации. Рассмотрим подробнее случай аффинного преобразования с некоторой нелинейной функцией:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;z = g(Wu + b)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;W&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} настраиваемые параметры модели, а &amp;lt;tex&amp;gt;g(\cdot)&amp;lt;/tex&amp;gt; {{---}} некоторая нелинейная функция, например [[Практики реализации нейронных сетей#Sigmoid function|cигмоида]] или [[Практики реализации нейронных сетей#Rectified Linear Units (ReLU)|ReLU]]. Данной функцией можно описать как обычные, так и сверточные слои нейронных сетей. Пакетная нормализация применяется сразу перед функцией &amp;lt;tex&amp;gt;g(\cdot)&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;x = Wu + b&amp;lt;/tex&amp;gt;. Параметр &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; может быть опущен, так как в дальнейших вычислениях его роль будет играть параметр &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;. Поэтому &amp;lt;tex&amp;gt;z = g(Wu + b)&amp;lt;/tex&amp;gt; может быть записано так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;z = g(BN(Wu))&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;BN&amp;lt;/tex&amp;gt; применяется отдельно к каждой размерности &amp;lt;tex&amp;gt;x=Wu&amp;lt;/tex&amp;gt; с отдельной парой параметров &amp;lt;tex&amp;gt;\gamma^{(k)}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta^{(k)}&amp;lt;/tex&amp;gt; для каждой размерности.&lt;br /&gt;
&lt;br /&gt;
В случае свёрточных сетей, дополнительно необходима нормализация, чтобы удовлетворить свойство свёрточных сетей, что различные элементы в разных местах одной карты признаков (образ операции свёртки, англ. feature map) должны быть нормализованы одинаково. Чтобы этого добиться, нормализация выполняется совместно над всеми значениями в пакете. Пусть &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} множество всех значений в карте признаков по всему пакету и всем точкам в карте признаков. Тогда для пакета размера &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и карты признаков размера &amp;lt;tex&amp;gt;p \times q&amp;lt;/tex&amp;gt; размер &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; равен &amp;lt;tex&amp;gt;m'=|B|=m \cdot pq&amp;lt;/tex&amp;gt;. Тогда параметры &amp;lt;tex&amp;gt;\gamma^{(k)}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta^{(k)}&amp;lt;/tex&amp;gt; настраиваются для каждой карты признаков отдельно.&lt;br /&gt;
&lt;br /&gt;
==Индивидуальная нормализация==&lt;br /&gt;
[[file:types-of-normalization.png|300px|thumb|Рисунок &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;. Типы нормализации. Ось N&lt;br /&gt;
— по объектам в пакете, ось C — по картам признаков (channels), оставшаяся ось —&lt;br /&gt;
по пространственным измерениям объектов, например, ширине и высоте картинки.&lt;br /&gt;
Иллюстрация из&lt;br /&gt;
[https://medium.com/syncedreview/facebook-ai-proposes-group-normalization-alternative-to-batch-normalization-fb0699bffae7 статьи].]]&lt;br /&gt;
&lt;br /&gt;
При пакетной нормализации происходит усреднение параметров по всему пакету.&lt;br /&gt;
Например, в случае задачи переноса стилей картин, это вносит много шума. При&lt;br /&gt;
усреднении теряются индивидуальные характеристики объектов. Поэтому используется&lt;br /&gt;
более тонкая нормализация — индивидуальная нормализация (англ. instance&lt;br /&gt;
normalization). Разница заключается в том, что нормализация происходит по&lt;br /&gt;
каждому отдельному объекту, а не по всему пакету. Для примера, усреднение&lt;br /&gt;
происходит по пикселям картины, но не по всем картинам в пакете, как видно на&lt;br /&gt;
Рисунке &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Условная пакетная нормализация==&lt;br /&gt;
&lt;br /&gt;
'''Условная пакетная нормализация''' (англ. conditional batch normalization,&lt;br /&gt;
CBN) {{---}} метод, который позволяет &amp;quot;выбирать&amp;quot; параметры пакетной нормализации&lt;br /&gt;
(&amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\gamma&amp;lt;/tex&amp;gt;) в зависимости от какого-то состояния&lt;br /&gt;
сети, например метки класса. Впервые данный метод был представлен для&lt;br /&gt;
индивидуальной нормализации в&lt;br /&gt;
''A Learned Representation for Artistic Style''&amp;lt;ref name=&amp;quot;A Learned Representation for Artistic Style&amp;quot;&amp;gt;[https://arxiv.org/pdf/1610.07629.pdf A Learned Representation for Artistic Style]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Позднее он был использован для пакетной нормализации в&lt;br /&gt;
''Modulating early visual processing by language''&amp;lt;ref name=&amp;quot;Modulating early visual processing by language&amp;quot;&amp;gt;[https://arxiv.org/pdf/1707.00683v3.pdf Modulating early visual processing by language]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Зачем нужно делать параметры нормализации зависимостью? На практике было&lt;br /&gt;
выяснено &amp;lt;ref name=&amp;quot;A Learned Representation for Artistic Style&amp;quot;/&amp;gt;, что иногда&lt;br /&gt;
нейронные сети, натренированные решать разные задачи из одного класса, имеют&lt;br /&gt;
схожие веса и достаточно лишь слегка поменять параметры сжатия и сдвига после&lt;br /&gt;
каждого слоя. Таким образом, добавив условную нормализацию, мы научимся решать&lt;br /&gt;
сразу несколько задач используя одну сеть.&lt;br /&gt;
&lt;br /&gt;
===Описание метода===&lt;br /&gt;
&lt;br /&gt;
Самая важная часть метода {{---}} ''выбрать'' для входа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; параметры&lt;br /&gt;
&amp;lt;tex&amp;gt;\beta_c&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\gamma_c&amp;lt;/tex&amp;gt;. Возможные способы сделать это описаны&lt;br /&gt;
ниже. Единожды параметры выбраны, формула не отличается от приведённой в&lt;br /&gt;
параграфе c [[Batch-normalization#Описание метода | описанием метода пакетной нормализации]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y = \gamma_c \cdot \hat{x} + \beta_c \;\; (1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Выбор параметров нормализации===&lt;br /&gt;
&lt;br /&gt;
Есть несколько способов выбрать параметры. Самой простой из них — разделить&lt;br /&gt;
предметную область на &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; частей. Для каждого слоя надо добавить&lt;br /&gt;
соответствующие параметры &amp;lt;tex&amp;gt;\beta_c, \gamma_c \; , c \in 1..C&amp;lt;/tex&amp;gt; и&lt;br /&gt;
настраивать их вместе с остальными параметрами модели. Когда мы тренируем на&lt;br /&gt;
данных из &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-ой части, мы явно указываем, что в формуле &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;c = i&amp;lt;/tex&amp;gt;. Когда мы хотим осуществить предсказание, мы снова явно указываем&lt;br /&gt;
желаемый &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; и в вычислениях используются соответствующие параметры.&lt;br /&gt;
&lt;br /&gt;
Есть другой способ: можно вместе с настройкой сети обучать алгоритм выбора&lt;br /&gt;
параметров &amp;lt;tex&amp;gt;PARAMS&amp;lt;/tex&amp;gt; сжатия и сдвига по заданному входу: &amp;lt;tex&amp;gt;(\beta_c,&lt;br /&gt;
\gamma_c) = PARAMS(x)&amp;lt;/tex&amp;gt;. К примеру, в работе [https://arxiv.org/pdf/1707.00683v3.pdf Modulating early visual processing by language]&lt;br /&gt;
в качестве &amp;lt;tex&amp;gt;PARAMS&amp;lt;/tex&amp;gt; используется&lt;br /&gt;
[[Нейронные_сети, перцептрон#Классификация перцептронов | многослойный перцептрон по Румельхарту с одним скрытым слоем]].&lt;br /&gt;
Таким образом, характеристики &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; могут изменить выход целого слоя. Это&lt;br /&gt;
бывает полезно, если верна гипотеза, что структура входных векторов связана с&lt;br /&gt;
желаемым результатом работы.&lt;br /&gt;
&lt;br /&gt;
===В применении к переносу стиля===&lt;br /&gt;
[[file:style-transfer-example.png|300px|thumb|Рисунок &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt;. Перенесения стиля с картины Клода Моне &amp;quot;Рыбацкие лодки&amp;quot; (слева) на изображение человека (справа) &amp;lt;ref name=&amp;quot;A Learned Representation for Artistic Style&amp;quot;/&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Популярной задачей является отрисовка данного изображения в стиле какой-то заданной картины, как на Рисунке &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt;. Одно из популярных и достаточно быстрых решений этой задачи использует простые нейронные сети [[Нейронные сети, перцептрон#Сети прямого распространения | прямого распространения]]. Это решение имеет недостаток: каждая сеть может переносить лишь один стиль. Если мы хотим научиться переносить &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; стилей, то надо обучать &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; различных сетей. Однако лишь небольшое количество параметров этих сетей отвечает за индивидуальные особенности стиля. Хотелось бы уметь переиспользовать остальные параметры.&lt;br /&gt;
&lt;br /&gt;
====Добавление условности====&lt;br /&gt;
В [https://arxiv.org/pdf/1610.07629.pdf A Learned Representation for Artistic Style] был получен удивительный результат: для моделирования какого-то стиля, достаточно специализировать параметры сжатия и сдвига нормализации для каждого конкретного стиля. Таким образом, давайте для каждого изображения стиля &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; будем учитывать свои &amp;lt;tex&amp;gt;\gamma_c&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta_c&amp;lt;/tex&amp;gt;. Получается, у нас будет лишь два вектора параметров, специфичных для каждого стиля, а все остальные — общие.&lt;br /&gt;
&lt;br /&gt;
Такой подход имеет много преимуществ по сравнению с наивным:&lt;br /&gt;
&lt;br /&gt;
* Это быстрее.&lt;br /&gt;
* Это требует меньше памяти.&lt;br /&gt;
* Легче добавить новый стиль: достаточно взять текущие веса, добавить новые параметры сжатия и сдвига и дообучить. Веса, скорее всего, уже были близки к оптимальным и дообучение не будет долгим.&lt;br /&gt;
* Можно комбинировать новые стили за счёт [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D0%BA%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%86%D0%B8%D1%8F#%D0%90%D1%84%D1%84%D0%B8%D0%BD%D0%BD%D0%B0%D1%8F,_%D0%BA%D0%BE%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8_%D0%B2%D1%8B%D0%BF%D1%83%D0%BA%D0%BB%D0%B0%D1%8F_%D0%BA%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%86%D0%B8%D0%B8 выпуклой комбинации] существующих коэффициентов сжатия и сдвига.&lt;br /&gt;
&lt;br /&gt;
===Когда использовать условную нормализацию?===&lt;br /&gt;
&lt;br /&gt;
Во-первых, на условную нормализацию стоит обратить внимание, если вы&lt;br /&gt;
настраиваете много сетей, решающих похожие задачи. Возможно, в этом случае вы&lt;br /&gt;
можете использовать одну сеть с условными параметрами нормализации, зависящими&lt;br /&gt;
от конкретной задачи. Например, при переносе стилей вместо &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; сетей вы&lt;br /&gt;
настраиваете одну сеть с &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; наборами параметров нормализации.&lt;br /&gt;
&lt;br /&gt;
Во-вторых, если вы подозреваете, что информация о структуре входных векторов&lt;br /&gt;
имеет значение для выхода. Например, имеет смысл &amp;quot;слить&amp;quot; лингвистическую&lt;br /&gt;
информацию и характеристики изображения для Visual Question Answering.&lt;br /&gt;
&lt;br /&gt;
Однако во всех случаях надо помнить, что полученные алгоритмы для разных задач&lt;br /&gt;
будут различаться лишь параметрами свёртки и сжатия. Иначе говоря, если ваши&lt;br /&gt;
задачи нельзя выразить&lt;br /&gt;
[https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D0%BA%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%86%D0%B8%D1%8F#%D0%90%D1%84%D1%84%D0%B8%D0%BD%D0%BD%D0%B0%D1%8F,%20%D0%BA%D0%BE%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F%20%D0%B8%20%D0%B2%D1%8B%D0%BF%D1%83%D0%BA%D0%BB%D0%B0%D1%8F%20%D0%BA%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%86%D0%B8%D0%B8 аффинной комбинацией]&lt;br /&gt;
параметров сети после нормализации, условная нормализация не поможет.&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
[[File:bn_exp_1.png|300px|thumb|Рисунок &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;. Точность распознавания в зависимости от итерации обучения. Оранжевая кривая изображает результаты для модели с использованием пакетной нормализации, синяя кривая {{---}} без. Иллюстрация из [https://github.com/udacity/deep-learning/blob/master/batch-norm/Batch_Normalization_Lesson.ipynb статьи].]]&lt;br /&gt;
[[File:bn_exp_2.png|300px|thumb|Рисунок &amp;lt;tex&amp;gt;6&amp;lt;/tex&amp;gt;. Точность распознавания в зависимости от итерации обучения c использованием сигмоиды в качетсве функции активации. Иллюстрация из [https://github.com/udacity/deep-learning/blob/master/batch-norm/Batch_Normalization_Lesson.ipynb статьи].]]&lt;br /&gt;
&lt;br /&gt;
Приведем пример демонстрирующий работу пакетной нормализации.&lt;br /&gt;
Рассмотрим задачу распознавания рукописных цифр на известном датасете MNIST &amp;lt;ref&amp;gt;[http://yann.lecun.com/exdb/mnist/ Датасет MNIST]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Для решения задачи будет использоваться обычная нейронная сеть с &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt; скрытыми полносвязными слоями по &amp;lt;tex&amp;gt;100&amp;lt;/tex&amp;gt; узлов в каждом.&lt;br /&gt;
Функция активации {{---}} ReLU.&lt;br /&gt;
Выходной слой содержит &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt; узлов.&lt;br /&gt;
Размер пакета равен &amp;lt;tex&amp;gt;60&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сравниваются две одинаковые модели, но в первой перед каждым скрытым слоем используется пакетная нормализация, а во второй {{---}} нет.&lt;br /&gt;
Темп обучения равен &amp;lt;tex&amp;gt;0.01&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Веса инициализированы значениями с малой дисперсией.&lt;br /&gt;
&lt;br /&gt;
На Рисунке &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; изображены два графика, показывающие разницу между моделями.&lt;br /&gt;
Как видно, обе модели достигли высокой точности, но модель с использованием пакетной нормализации достигла точности более &amp;lt;tex&amp;gt;90\%&amp;lt;/tex&amp;gt; быстрее, почти сразу, и достигла максимума, примерно, уже на &amp;lt;tex&amp;gt;10000&amp;lt;/tex&amp;gt; итераций. Однако, модель без пакетной нормализации достигла скорости обучения примерно &amp;lt;tex&amp;gt;510&amp;lt;/tex&amp;gt; пакетов в секунду, а модель с использованием пакетной нормализации {{---}} &amp;lt;tex&amp;gt;270&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Однако, как можно видеть, пакетная нормализация позволяет выполнить меньшее количество итераций и, в итоге, сойтись за меньшее время.&lt;br /&gt;
&lt;br /&gt;
На Рисунке &amp;lt;tex&amp;gt;6&amp;lt;/tex&amp;gt; изображен график, сравнивающий точно такие же модели, но с использованием сигмоиды в качестве функции активации.&lt;br /&gt;
Такая конфигурация моделей требует большего времени, чтобы начать обучение.&lt;br /&gt;
В итоге, модель обучается, но на это потребовалось более &amp;lt;tex&amp;gt;45000&amp;lt;/tex&amp;gt; итераций, чтобы получить точность более &amp;lt;tex&amp;gt;80\%&amp;lt;/tex&amp;gt;.&lt;br /&gt;
При использовании пакетной нормализации получилось достичь точность более &amp;lt;tex&amp;gt;90\%&amp;lt;/tex&amp;gt; примерно за &amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt; итераций.&lt;br /&gt;
&lt;br /&gt;
==Реализации==&lt;br /&gt;
Механизм пакетной нормализации реализован практически во всех современных инструментариях для машинного обучения, таких как: TensorFlow &amp;lt;ref&amp;gt;[https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalization TensorFlow]&amp;lt;/ref&amp;gt;, Keras &amp;lt;ref&amp;gt;[https://keras.io/layers/normalization/ Keras]&amp;lt;/ref&amp;gt;, CNTK &amp;lt;ref&amp;gt;[https://docs.microsoft.com/en-us/cognitive-toolkit/BatchNormalization CNTK]&amp;lt;/ref&amp;gt;, Theano &amp;lt;ref&amp;gt;[http://deeplearning.net/software/theano/library/tensor/nnet/bn.html Theano]&amp;lt;/ref&amp;gt;, PyTorch &amp;lt;ref&amp;gt;[https://pytorch.org/docs/stable/_modules/torch/nn/modules/batchnorm.html PyTorch]&amp;lt;/ref&amp;gt; и т.д.&lt;br /&gt;
&lt;br /&gt;
Приведем пример&amp;lt;ref&amp;gt;[https://towardsdatascience.com/batch-normalization-theory-and-how-to-use-it-with-tensorflow-1892ca0173ad Batch normalization: theory and how to use it with Tensorflow]&amp;lt;/ref&amp;gt; применения пакетной нормализации с использованием библиотеки TensorFlow на языке программирования Python &amp;lt;ref&amp;gt;[https://www.python.org/ Язык программирования Python]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
  '''import''' tensorflow '''as''' tf&lt;br /&gt;
  &amp;lt;font color=green&amp;gt;# ...&amp;lt;/font&amp;gt;&lt;br /&gt;
  is_train = tf.placeholder(tf.bool, name=&amp;quot;is_train&amp;quot;);&lt;br /&gt;
  &amp;lt;font color=green&amp;gt;# ...&amp;lt;/font&amp;gt;&lt;br /&gt;
  x_norm = tf.layers.batch_normalization(x, training=is_train)&lt;br /&gt;
  &amp;lt;font color=green&amp;gt;# ...&amp;lt;/font&amp;gt;&lt;br /&gt;
  update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)&lt;br /&gt;
  '''with''' tf.control_dependencies(update_ops):&lt;br /&gt;
      train_op = optimizer.minimize(loss)&lt;br /&gt;
&lt;br /&gt;
==Модификации==&lt;br /&gt;
Существует несколько модификаций и вариаций метода пакетной нормализации:&lt;br /&gt;
# Тим Койманс&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1603.09025.pdf Cooijmans T. {{---}} Recurrent batch normalization, 2016]&amp;lt;/ref&amp;gt; в 2016 г. предложил способ применения пакетной нормализации к [[Рекуррентные нейронные сети|рекуррентным нейронным сетям]];&lt;br /&gt;
# Расширение метода пакетной нормализации было предложено Ликси Хуангом&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1804.08450.pdf Huang L. {{---}} Decorrelated Batch Normalization, 2018]&amp;lt;/ref&amp;gt; в 2018 г. Метод получил название декоррелированная пакетная нормализация (англ. Decorrelated Batch Normalization). В данном методе кроме операций масштабирования и сдвига была предложено использование специальной функции затирания данных;&lt;br /&gt;
# Джимми Лей Ба&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1607.06450.pdf Ba J. L., Kiros J. R., Hinton G. E. {{---}} Layer normalization, 2016]&amp;lt;/ref&amp;gt; в 2016 г. предложил метод нормализации слоев (англ. Layer Normalization), который решает проблему выбора размера пакета;&lt;br /&gt;
# В работе Сергея Иоффе&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1702.03275.pdf Ioffe S. {{---}} Batch renormalization: Towards reducing minibatch dependence in batch-normalized models, 2017]&amp;lt;/ref&amp;gt; в 2017 г. было представлено расширение метода пакетной нормализации: пакетная ренормализация (англ. Batch Renormalization). Данный метод улучшает пакетную нормализацию, когда размер пакетов мал и не состоит из независимых данных;&lt;br /&gt;
# Метод потоковой нормализации (англ. Streaming Normalization) был предложен Кифэном Ляо&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1610.06160.pdf Liao Q., Kawaguchi K., Poggio T. {{---}} Streaming normalization: Towards simpler and more biologically-plausible normalizations for online and recurrent learning, 2016]&amp;lt;/ref&amp;gt; в 2016 г. Данный метод убирает два ограничения пакетной нормализации: использование при [[wikipedia:ru:Онлайновое_обучение_машин|online-обучении]] и использование в рекуррентных нейронных сетях.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Глубокое обучение|Глубокое обучение]]&lt;br /&gt;
*[[:Практики реализации нейронных сетей|Практики реализации нейронных сетей]]&lt;br /&gt;
*[[:Настройка глубокой сети|Настройка глубокой сети]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации==&lt;br /&gt;
* [https://arxiv.org/pdf/1502.03167.pdf Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift]&lt;br /&gt;
* [https://towardsdatascience.com/batch-normalization-in-neural-networks-1ac91516821c Glossary of Deep Learning: Batch Normalisation]&lt;br /&gt;
* [https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html Understanding the backward pass through Batch Normalization Layer]&lt;br /&gt;
* [https://medium.com/@SeoJaeDuk/deeper-understanding-of-batch-normalization-with-interactive-code-in-tensorflow-manual-back-1d50d6903d35 Deeper Understanding of Batch Normalization with Interactive Code in Tensorflow]&lt;br /&gt;
* [https://www.learnopencv.com/batch-normalization-in-deep-networks/ Batch Normalization in Deep Networks]&lt;br /&gt;
* [https://github.com/udacity/deep-learning/blob/master/batch-norm/Batch_Normalization_Lesson.ipynb Batch Normalization {{---}} Lesson]&lt;br /&gt;
* [https://arxiv.org/pdf/1610.07629.pdf A Learned Representation for Artistic Style]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=Batch-normalization&amp;diff=76866</id>
		<title>Batch-normalization</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=Batch-normalization&amp;diff=76866"/>
				<updated>2021-01-08T20:44:15Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Описание метода */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Пакетная нормализация''' (англ. batch-normalization) {{---}} метод, который позволяет повысить производительность и стабилизировать работу [[Нейронные сети, перцептрон | искусственных нейронных сетей]]. Суть данного метода заключается в том, что некоторым слоям нейронной сети на вход подаются данные, предварительно обработанные и имеющие нулевое [[Математическое ожидание случайной величины|математическое ожидание]] и единичную [[Дисперсия случайной величины|дисперсию]]. Впервые данный метод был представлен в &amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1502.03167.pdf Ioffe S., Szegedy C. {{---}} Batch normalization: Accelerating deep network training by reducing internal covariate shift, 2016]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Идея==&lt;br /&gt;
Нормализация входного слоя нейронной сети обычно выполняется путем масштабирования данных, подаваемых в функции активации. Например, когда есть признаки со значениями от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; и некоторые признаки со значениями от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;, то их необходимо нормализовать, чтобы ускорить обучение. Нормализацию данных можно выполнить и в скрытых слоях нейронных сетей, что и делает метод пакетной нормализации.&lt;br /&gt;
===Пакет===&lt;br /&gt;
Предварительно, напомним, что такое '''пакет''' (англ. batch). Возможны два подхода к реализации алгоритма градиентного спуска для обучения нейросетевых моделей: стохастический и пакетный&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=Метод_стохастического_градиента Метод стохастического градиента]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* [[Стохастический градиентный спуск|Стохастический градиентный спуск]] (англ. stochastic gradient descent) {{---}} реализация, в которой на каждой итерации алгоритма из обучающей выборки каким-то (случайным) образом выбирается только один объект;&lt;br /&gt;
* Пакетный (батч) (англ. batch gradient descent) {{---}} реализация градиентного спуска, когда на каждой итерации обучающая выборка просматривается целиком, и только после этого изменяются веса модели.&lt;br /&gt;
&lt;br /&gt;
Также существует &amp;quot;золотая середина&amp;quot; между стохастическим градиентным спуском и пакетным градиентным спуском {{---}} когда просматривается только некоторое подмножество обучающей выборки фиксированного размера (англ. batch-size). В таком случае такие подмножества принято называть мини-пакетом (англ. mini-batch). Здесь и далее, мини-пакеты будем также называть пакетом.&lt;br /&gt;
&lt;br /&gt;
===Ковариантный сдвиг===&lt;br /&gt;
[[Файл:covariate-shift1.png|600px|thumb|Рисунок &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Верхние две строки роз показывают первое подмножество данных, а нижние две строки показывают другое подмножество. Два подмножества имеют разные пропорции изображения роз. На графиках показано распределение двух классов в пространстве объектов с использованием красных и зеленых точек. Синяя линия показывает границу между двумя классами. Иллюстрация из [https://www.learnopencv.com/batch-normalization-in-deep-networks/ статьи].]]&lt;br /&gt;
Пакетная нормализация уменьшает величину, на которую смещаются значения узлов в скрытых слоях (т.н. '''[[Ковариация случайных величин|ковариантный]] сдвиг''' (англ. covariance shift)).&lt;br /&gt;
&lt;br /&gt;
Ковариантный сдвиг {{---}} это ситуация, когда распределения значений признаков в обучающей и тестовой выборке имеют разные параметры (математическое ожидание, дисперсия и т.д.). Ковариантность в данном случае относится к значениям признаков.&lt;br /&gt;
&lt;br /&gt;
Проиллюстрируем ковариантный сдвиг примером.&lt;br /&gt;
Пусть есть [[Глубокое обучение|глубокая нейронная сеть]], которая обучена определять находится ли на изображении роза.&lt;br /&gt;
И нейронная сеть была обучена на изображениях только красных роз.&lt;br /&gt;
Теперь, если попытаться использовать обученную модель для обнаружения роз различных цветов, то, очевидно, точность работы модели будет неудовлетворительной.&lt;br /&gt;
Это происходит из-за того, что обучающая и тестовая выборки содержат изображения красных роз и роз различных цветов в разных пропорциях.&lt;br /&gt;
Другими словами, если модель обучена отображению из множества &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; в множество &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt; и если пропорция элементов в &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; изменяется, то появляется необходимость обучить модель заново, чтобы &amp;quot;выровнять&amp;quot; пропорции элементов в &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Когда пакеты содержат изображения разных классов, распределенные в одинаковой пропорции на всем множестве, то ковариантный сдвиг незначителен.&lt;br /&gt;
Однако, когда пакеты выбираются только из одного или двух подмножеств (в данном случае, красные розы и розы различных цветов), то ковариантный сдвиг возрастает.&lt;br /&gt;
Это довольно сильно замедляет процесс обучения модели. На Рисунке &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; изображена разница в пропорциях.&lt;br /&gt;
&lt;br /&gt;
Простой способ решить проблему ковариантного сдвига для входного слоя {{---}} это случайным образом перемешать данные перед созданием пакетов.&lt;br /&gt;
Но для скрытых слоев нейронной сети такой метод не подходит, так как распределение входных данных для каждого узла скрытых слоев изменяется каждый раз, когда происходит обновление параметров в предыдущем слое.&lt;br /&gt;
Эта проблема называется '''внутренним ковариантным сдвигом''' (англ. internal covariate shift).&lt;br /&gt;
Для решения данной проблемы часто приходится использовать низкий [[Стохастический градиентный спуск|темп обучения]] (англ. learning rate) и методы [[wikipedia:ru:Регуляризация_(математика)|регуляризации]] при обучении модели.&lt;br /&gt;
Другим способом устранения внутреннего ковариантного сдвига является метод пакетной нормализации.&lt;br /&gt;
&lt;br /&gt;
===Свойства пакетной нормализации===&lt;br /&gt;
Кроме того, использование пакетной нормализации обладает еще несколькими дополнительными полезными свойствами:&lt;br /&gt;
* достигается более быстрая сходимость моделей, несмотря на выполнение дополнительных вычислений;&lt;br /&gt;
* пакетная нормализация позволяет каждому слою сети обучаться более независимо от других слоев;&lt;br /&gt;
* становится возможным использование более высокого темпа обучения, так как пакетная нормализация гарантирует, что выходы узлов нейронной сети не будут иметь слишком больших или малых значений;&lt;br /&gt;
* пакетная нормализация в каком-то смысле также является механизмом регуляризации: данный метод привносит в выходы узлов скрытых слоев некоторый шум, аналогично методу [[Практики реализации нейронных сетей#Dropout|dropout]];&lt;br /&gt;
* модели становятся менее чувствительны к начальной инициализации весов.&lt;br /&gt;
&lt;br /&gt;
==Описание метода==&lt;br /&gt;
Опишем устройство метода пакетной нормализации. Пусть на вход некоторому слою нейронной сети поступает вектор размерности &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;x = (x^{(1)}, \ldots, x^{(d)})&amp;lt;/tex&amp;gt;. Нормализуем данный вектор по каждой размерности &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\hat{x}^{(k)} = \displaystyle \frac{x^{(k)} - E(x^{(k)})}{\sqrt{D(x^{(k)})}}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где математическое ожидание и дисперсия считаются по всей обучающей выборке. Такая нормализация входа слоя нейронной сети может изменить представление данных в слое. Чтобы избежать данной проблемы, вводятся два параметра сжатия и сдвига нормализованной величины для каждого &amp;lt;tex&amp;gt;x^{(k)}&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;\gamma^{(k)}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\beta^{(k)}&amp;lt;/tex&amp;gt; {{---}} которые действуют следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y^{(k)} = \gamma^{(k)} \hat{x}^{(k)} + \beta^{(k)}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данные параметры настраиваются в процессе обучения вместе с остальными [[Модель_алгоритма_и_ее_выбор|параметрами модели]].&lt;br /&gt;
&lt;br /&gt;
Пусть обучение модели производится с помощью пакетов &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; размера &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;B = \{x_{1},\ldots, x_{m}\}&amp;lt;/tex&amp;gt;. Здесь нормализация применяется к каждому элементу входа с номером &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; отдельно, поэтому в &amp;lt;tex&amp;gt;x^{(k)}&amp;lt;/tex&amp;gt; индекс опускается для ясности изложения. Пусть были получены нормализованные значения пакета &amp;lt;tex&amp;gt;\hat{x}_{1},\ldots, \hat{x}_{m}&amp;lt;/tex&amp;gt;. После применения операций сжатия и сдвига были получены &amp;lt;tex&amp;gt;y_{1},\ldots, y_{m}&amp;lt;/tex&amp;gt;. Обозначим данную функцию пакетной нормализации следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;BN_{\gamma, \beta}: \{x_{1},\ldots, x_{m}\} \rightarrow \{y_{1},\ldots, y_{m}\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда алгоритм пакетной нормализации можно представить так:&lt;br /&gt;
&lt;br /&gt;
 '''Вход''': значения &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; из пакета &amp;lt;tex&amp;gt;B = \{x_{1},\ldots, x_{m}\}&amp;lt;/tex&amp;gt;; настраиваемые параметры &amp;lt;tex&amp;gt;\gamma, \beta&amp;lt;/tex&amp;gt;; константа &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; для вычислительной устойчивости.&lt;br /&gt;
 '''Выход''': &amp;lt;tex&amp;gt;\{y_{i} = BN_{\gamma, \beta}(x_{i})\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;\mu_{B} = \displaystyle \frac{1}{m} \sum_{i=1}^{m} x_{i}&amp;lt;/tex&amp;gt; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// математическое ожидание пакета&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;\sigma_{B}^{2} = \displaystyle \frac{1}{m} \sum_{i=1}^{m} (x_{i} - \mu_{B})^{2}&amp;lt;/tex&amp;gt; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// дисперсия пакета&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;\hat{x}_{i} = \displaystyle \frac{x_{i} - \mu_{B}}{\sqrt{\sigma_{B}^{2} + \epsilon}}&amp;lt;/tex&amp;gt; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// нормализация&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;y_{i} = \gamma \hat{x}_{i} + \beta \equiv BN_{\gamma, \beta}(x_{i}) &amp;lt;/tex&amp;gt; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// сжатие и сдвиг&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что если &amp;lt;tex&amp;gt;\beta=\mu_{B}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\gamma=\sqrt{\sigma_{B}^{2} + \epsilon}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;y_{i}&amp;lt;/tex&amp;gt; равен &amp;lt;tex&amp;gt;x_{i}&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;BN_{\gamma, \beta}(\cdot)&amp;lt;/tex&amp;gt; является тождественным отображением.&lt;br /&gt;
Таким образом, использование пакетной нормализации не может привести к снижению точности, поскольку оптимизатор просто может использовать нормализацию как тождественное отображение.&lt;br /&gt;
&lt;br /&gt;
==Обучение нейронных сетей с пакетной нормализацией==&lt;br /&gt;
[[Файл:BNcircuit.png|700px|thumb|Рисунок &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;. [[Настройка_глубокой_сети#Граф вычислений|Граф вычислений]] слоя пакетной нормализации алгоритмом обратного распространения ошибки. Слева-направо черными стрелками показана работа алгоритма в прямом направлении. А справа-налево красными стрелками {{---}} в обратном направлении, где вычисляется градиент функции потерь. Здесь &amp;lt;tex&amp;gt;N=m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;D=d&amp;lt;/tex&amp;gt;. Иллюстрация из [https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html статьи].]]&lt;br /&gt;
&lt;br /&gt;
Для обучения нейронных сетей необходимо вычислять [[wikipedia:ru:Градиент|градиент]] [[wikipedia:en:Loss_function|функции потерь]] &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;. В случае использования метода пакетной нормализации градиент вычисляется следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\displaystyle \frac{\partial l}{\partial \hat{x}_{i}} = \frac{\partial l}{\partial y_{i}} \cdot \gamma&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\displaystyle \frac{\partial l}{\partial \sigma_{B}^{2}} = \sum_{i=1}^{m}\frac{\partial l}{\partial \hat{x}_{i}} \cdot (x_{i} - \mu_{B}) \cdot \frac{-1}{2}(\sigma_{B}^{2} + \epsilon)^{-3/2}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\displaystyle \frac{\partial l}{\partial \mu_{B}} = \left(\sum_{i=1}^{m}\frac{\partial l}{\partial \hat{x}_{i}} \cdot \frac{-1}{\sqrt{\sigma_{B}^{2} + \epsilon}}\right) + \frac{\partial l}{\partial \sigma_{B}^{2}} \cdot \frac{\sum_{i=1}^{m}-2(x_{i}-\mu_{B})}{m}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (3)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\displaystyle \frac{\partial l}{\partial x_{i}} = \frac{\partial l}{\partial \hat{x}_{i}} \cdot \frac{1}{\sqrt{\sigma_{B}^{2} + \epsilon}} + \frac{\partial l}{\partial \sigma_{B}^{2}} \cdot \frac{2(x_{i}-\mu_{B})}{m} + \frac{\partial l}{\partial \mu_{B}} \cdot \frac{1}{m}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (4)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\displaystyle \frac{\partial l}{\partial \gamma} = \sum_{i=1}^{m}\frac{\partial l}{\partial y_{i}} \cdot \hat{x}_{i}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (5)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\displaystyle \frac{\partial l}{\partial \beta} = \sum_{i=1}^{m}\frac{\partial l}{\partial y_{i}}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (6)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На Рисунке &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; изображен [[Настройка_глубокой_сети#Граф вычислений|граф вычислений]] слоя пакетной нормализации алгоритмом обратного распространения ошибки.&lt;br /&gt;
&lt;br /&gt;
В прямом направлении, как и описано в алгоритме метода, из входа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вычисляется среднее значение по каждой размерности признакового пространства. Затем полученный вектор средних значение вычитается из каждого элемента обучающей выборки. Далее вычисляется дисперсия,  и с помощью нее вычисляется знаменатель для нормализации. Затем полученное значение инвертируется и умножается на разницу входа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и средних значений. В конце применяются параметры &amp;lt;tex&amp;gt;\gamma&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В обратном направлении вычисляются производные необходимых функций. В следующей таблице подробнее изображены шаги вычисления градиента функции потерь (иллюстрации из [https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html статьи], здесь &amp;lt;tex&amp;gt;N=m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;D=d&amp;lt;/tex&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
{| cellpadding = &amp;quot;20&amp;quot; class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Шаг !! Изображение !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 1&lt;br /&gt;
|[[Файл:step9.png|300px]]&lt;br /&gt;
|Сначала вычисляется производная по параметру &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;, как в уравнении &amp;lt;tex&amp;gt;(6)&amp;lt;/tex&amp;gt;, так как к нему применяется только операции суммирования. И значение градиента выхода передается без изменений.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 2&lt;br /&gt;
|[[Файл:step8.png|300px]]&lt;br /&gt;
|Далее, пользуясь правилом вычисления производной при умножении, как в уравнении &amp;lt;tex&amp;gt;(5)&amp;lt;/tex&amp;gt;, вычисляется градиент по параметру &amp;lt;tex&amp;gt;\gamma&amp;lt;/tex&amp;gt;. Градиент выхода умножается на данную константу, получая уравнение &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt;, и передается в следующий узел.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 3&lt;br /&gt;
|[[Файл:step7.png|300px]]&lt;br /&gt;
|Данный шаг вычисляется аналогично предыдущему, применяя правило вычисления производной при умножении.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 4&lt;br /&gt;
|[[Файл:step6.png|300px]]&lt;br /&gt;
|Пользуясь производной обратной величины, вычисляем следующий узел графа.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 5&lt;br /&gt;
|[[Файл:step5.png|300px]]&lt;br /&gt;
|Вычисляем производную квадратного корня с добавлением &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 6&lt;br /&gt;
|[[Файл:step4.png|300px]]&lt;br /&gt;
|Вычисляем производную суммы по всем компонентам входного вектора, получая матрицу.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 7&lt;br /&gt;
|[[Файл:step3.png|300px]]&lt;br /&gt;
|Получаем производную квадрата входящей функции.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 8&lt;br /&gt;
|[[Файл:step2.png|300px]]&lt;br /&gt;
|На данном шаге в одном узле сходятся ветки, поэтому полученные производные просто складываются, получая уравнение &amp;lt;tex&amp;gt;(2)&amp;lt;/tex&amp;gt; для производной по дисперсии.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 9&lt;br /&gt;
|[[Файл:step1.png|300px]]&lt;br /&gt;
|Аналогично шагу 6 вычисляем матрицу по сумме для производной по математическому ожиданию, получая формулу &amp;lt;tex&amp;gt;(3)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| style = &amp;quot;text-align: center&amp;quot; | 10&lt;br /&gt;
|[[Файл:step0.png|300px]]&lt;br /&gt;
|В начальной вершине получаем уравнение &amp;lt;tex&amp;gt;(4)&amp;lt;/tex&amp;gt;, складывая входящие производные.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Пакетная нормализация в [[Сверточные нейронные сети | свёрточных сетях]]==&lt;br /&gt;
Пакетная нормализация может быть применена к любой функции активации. Рассмотрим подробнее случай аффинного преобразования с некоторой нелинейной функцией:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;z = g(Wu + b)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;W&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} настраиваемые параметры модели, а &amp;lt;tex&amp;gt;g(\cdot)&amp;lt;/tex&amp;gt; {{---}} некоторая нелинейная функция, например [[Практики реализации нейронных сетей#Sigmoid function|cигмоида]] или [[Практики реализации нейронных сетей#Rectified Linear Units (ReLU)|ReLU]]. Данной функцией можно описать как обычные, так и сверточные слои нейронных сетей. Пакетная нормализация применяется сразу перед функцией &amp;lt;tex&amp;gt;g(\cdot)&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;x = Wu + b&amp;lt;/tex&amp;gt;. Параметр &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; может быть опущен, так как в дальнейших вычислениях его роль будет играть параметр &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;. Поэтому &amp;lt;tex&amp;gt;z = g(Wu + b)&amp;lt;/tex&amp;gt; может быть записано так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;z = g(BN(Wu))&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;BN&amp;lt;/tex&amp;gt; применяется отдельно к каждой размерности &amp;lt;tex&amp;gt;x=Wu&amp;lt;/tex&amp;gt; с отдельной парой параметров &amp;lt;tex&amp;gt;\gamma^{(k)}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta^{(k)}&amp;lt;/tex&amp;gt; для каждой размерности.&lt;br /&gt;
&lt;br /&gt;
В случае свёрточных сетей, дополнительно необходима нормализация, чтобы удовлетворить свойство свёрточных сетей, что различные элементы в разных местах одной карты признаков (образ операции свёртки, англ. feature map) должны быть нормализованы одинаково. Чтобы этого добиться, нормализация выполняется совместно над всеми значениями в пакете. Пусть &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} множество всех значений в карте признаков по всему пакету и всем точкам в карте признаков. Тогда для пакета размера &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и карты признаков размера &amp;lt;tex&amp;gt;p \times q&amp;lt;/tex&amp;gt; размер &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; равен &amp;lt;tex&amp;gt;m'=|B|=m \cdot pq&amp;lt;/tex&amp;gt;. Тогда параметры &amp;lt;tex&amp;gt;\gamma^{(k)}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta^{(k)}&amp;lt;/tex&amp;gt; настраиваются для каждой карты признаков отдельно.&lt;br /&gt;
&lt;br /&gt;
==Индивидуальная нормализация==&lt;br /&gt;
[[file:types-of-normalization.png|300px|thumb|Рисунок &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;. Типы нормализации. Ось N&lt;br /&gt;
— по объектам в пакете, ось C — по картам признаков (channels), оставшаяся ось —&lt;br /&gt;
по пространственным измерениям объектов, например, ширине и высоте картинки.&lt;br /&gt;
Иллюстрация из&lt;br /&gt;
[https://medium.com/syncedreview/facebook-ai-proposes-group-normalization-alternative-to-batch-normalization-fb0699bffae7 статьи].]]&lt;br /&gt;
&lt;br /&gt;
При пакетной нормализации происходит усреднение параметров по всему пакету.&lt;br /&gt;
Например, в случае задачи переноса стилей картин, это вносит много шума. При&lt;br /&gt;
усреднении теряются индивидуальные характеристики объектов. Поэтому используется&lt;br /&gt;
более тонкая нормализация — индивидуальная нормализация (англ. instance&lt;br /&gt;
normalization). Разница заключается в том, что нормализация происходит по&lt;br /&gt;
каждому отдельному объекту, а не по всему пакету. Для примера, усреднение&lt;br /&gt;
происходит по пикселям картины, но не по всем картинам в пакете, как видно на&lt;br /&gt;
Рисунке &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Условная пакетная нормализация==&lt;br /&gt;
&lt;br /&gt;
'''Условная пакетная нормализация''' (англ. conditional batch normalization,&lt;br /&gt;
CBN) {{---}} метод, который позволяет &amp;quot;выбирать&amp;quot; параметры пакетной нормализации&lt;br /&gt;
(&amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\gamma&amp;lt;/tex&amp;gt;) в зависимости от какого-то состояния&lt;br /&gt;
сети, например метки класса. Впервые данный метод был представлен для&lt;br /&gt;
индивидуальной нормализации в&lt;br /&gt;
''A Learned Representation for Artistic Style''&amp;lt;ref name=&amp;quot;A Learned Representation for Artistic Style&amp;quot;&amp;gt;[https://arxiv.org/pdf/1610.07629.pdf A Learned Representation for Artistic Style]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Позднее он был использован для пакетной нормализации в&lt;br /&gt;
''Modulating early visual processing by language''&amp;lt;ref name=&amp;quot;Modulating early visual processing by language&amp;quot;&amp;gt;[https://arxiv.org/pdf/1707.00683v3.pdf Modulating early visual processing by language]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Зачем нужно делать параметры нормализации зависимостью? На практике было&lt;br /&gt;
выяснено &amp;lt;ref name=&amp;quot;A Learned Representation for Artistic Style&amp;quot;/&amp;gt;, что иногда&lt;br /&gt;
нейронные сети, натренированные решать разные задачи из одного класса, имеют&lt;br /&gt;
схожие веса и достаточно лишь слегка поменять параметры сжатия и сдвига после&lt;br /&gt;
каждого слоя. Таким образом, добавив условную нормализацию, мы научимся решать&lt;br /&gt;
сразу несколько задач используя одну сеть.&lt;br /&gt;
&lt;br /&gt;
===Описание метода===&lt;br /&gt;
&lt;br /&gt;
Самая важная часть метода {{---}} ''выбрать'' для входа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; параметры&lt;br /&gt;
&amp;lt;tex&amp;gt;\beta_c&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\gamma_c&amp;lt;/tex&amp;gt;. Возможные способы сделать это описаны&lt;br /&gt;
ниже. Единожды параметры выбраны, формула не отличается от приведённой в&lt;br /&gt;
параграфе [[Batch-normalization#Описание метода]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y = \gamma_c \cdot \hat{x} + \beta_c \;\; (1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Выбор параметров нормализации===&lt;br /&gt;
&lt;br /&gt;
Есть несколько способов выбрать параметры. Самой простой из них — разделить&lt;br /&gt;
предметную область на &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; частей. Для каждого слоя надо добавить&lt;br /&gt;
соответствующие параметры &amp;lt;tex&amp;gt;\beta_c, \gamma_c \; , c \in 1..C&amp;lt;/tex&amp;gt; и&lt;br /&gt;
настраивать их вместе с остальными параметрами модели. Когда мы тренируем на&lt;br /&gt;
данных из &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-ой части, мы явно указываем, что в формуле &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;c = i&amp;lt;/tex&amp;gt;. Когда мы хотим осуществить предсказание, мы снова явно указываем&lt;br /&gt;
желаемый &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; и в вычислениях используются соответствующие параметры.&lt;br /&gt;
&lt;br /&gt;
Есть другой способ: можно вместе с настройкой сети обучать алгоритм выбора&lt;br /&gt;
параметров &amp;lt;tex&amp;gt;PARAMS&amp;lt;/tex&amp;gt; сжатия и сдвига по заданному входу: &amp;lt;tex&amp;gt;(\beta_c,&lt;br /&gt;
\gamma_c) = PARAMS(x)&amp;lt;/tex&amp;gt;. К примеру, в работе [https://arxiv.org/pdf/1707.00683v3.pdf Modulating early visual processing by language]&lt;br /&gt;
в качестве &amp;lt;tex&amp;gt;PARAMS&amp;lt;/tex&amp;gt; используется&lt;br /&gt;
[[Нейронные_сети, перцептрон#Классификация перцептронов | многослойный перцептрон по Румельхарту с одним скрытым слоем]].&lt;br /&gt;
Таким образом, характеристики &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; могут изменить выход целого слоя. Это&lt;br /&gt;
бывает полезно, если верна гипотеза, что структура входных векторов связана с&lt;br /&gt;
желаемым результатом работы.&lt;br /&gt;
&lt;br /&gt;
===В применении к переносу стиля===&lt;br /&gt;
[[file:style-transfer-example.png|300px|thumb|Рисунок &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt;. Перенесения стиля с картины Клода Моне &amp;quot;Рыбацкие лодки&amp;quot; (слева) на изображение человека (справа) &amp;lt;ref name=&amp;quot;A Learned Representation for Artistic Style&amp;quot;/&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Популярной задачей является отрисовка данного изображения в стиле какой-то заданной картины, как на Рисунке &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt;. Одно из популярных и достаточно быстрых решений этой задачи использует простые нейронные сети [[Нейронные сети, перцептрон#Сети прямого распространения | прямого распространения]]. Это решение имеет недостаток: каждая сеть может переносить лишь один стиль. Если мы хотим научиться переносить &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; стилей, то надо обучать &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; различных сетей. Однако лишь небольшое количество параметров этих сетей отвечает за индивидуальные особенности стиля. Хотелось бы уметь переиспользовать остальные параметры.&lt;br /&gt;
&lt;br /&gt;
====Добавление условности====&lt;br /&gt;
В [https://arxiv.org/pdf/1610.07629.pdf A Learned Representation for Artistic Style] был получен удивительный результат: для моделирования какого-то стиля, достаточно специализировать параметры сжатия и сдвига нормализации для каждого конкретного стиля. Таким образом, давайте для каждого изображения стиля &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; будем учитывать свои &amp;lt;tex&amp;gt;\gamma_c&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta_c&amp;lt;/tex&amp;gt;. Получается, у нас будет лишь два вектора параметров, специфичных для каждого стиля, а все остальные — общие.&lt;br /&gt;
&lt;br /&gt;
Такой подход имеет много преимуществ по сравнению с наивным:&lt;br /&gt;
&lt;br /&gt;
* Это быстрее.&lt;br /&gt;
* Это требует меньше памяти.&lt;br /&gt;
* Легче добавить новый стиль: достаточно взять текущие веса, добавить новые параметры сжатия и сдвига и дообучить. Веса, скорее всего, уже были близки к оптимальным и дообучение не будет долгим.&lt;br /&gt;
* Можно комбинировать новые стили за счёт [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D0%BA%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%86%D0%B8%D1%8F#%D0%90%D1%84%D1%84%D0%B8%D0%BD%D0%BD%D0%B0%D1%8F,_%D0%BA%D0%BE%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8_%D0%B2%D1%8B%D0%BF%D1%83%D0%BA%D0%BB%D0%B0%D1%8F_%D0%BA%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%86%D0%B8%D0%B8 выпуклой комбинации] существующих коэффициентов сжатия и сдвига.&lt;br /&gt;
&lt;br /&gt;
===Когда использовать условную нормализацию?===&lt;br /&gt;
&lt;br /&gt;
Во-первых, на условную нормализацию стоит обратить внимание, если вы&lt;br /&gt;
настраиваете много сетей, решающих похожие задачи. Возможно, в этом случае вы&lt;br /&gt;
можете использовать одну сеть с условными параметрами нормализации, зависящими&lt;br /&gt;
от конкретной задачи. Например, при переносе стилей вместо &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; сетей вы&lt;br /&gt;
настраиваете одну сеть с &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; наборами параметров нормализации.&lt;br /&gt;
&lt;br /&gt;
Во-вторых, если вы подозреваете, что информация о структуре входных векторов&lt;br /&gt;
имеет значение для выхода. Например, имеет смысл &amp;quot;слить&amp;quot; лингвистическую&lt;br /&gt;
информацию и характеристики изображения для Visual Question Answering.&lt;br /&gt;
&lt;br /&gt;
Однако во всех случаях надо помнить, что полученные алгоритмы для разных задач&lt;br /&gt;
будут различаться лишь параметрами свёртки и сжатия. Иначе говоря, если ваши&lt;br /&gt;
задачи нельзя выразить&lt;br /&gt;
[https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D0%BA%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%86%D0%B8%D1%8F#%D0%90%D1%84%D1%84%D0%B8%D0%BD%D0%BD%D0%B0%D1%8F,%20%D0%BA%D0%BE%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F%20%D0%B8%20%D0%B2%D1%8B%D0%BF%D1%83%D0%BA%D0%BB%D0%B0%D1%8F%20%D0%BA%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%86%D0%B8%D0%B8 аффинной комбинацией]&lt;br /&gt;
параметров сети после нормализации, условная нормализация не поможет.&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
[[File:bn_exp_1.png|300px|thumb|Рисунок &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;. Точность распознавания в зависимости от итерации обучения. Оранжевая кривая изображает результаты для модели с использованием пакетной нормализации, синяя кривая {{---}} без. Иллюстрация из [https://github.com/udacity/deep-learning/blob/master/batch-norm/Batch_Normalization_Lesson.ipynb статьи].]]&lt;br /&gt;
[[File:bn_exp_2.png|300px|thumb|Рисунок &amp;lt;tex&amp;gt;6&amp;lt;/tex&amp;gt;. Точность распознавания в зависимости от итерации обучения c использованием сигмоиды в качетсве функции активации. Иллюстрация из [https://github.com/udacity/deep-learning/blob/master/batch-norm/Batch_Normalization_Lesson.ipynb статьи].]]&lt;br /&gt;
&lt;br /&gt;
Приведем пример демонстрирующий работу пакетной нормализации.&lt;br /&gt;
Рассмотрим задачу распознавания рукописных цифр на известном датасете MNIST &amp;lt;ref&amp;gt;[http://yann.lecun.com/exdb/mnist/ Датасет MNIST]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Для решения задачи будет использоваться обычная нейронная сеть с &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt; скрытыми полносвязными слоями по &amp;lt;tex&amp;gt;100&amp;lt;/tex&amp;gt; узлов в каждом.&lt;br /&gt;
Функция активации {{---}} ReLU.&lt;br /&gt;
Выходной слой содержит &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt; узлов.&lt;br /&gt;
Размер пакета равен &amp;lt;tex&amp;gt;60&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сравниваются две одинаковые модели, но в первой перед каждым скрытым слоем используется пакетная нормализация, а во второй {{---}} нет.&lt;br /&gt;
Темп обучения равен &amp;lt;tex&amp;gt;0.01&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Веса инициализированы значениями с малой дисперсией.&lt;br /&gt;
&lt;br /&gt;
На Рисунке &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; изображены два графика, показывающие разницу между моделями.&lt;br /&gt;
Как видно, обе модели достигли высокой точности, но модель с использованием пакетной нормализации достигла точности более &amp;lt;tex&amp;gt;90\%&amp;lt;/tex&amp;gt; быстрее, почти сразу, и достигла максимума, примерно, уже на &amp;lt;tex&amp;gt;10000&amp;lt;/tex&amp;gt; итераций. Однако, модель без пакетной нормализации достигла скорости обучения примерно &amp;lt;tex&amp;gt;510&amp;lt;/tex&amp;gt; пакетов в секунду, а модель с использованием пакетной нормализации {{---}} &amp;lt;tex&amp;gt;270&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Однако, как можно видеть, пакетная нормализация позволяет выполнить меньшее количество итераций и, в итоге, сойтись за меньшее время.&lt;br /&gt;
&lt;br /&gt;
На Рисунке &amp;lt;tex&amp;gt;6&amp;lt;/tex&amp;gt; изображен график, сравнивающий точно такие же модели, но с использованием сигмоиды в качестве функции активации.&lt;br /&gt;
Такая конфигурация моделей требует большего времени, чтобы начать обучение.&lt;br /&gt;
В итоге, модель обучается, но на это потребовалось более &amp;lt;tex&amp;gt;45000&amp;lt;/tex&amp;gt; итераций, чтобы получить точность более &amp;lt;tex&amp;gt;80\%&amp;lt;/tex&amp;gt;.&lt;br /&gt;
При использовании пакетной нормализации получилось достичь точность более &amp;lt;tex&amp;gt;90\%&amp;lt;/tex&amp;gt; примерно за &amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt; итераций.&lt;br /&gt;
&lt;br /&gt;
==Реализации==&lt;br /&gt;
Механизм пакетной нормализации реализован практически во всех современных инструментариях для машинного обучения, таких как: TensorFlow &amp;lt;ref&amp;gt;[https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalization TensorFlow]&amp;lt;/ref&amp;gt;, Keras &amp;lt;ref&amp;gt;[https://keras.io/layers/normalization/ Keras]&amp;lt;/ref&amp;gt;, CNTK &amp;lt;ref&amp;gt;[https://docs.microsoft.com/en-us/cognitive-toolkit/BatchNormalization CNTK]&amp;lt;/ref&amp;gt;, Theano &amp;lt;ref&amp;gt;[http://deeplearning.net/software/theano/library/tensor/nnet/bn.html Theano]&amp;lt;/ref&amp;gt;, PyTorch &amp;lt;ref&amp;gt;[https://pytorch.org/docs/stable/_modules/torch/nn/modules/batchnorm.html PyTorch]&amp;lt;/ref&amp;gt; и т.д.&lt;br /&gt;
&lt;br /&gt;
Приведем пример&amp;lt;ref&amp;gt;[https://towardsdatascience.com/batch-normalization-theory-and-how-to-use-it-with-tensorflow-1892ca0173ad Batch normalization: theory and how to use it with Tensorflow]&amp;lt;/ref&amp;gt; применения пакетной нормализации с использованием библиотеки TensorFlow на языке программирования Python &amp;lt;ref&amp;gt;[https://www.python.org/ Язык программирования Python]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
  '''import''' tensorflow '''as''' tf&lt;br /&gt;
  &amp;lt;font color=green&amp;gt;# ...&amp;lt;/font&amp;gt;&lt;br /&gt;
  is_train = tf.placeholder(tf.bool, name=&amp;quot;is_train&amp;quot;);&lt;br /&gt;
  &amp;lt;font color=green&amp;gt;# ...&amp;lt;/font&amp;gt;&lt;br /&gt;
  x_norm = tf.layers.batch_normalization(x, training=is_train)&lt;br /&gt;
  &amp;lt;font color=green&amp;gt;# ...&amp;lt;/font&amp;gt;&lt;br /&gt;
  update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)&lt;br /&gt;
  '''with''' tf.control_dependencies(update_ops):&lt;br /&gt;
      train_op = optimizer.minimize(loss)&lt;br /&gt;
&lt;br /&gt;
==Модификации==&lt;br /&gt;
Существует несколько модификаций и вариаций метода пакетной нормализации:&lt;br /&gt;
# Тим Койманс&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1603.09025.pdf Cooijmans T. {{---}} Recurrent batch normalization, 2016]&amp;lt;/ref&amp;gt; в 2016 г. предложил способ применения пакетной нормализации к [[Рекуррентные нейронные сети|рекуррентным нейронным сетям]];&lt;br /&gt;
# Расширение метода пакетной нормализации было предложено Ликси Хуангом&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1804.08450.pdf Huang L. {{---}} Decorrelated Batch Normalization, 2018]&amp;lt;/ref&amp;gt; в 2018 г. Метод получил название декоррелированная пакетная нормализация (англ. Decorrelated Batch Normalization). В данном методе кроме операций масштабирования и сдвига была предложено использование специальной функции затирания данных;&lt;br /&gt;
# Джимми Лей Ба&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1607.06450.pdf Ba J. L., Kiros J. R., Hinton G. E. {{---}} Layer normalization, 2016]&amp;lt;/ref&amp;gt; в 2016 г. предложил метод нормализации слоев (англ. Layer Normalization), который решает проблему выбора размера пакета;&lt;br /&gt;
# В работе Сергея Иоффе&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1702.03275.pdf Ioffe S. {{---}} Batch renormalization: Towards reducing minibatch dependence in batch-normalized models, 2017]&amp;lt;/ref&amp;gt; в 2017 г. было представлено расширение метода пакетной нормализации: пакетная ренормализация (англ. Batch Renormalization). Данный метод улучшает пакетную нормализацию, когда размер пакетов мал и не состоит из независимых данных;&lt;br /&gt;
# Метод потоковой нормализации (англ. Streaming Normalization) был предложен Кифэном Ляо&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1610.06160.pdf Liao Q., Kawaguchi K., Poggio T. {{---}} Streaming normalization: Towards simpler and more biologically-plausible normalizations for online and recurrent learning, 2016]&amp;lt;/ref&amp;gt; в 2016 г. Данный метод убирает два ограничения пакетной нормализации: использование при [[wikipedia:ru:Онлайновое_обучение_машин|online-обучении]] и использование в рекуррентных нейронных сетях.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Глубокое обучение|Глубокое обучение]]&lt;br /&gt;
*[[:Практики реализации нейронных сетей|Практики реализации нейронных сетей]]&lt;br /&gt;
*[[:Настройка глубокой сети|Настройка глубокой сети]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации==&lt;br /&gt;
* [https://arxiv.org/pdf/1502.03167.pdf Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift]&lt;br /&gt;
* [https://towardsdatascience.com/batch-normalization-in-neural-networks-1ac91516821c Glossary of Deep Learning: Batch Normalisation]&lt;br /&gt;
* [https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html Understanding the backward pass through Batch Normalization Layer]&lt;br /&gt;
* [https://medium.com/@SeoJaeDuk/deeper-understanding-of-batch-normalization-with-interactive-code-in-tensorflow-manual-back-1d50d6903d35 Deeper Understanding of Batch Normalization with Interactive Code in Tensorflow]&lt;br /&gt;
* [https://www.learnopencv.com/batch-normalization-in-deep-networks/ Batch Normalization in Deep Networks]&lt;br /&gt;
* [https://github.com/udacity/deep-learning/blob/master/batch-norm/Batch_Normalization_Lesson.ipynb Batch Normalization {{---}} Lesson]&lt;br /&gt;
* [https://arxiv.org/pdf/1610.07629.pdf A Learned Representation for Artistic Style]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2&amp;diff=76183</id>
		<title>Генерация объектов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2&amp;diff=76183"/>
				<updated>2021-01-03T16:03:39Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Источники */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Задача генерации объектов''' (англ. ''object generation problem'') {{---}} задача, связанная с машинным обучением, заключающаяся в создании новых правдоподобных объектов на основании заданной выборки.&lt;br /&gt;
Полученные объекты могут как быть использованы независимо для прикладных целей (в таком случае, это чаще всего изображения), так и для устранения несбалансированности классов (''оверсэмплинг'') и дальнейшей обработки данных (обычно ''классификации''). В зависимости от того, для какой из этих целей используется генерация объектов, постановка задачи и методы её решения несколько отличаются.&lt;br /&gt;
&lt;br /&gt;
== Генерация объектов для прикладных целей ==&lt;br /&gt;
&lt;br /&gt;
=== Применение ===&lt;br /&gt;
&lt;br /&gt;
==== Изображения ====&lt;br /&gt;
&lt;br /&gt;
===== В искусстве и рекламе =====&lt;br /&gt;
При генерации объектов основная задача обычно состоит в том, чтобы научиться создавать изображения, которые человек не может отличить от изображений, полученных иных путём. Такие изображения могут использоваться, среди прочего, для более дешёвого создания модельных снимков, обложек или пейзажей. Одним из ярких примеров такого использования является создание фотографий вымышленных людей для рекламы в расчёте на то, что люди будут больше ассоциировать себя с образом, не представляющим кого-либо конкретного, но сочетающим в себе те черты, которые есть у них самих. А модель [[Generative Adversarial Nets (GAN) | GAN]] под названием Speech2Face может реконструировать изображение лица человека после прослушивания его голоса.&lt;br /&gt;
&lt;br /&gt;
===== В науке =====&lt;br /&gt;
&lt;br /&gt;
Генерация объектов может улучшать астрономические изображения и использоваться при моделировании дорогостоящих для изучения физических процессов. Так, в 2019 году при помощи [[Generative Adversarial Nets (GAN) | состязательных сетей]] были успешно смоделированы распределения темной материи в определенном направлении в пространстве и составлены предсказания гравитационного линзирования.&lt;br /&gt;
&lt;br /&gt;
GAN также может использоваться для обнаружения глаукомных изображений, помогая ранней диагностике, которая необходима для предотвращения частичной или полной потери зрения.&amp;lt;ref&amp;gt;[https://www.sciencedirect.com/science/article/abs/pii/S1568494620301058?via%3Dihub] Статья про обнаружение глаукомных изображений&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Музыка и звуки ====&lt;br /&gt;
&lt;br /&gt;
В Google активно используется модель [https://en.wikipedia.org/wiki/WaveNet WaveNet] которая способна генерировать речь, похожую на голос любого человека, и другие звуки, включая музыку (например, композиции на пианино).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!---&lt;br /&gt;
&lt;br /&gt;
Генерировать можно документы и тексты. Например, существу&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Анимация и игры ====&lt;br /&gt;
&lt;br /&gt;
Еще генерация объектов может использоваться при воссоздании текстур старых игр в лучшем расширении (пример игры, для которой был использован такой метод – [https://ru.wikipedia.org/wiki/Resident_Evil Resident Evil] ).&lt;br /&gt;
[[File:propal_chelovek.jpg|thumb|Пример сгенерированного изображения]]&lt;br /&gt;
&lt;br /&gt;
=== Используемые модели ===&lt;br /&gt;
&lt;br /&gt;
Для достижения данной цели обычно используются [[Порождающие модели | порождающие модели]]. В таком варианте в качестве задачи ставится восстановление совместного распределения &amp;lt;tex&amp;gt;p(x,y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; — это один бит, отвечающий за отдельный признак (то есть тот класс, к которому должна принадлежать созданный объект; например, фотография человека), а &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; — это весь объект (фотография).&lt;br /&gt;
Чаще всего порождаемый объект &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; представляет собой набор элементов &amp;lt;tex&amp;gt;X = \{x_i\}&amp;lt;/tex&amp;gt;, что позволяет порождать объект по частям. Для изображения, например, такими частями будут являться пиксели. Таким образом, при порождении следующих частей объекта мы можем опираться на уже созданные, и тогда перед нами встаёт задача максимизация функции правдоподобия: для набора данных &amp;lt;tex&amp;gt;X = \{x_i\}&amp;lt;/tex&amp;gt; максимизировать &amp;lt;tex&amp;gt;\displaystyle \prod_i p_{\operatorname{model}}(x_i,\theta)&amp;lt;/tex&amp;gt; по параметрам модели θ, т.е. найти &amp;lt;math&amp;gt;\theta^* = \underset{\theta}{\operatorname{argmax}} \displaystyle \prod_i p_{\operatorname{model}}(x_i,\theta)&amp;lt;/math&amp;gt;. Эта задача относится к классу задач обучения без учителя или с частичным привлечением учителя. При её решении либо работают с явными распределениями, сводя распределение &amp;lt;tex&amp;gt;p(x,y)&amp;lt;/tex&amp;gt; к произведению распределений определённой структуры, либо используют неявные модели, которые не восстанавливают всю функцию плотности, а только моделируют ту часть этой функции, которая нужна непосредственно. Стоит отметить, что простые порождающие модели, такие как наивный байесовский классификатор, не показывают достаточное качество результата, чтобы на их основе можно было сгенерировать полноценные мультимедиа объекты. Из класса порождающих моделей при генерации именно изображений особенно хорошо показали себя модели [[Generative Adversarial Nets (GAN) | состязательных сетей]], [[PixelRNN и PixelCNN | PixelRNN и PixelCNN]], а также DRAW (рисуют изображение с помощью сочетания [[Рекуррентные нейронные сети | рекуррентных НС]] и [[Механизм внимания | механизма внимания]]). Также стоит отметить модель [https://en.wikipedia.org/wiki/WaveNet WaveNet], используемую для создания звуковых записей. Эта модель создана в 2016 году, а к 2018 году, после нескольких оптимизаций вычислительной сложности, она нашла применение в Google при создании образцов речи на различных языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!---&lt;br /&gt;
== Оверсэмплинг ==&lt;br /&gt;
&lt;br /&gt;
Основная причина применения расширения выборки за счёт создания объектов – ''дисбаланс'' классов в уже имеющейся выборке. Этот дисбаланс может быть двух типов:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Недостаточное представление класса в одной или нескольких ''входных переменных''. Это явление широко распространено в реальных данных и возникает естественным образом, например, при социологических исследованиях. Так, при случайном нестратифицированном опросе программистов-женщин будет опрошено в несколько раз меньше, чем мужчин, так как мужчины больше представлены в данной профессии, что может оказаться важным при установлении связи с такой переменной, как стаж работы.&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Недостаточное представление класса в ''выходной переменной''. Это явление так же широко также распространено в реальных данных. Особенно часто этот эффект проявляется в медицине, где процент заболевших обычно много меньше процента здоровых обследуемых. Адекватность оценки предсказания в таких случаях помогает сохранять использование точности, полноты и F-меры.&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Дисбаланс данных является проблемой потому, что, хотя некоторые аналитические методы (''линейная и логистическая регрессия'') устойчивы к дисбалансу данных, многие другие (например, ''нейронные сети'') уязвимы к нему и снижают качество предсказания. В связи с этим возникает задача балансировки данных, которая может быть решена двумя способами: '''оверсэмплинг''' (генерация новых объектов выборки ''миноритарного'' или менее представленного класса) и '''андерсэмплинг''' (удаление из выборки объектов ''мажоритарного'' или более представленного класса). В рамках данной статьи будет рассмотрен только оверсэмплинг, так как именно он связан с генерацией объектов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Используемые методы ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Случайный оверсэмплинг''' – создание копий нескольких объектов миноритарного класса. Этот метод включает несколько вариаций, так как могут различаться количество копий &amp;lt;tex&amp;gt;(2, 5, 10)&amp;lt;/tex&amp;gt; и более для каждого объекта и доля объектов миноритарного класса, для которой создаются копии. Этот метод – один из самых ранних, для него доказана '''выбросоустойчивость''' (''robustness''). Однако его эффективность часто недостаточна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SMOTE''' (''Synthetic Minority Oversampling Technique'') – генерация искусственных примеров, не совпадающих с имеющимися в выборке. Этот алгоритм во многом основан на [[Метрический классификатор и метод ближайших соседей | методе ближайшего соседа]]. Для создания новой записи находят разность &amp;lt;tex&amp;gt;d=X_b–X_a&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;X_a,X_b&amp;lt;/tex&amp;gt; – векторы признаков «соседних» примеров &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; из миноритарного класса (их находят так же, как в методе ''kNN''). В данном случае необходимо и достаточно для примера &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; получить набор из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей, из которого в дальнейшем будет выбрана запись &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Далее из &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; путем умножения каждого его элемента на случайное число в интервале &amp;lt;tex&amp;gt;(0, 1)&amp;lt;/tex&amp;gt; получают &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Вектор признаков нового примера вычисляется путем сложения &amp;lt;tex&amp;gt;X_a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Алгоритм SMOTE позволяет задавать количество записей, которое необходимо искусственно сгенерировать. Степень сходства примеров &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно регулировать путем изменения значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; (числа ближайших соседей). Пример работы алгоритма продемонстрирован на рис. 1. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:SMOTE_GEN.gif|none|frame|Рис. 1. Пример работы алгоритма SMOTE]]&lt;br /&gt;
&lt;br /&gt;
Данный подход имеет недостаток в том, что «вслепую» увеличивает плотность примерами в области слабо представленного класса. Пример такого увеличения изображён на рис. 2.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:SMOTE_GEN_DISS.gif|none|frame|Рис. 2. Пример неудачного срабатывания SMOTE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ASMO''' (''Adaptive Synthetic Minority Oversampling'') – алгоритм адаптивного искусственного увеличения числа примеров миноритарного класса, модифицирующий SMOTE. В случае, если миноритарные примеры равномерно распределены среди мажоритарных и имеют низкую плотность, алгоритм SMOTE только сильнее перемешает классы. В качестве решения данной проблемы был предложен алгоритм ASMO. Он применяется, если для каждого &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-ого примера миноритарного класса из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; ближайших соседей &amp;lt;tex&amp;gt;g (g≤k)&amp;lt;/tex&amp;gt; принадлежит к мажоритарному. В этом случае на основании примеров миноритарного класса выделяется несколько кластеров и для примеров каждого кластера применяют SMOTE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ADASYN''' (''Adaptive synthetic sampling'') – семейство методов, являющихся попыткой «адаптации» SMOTE, то есть создания объектов, с которыми на выборке будет показан лучший результат классификации. Такие методы могут: создавать больше данных на миноритарных классах, на которых обучение сложнее; изменять пространство объектов в сторону точек, у которых соседи неоднородны; просто добавлять случайное изменение к генерируемым точкам для создания естественного шума.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;[https://en.wikipedia.org/wiki/Generative_adversarial_network Генеративно-состязательная сеть]&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;[https://en.wikipedia.org/wiki/WaveNet WaveNet]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;!---&lt;br /&gt;
    &amp;lt;li&amp;gt;[https://en.wikipedia.org/wiki/Oversampling_and_undersampling_in_data_analysis Оверсемплинг]&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;[https://www.kaggle.com/residentmario/oversampling-with-smote-and-adasyn Оверсемплинг с SMOTE]&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;[https://medium.com/coinmonks/smote-and-adasyn-handling-imbalanced-data-set-34f5223e167  Методы работы с небалансными данными в SMOTE и ADASYN]&amp;lt;/li&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;[https://towardsdatascience.com/dealing-with-imbalanced-classes-in-machine-learning-d43d6fa19d2 Методы работы с небалансными классами]&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;[https://basegroup.ru/community/articles/imbalance-datasets Несбалансированные датасеты]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Порождающие модели]]&lt;br /&gt;
[[Категория: Генерация объектов]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D1%87%D0%B8&amp;diff=75259</id>
		<title>Распознавание речи</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D1%87%D0%B8&amp;diff=75259"/>
				<updated>2020-12-11T19:24:34Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Языковая модель */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Распознавание речи''' (англ. Speech Recognition) {{---}} процесс преобразования речевого сигнала в цифровую информацию.&lt;br /&gt;
&lt;br /&gt;
Задачей распознавания является сопоставление набору акустических признаков речевого сигнала или наблюдений &lt;br /&gt;
&amp;lt;math&amp;gt;X(x_1 ,...,x_n)&amp;lt;/math&amp;gt; последовательности слов &lt;br /&gt;
&amp;lt;math&amp;gt;W(w_1 ,...,w_k)&amp;lt;/math&amp;gt;, имеющих наибольшую вероятность правдоподобия среди всех кандидатов. Для этого используется формула Байеса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;W = argmax \left[\frac{P(W)*P(X|W)}{P(X)}\right]&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Причем, в процессе распознавания вероятность уже полученных признаков Р(Х) не подлежит оптимизации и знаменатель в формуле не испльзуется:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;W = argmax[P(W)*P(X|W)]&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Классификация систем распознавания речи==&lt;br /&gt;
&lt;br /&gt;
Системы распознавания речи классифицируются&amp;lt;ref&amp;gt;''Федосин С.А., Еремин А. Ю.'' Классификация систем распознавания речи. — Саранск. : МГУ им. Н.П. Огарева, 2009. — С. 3.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
* по размеру словаря (ограниченный набор слов, словарь большого размера);&lt;br /&gt;
* по зависимости от диктора (дикторозависимые и дикторонезависимые системы);&lt;br /&gt;
* по типу речи (слитная или раздельная речь);&lt;br /&gt;
* по назначению (системы диктовки, командные системы);&lt;br /&gt;
* по используемому алгоритму (нейронные сети, скрытые Марковские модели, динамическое программирование);&lt;br /&gt;
* по типу структурной единицы (фразы, слова, фонемы, дифоны, аллофоны);&lt;br /&gt;
* по принципу выделения структурных единиц (распознавание по шаблону, выделение лексических элементов).&lt;br /&gt;
&lt;br /&gt;
==Структура систем распознавания речи==&lt;br /&gt;
&lt;br /&gt;
Системы распознавания речи впервые появились в 1952 году. С тех пор методы распознавания не раз менялись.&lt;br /&gt;
Ранее использовались такие методы и алгоритмы, как:&lt;br /&gt;
* Динамическое программирование (Dynamic Time Warping) - временные динамические алгоритмы, выполняющие классификацию на основе сравнения с эталоном.&lt;br /&gt;
* Методы дискриминантного анализа, основанные на Байесовской дискриминации (Bayesian discrimination).&lt;br /&gt;
* Скрытые Марковские Модели (Hidden Markov Model).&lt;br /&gt;
* Нейронные сети (Neural Networks).&lt;br /&gt;
В настоящее время, перечисленные выше методы как правило комбинируются. Их сочетание позволяет получить более высокое качество распознавания, чем использование каждой модели отдельно.&lt;br /&gt;
&lt;br /&gt;
Системы распознавания речи имеют следующие основные модули:&lt;br /&gt;
* Акустическая модель&lt;br /&gt;
* Языковая модель&lt;br /&gt;
* Декодер&lt;br /&gt;
&lt;br /&gt;
===Акустическая модель===&lt;br /&gt;
''Фонема'' (phoneme) {{---}} элементарная единица человеческой речи. Примерами фонем являются транскрипции в формате IPA {{---}} так, слово hello состоит из фонем [hɛˈləʊ].&lt;br /&gt;
&lt;br /&gt;
''Акустическая модель'' {{---}} это функция, принимающая на вход признаки на небольшом участке акустического сигнала (фрейме) и выдающая распределение вероятностей различных фонем на этом фрейме. Таким образом, акустическая модель дает возможность по звуку восстановить, что было произнесено {{---}} с той или иной степенью уверенности.&amp;lt;br&amp;gt;&lt;br /&gt;
Самой популярной реализацией акустической модели является [[Скрытые Марковские модели|скрытая Марковская модель (СММ)]], в которой скрытыми состояниями являются фонемы, а наблюдениями {{---}} распределения вероятностей признаков на фрейме.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее акустическую модель на основе СММ для слова ''six'':&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:HMM_six.jpeg|800px|Акустическая модель для слова ''six'']]&lt;br /&gt;
 |}&lt;br /&gt;
В круглых (скрытых) состояниях изображены фонемы, а в квадратных (наблюдениях) {{---}} распределения вероятностей признаков (для упрощения, здесь изображено одномерное распределение). Фонемы часто разбивают на 3 этапа {{---}} начало, середину и конец, {{---}} потому что фонема может звучать по-разному в зависимости от момента времени её произнесения. Каждое скрытое состояние содержит переход само в себя, так как время произнесения одной фонемы может занять несколько фреймов. Вероятности перехода между фонемами в СММ являются обучаемыми параметрами, и для их настройки используют [[Алгоритм Баума-Велша|алгоритм Баума-Велша]]. Последовательность фонем по набору распределений на фреймах восстанавливают по [[Алгоритм Витерби|алгоритму Витерби]].&lt;br /&gt;
&lt;br /&gt;
[[Файл:GMM_acoustic.jpeg|мини|Отличие нормального распределения от GMM]]&lt;br /&gt;
В качестве функции распределения вероятностей признаков часто выбирают смешанную гауссову модель (англ. Gaussian Mixture Model, GMM): дело в том, что одна и та же фонема может звучать по-разному, например, в зависимости от акцента. Так как эта функция является по сути суммой нескольких нормальных распределений, она позволяет учесть различные звучания одной и той же фонемы.&lt;br /&gt;
&lt;br /&gt;
===Языковая модель===&lt;br /&gt;
&lt;br /&gt;
''Языковая модель'' {{---}} позволяет узнать, какие последовательности слов в языке более вероятны, а какие менее.&lt;br /&gt;
Здесь в самом простом случае требуется предсказать следующее слово по известным предыдущим словам. В традиционных системах применялись модели типа N-грамм, в которых на основе большого количества текстов оценивались распределения вероятности появления слова в зависимости от N предшествующих слов. Для получения надежных оценок распределений параметр N должен быть достаточно мал: одно, два или три слова {{---}} модели униграмм, биграмм или триграмм соответственно. Внедрение языковой модели в систему распознавания речи позволило значительно повысить качество распознавания за счет учета контекста.&lt;br /&gt;
&lt;br /&gt;
===Декодер===&lt;br /&gt;
&lt;br /&gt;
В ходе работы системы автоматического распознавания речи задача распознавания сводится к определению наиболее вероятной последовательности слов, соответствующих содержанию речевого сигнала. Наиболее вероятный кандидат должен определяться с учетом как акустической, так и лингвистической информации. Это означает, что необходимо производить эффективный поиск среди возможных кандидатов с учетом различной вероятностной информации. При распознавании слитной речи число таких кандидатов огромно, и даже использование самых простых моделей приводит к серьезным проблемам, связанным с быстродействием и памятью систем. Как результат, эта задача выносится в отдельный модуль системы автоматического распознавания речи, называемый декодером.&lt;br /&gt;
Декодер должен определять наиболее грамматически вероятную гипотезу для неизвестного высказывания – то есть определять наиболее вероятный путь по сети распознавания, состоящей из моделей слов (которые, в свою очередь, формируются из моделей отдельных фонов). Правдоподобие (likelihood) гипотезы определяется двумя факторами, а именно вероятностями последовательности фонов, приписываемыми акустической моделью, и вероятностями следования слов друг за другом, определяемыми моделью языка. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим математическую основу декодеров.&amp;lt;br&amp;gt;&lt;br /&gt;
Отбрасывая несущественный на этапе распознавания знаменатель, запишем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;W = argmax [P(W)P(XW)]&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;X = x_1^T = x_1 ,..., x_N&amp;lt;/math&amp;gt; – последовательность векторов признаков входного сигнала, &amp;lt;math&amp;gt;W = w_1^n = w_1 ,..., w_n&amp;lt;/math&amp;gt; – последовательность слов, принадлежащих словарю размером &amp;lt;math&amp;gt;N_W&amp;lt;/math&amp;gt;. Первый множитель P(W) описывает вклад лингвистического модуля, второй P(X|W) – лексического, фонетического и акустического источников знаний. В соответствии с концепцией марковских цепей, второй множитель представляет собой сумму вероятностей всех возможных последовательностей состояний, что приводит к уравнению: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;W = argmax [P(W)\sum_{S_1^T} P(x_1^T, s_1^T | w_1^N)]&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;s_1^T&amp;lt;/math&amp;gt; – одна из последовательностей состояний, порождаемых последовательностью слов &amp;lt;math&amp;gt;w_1^n&amp;lt;/math&amp;gt;. На практике применяется критерий Витерби&amp;lt;ref&amp;gt;''Тампель И.Б, Карпов А.А.'' Автоматическое распознавание речи. — СПб. : Университет ИТМО, 2016. — С. 113.&amp;lt;/ref&amp;gt;. – ищется последовательность состояний, дающая максимальный вклад в сумму:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;W = argmax[P(W)^aMax[P(x_1^T, s_1^T | w_1^N)]]&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Различают систему раннего и систему позднего предсказания. В первой выполняется предсказание для акустической и языковой модели независимо, а затем оба предсказания поступают в декодер. При позднем предсказании, вычисленные признаки речи в акустической и языковой моделях без предсказания поступают в декодер и уже на основе их совместного декодирования выполняется предсказание.&lt;br /&gt;
&lt;br /&gt;
Этапы распознавания:&lt;br /&gt;
# Обработка речи начинается с оценки качества речевого сигнала. На этом этапе определяется уровень помех и искажений.&lt;br /&gt;
# Результат оценки поступает в модуль акустической адаптации, который управляет модулем расчета параметров речи, необходимых для распознавания.&lt;br /&gt;
# В сигнале выделяются участки, содержащие речь, и происходит оценка параметров речи. Происходит выделение фонетических и просодических вероятностных характеристик для синтаксического, семантического и прагматического анализа. (Оценка информации о части речи, форме слова и статистические связи между словами.)&lt;br /&gt;
# Далее параметры речи поступают в основной блок системы распознавания — декодер. Это компонент, который сопоставляет входной речевой поток с информацией, хранящейся в акустических и языковых моделях, и определяет наиболее вероятную последовательность слов, которая и является конечным результатом распознавания.&lt;br /&gt;
&lt;br /&gt;
==Признаки==&lt;br /&gt;
[[Файл:Frame_division.jpeg|мини|Разделение осциллограммы на фреймы.]]&lt;br /&gt;
&lt;br /&gt;
Входные данные представляют собой непрерывную осциллограмму звуковой волны. В задачах распознавания речи эту осциллограмму разбивают на '''фреймы''' {{---}} фрагменты звукового потока длительностью около 20 мс и шагом 10 мс. Такой размер соответствует скорости человеческой речи: если человек говорит по 3 слова в секунду, каждое из которых состоит примерно из 4 звуков и каждый звук разбивается на 3 этапа, то на этап выходит около 28 мс. Каждый фрейм независимо трансформируется и подвергается извлечению признаков, тем самым образуя векторизированный набор данных для задачи машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Признаки речевых событий, используемые при распознавании речи:&lt;br /&gt;
* Спектр Фурье&lt;br /&gt;
* Спектр Фурье в шкале мел&lt;br /&gt;
* Коэффициенты линейного предсказания&lt;br /&gt;
* Кепстр&lt;br /&gt;
&lt;br /&gt;
'''Спектр Фурье'''&lt;br /&gt;
&lt;br /&gt;
Спектр Фурье получают, используя алгоритм БПФ (Быстрого Преобразования Фурье) с длиной окна равной 2-4 периода основного тона, что составляет около 20 мс. При частоте квантования 10-16 кГц выбирается окно 256 отсчетов.&lt;br /&gt;
&lt;br /&gt;
Для ослабления искажений сигнала, вызванных применением к непрерывному сигналу конечного окна анализа, чаще всего используется окно Хэмминга по формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;S'(n) = [0.54 - 0.46cos\left(\frac{2\pi n}{N-1}\right)]*S(n)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где n = 1..N, N – размерность окна, S(n) – отсчеты речевого сигнала.&lt;br /&gt;
&lt;br /&gt;
'''Спектр Фурье в шкале мел'''&lt;br /&gt;
&lt;br /&gt;
К каждому кадру, полученного Фурье спектра применяется блок мел-фильтров — треугольных пересекающихся фильтров, расположенных наиболее плотно в области нижних частот. Количество фильтров — 26. Для расчета фильтров выбирается верхняя и нижняя частота. Затем осуществляется переход от частотной шкалы к мел-шкале по формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M(f) = 1127*ln\left(1 + \frac{f}{700}\right)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На мел-шкале выбираются линейно расположенные точки (28 точек для 26 фильтров), после чего, производится обратный переход в частотную область.&lt;br /&gt;
&lt;br /&gt;
'''Коэффициенты линейного предсказания'''&lt;br /&gt;
&lt;br /&gt;
Модель линейного предсказания речи предполагает, что передаточная функция голосового тракта представляется полюсным фильтром с передаточной&lt;br /&gt;
функцией:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;H(z) = \frac{1}{\sum_{i=0}^p a_i z^{-i}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где p – число полюсов и &amp;lt;math&amp;gt;a_0 = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
Фильтр с такой передаточной функцией позволяет описать поведение сглаженного спектра речевого сигнала с хорошей точностью, за исключением назализованных звуков. Коэффициенты фильтра {&amp;lt;math&amp;gt;a_i&amp;lt;/math&amp;gt;} – выбираются путем минимизации среднеквадратичной ошибки предсказания, просуммированной на окне анализа.&lt;br /&gt;
&lt;br /&gt;
'''Кепстр'''&lt;br /&gt;
&lt;br /&gt;
Кепстр (''cepstrum'') сигнала на основе спектра Фурье вычисляется путем применения косинусного Фурье преобразования к логарифму спектра:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;c_j = \sqrt{\frac{2}{N}}\sum_{i=0}^{N-1} \left[s_icos\left(\frac{\pi(j+1)(i+0.5)}{N}\right)\right] = \sum_{i=0}^{N-1} C_{j,i}s_i&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;s_i&amp;lt;/math&amp;gt; – логарифм спектра, N – количество отсчётов спектра, &amp;lt;math&amp;gt;C_{i,j}&amp;lt;/math&amp;gt; – унитарная матрица косинусного преобразования.&lt;br /&gt;
&lt;br /&gt;
Кепстральные коэффициенты, полученные приведённым способом из ''мел'' спектра Фурье, широко используются для распознавания с помощью марковских моделей и носят название MFCC (Mel-frequency cepstral coefficients).&lt;br /&gt;
&lt;br /&gt;
==Показатели оценки качества распознавания речи==&lt;br /&gt;
&lt;br /&gt;
Существуют различные по сложности и прикладному значению задачи распознавания: изолированных слов (команд); ключевых слов в потоке речи; связанной речи (тщательное проговаривание текста с паузами между словами); слитной речи (разделяют диктовку в узкой тематической области, и спонтанную речь, например, в диалоге между людьми).&lt;br /&gt;
&lt;br /&gt;
Оценка системы, распознающей отдельные команды, не представляет каких-либо трудностей – количество неправильно распознанных команд делится на общее количество испытаний и получается процент ошибки. Для систем, распознающих слитную речь, ситуация не столь проста.&lt;br /&gt;
&lt;br /&gt;
Основными показателями качества распознавания слитной речи являются:&lt;br /&gt;
* процент правильно распознанных слов (WRR - Word Recognition Rate);&lt;br /&gt;
* процент неправильно распознанных слов (WER - Word Error Rate);&lt;br /&gt;
* процент неправильно распознанных предложений/фраз (SER - Sentence Error Rate);&lt;br /&gt;
&lt;br /&gt;
Поскольку с развитием речевых технологий показатель WER все более приближается к нулю, то значение улучшения WER более наглядно, чем улучшение точности распознавания слов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;WER = \frac{S+D+I}{T} * 100%&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где T - количество слов в распознаваемой фразе,&lt;br /&gt;
S - количество замененных слов,&lt;br /&gt;
D - количество удаленных слов,&lt;br /&gt;
I - количество вставленных слов.&lt;br /&gt;
Показатель WER может быть больше 100%.&lt;br /&gt;
&lt;br /&gt;
Другим важным критерием оценки систем распознавания слитной речи является - скорость обработки речи. Она вычисляется с помощью показателя скорости (Real-Time Factor, Speed Factor):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;RTF = \frac{T_{proc}}{T_{signal}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;T_{signal}&amp;lt;/math&amp;gt; - длительность обрабатываемого аудиосигнала;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;T_{proc}&amp;lt;/math&amp;gt; - время, необходимое для обработки сигнала.&amp;lt;br&amp;gt;&lt;br /&gt;
Если &amp;lt;math&amp;gt;RTF \leqslant 1.0&amp;lt;/math&amp;gt; - то распознавание речи ведется в режиме реального времени.&lt;br /&gt;
&lt;br /&gt;
==Применение==&lt;br /&gt;
&lt;br /&gt;
Системы распознавания речи начали развиваться как специальные сервисы для людей с ограниченными возможностями, но также нашли применение в различных сферах бизнеса, таких как:&lt;br /&gt;
* Телефония: системы голосового самообслуживания;&lt;br /&gt;
* &amp;quot;Умный дом&amp;quot;: голосовой интерфейс управления;&lt;br /&gt;
* Роботы: голосовой интерфейс электронных роботов;&lt;br /&gt;
* РС, ноутбуки, телефоны: голосовой ввод команд, диктовка текста;&lt;br /&gt;
* Автомобили: голосовое управление в салоне автомобиля.&lt;br /&gt;
&lt;br /&gt;
Основные отрасли применения:&lt;br /&gt;
* Голосовое управление&lt;br /&gt;
* Голосовые команды&lt;br /&gt;
* Голосовой ввод текста&lt;br /&gt;
* Голосовой поиск&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Распознавание_образов Распознавание образов]&lt;br /&gt;
* [https://habr.com/company/yandex/blog/198556/ Распознавание речи от Яндекса]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Субвокальное_распознавание Субвокальное распознавание]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/Speech_recognition] - статья на Википедии&lt;br /&gt;
# Тампель И.Б, Карпов А.А. Автоматическое распознавание речи. Учебное пособие. — СПб: Университет ИТМО, 2016. — 138 с.&lt;br /&gt;
# [http://fetmag.mrsu.ru/2010-2/pdf/SpeechRecognition.pdf] - статья &amp;quot;Классификация систем распознавания речи&amp;quot;.&lt;br /&gt;
# [https://moluch.ru/archive/147/41443/] - статья &amp;quot;Выделение границ фонем речевого сигнала с помощью мел-частотных спектральных коэффициентов&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]] [[Категория: Обработка естественного языка]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D1%87%D0%B8&amp;diff=75213</id>
		<title>Распознавание речи</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D1%87%D0%B8&amp;diff=75213"/>
				<updated>2020-12-06T19:22:36Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Распознавание речи''' (англ. Speech Recognition) {{---}} процесс преобразования речевого сигнала в цифровую информацию.&lt;br /&gt;
&lt;br /&gt;
Задачей распознавания является сопоставление набору акустических признаков речевого сигнала или наблюдений &lt;br /&gt;
&amp;lt;math&amp;gt;X(x_1 ,...,x_n)&amp;lt;/math&amp;gt; последовательности слов &lt;br /&gt;
&amp;lt;math&amp;gt;W(w_1 ,...,w_k)&amp;lt;/math&amp;gt;, имеющих наибольшую вероятность правдоподобия среди всех кандидатов. Для этого используется формула Байеса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;W = argmax \left[\frac{P(W)*P(X|W)}{P(X)}\right]&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Причем, в процессе распознавания вероятность уже полученных признаков Р(Х) не подлежит оптимизации и знаменатель в формуле не испльзуется:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;W = argmax[P(W)*P(X|W)]&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Классификация систем распознавания речи==&lt;br /&gt;
&lt;br /&gt;
Системы распознавания речи классифицируются&amp;lt;ref&amp;gt;''Федосин С.А., Еремин А. Ю.'' Классификация систем распознавания речи. — Саранск. : МГУ им. Н.П. Огарева, 2009. — С. 3.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
* по размеру словаря (ограниченный набор слов, словарь большого размера);&lt;br /&gt;
* по зависимости от диктора (дикторозависимые и дикторонезависимые системы);&lt;br /&gt;
* по типу речи (слитная или раздельная речь);&lt;br /&gt;
* по назначению (системы диктовки, командные системы);&lt;br /&gt;
* по используемому алгоритму (нейронные сети, скрытые Марковские модели, динамическое программирование);&lt;br /&gt;
* по типу структурной единицы (фразы, слова, фонемы, дифоны, аллофоны);&lt;br /&gt;
* по принципу выделения структурных единиц (распознавание по шаблону, выделение лексических элементов).&lt;br /&gt;
&lt;br /&gt;
==Структура систем распознавания речи==&lt;br /&gt;
&lt;br /&gt;
Системы распознавания речи впервые появились в 1952 году. С тех пор методы распознавания не раз менялись.&lt;br /&gt;
Ранее использовались такие методы и алгоритмы, как:&lt;br /&gt;
* Динамическое программирование (Dynamic Time Warping) - временные динамические алгоритмы, выполняющие классификацию на основе сравнения с эталоном.&lt;br /&gt;
* Методы дискриминантного анализа, основанные на Байесовской дискриминации (Bayesian discrimination).&lt;br /&gt;
* Скрытые Марковские Модели (Hidden Markov Model).&lt;br /&gt;
* Нейронные сети (Neural Networks).&lt;br /&gt;
В настоящее время, перечисленные выше методы как правило комбинируются. Их сочетание позволяет получить более высокое качество распознавания, чем использование каждой модели отдельно.&lt;br /&gt;
&lt;br /&gt;
Системы распознавания речи имеют следующие основные модули:&lt;br /&gt;
* Акустическая модель&lt;br /&gt;
* Языковая модель&lt;br /&gt;
* Декодер&lt;br /&gt;
&lt;br /&gt;
===Акустическая модель===&lt;br /&gt;
&lt;br /&gt;
''Акустическая модель'' — это функция, принимающая на вход небольшой участок акустического сигнала (кадр или frame) и выдающая распределение вероятностей различных фонем на этом кадре. Таким образом, акустическая модель дает нам возможность по звуку восстановить, что было произнесено — с той или иной степенью уверенности.&amp;lt;br&amp;gt;&lt;br /&gt;
''Фонема'' - элементарная единица человеческой речи.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Языковая модель===&lt;br /&gt;
&lt;br /&gt;
''Языковая модель'' - позволяет узнать, какие последовательности слов в языке более вероятны, а какие менее.&lt;br /&gt;
Здесь в самом простом случае требуется предсказать следующее слово по известным предыдущим словам. В традиционных системах применялись модели типа N-грамм, в которых на основе большого количества текстов оценивались распределения вероятности появления слова в зависимости от N предшествующих слов. Для получения надежных оценок распределений параметр N должен быть достаточно мал: одно, два или три слова — модели униграмм, биграмм или триграмм соответственно. Внедрение языковой модели в систему распознавания речи позволило значительно повысить качество распознавания за счет учета контекста.&lt;br /&gt;
&lt;br /&gt;
===Декодер===&lt;br /&gt;
&lt;br /&gt;
В ходе работы системы автоматического распознавания речи задача распознавания сводится к определению наиболее вероятной последовательности слов, соответствующих содержанию речевого сигнала. Наиболее вероятный кандидат должен определяться с учетом как акустической, так и лингвистической информации. Это означает, что необходимо производить эффективный поиск среди возможных кандидатов с учетом различной вероятностной информации. При распознавании слитной речи число таких кандидатов огромно, и даже использование самых простых моделей приводит к серьезным проблемам, связанным с быстродействием и памятью систем. Как результат, эта задача выносится в отдельный модуль системы автоматического распознавания речи, называемый декодером.&lt;br /&gt;
Декодер должен определять наиболее грамматически вероятную гипотезу для неизвестного высказывания – то есть определять наиболее вероятный путь по сети распознавания, состоящей из моделей слов (которые, в свою очередь, формируются из моделей отдельных фонов). Правдоподобие (likelihood) гипотезы определяется двумя факторами, а именно вероятностями последовательности фонов, приписываемыми акустической моделью, и вероятностями следования слов друг за другом, определяемыми моделью языка. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим математическую основу декодеров.&amp;lt;br&amp;gt;&lt;br /&gt;
Отбрасывая несущественный на этапе распознавания знаменатель, запишем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;W = argmax [P(W)P(XW)]&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;X = x_1^T = x_1 ,..., x_N&amp;lt;/math&amp;gt; – последовательность векторов признаков входного сигнала, &amp;lt;math&amp;gt;W = w_1^n = w_1 ,..., w_n&amp;lt;/math&amp;gt; – последовательность слов, принадлежащих словарю размером &amp;lt;math&amp;gt;N_W&amp;lt;/math&amp;gt;. Первый множитель P(W) описывает вклад лингвистического модуля, второй P(X|W) – лексического, фонетического и акустического источников знаний. В соответствии с концепцией марковских цепей, второй множитель представляет собой сумму вероятностей всех возможных последовательностей состояний, что приводит к уравнению: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;W = argmax [P(W)\sum_{S_1^T} P(x_1^T, s_1^T | w_1^N)]&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;s_1^T&amp;lt;/math&amp;gt; – одна из последовательностей состояний, порождаемых последовательностью слов &amp;lt;math&amp;gt;w_1^n&amp;lt;/math&amp;gt;. На практике применяется критерий Витерби&amp;lt;ref&amp;gt;''Тампель И.Б, Карпов А.А.'' Автоматическое распознавание речи. — СПб. : Университет ИТМО, 2016. — С. 113.&amp;lt;/ref&amp;gt;. – ищется последовательность состояний, дающая максимальный вклад в сумму:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;W = argmax[P(W)^aMax[P(x_1^T, s_1^T | w_1^N)]]&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Различают систему раннего и систему позднего предсказания. В первой выполняется предсказание для акустической и языковой модели независимо, а затем оба предсказания поступают в декодер. При позднем предсказании, вычисленные признаки речи в акустической и языковой моделях без предсказания поступают в декодер и уже на основе их совместного декодирования выполняется предсказание.&lt;br /&gt;
&lt;br /&gt;
Этапы распознавания:&lt;br /&gt;
# Обработка речи начинается с оценки качества речевого сигнала. На этом этапе определяется уровень помех и искажений.&lt;br /&gt;
# Результат оценки поступает в модуль акустической адаптации, который управляет модулем расчета параметров речи, необходимых для распознавания.&lt;br /&gt;
# В сигнале выделяются участки, содержащие речь, и происходит оценка параметров речи. Происходит выделение фонетических и просодических вероятностных характеристик для синтаксического, семантического и прагматического анализа. (Оценка информации о части речи, форме слова и статистические связи между словами.)&lt;br /&gt;
# Далее параметры речи поступают в основной блок системы распознавания — декодер. Это компонент, который сопоставляет входной речевой поток с информацией, хранящейся в акустических и языковых моделях, и определяет наиболее вероятную последовательность слов, которая и является конечным результатом распознавания.&lt;br /&gt;
&lt;br /&gt;
==Признаки==&lt;br /&gt;
&lt;br /&gt;
Признаки речевых событий, используемые при распознавании речи:&lt;br /&gt;
* Спектр Фурье&lt;br /&gt;
* Спектр Фурье в шкале мел&lt;br /&gt;
* Коэффициенты линейного предсказания&lt;br /&gt;
* Кепстр&lt;br /&gt;
&lt;br /&gt;
'''Спектр Фурье'''&lt;br /&gt;
&lt;br /&gt;
Спектр Фурье получают, используя алгоритм БПФ (Быстрого Преобразования Фурье) с длиной окна равной 2-4 периода основного тона, что составляет около 20 мс. При частоте квантования 10-16 кГц выбирается окно 256 отсчетов.&lt;br /&gt;
&lt;br /&gt;
Для ослабления искажений сигнала, вызванных применением к непрерывному сигналу конечного окна анализа, чаще всего используется окно Хэмминга по формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;S'(n) = [0.54 - 0.46cos\left(\frac{2\pi n}{N-1}\right)]*S(n)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где n = 1..N, N – размерность окна, S(n) – отсчеты речевого сигнала.&lt;br /&gt;
&lt;br /&gt;
'''Спектр Фурье в шкале мел'''&lt;br /&gt;
&lt;br /&gt;
К каждому кадру, полученного Фурье спектра применяется блок мел-фильтров — треугольных пересекающихся фильтров, расположенных наиболее плотно в области нижних частот. Количество фильтров — 26. Для расчета фильтров выбирается верхняя и нижняя частота. Затем осуществляется переход от частотной шкалы к мел-шкале по формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M(f) = 1127*ln\left(1 + \frac{f}{700}\right)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На мел-шкале выбираются линейно расположенные точки (28 точек для 26 фильтров), после чего, производится обратный переход в частотную область.&lt;br /&gt;
&lt;br /&gt;
'''Коэффициенты линейного предсказания'''&lt;br /&gt;
&lt;br /&gt;
Модель линейного предсказания речи предполагает, что передаточная функция голосового тракта представляется полюсным фильтром с передаточной&lt;br /&gt;
функцией:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;H(z) = \frac{1}{\sum_{i=0}^p a_i z^{-i}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где p – число полюсов и &amp;lt;math&amp;gt;a_0 = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
Фильтр с такой передаточной функцией позволяет описать поведение сглаженного спектра речевого сигнала с хорошей точностью, за исключением назализованных звуков. Коэффициенты фильтра {&amp;lt;math&amp;gt;a_i&amp;lt;/math&amp;gt;} – выбираются путем минимизации среднеквадратичной ошибки предсказания, просуммированной на окне анализа.&lt;br /&gt;
&lt;br /&gt;
'''Кепстр'''&lt;br /&gt;
&lt;br /&gt;
Кепстр (''cepstrum'') сигнала на основе спектра Фурье вычисляется путем применения косинусного Фурье преобразования к логарифму спектра:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;c_j = \sqrt{\frac{2}{N}}\sum_{i=0}^{N-1} \left[s_icos\left(\frac{\pi(j+1)(i+0.5)}{N}\right)\right] = \sum_{i=0}^{N-1} C_{j,i}s_i&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;s_i&amp;lt;/math&amp;gt; – логарифм спектра, N – количество отсчётов спектра, &amp;lt;math&amp;gt;C_{i,j}&amp;lt;/math&amp;gt; – унитарная матрица косинусного преобразования.&lt;br /&gt;
&lt;br /&gt;
Кепстральные коэффициенты, полученные приведённым способом из ''мел'' спектра Фурье, широко используются для распознавания с помощью марковских моделей и носят название MFCC (Mel-frequency cepstral coefficients).&lt;br /&gt;
&lt;br /&gt;
==Показатели оценки качества распознавания речи==&lt;br /&gt;
&lt;br /&gt;
Существуют различные по сложности и прикладному значению задачи распознавания: изолированных слов (команд); ключевых слов в потоке речи; связанной речи (тщательное проговаривание текста с паузами между словами); слитной речи (разделяют диктовку в узкой тематической области, и спонтанную речь, например, в диалоге между людьми).&lt;br /&gt;
&lt;br /&gt;
Оценка системы, распознающей отдельные команды, не представляет каких-либо трудностей – количество неправильно распознанных команд делится на общее количество испытаний и получается процент ошибки. Для систем, распознающих слитную речь, ситуация не столь проста.&lt;br /&gt;
&lt;br /&gt;
Основными показателями качества распознавания слитной речи являются:&lt;br /&gt;
* процент правильно распознанных слов (WRR - Word Recognition Rate);&lt;br /&gt;
* процент неправильно распознанных слов (WER - Word Error Rate);&lt;br /&gt;
* процент неправильно распознанных предложений/фраз (SER - Sentence Error Rate);&lt;br /&gt;
&lt;br /&gt;
Поскольку с развитием речевых технологий показатель WER все более приближается к нулю, то значение улучшения WER более наглядно, чем улучшение точности распознавания слов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;WER = \frac{S+D+I}{T} * 100%&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где T - количество слов в распознаваемой фразе,&lt;br /&gt;
S - количество замененных слов,&lt;br /&gt;
D - количество удаленных слов,&lt;br /&gt;
I - количество вставленных слов.&lt;br /&gt;
Показатель WER может быть больше 100%.&lt;br /&gt;
&lt;br /&gt;
Другим важным критерием оценки систем распознавания слитной речи является - скорость обработки речи. Она вычисляется с помощью показателя скорости (Real-Time Factor, Speed Factor):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;RTF = \frac{T_{proc}}{T_{signal}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;T_{signal}&amp;lt;/math&amp;gt; - длительность обрабатываемого аудиосигнала;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;T_{proc}&amp;lt;/math&amp;gt; - время, необходимое для обработки сигнала.&amp;lt;br&amp;gt;&lt;br /&gt;
Если &amp;lt;math&amp;gt;RTF \leqslant 1.0&amp;lt;/math&amp;gt; - то распознавание речи ведется в режиме реального времени.&lt;br /&gt;
&lt;br /&gt;
==Применение==&lt;br /&gt;
&lt;br /&gt;
Системы распознавания речи начали развиваться как специальные сервисы для людей с ограниченными возможностями, но также нашли применение в различных сферах бизнеса, таких как:&lt;br /&gt;
* Телефония: системы голосового самообслуживания;&lt;br /&gt;
* &amp;quot;Умный дом&amp;quot;: голосовой интерфейс управления;&lt;br /&gt;
* Роботы: голосовой интерфейс электронных роботов;&lt;br /&gt;
* РС, ноутбуки, телефоны: голосовой ввод команд, диктовка текста;&lt;br /&gt;
* Автомобили: голосовое управление в салоне автомобиля.&lt;br /&gt;
&lt;br /&gt;
Основные отрасли применения:&lt;br /&gt;
* Голосовое управление&lt;br /&gt;
* Голосовые команды&lt;br /&gt;
* Голосовой ввод текста&lt;br /&gt;
* Голосовой поиск&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Распознавание_образов Распознавание образов]&lt;br /&gt;
* [https://habr.com/company/yandex/blog/198556/ Распознавание речи от Яндекса]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Субвокальное_распознавание Субвокальное распознавание]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/Speech_recognition] - статья на Википедии&lt;br /&gt;
# Тампель И.Б, Карпов А.А. Автоматическое распознавание речи. Учебное пособие. — СПб: Университет ИТМО, 2016. — 138 с.&lt;br /&gt;
# [http://fetmag.mrsu.ru/2010-2/pdf/SpeechRecognition.pdf] - статья &amp;quot;Классификация систем распознавания речи&amp;quot;.&lt;br /&gt;
# [https://moluch.ru/archive/147/41443/] - статья &amp;quot;Выделение границ фонем речевого сигнала с помощью мел-частотных спектральных коэффициентов&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]] [[Категория: Обработка естественного языка]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75200</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75200"/>
				<updated>2020-12-06T11:54:22Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Глубокое обучение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Многопоточность в машинном обучении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
*[[Графовые нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Рекурсивные нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Сети глубокого доверия]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Оценка положения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
&lt;br /&gt;
=Виды обучения=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение в реальном времени]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Автоматическое машинное обучение==&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;br /&gt;
&lt;br /&gt;
==Обучение с подкреплением==&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Примеры кода=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Scala]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Kotlin]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Kotlin в Jupyter Notebook]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Дополнение к ранжированию]]&lt;br /&gt;
*[[Генерация объектов]]&lt;br /&gt;
*[[Распознавание текста на изображении]]&lt;br /&gt;
*[[Анализ видео]]&lt;br /&gt;
*[[Обнаружение и обработка дорожных знаков и пешеходов]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75199</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75199"/>
				<updated>2020-12-06T11:52:47Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* В разработке */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Многопоточность в машинном обучении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
*[[Графовые нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Рекурсивные нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Сети глубокого доверия]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Оценка положения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
&lt;br /&gt;
=Виды обучения=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение в реальном времени]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Автоматическое машинное обучение==&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;br /&gt;
&lt;br /&gt;
==Обучение с подкреплением==&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Примеры кода=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Scala]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Kotlin]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Kotlin в Jupyter Notebook]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Дополнение к ранжированию]]&lt;br /&gt;
*[[Генерация объектов]]&lt;br /&gt;
*[[Распознавание текста на изображении]]&lt;br /&gt;
*[[Анализ видео]]&lt;br /&gt;
*[[Обнаружение и обработка дорожных знаков и пешеходов]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=75120</id>
		<title>Поиск архитектуры нейронной сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=75120"/>
				<updated>2020-11-07T22:03:21Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* BANANAS (англ. Bayesian optimization with neural architectures for NAS) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Поиск архитектуры нейронной сети''' (англ. ''Neural Architecture Search, NAS'') — это процесс автоматизации проектирования архитектуры нейронной сети. Другими словами, это процесс поиска лучшей структуры модели машинного обучения. Система NAS получает на вход набор данных и тип задачи (классификация, регрессия и т.д.), и на выходе дает архитектуру модели. Полученная архитектура будет работать лучше остальных архитектур для данного типа задачи при обучении на предоставленном наборе данных. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
NAS можно рассматривать как часть [[Автоматическое машинное обучение|автоматического машинного обучения (англ. ''AutoML'')]]. NAS существенно пересекается с [[Настройка гиперпараметров|оптимизацией гиперпараметров]]. Чтобы из всех возможных архитектур найти нужную, NAS следует стратегии поиска, которая максимизирует производительность.&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
Методы для NAS классифицируются по трем категориям: пространство поиска (англ. ''Search Space''), стратегия поиска (англ. ''Search Strategy'') и стратегия оценки эффективности (англ. ''Performance Estimation Strategy''). Схематичный принцип работы NAS отображен на рисунке 1.&lt;br /&gt;
[[Файл:NAS 1 rus.png|900px|thumb|center|Рисунок 1 — Обобщающая иллюстрация методов NAS. Стратегия поиска выбирает архитектуру &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; из предопределенного пространства поиска &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Архитектура передается в стратегию оценки производительности, которая возвращает оценку эффективности &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в стратегию поиска.]]&lt;br /&gt;
&lt;br /&gt;
=== Пространство поиска (англ. ''Search Space'') ===&lt;br /&gt;
Пространство поиска определяет, какую нейронную архитектуру в принципе может обнаружить система NAS. Это может быть цепочечная архитектура (рисунок 2, слева), в которой выход уровня &amp;lt;tex&amp;gt;(n-1)&amp;lt;/tex&amp;gt; подается как вход уровня &amp;lt;tex&amp;gt;(n)&amp;lt;/tex&amp;gt;. Или это может быть сложная ветвистая архитектура с пропусками соединений&amp;lt;ref&amp;gt;англ. ''Multi-branch neural networks with branch control'', пример: [https://ieeexplore.ieee.org/document/1323611, multi-branch network]&amp;lt;/ref&amp;gt; (рисунок 2, справа).&lt;br /&gt;
&lt;br /&gt;
В некоторых случаях используют спроектированный вручную каркас архитектуры (макроархитектуру), состоящий из повторяющихся ячеек (англ. ''motifs/blocks/cells''). В таких случаях каркас является фиксированным, а задача NAS заключается в поиске архитектуры самих ячеек. Такой тип поиска известен как микро-поиск (англ. ''cell-search'') (рисунок 3).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center&amp;quot;&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[Файл:Chain_like_NAS_rus.png|thumb|400px| Рисунок 2 — цепочечная архитектура (слева) и ветвистая архитектура (справа). Различные типы слоев визуализируются разными цветами. Ребро от слоя &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; до слоя &amp;lt;tex&amp;gt;C_j&amp;lt;/tex&amp;gt; означает, что &amp;lt;tex&amp;gt;C_j&amp;lt;/tex&amp;gt; в качестве входных данных получает выходные данные &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt;.]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[Файл:Cell_like_NAS_rus.png|thumb|450px| Рисунок 3 — Слева: архитектуры ячеек. Например, обычная (англ. ''normal cell'') вверху и редуцированная (англ. ''reduction cell'') внизу. Cправа: каркас архитектуры состоит из 3 ячеек, конкретные архитектуры ячеек помещены в каркас.]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Предварительные знания о типичных свойствах архитектур могут уменьшить размер пространства поиска и упростить поиск. Тем не менее, они также могут помешать человеку найти новые архитектурные ячейки, которые выходят за рамки современных человеческих знаний.&lt;br /&gt;
&lt;br /&gt;
Наиболее часто используемые типы архитектур для NAS&amp;lt;ref&amp;gt;Источник: [https://arxiv.org/pdf/1908.00709.pdf, &amp;quot;AutoML: A Survey of the State-of-the-Art&amp;quot;, стр.2]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
* полные архитектуры (англ.''entire structures'') &lt;br /&gt;
* прогрессивные архитектуры (англ. ''progressive structures'')&lt;br /&gt;
* архитектуры, основанные на ячейках (англ. ''cell-based structures'')&lt;br /&gt;
* архитектуры, основанные на [https://ru.wiktionary.org/wiki/%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC, морфизме] (англ. ''morphism-based structures'')&lt;br /&gt;
&lt;br /&gt;
=== Стратегия поиска (англ. ''Search Strategy'')===&lt;br /&gt;
Стратегия поиска подробно описывает, как исследовать пространство поиска, которое часто экспоненциально велико или даже неограниченно. Она включает в себя классический компромисс между разведкой и эксплуатацией, поскольку, с одной стороны, желательно найти быстро работающие архитектуры, с другой стороны, следует избегать преждевременного схождения.&lt;br /&gt;
&lt;br /&gt;
Для изучения пространства нейронных архитектур можно использовать множество различных стратегий поиска, включая случайный поиск, байесовскую оптимизацию, эволюционные методы, [[обучение с подкреплением]] и методы на основе градиента. &lt;br /&gt;
&lt;br /&gt;
==== Сравнение методов стратегий поиска ====&lt;br /&gt;
Лучшие результаты на сегодняшний день показывает NAS с использованием стратегии байесовской оптимизации&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1910.11858.pdf, Cоответствующее исследование.]&amp;lt;/ref&amp;gt; (рисунок 4).&lt;br /&gt;
[[Файл:NAS-method-comparison_rus.png|700px|thumb|center| Рисунок 4 — Слева: результат экспериментов, минимизирующих функцию потерь и количества параметров модели. Cправа: сравнение основных используемых в NAS алгоритмов. [https://arxiv.org/pdf/1910.11858.pdf, Источник, стр. 8] ]]&lt;br /&gt;
&lt;br /&gt;
Байесовская оптимизация (англ. ''Bayes Optimization, BO'') использует алгоритм для построения вероятностной модели целевой функции, а затем использует эту модель, чтобы выбрать наиболее перспективные гиперпараметры и оценивает выбранные гиперпараметры на истинной целевой функции. Таким образом, байесовская оптимизация может итеративно обновлять вероятностную модель, ведя учет оценок прошлых результатов.&lt;br /&gt;
&lt;br /&gt;
==== BANANAS (англ. ''Bayesian optimization with neural architectures for NAS'') ====&lt;br /&gt;
[[Файл:BANANAS alg_rus.png|400px|thumb|right| Рисунок 5 — Иллюстрация мета-нейронной сети в алгоритме BANANAS. [https://arxiv.org/pdf/1910.11858.pdf, Источник, стр. 2] ]]&lt;br /&gt;
Сложностью применения байесовской оптимизации в NAS является обязательное наличие функции расстояния между различными архитектурами нейросети. Чтобы обойти этот момент, был разработан [https://github.com/naszilla/bananas BANANAS] — алгоритм, использующий специальную кодировку (англ. ''path encoding'') для кодирования входных архитектур и получающий на выходе вероятностные распределения (рисунок 5). &lt;br /&gt;
&lt;br /&gt;
Алгоритм BANANAS:&lt;br /&gt;
#Выбираются &amp;lt;tex&amp;gt;t_0&amp;lt;/tex&amp;gt; случайных архитектур из пространства поиска.&lt;br /&gt;
#Итерационно проводится обучение ансамбля мета-нейронных сетей на выбранных архитектурах. Каждая сеть ансамбля является сетью прямой связи с полностью связанными слоями, каждому слою дается случайная инициализация весов и случайный порядок обучающего набора. Используемая функция ошибки - вариация [https://en.wikipedia.org/wiki/Mean_absolute_percentage_error, MAPE] (англ. ''Mean Absolute Percentage Error'').&lt;br /&gt;
##Далее формируется набор архитектур-кандидатов посредством случайных изменений лучших архитектур после обучения.&lt;br /&gt;
##Для каждой архитектуры-кандидата определяется значение переданной на вход функции сбора [https://en.wikipedia.org/wiki/Thompson_sampling, независимой выборки Томпсона] (англ. ''ITS acquisition function'').&lt;br /&gt;
##Для архитектуры-кандидата с минимальным значением функции сбора определяется значение целевой вероятностной функции.&lt;br /&gt;
&lt;br /&gt;
===Стратегия оценки эффективности (англ. ''Performance Estimation Strategy'')===&lt;br /&gt;
Целью NAS обычно является поиск архитектуры, обеспечивающей высокую точность прогнозов. Определением этой точности занимается процесс оценки эффективности. Самый простой вариант — выполнить стандартное обучение и проверку архитектуры данных, но это, к сожалению, вычислительно дорого и ограничивает количество архитектур, которые можно изучить. Поэтому многие недавние исследования направлены на разработку методов, способных снизить стоимость оценок эффективности.&lt;br /&gt;
&lt;br /&gt;
Способы снижения стоимости процесса оценки эффективности и увеличения скорости:&lt;br /&gt;
*Сокращение качества оценки — более высокая скорость достигается сокращением датасета&lt;br /&gt;
*Экстраполяция прямой обучения — функция оценки может быть экстраполирована после всего нескольких обучающих итераций&lt;br /&gt;
*Наследование / Сетевые морфизмы — параметры модели не ищутся каждый раз, они наследуются по каким-либо правилам&lt;br /&gt;
*Модели ''One-Shot'' / Распределение веса — обучается только одна модель, далее ее веса/параметры используются остальными моделями&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Автоматическое машинное обучение]]&lt;br /&gt;
* [[Настройка гиперпараметров]]&lt;br /&gt;
* [[Обучение с подкреплением]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Эволюционные алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://arxiv.org/pdf/1908.00709.pdf AutoML: A Survey of the State-of-the-Art Xin He, Kaiyong Zhao, Xiaowen Chu] &lt;br /&gt;
* [https://arxiv.org/pdf/1910.11858.pdf  Bayesian Optimization with Neural Architectures for Neural Architecture Search, Colin White, Willie Neiswanger, Yash Savani]&lt;br /&gt;
* [https://towardsdatascience.com/neural-architecture-search-nas-the-future-of-deep-learning-c99356351136 Medium Towards Data Science - Neural Architecture Search (NAS) - The Future Of Deep Learning]&lt;br /&gt;
*[https://arxiv.org/pdf/1808.05377.pdf Neural Architecture Search: A Survey]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=Generative_Adversarial_Nets_(GAN)&amp;diff=75087</id>
		<title>Generative Adversarial Nets (GAN)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=Generative_Adversarial_Nets_(GAN)&amp;diff=75087"/>
				<updated>2020-10-09T11:37:37Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Постановка задачи и метод */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Арх_ган.png|450px|thumb|Оригинальная архитектура GAN]]&lt;br /&gt;
&lt;br /&gt;
'''Порождающие состязательные сети''' (англ. ''Generative Adversarial Nets, GAN'') {{---}} алгоритм машинного обучения, входящий в семейство [[:Порождающие модели|порождающих моделей]] и построенный на комбинации из двух нейронных сетей: генеративная модель &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, которая строит приближение распределения данных, и дискриминативная модель &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, оценивающая вероятность, что образец пришел из тренировочных данных, а не сгенерированных моделью &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Обучение для модели &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; заключается в максимизации вероятности ошибки дискрминатора &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Впервые такие сети были представлены Иэном Гудфеллоу в 2014 году. &lt;br /&gt;
&lt;br /&gt;
==Постановка задачи и метод==&lt;br /&gt;
Как было указано ранее в описании метода, мы хотим обучить две модели: генеративную и дискриминативную. Поскольку, удобнее всего использовать многослойные перцептроны для обучения состязательной модели, будем использовать именно их для детального описания работы модели.&lt;br /&gt;
Чтобы вывести вероятностное распределение генератора &amp;lt;tex&amp;gt;p_{g}&amp;lt;/tex&amp;gt; над набором данных &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;, определим априорную вероятность шума &amp;lt;tex&amp;gt;p_{z}(z)&amp;lt;/tex&amp;gt; и представим генератор, как отображение &amp;lt;tex&amp;gt;G(z, \gamma_{g})&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; дифференцируемая функция, представленная многослойным перцептроном с параметром &amp;lt;tex&amp;gt;\gamma_{g}&amp;lt;/tex&amp;gt;. Аналогичным образом представим второй многослойный перцептрон &amp;lt;tex&amp;gt;D(z, \gamma_{d})&amp;lt;/tex&amp;gt;, который на выход подает одно скалярное значение - вероятность того, что &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; пришло из тренировочных данных, а не &amp;lt;tex&amp;gt;p_{g}&amp;lt;/tex&amp;gt;. Во время тренировки &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; мы стремимся максимизировать вероятность правильной идентификации объектов из тренировочной и сгенерированной выборок. И в то же время тренируем &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; так, чтобы минимизировать &amp;lt;tex&amp;gt;log(1 - D(G(z)))&amp;lt;/tex&amp;gt;:&lt;br /&gt;
Другими словами, &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; играют в &amp;quot;минимакс игру&amp;quot;:  &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\min\limits_{G}\max\limits_{D} V(D,G) = \mathop{E}\limits_{x \sim p_{data}}[logD(x)] + \mathop{E}\limits_{z \sim p_{z}}[log(1-D(G(z)))]&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Интуитивный процесс тренировки==&lt;br /&gt;
[[File:GANIntuitive.jpg|500px|thumb|right|Иллюстрация процесса тренировки порождающих состязательных сетей GAN. Источник: https://arxiv.org/pdf/1701.07875.pdf]]&lt;br /&gt;
Генеративные состязательные сети обучаются путем одновременного обновления дискриминирующего распределения (&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; синяя пунктирная линия), так чтобы дискриминатор мог различать объекты из распределения тренировочного сета(черная пунктирная в точку линия) и из распределения генератора (&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; зеленая сплошная линия). Нижняя горизонтальная линия представляет собой область, из которой составлена выборка &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;, в нашем случае равномерно. Горизонтальная линия над ней является частью области &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Стрелками на картинке показано, как отображение &amp;lt;tex&amp;gt;x = G(z)&amp;lt;/tex&amp;gt;, накладывает неравномерное распределение &amp;lt;tex&amp;gt;p_{g}&amp;lt;/tex&amp;gt; на тренировочное. &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; сжимается в областях с высокой плотностью и расширяется в областях с низкой.&lt;br /&gt;
Рассмотрим описанный на картинках процесс. (a) Близкая сходимость состязающейся пары: &amp;lt;tex&amp;gt;p_{g}&amp;lt;/tex&amp;gt; похоже на распределение &amp;lt;tex&amp;gt;p_{data} и D&amp;lt;/tex&amp;gt; частично-точный классификатор. (b) Во внутреннем цикле алгоритма &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; обучается отличать объекты из тренировочных данных, сходясь к &amp;lt;tex&amp;gt;\frac{p_{data}(x)}{p_{data}(x) + p_{g}(x)}&amp;lt;/tex&amp;gt;. (c) После обновления &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; градиент &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; привел &amp;lt;tex&amp;gt;G(z)&amp;lt;/tex&amp;gt; к передвижению в область, с большей вероятностью быть классифицированным как данные. (d) После нескольких шагов обучения &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; придут в состояние, в котором не смогу улучшиться, так как будет выполняться условие &amp;lt;tex&amp;gt;p_{g} = p_{data}&amp;lt;/tex&amp;gt; и диксриминатор не сможет различать два распределения и его выход всегда будет &amp;lt;tex&amp;gt;D(x) = \frac{1}{2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Оригинальный алгоритм обучения GAN==&lt;br /&gt;
[[File:Обучение_ган.png|450px|thumb|right|Визуализация генерирования фотографии с помощью DCGAN по одному и тому же шуму в зависимости от итерации обучения. Источник: https://arxiv.org/pdf/1701.07875.pdf]]&lt;br /&gt;
&lt;br /&gt;
В процессе обучения требуется делать два шага оптимизации поочередно: сначала обновлять веса генератора &amp;lt;tex&amp;gt;\gamma_{g}&amp;lt;/tex&amp;gt; при фиксированном &amp;lt;tex&amp;gt;\gamma_{d}&amp;lt;/tex&amp;gt;, а затем веса дискриминатора &amp;lt;tex&amp;gt;\gamma_{d}&amp;lt;/tex&amp;gt; при фиксированном &amp;lt;tex&amp;gt;\gamma_{g}&amp;lt;/tex&amp;gt;. На практике дискриминатор обновляется &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; раз вместо одного, поскольку, полностью оптимизировать дискриминатор вычислительно не выгодно и на конечных сетах он может переобучиться. Таким образом &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; является гиперпараметром.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// num_iteration {{---}} число итераций обучения &amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' GAN:&lt;br /&gt;
   '''for''' i = 1..num_iteration '''do'''&lt;br /&gt;
     '''for''' j = 1..k '''do'''&lt;br /&gt;
       &amp;lt;font color=green&amp;gt;//Получаем мини-батч $\{z_1, . . . , z_m\}$ из распределения $p_z$&amp;lt;/font&amp;gt;&lt;br /&gt;
       $z$ = getBatchFromNoisePrior($p_z$)  &lt;br /&gt;
       &amp;lt;font color=green&amp;gt;//Получаем мини-батч $\{x_1, . . . , x_m\}$ из распределения $p_{data}$ &amp;lt;/font&amp;gt;&lt;br /&gt;
       $x$ = getBatchFromDataGeneratingDistribution($p_{data}$)&lt;br /&gt;
       &amp;lt;font color=green&amp;gt;//Обновляем дискриминатор в сторону возрастания его градиента&amp;lt;/font&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;d_w \leftarrow \mathop{\nabla}_{\gamma_{d}} { \frac{1}{m} \sum_{t = 1}^m \limits} [logD(x_t)]  + [log(1-D(G(z_t))] &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''end''' '''for'''&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;//Получаем мини-батч $\{z_1, . . . , z_m\}$ из распределения $p_z$ &amp;lt;/font&amp;gt;&lt;br /&gt;
     $z$ = getBatchFromNoisePrior($p_z$)&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;//Обновляем генератор в сторону убывания его градиента &amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;g_w \leftarrow \mathop{\nabla}_{\gamma_{g}}  { \frac{1}{m} \sum_{t = 1}^m \limits} [log(1-D(G(z_t))] &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''end''' '''for'''&lt;br /&gt;
На практике не всегда удобно использовать уравнение описанной выше. В начале обучения, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; плохо настроен дискриминатор &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; может не учитывать объекты, с высокой уверенностью в классификации, так как они сильно отличаются от тренировчного сета, в таком случае &amp;lt;tex&amp;gt;log(1 - D(G(z)))&amp;lt;/tex&amp;gt; стагнирует. Чтобы избежать этого, можно вместо минимизации &amp;lt;tex&amp;gt;log(1 - D(G(z)))&amp;lt;/tex&amp;gt; максимизировать &amp;lt;tex&amp;gt;log D(G(z))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Улучшение обучения GAN==&lt;br /&gt;
&lt;br /&gt;
Большинство GAN'ов подвержено следующим проблемам:&lt;br /&gt;
* Несходимость (non-convergence): параметры модели дестабилизируются и не сходятся;&lt;br /&gt;
* Схлопывание мод распределения (mode collapse): генератор коллапсирует, т.е выдает ограниченное количество разных образцов;&lt;br /&gt;
* Исчезающий градиент (diminished gradient): дискриминатор становится слишком &amp;quot;сильным&amp;quot;, а градиент генератора исчезает и обучение не происходит;&lt;br /&gt;
* Высокая чувствительность к гиперпараметрам.&lt;br /&gt;
&lt;br /&gt;
Универсального подхода к их решению нет, но существуют практические советы&amp;lt;ref&amp;gt; [https://github.com/soumith/ganhacks  How to Train a GAN? Tips and tricks to make GANs work]&amp;lt;/ref&amp;gt;, которые могут помочь. Основными из них являются:&lt;br /&gt;
# Нормализация данных. Все признаки в диапазоне $[-1; 1]$;&lt;br /&gt;
# Замена функции ошибки для $G$ с $\min log (1-D)$ на $\max log D$, потому что исходный вариант имеет маленький градиент на раннем этапе обучения и большой градиент при сходимости, а предложенный наоборот;&lt;br /&gt;
# Сэмплирование из многомерного нормального распределения вместо равномерного;  &lt;br /&gt;
# Использовать нормализационные слои (например, batch normalization или layer normalization) в $G$ и $D$;&lt;br /&gt;
# Использовать метки для данных, если они имеются, т.е обучать дискриминатор еще и классифицировать образцы.&lt;br /&gt;
&lt;br /&gt;
==Применение==&lt;br /&gt;
&lt;br /&gt;
[[File:прогресс_ганов.jpg|450px|thumb|right|Прогресс в генерации фотографий с помощью GAN. Источник: https://twitter.com/goodfellow_ian]]&lt;br /&gt;
&lt;br /&gt;
Чаще всего GAN'ы используются для генерации реалистичных фотографий. Серьезные улучшения в этом направлении были сделаны следующими работами:&lt;br /&gt;
&lt;br /&gt;
* Auxiliary GAN&amp;lt;ref&amp;gt; [https://arxiv.org/pdf/1610.09585.pdf Augustus Odena {{---}} Conditional Image Synthesis with Auxiliary Classifier GANs]&amp;lt;/ref&amp;gt;: вариант GAN-архитектуры, использующий метки данных;&lt;br /&gt;
* SN-GAN&amp;lt;ref&amp;gt; [https://arxiv.org/pdf/1802.05957.pdf Takeru Miyato {{---}} SPECTRAL NORMALIZATION FOR GENERATIVE ADVERSARIAL NETWORKS]&amp;lt;/ref&amp;gt;: GAN с новым подходом решения проблемы нестабильного обучения через спектральную нормализацию;&lt;br /&gt;
* SAGAN&amp;lt;ref&amp;gt; [https://arxiv.org/pdf/1805.08318.pdf Han Zhang {{---}} Self-Attention Generative Adversarial Networks]&amp;lt;/ref&amp;gt;: GAN, основанный на механизме внимания;&lt;br /&gt;
* BigGAN&amp;lt;ref&amp;gt; [https://arxiv.org/pdf/1809.11096.pdf Andrew Brock {{---}} LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS]&amp;lt;/ref&amp;gt;: GAN с ортогональной регуляризацией, позволившей разрешить проблему коллапсирования при долгом обучении;&lt;br /&gt;
&lt;br /&gt;
Кроме простой генерации изображений, существуют достаточно необычные применения, дающие впечатляющие результаты не только на картинках, но и на звуке:&lt;br /&gt;
&lt;br /&gt;
* CycleGAN&amp;lt;ref&amp;gt; [https://junyanz.github.io/CycleGAN/ Jun-Yan Zhu &amp;amp; Taesung Park {{---}} Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks]&amp;lt;/ref&amp;gt;: меняет изображения c одного домена на другой, например, лошадей на зебр;&lt;br /&gt;
* SRGAN&amp;lt;ref&amp;gt; [https://arxiv.org/abs/1609.04802 Christian Ledig {{---}} Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network]&amp;lt;/ref&amp;gt;: создает изображения с высоким разрешением из более низкого разрешения;&lt;br /&gt;
* Pix2Pix&amp;lt;ref&amp;gt; [https://phillipi.github.io/pix2pix/ Phillip Isola {{---}} Image-to-Image Translation with Conditional Adversarial Nets]&amp;lt;/ref&amp;gt;: создает изображения по семантической окраске;&lt;br /&gt;
* StackGAN&amp;lt;ref&amp;gt; [https://arxiv.org/abs/1612.03242 Han Zhang {{---}} StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks]&amp;lt;/ref&amp;gt;: создает изображения по заданному тексту;&lt;br /&gt;
* MidiNet&amp;lt;ref&amp;gt; [https://arxiv.org/abs/1703.10847 Li-Chia Yang {{---}} MIDINET: A CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORK FOR SYMBOLIC-DOMAIN MUSIC GENERATION]&amp;lt;/ref&amp;gt;: генерирует последовательность нот, таким образом, создает мелодию.&lt;br /&gt;
&lt;br /&gt;
==CGAN (Conditional Generative Adversarial Nets)==&lt;br /&gt;
&lt;br /&gt;
[[File:CGAN_architecture.png|450px|thumb|Архитектура CGAN. Источник: https://arxiv.org/pdf/1411.1784.pdf]]&lt;br /&gt;
&lt;br /&gt;
'''Условные порождающие состязательные сети''' (англ. ''Conditional Generative Adversarial Nets, CGAN'') $-$ это модифицированная версия алгоритма GAN, которая может быть сконструирована при помощи подачи данных '''y''', являющихся условием для генератора и дискриминатора. '''y''' может быть любой дополнительной информацией, например, меткой класса или данными из других моделей, что может позволить контролировать процесс генерации данных. Например, можно подавать параметр '''y''', как условие на класс для генерации чисел, похожих на MNIST.&lt;br /&gt;
&lt;br /&gt;
Как уже было упомянуто на вход генератори и дискримантора из GAN подается дополнительная информация '''y''', например в случае с многослойными перецептронами условие может быть представлено дополнительным входным слоем.&lt;br /&gt;
В генераторе априорная вероятность шума &amp;lt;tex&amp;gt;p_{z}(z)&amp;lt;/tex&amp;gt; и условие &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; комбинируются в объединённое скрытое представление, а состязательная тренирующая модель предоставляет достаточно свободы в том как это представление составляется.&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1207.4404.pdf Yoshua Bengio, Gre ́goire Mesnil, Yann Dauphin and Salah Rifai {{---}} Better Mixing via Deep Representations ]&amp;lt;/ref&amp;gt;&lt;br /&gt;
В дискриминаторе '''x''' и '''y''' представлены как входные параметры.&lt;br /&gt;
&lt;br /&gt;
В таком случае задача оптимизации будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;tex&amp;gt; \min\limits_{G}\max\limits_{D} \mathop{E}\limits_{x \sim p_{data}}[logD(x|y)]  + \mathop{E}\limits_{z \sim p_{z}}[log(1-D(G(z|y))]  &amp;lt;/tex&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В качестве примера использования данного алгоритма можно рассмотреть задачу генерации рукописных цифр. ''CGAN'' был натренирован на датасете ''MNIST'' с метками классов представленных в виде ''one-hot'' векторов.&lt;br /&gt;
&lt;br /&gt;
[[File:CGAN_generated.png|450px|thumb|right|Цифры, сгенерированные с помощью CGAN. Источник: https://arxiv.org/pdf/1411.1784.pdf]]&lt;br /&gt;
&lt;br /&gt;
==DCGAN (Deep Convolutional Generative Adversarial Nets)==&lt;br /&gt;
&lt;br /&gt;
[[File:DCGAN_generator.png|450px|thumb|right|Архитектура генератора в DCGAN. Источник: https://arxiv.org/pdf/1511.06434.pdf]]&lt;br /&gt;
&lt;br /&gt;
'''DCGAN''' $-$ модификация алгоритма ''GAN'', в основе которых лежат сверточные нейронные сети (''CNN''). Задача поиска удобного представления признаков на больших объемах не размеченных данных является одной из наибольнее активных сфер исследований, в частности представление изображений и видио. Одним из удобных способов поиска представлений может быть '''DCGAN'''. Использование сверточных нейронных сетей напрямую не давало хороших результатов, поэтому было внесены ограничения на слои сверток. Эти ограничения и лежат в основе '''DCGAN''':&lt;br /&gt;
&lt;br /&gt;
* Замена всех пулинговых слоев на страйдинговые свертки (''strided convolutions'') в дискриминаторе и частично-страйдинговые свертки (''fractional-strided-convolutions'') в генераторе, что позволяет сетям находить подходящие понижения и повышения размерностей;&lt;br /&gt;
* Использование батчинговой нормализации для генератора и дискриминатора, то есть нормализация входа так, чтобы среднее значения было равно нулю и дисперсия была равна единице. Не стоит использовать батч-нормализация для выходного слоя генератора и входного дискриминатор.&lt;br /&gt;
* Удаление всех полносвязных скрытых уровней для более глубоких архитектур;&lt;br /&gt;
* Использование ''ReLU'' в качестве функции активации в генераторе для всех слоев, кроме последнего, где используется ''tanh'';&lt;br /&gt;
* Использование ''LeakyReLU'' в качестве функции активации в дискриминаторе для всех слоев.&lt;br /&gt;
&lt;br /&gt;
Помимо задачи генерации объектов, данный алгоритм хорошо показывает себя в извлечении признаков.&lt;br /&gt;
Данный алгоритм был натренирован на наборе данных ''Imagenet-1k''&amp;lt;ref name = &amp;quot;datasets&amp;quot;&amp;gt;[http://neerc.ifmo.ru/wiki/index.php?title=Известные_наборы_данных Известные наборы данных]&amp;lt;/ref&amp;gt;, после чего были использованы значения со сверточных слоев дискриминатора, подвергнутые ''max-pooling'''у, чтобы образовать матрицы &lt;br /&gt;
&amp;lt;tex&amp;gt; 4 \times 4 &amp;lt;/tex&amp;gt; и получить общий вектор признаков на их основе. ''L2-SVM'', c полученным представлением, на наборе данных ''CIFAR-10''&amp;lt;ref name=&amp;quot;datasets&amp;quot; /&amp;gt; превосходит по точности решения, основанные на алгоритме&lt;br /&gt;
''K-Means''. Подробнее об этом вы можете прочитать в статье. &amp;lt;ref&amp;gt; [https://arxiv.org/pdf/1511.06434.pdf  Alec Radford, Luke Metz, Soumith Chintala {{---}} Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==StackGAN (Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks)==&lt;br /&gt;
&lt;br /&gt;
[[File:StackGANexample.jpg|500px|thumb|right| Пример работы порождающей состязателной сети для генерации фото-реалистичных изображений StackGAN. Источник: https://arxiv.org/pdf/1612.03242.pdf]]&lt;br /&gt;
&lt;br /&gt;
'''StackGAN''' $-$ порождающая состязательная сеть для генерации фото-реалистичных изображений (256x256) исходя из текстового описания. Генерировать фото-реалистичные изображения на обычных GAN сложно, поэтому была придумана двух-этапная модель генерации. Stage-I GAN рисует скетчи с примитивными формами и цветами, основанные на текстовом описании, в низком разрешении. Stage-II GAN принимает на вход изображения с первого этапа и текстовое описание и генерирует изображение в высоком разрешении с фото-реалистичными деталями. Чтобы улучшить разнообразие синтезированных изображений и стабилизировать обучение, вместо CGAN использовался метод Conditioning Augmentation.&lt;br /&gt;
&lt;br /&gt;
Раннее использовались CGAN, поскольку на вход им можно было подавать условия, но просто добавляя слои, увеличивающие размер изображения, достичь хороших результатов не удалось. Поэтому основной задачей было повысить разрешение изображений. &lt;br /&gt;
&lt;br /&gt;
Одной из ключевых особенностей StackGAN является Conditioning Augmentation, так как оно позволило расширить количество примеров тренировочного сета, путем небольших случайных изменений в исходных изображениях, что увеличивало многообразие данных. Как показано на картинке, текстовое описание &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; кодировщиком переводится в векторное представление &amp;lt;tex&amp;gt;\varphi_{t}&amp;lt;/tex&amp;gt;. Раннее векторное представление нелинейно трансформировалось, чтобы получить скрытые условные переменные, которые подавались на вход генератору, однако простарнство значений скрытых переменных имеет большую размерность, что приводило к разрывам в многообразии данных, что не выгодно для генератора. Чтобы избавиться от этого как раз нужно Conditioning Augmentation, которое в отличии от предоставления фиксированных значений переменных выбирает их из нормального распределения &amp;lt;tex&amp;gt;\mathcal{N}(\mu(\varphi_{t}), \Sigma(\varphi_{t}))&amp;lt;/tex&amp;gt;, где среднее значение &amp;lt;tex&amp;gt;\mu(\varphi_{t})&amp;lt;/tex&amp;gt; и ковариация &amp;lt;tex&amp;gt;\Sigma(\varphi_{t}))&amp;lt;/tex&amp;gt; это функции от входного вектора &amp;lt;tex&amp;gt;\varphi_{t}&amp;lt;/tex&amp;gt;. В добавок к уже упомянотому, чтобы сделать многообразие гладким и не переобучиться, нужно добавить регуляризацию, &amp;lt;tex&amp;gt;D_{KL}(\mathcal{N}(\mu(\varphi_{t}), \Sigma(\varphi_{t})) || \mathcal{N}(0, I))&amp;lt;/tex&amp;gt; (KL divergence)&amp;lt;ref&amp;gt; [https://ru.wikipedia.org/wiki/Расстояние_Кульбака_—_Лейблера Kullback-Leibler divergence]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
[[File:StackGANProcess.jpg|1200px|thumb|right|Процесс обучения StackGAN. Источник: https://arxiv.org/pdf/1612.03242.pdf]]&lt;br /&gt;
Stage-I GAN тренирует дискриминатор &amp;lt;tex&amp;gt;D_{0}&amp;lt;/tex&amp;gt; и генератор &amp;lt;tex&amp;gt;G_{0}&amp;lt;/tex&amp;gt; поочередной максимизицаии &amp;lt;tex&amp;gt;L_{D_{0}}&amp;lt;/tex&amp;gt; и минимизации &amp;lt;tex&amp;gt;L_{G_{0}}&amp;lt;/tex&amp;gt;, как указано в уравенинях:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;L_{D_0} = E_{(I_0, t)\sim p_{data}}[\log D_{0}(I_0, \varphi_t)] + E_{z\sim t, t \sim p_{data}}[\log (1 - D_0(G_{0}(z, \hat{c_0}), \varphi_t))]&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;L_{G_0} = E_{z\sim t, t \sim p_{data}}[\log (1 - D_0(G_{0}(z, \hat{c_0}), \varphi_t))] + \lambda D_{KL}(\mathcal{N}(\mu(\varphi_{t}), \Sigma(\varphi_{t}) || \mathcal{N}(0, I))&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Где реальное изображение &amp;lt;tex&amp;gt;I_0&amp;lt;/tex&amp;gt; и описание текста &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; берутся из реального распределения данных &amp;lt;tex&amp;gt;p_{data}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; шумовой вектор взятого случайно из нормального распределения, &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; параметр регуляризации.&lt;br /&gt;
&lt;br /&gt;
В изображениях с низким разрешенеим, сгенерированные Stage-I GAN, обычно недостает ярких деталей и могут быть искривления форм, некоторые детали изображения также могут быть опущены на первом этапе. Stage-II GAN построен над Stage-I GAN и принимает на вход его выход, и текстовое описание, чтобы исправить и дополнить изображение. Его дискриминатор и генератор тренируются путем поочередной макисимизации &amp;lt;tex&amp;gt;L_D&amp;lt;/tex&amp;gt; и минимизации &amp;lt;tex&amp;gt;L_G&amp;lt;/tex&amp;gt;, как показано в уравнениях: &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;L_{D} = E_{(I, t)\sim p_{data}}[\log D(I, \varphi_t)] + E_{s_0\sim p_{G_0}, t \sim p_{data}}[\log (1 - D(G(s_0, \hat{c}), \varphi_t))]&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;L_{G} = E_{s_0\sim p_{G_0}, t \sim p_{data}}[\log (1 - D(G(s_0, \hat{c}), \varphi_t))] + \lambda D_{KL}(\mathcal{N}(\mu(\varphi_{t}), \Sigma(\varphi_{t}) || \mathcal{N}(0, I))&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Где &amp;lt;tex&amp;gt;s_0 = G_0(z,\hat{c_0})&amp;lt;/tex&amp;gt; результат работы генератора Stage-I GAN и скрытый параметр &amp;lt;tex&amp;gt;\hat{c}&amp;lt;/tex&amp;gt; подаются на вход дискриминатору и генератору Stage-II GAN, при этом на вход не подается случайное значение, как на первой стадии, поскольку хватает подачи случайного &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; на вход Stage-I GAN. При этом Stage-I GAN и Stage-II GAN имеют разные полно-связные слои, чтобы отличаться по среднему значению и стандартному отклонению, таким образом на разных этапах фокусируюемся на разных деталях исходного текста.&lt;br /&gt;
&lt;br /&gt;
==LAPGAN (Laplacian Pyramid of Adversarial Networks)==&lt;br /&gt;
&lt;br /&gt;
'''LAPGAN''' $-$ генеративная параметрическая модель, представленная пирамидой лапласианов с каскадом сверточных нейронных сетей внутри, которая генерирует изображения постепенно от исходного изображения с низким разрешением к изображению с высоким. На каждом уровне пирамиды обучается сверточная генеративная модель, используя подход порождающих состязательных сетей. Такая стратегия позволяет декомпозировать задачу генерации изображений на последовательность уровней, что упрощает ее решение.&lt;br /&gt;
&lt;br /&gt;
Пирамида лапласианов $-$ это линейное обратимое представление изображений, состоящее из набора частотных полос изображений. Пусть &amp;lt;tex&amp;gt;d(\cdot)&amp;lt;/tex&amp;gt; - это операция сжатия изображения размера &amp;lt;tex&amp;gt;j \times j&amp;lt;/tex&amp;gt; так, что новое изображение &amp;lt;tex&amp;gt;d(I)&amp;lt;/tex&amp;gt; имеет размеры &amp;lt;tex&amp;gt;j/2 \times j/2&amp;lt;/tex&amp;gt;, также &amp;lt;tex&amp;gt;u(\cdot)&amp;lt;/tex&amp;gt; - операция расширения такой, что &amp;lt;tex&amp;gt;u(I)&amp;lt;/tex&amp;gt; имеет размеры &amp;lt;tex&amp;gt;2j \times 2j&amp;lt;/tex&amp;gt;. Тогда пирамида гаусианов имеет вид &amp;lt;tex&amp;gt;\mathcal{G}(I) = [I_0, I_1,..., I_k]&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;I_0 = I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;I_k&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; раз выполненное применение &amp;lt;tex&amp;gt;d(\cdot)&amp;lt;/tex&amp;gt;. Коэффициенты &amp;lt;tex&amp;gt;h_k&amp;lt;/tex&amp;gt; на каждом уровне пирамиды лапласианов считаются так:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;h_k = \mathcal{L_k}(I) = \mathcal{G_k}(I) - u(\mathcal{G_{k + 1}}(I)) = I_k - u(I_{k + 1})&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Интуитивно каждый уровень захватывает структуру изображения. Конечный слой пирамиды лапласианов &amp;lt;tex&amp;gt;h_k&amp;lt;/tex&amp;gt; это не разница изображений, а низко-частотное представление равное гаусиану &amp;lt;tex&amp;gt;h_k = I_k&amp;lt;/tex&amp;gt;. Реконструкция по пирамиде лапласианов происходит обратным проходом по ней: &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;I_k = u(I_{k + 1}) + h_k&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подход представленный в '''LAPGAN''' работает по такому же принципу, только на каждому шаге вместо коэфициентов &amp;lt;tex&amp;gt;h_k&amp;lt;/tex&amp;gt; используются генераторы &amp;lt;tex&amp;gt;\{G_0,G_1,...,G_k\}&amp;lt;/tex&amp;gt;, каждый из которых захватывает распределение коэфициентов &amp;lt;tex&amp;gt;h_k&amp;lt;/tex&amp;gt; для реальных изображений на разных уровнях пирамиды лапласиана:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\tilde{I_k} = u(\tilde{I_{k + 1}}) + \tilde{h_k} = u(\tilde{I_{k + 1}}) + G_k(z_k, u(\tilde{I_{k + 1}}))&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:LAPGANtest.jpg|500px|thumb|right|Процедура семплинга для модели LAPGAN. Источник: https://arxiv.org/pdf/1506.05751.pdf]]&lt;br /&gt;
&lt;br /&gt;
Процедура семплинга для нашей модели '''LAPGAN'''. Начинаем с шума &amp;lt;tex&amp;gt;z_3&amp;lt;/tex&amp;gt; и используем генеративную модель &amp;lt;tex&amp;gt;G_3&amp;lt;/tex&amp;gt; для создания &amp;lt;tex&amp;gt;\tilde{I_3}&amp;lt;/tex&amp;gt;. Потом расширяем изображение до &amp;lt;tex&amp;gt;l_2&amp;lt;/tex&amp;gt; для следующиего уровня генерации &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;. Вместе с еще одним шумом &amp;lt;tex&amp;gt;z_2&amp;lt;/tex&amp;gt; получаем изображение различия &amp;lt;tex&amp;gt;\tilde{I_2}&amp;lt;/tex&amp;gt;. Продолжаем процесс, пока не получим &amp;lt;tex&amp;gt;I_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:LAPGANtrain.jpg|500px|thumb|right|Процедура обучения модели LAPGAN. Источник: https://arxiv.org/pdf/1506.05751.pdf]]&lt;br /&gt;
&lt;br /&gt;
Процедура обучения '''LAPGAN'''. Начинаем с изображения &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; размера &amp;lt;tex&amp;gt;64 \times 64&amp;lt;/tex&amp;gt; из тренировчного набора. Берем &amp;lt;tex&amp;gt;I_0 = I &amp;lt;/tex&amp;gt; и сжимаем его(красная стрелка) чтобы получить &amp;lt;tex&amp;gt;I_1&amp;lt;/tex&amp;gt;; затем расширяем его(зеленая стрелка), чтобы получить &amp;lt;tex&amp;gt;l_0&amp;lt;/tex&amp;gt; низко-частотное изображение &amp;lt;tex&amp;gt;I_0&amp;lt;/tex&amp;gt;; с равной вероятностью используем его для создния либо реального, либо сгенерированного примера для дискриминатора &amp;lt;tex&amp;gt;D_0&amp;lt;/tex&amp;gt;. В случае реального изображения(синяя стрелка) считаем цветовой контраст &amp;lt;tex&amp;gt;h_0 = I_0 - l_0&amp;lt;/tex&amp;gt;, которая подается на вход дискриминатору &amp;lt;tex&amp;gt;D_0&amp;lt;/tex&amp;gt;, для опредления реальное изображение или нет. В случае сгенерированного(розовая стрелка), генеративная сеть &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt; получает на вход шум &amp;lt;tex&amp;gt;z_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;l_0&amp;lt;/tex&amp;gt;. Оно генерирует цветовой контраст &amp;lt;tex&amp;gt;\tilde{h_0} = G_0(z_0,l_0)&amp;lt;/tex&amp;gt;, который подается на вход &amp;lt;tex&amp;gt;D_0&amp;lt;/tex&amp;gt;. В обоих случаях дискриминатор также получает &amp;lt;tex&amp;gt;l_0&amp;lt;/tex&amp;gt; (оранжевая стрелка). Оптимизируя минмакс игру условной порождающей сети &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt; учится генерировать реалистичную высоко-частотную структуру &amp;lt;tex&amp;gt;\tilde{h_0}&amp;lt;/tex&amp;gt; с помощью низко-частотного представления &amp;lt;tex&amp;gt;l_0&amp;lt;/tex&amp;gt;. Такая процедура проходит на всех слоях, кроме последнего, где можно уже использовать обычный GAN.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Порождающие модели|Порождающие модели]]&lt;br /&gt;
*[[:Вариационный автокодировщик|Variational autoencoder (VAE)]]&lt;br /&gt;
*[[:Автокодировщик|Автокодировщик]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* Сергей Николенко, Артур Кадурин, Екатерина Архангельская. Глубокое обучение. Погружение в мир нейронных сетей. — «Питер», 2018. — С. 348-360.&lt;br /&gt;
* [https://medium.com/@jonathan_hui/gan-why-it-is-so-hard-to-train-generative-advisory-networks-819a86b3750b Medium | GAN — Why it is so hard to train Generative Adversarial Networks! ]&lt;br /&gt;
* [https://arxiv.org/pdf/1411.1784.pdf CGAN Paper]&lt;br /&gt;
* [https://arxiv.org/pdf/1511.06434.pdf DCGAN Paper]&lt;br /&gt;
* [https://arxiv.org/pdf/1612.03242.pdf StackGAN Paper]&lt;br /&gt;
* [https://arxiv.org/pdf/1506.05751.pdf LAPGAN Paper]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Порождающие модели]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75022</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75022"/>
				<updated>2020-09-04T18:07:15Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Многопоточность в машинном обучении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
*[[Графовые нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Рекурсивные нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Сети глубокого доверия]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Оценка положения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
&lt;br /&gt;
=Виды обучения=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение в реальном времени]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Автоматическое машинное обучение==&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;br /&gt;
&lt;br /&gt;
==Обучение с подкреплением==&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Примеры кода=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Scala]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Kotlin]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Примеры кода на Kotlin в Jupyter Notebook]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Дополнение к ранжированию]]&lt;br /&gt;
*[[Генерация объектов]]&lt;br /&gt;
*[[Распознавание текста на изображении]]&lt;br /&gt;
*[[Анализ видео]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D1%87%D0%B8&amp;diff=75021</id>
		<title>Распознавание речи</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D1%87%D0%B8&amp;diff=75021"/>
				<updated>2020-09-04T17:43:08Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* См. также */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Распознавание речи'''(Speech Recognition) - процесс преобразования речевого сигнала в цифровую информацию.&lt;br /&gt;
&lt;br /&gt;
Задачей распознавания является сопоставление набору акустических признаков речевого сигнала или наблюдений &lt;br /&gt;
&amp;lt;math&amp;gt;X(x_1 ,...,x_n)&amp;lt;/math&amp;gt; последовательности слов &lt;br /&gt;
&amp;lt;math&amp;gt;W(w_1 ,...,w_k)&amp;lt;/math&amp;gt;, имеющих наибольшую вероятность правдоподобия среди всех кандидатов. Для этого используется формула Байеса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;W = argmax \left[\frac{P(W)*P(X|W)}{P(X)}\right]&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Причем, в процессе распознавания вероятность уже полученных признаков Р(Х) не подлежит оптимизации и знаменатель в формуле не испльзуется:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;W = argmax[P(W)*P(X|W)]&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Классификация систем распознавания речи==&lt;br /&gt;
&lt;br /&gt;
Системы распознавания речи классифицируются&amp;lt;ref&amp;gt;''Федосин С.А., Еремин А. Ю.'' Классификация систем распознавания речи. — Саранск. : МГУ им. Н.П. Огарева, 2009. — С. 3.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
* по размеру словаря (ограниченный набор слов, словарь большого размера);&lt;br /&gt;
* по зависимости от диктора (дикторозависимые и дикторонезависимые системы);&lt;br /&gt;
* по типу речи (слитная или раздельная речь);&lt;br /&gt;
* по назначению (системы диктовки, командные системы);&lt;br /&gt;
* по используемому алгоритму (нейронные сети, скрытые Марковские модели, динамическое программирование);&lt;br /&gt;
* по типу структурной единицы (фразы, слова, фонемы, дифоны, аллофоны);&lt;br /&gt;
* по принципу выделения структурных единиц (распознавание по шаблону, выделение лексических элементов).&lt;br /&gt;
&lt;br /&gt;
==Структура систем распознавания речи==&lt;br /&gt;
&lt;br /&gt;
Системы распознавания речи впервые появились в 1952 году. С тех пор методы распознавания не раз менялись.&lt;br /&gt;
Ранее использовались такие методы и алгоритмы, как:&lt;br /&gt;
* Динамическое программирование (Dynamic Time Warping) - временные динамические алгоритмы, выполняющие классификацию на основе сравнения с эталоном.&lt;br /&gt;
* Методы дискриминантного анализа, основанные на Байесовской дискриминации (Bayesian discrimination).&lt;br /&gt;
* Скрытые Марковские Модели (Hidden Markov Model).&lt;br /&gt;
* Нейронные сети (Neural Networks).&lt;br /&gt;
В настоящее время, перечисленные выше методы как правило комбинируются. Их сочетание позволяет получить более высокое качество распознавания, чем использование каждой модели отдельно.&lt;br /&gt;
&lt;br /&gt;
Системы распознавания речи имеют следующие основные модули:&lt;br /&gt;
* Акустическая модель&lt;br /&gt;
* Языковая модель&lt;br /&gt;
* Декодер&lt;br /&gt;
&lt;br /&gt;
===Акустическая модель===&lt;br /&gt;
&lt;br /&gt;
''Акустическая модель'' — это функция, принимающая на вход небольшой участок акустического сигнала (кадр или frame) и выдающая распределение вероятностей различных фонем на этом кадре. Таким образом, акустическая модель дает нам возможность по звуку восстановить, что было произнесено — с той или иной степенью уверенности.&amp;lt;br&amp;gt;&lt;br /&gt;
''Фонема'' - элементарная единица человеческой речи.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Языковая модель===&lt;br /&gt;
&lt;br /&gt;
''Языковая модель'' - позволяет узнать, какие последовательности слов в языке более вероятны, а какие менее.&lt;br /&gt;
Здесь в самом простом случае требуется предсказать следующее слово по известным предыдущим словам. В традиционных системах применялись модели типа N-грамм, в которых на основе большого количества текстов оценивались распределения вероятности появления слова в зависимости от N предшествующих слов. Для получения надежных оценок распределений параметр N должен быть достаточно мал: одно, два или три слова — модели униграмм, биграмм или триграмм соответственно. Внедрение языковой модели в систему распознавания речи позволило значительно повысить качество распознавания за счет учета контекста.&lt;br /&gt;
&lt;br /&gt;
===Декодер===&lt;br /&gt;
&lt;br /&gt;
В ходе работы системы автоматического распознавания речи задача распознавания сводится к определению наиболее вероятной последовательности слов, соответствующих содержанию речевого сигнала. Наиболее вероятный кандидат должен определяться с учетом как акустической, так и лингвистической информации. Это означает, что необходимо производить эффективный поиск среди возможных кандидатов с учетом различной вероятностной информации. При распознавании слитной речи число таких кандидатов огромно, и даже использование самых простых моделей приводит к серьезным проблемам, связанным с быстродействием и памятью систем. Как результат, эта задача выносится в отдельный модуль системы автоматического распознавания речи, называемый декодером.&lt;br /&gt;
Декодер должен определять наиболее грамматически вероятную гипотезу для неизвестного высказывания – то есть определять наиболее вероятный путь по сети распознавания, состоящей из моделей слов (которые, в свою очередь, формируются из моделей отдельных фонов). Правдоподобие (likelihood) гипотезы определяется двумя факторами, а именно вероятностями последовательности фонов, приписываемыми акустической моделью, и вероятностями следования слов друг за другом, определяемыми моделью языка. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим математическую основу декодеров.&amp;lt;br&amp;gt;&lt;br /&gt;
Отбрасывая несущественный на этапе распознавания знаменатель, запишем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;W = argmax [P(W)P(XW)]&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;X = x_1^T = x_1 ,..., x_N&amp;lt;/math&amp;gt; – последовательность векторов признаков входного сигнала, &amp;lt;math&amp;gt;W = w_1^n = w_1 ,..., w_n&amp;lt;/math&amp;gt; – последовательность слов, принадлежащих словарю размером &amp;lt;math&amp;gt;N_W&amp;lt;/math&amp;gt;. Первый множитель P(W) описывает вклад лингвистического модуля, второй P(X|W) – лексического, фонетического и акустического источников знаний. В соответствии с концепцией марковских цепей, второй множитель представляет собой сумму вероятностей всех возможных последовательностей состояний, что приводит к уравнению: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;W = argmax [P(W)\sum_{S_1^T} P(x_1^T, s_1^T | w_1^N)]&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;s_1^T&amp;lt;/math&amp;gt; – одна из последовательностей состояний, порождаемых последовательностью слов &amp;lt;math&amp;gt;w_1^n&amp;lt;/math&amp;gt;. На практике применяется критерий Витерби&amp;lt;ref&amp;gt;''Тампель И.Б, Карпов А.А.'' Автоматическое распознавание речи. — СПб. : Университет ИТМО, 2016. — С. 113.&amp;lt;/ref&amp;gt;. – ищется последовательность состояний, дающая максимальный вклад в сумму:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;W = argmax[P(W)^aMax[P(x_1^T, s_1^T | w_1^N)]]&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Различают систему раннего и систему позднего предсказания. В первой выполняется предсказание для акустической и языковой модели независимо, а затем оба предсказания поступают в декодер. При позднем предсказании, вычисленные признаки речи в акустической и языковой моделях без предсказания поступают в декодер и уже на основе их совместного декодирования выполняется предсказание.&lt;br /&gt;
&lt;br /&gt;
Этапы распознавания:&lt;br /&gt;
# Обработка речи начинается с оценки качества речевого сигнала. На этом этапе определяется уровень помех и искажений.&lt;br /&gt;
# Результат оценки поступает в модуль акустической адаптации, который управляет модулем расчета параметров речи, необходимых для распознавания.&lt;br /&gt;
# В сигнале выделяются участки, содержащие речь, и происходит оценка параметров речи. Происходит выделение фонетических и просодических вероятностных характеристик для синтаксического, семантического и прагматического анализа. (Оценка информации о части речи, форме слова и статистические связи между словами.)&lt;br /&gt;
# Далее параметры речи поступают в основной блок системы распознавания — декодер. Это компонент, который сопоставляет входной речевой поток с информацией, хранящейся в акустических и языковых моделях, и определяет наиболее вероятную последовательность слов, которая и является конечным результатом распознавания.&lt;br /&gt;
&lt;br /&gt;
==Признаки==&lt;br /&gt;
&lt;br /&gt;
Признаки речевых событий, используемые при распознавании речи:&lt;br /&gt;
* Спектр Фурье&lt;br /&gt;
* Спектр Фурье в шкале мел&lt;br /&gt;
* Коэффициенты линейного предсказания&lt;br /&gt;
* Кепстр&lt;br /&gt;
&lt;br /&gt;
'''Спектр Фурье'''&lt;br /&gt;
&lt;br /&gt;
Спектр Фурье получают, используя алгоритм БПФ (Быстрого Преобразования Фурье) с длиной окна равной 2-4 периода основного тона, что составляет около 20 мс. При частоте квантования 10-16 кГц выбирается окно 256 отсчетов.&lt;br /&gt;
&lt;br /&gt;
Для ослабления искажений сигнала, вызванных применением к непрерывному сигналу конечного окна анализа, чаще всего используется окно Хэмминга по формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;S'(n) = [0.54 - 0.46cos\left(\frac{2\pi n}{N-1}\right)]*S(n)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где n = 1..N, N – размерность окна, S(n) – отсчеты речевого сигнала.&lt;br /&gt;
&lt;br /&gt;
'''Спектр Фурье в шкале мел'''&lt;br /&gt;
&lt;br /&gt;
К каждому кадру, полученного Фурье спектра применяется блок мел-фильтров — треугольных пересекающихся фильтров, расположенных наиболее плотно в области нижних частот. Количество фильтров — 26. Для расчета фильтров выбирается верхняя и нижняя частота. Затем осуществляется переход от частотной шкалы к мел-шкале по формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M(f) = 1127*ln\left(1 + \frac{f}{700}\right)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На мел-шкале выбираются линейно расположенные точки (28 точек для 26 фильтров), после чего, производится обратный переход в частотную область.&lt;br /&gt;
&lt;br /&gt;
'''Коэффициенты линейного предсказания'''&lt;br /&gt;
&lt;br /&gt;
Модель линейного предсказания речи предполагает, что передаточная функция голосового тракта представляется полюсным фильтром с передаточной&lt;br /&gt;
функцией:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;H(z) = \frac{1}{\sum_{i=0}^p a_i z^{-i}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где p – число полюсов и &amp;lt;math&amp;gt;a_0 = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
Фильтр с такой передаточной функцией позволяет описать поведение сглаженного спектра речевого сигнала с хорошей точностью, за исключением назализованных звуков. Коэффициенты фильтра {&amp;lt;math&amp;gt;a_i&amp;lt;/math&amp;gt;} – выбираются путем минимизации среднеквадратичной ошибки предсказания, просуммированной на окне анализа.&lt;br /&gt;
&lt;br /&gt;
'''Кепстр'''&lt;br /&gt;
&lt;br /&gt;
Кепстр (''cepstrum'') сигнала на основе спектра Фурье вычисляется путем применения косинусного Фурье преобразования к логарифму спектра:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;c_j = \sqrt{\frac{2}{N}}\sum_{i=0}^{N-1} \left[s_icos\left(\frac{\pi(j+1)(i+0.5)}{N}\right)\right] = \sum_{i=0}^{N-1} C_{j,i}s_i&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;s_i&amp;lt;/math&amp;gt; – логарифм спектра, N – количество отсчётов спектра, &amp;lt;math&amp;gt;C_{i,j}&amp;lt;/math&amp;gt; – унитарная матрица косинусного преобразования.&lt;br /&gt;
&lt;br /&gt;
Кепстральные коэффициенты, полученные приведённым способом из ''мел'' спектра Фурье, широко используются для распознавания с помощью марковских моделей и носят название MFCC (Mel-frequency cepstral coefficients).&lt;br /&gt;
&lt;br /&gt;
==Показатели оценки качества распознавания речи==&lt;br /&gt;
&lt;br /&gt;
Существуют различные по сложности и прикладному значению задачи распознавания: изолированных слов (команд); ключевых слов в потоке речи; связанной речи (тщательное проговаривание текста с паузами между словами); слитной речи (разделяют диктовку в узкой тематической области, и спонтанную речь, например, в диалоге между людьми).&lt;br /&gt;
&lt;br /&gt;
Оценка системы, распознающей отдельные команды, не представляет каких-либо трудностей – количество неправильно распознанных команд делится на общее количество испытаний и получается процент ошибки. Для систем, распознающих слитную речь, ситуация не столь проста.&lt;br /&gt;
&lt;br /&gt;
Основными показателями качества распознавания слитной речи являются:&lt;br /&gt;
* процент правильно распознанных слов (WRR - Word Recognition Rate);&lt;br /&gt;
* процент неправильно распознанных слов (WER - Word Error Rate);&lt;br /&gt;
* процент неправильно распознанных предложений/фраз (SER - Sentence Error Rate);&lt;br /&gt;
&lt;br /&gt;
Поскольку с развитием речевых технологий показатель WER все более приближается к нулю, то значение улучшения WER более наглядно, чем улучшение точности распознавания слов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;WER = \frac{S+D+I}{T} * 100%&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где T - количество слов в распознаваемой фразе,&lt;br /&gt;
S - количество замененных слов,&lt;br /&gt;
D - количество удаленных слов,&lt;br /&gt;
I - количество вставленных слов.&lt;br /&gt;
Показатель WER может быть больше 100%.&lt;br /&gt;
&lt;br /&gt;
Другим важным критерием оценки систем распознавания слитной речи является - скорость обработки речи. Она вычисляется с помощью показателя скорости (Real-Time Factor, Speed Factor):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;RTF = \frac{T_{proc}}{T_{signal}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;T_{signal}&amp;lt;/math&amp;gt; - длительность обрабатываемого аудиосигнала;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;T_{proc}&amp;lt;/math&amp;gt; - время, необходимое для обработки сигнала.&amp;lt;br&amp;gt;&lt;br /&gt;
Если &amp;lt;math&amp;gt;RTF \leqslant 1.0&amp;lt;/math&amp;gt; - то распознавание речи ведется в режиме реального времени.&lt;br /&gt;
&lt;br /&gt;
==Применение==&lt;br /&gt;
&lt;br /&gt;
Системы распознавания речи начали развиваться как специальные сервисы для людей с ограниченными возможностями, но также нашли применение в различных сферах бизнеса, таких как:&lt;br /&gt;
* Телефония: системы голосового самообслуживания;&lt;br /&gt;
* &amp;quot;Умный дом&amp;quot;: голосовой интерфейс управления;&lt;br /&gt;
* Роботы: голосовой интерфейс электронных роботов;&lt;br /&gt;
* РС, ноутбуки, телефоны: голосовой ввод команд, диктовка текста;&lt;br /&gt;
* Автомобили: голосовое управление в салоне автомобиля.&lt;br /&gt;
&lt;br /&gt;
Основные отрасли применения:&lt;br /&gt;
* Голосовое управление&lt;br /&gt;
* Голосовые команды&lt;br /&gt;
* Голосовой ввод текста&lt;br /&gt;
* Голосовой поиск&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Распознавание_образов Распознавание образов]&lt;br /&gt;
* [https://habr.com/company/yandex/blog/198556/ Распознавание речи от Яндекса]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Субвокальное_распознавание Субвокальное распознавание]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/Speech_recognition] - статья на Википедии&lt;br /&gt;
# Тампель И.Б, Карпов А.А. Автоматическое распознавание речи. Учебное пособие. — СПб: Университет ИТМО, 2016. — 138 с.&lt;br /&gt;
# [http://fetmag.mrsu.ru/2010-2/pdf/SpeechRecognition.pdf] - статья &amp;quot;Классификация систем распознавания речи&amp;quot;.&lt;br /&gt;
# [https://moluch.ru/archive/147/41443/] - статья &amp;quot;Выделение границ фонем речевого сигнала с помощью мел-частотных спектральных коэффициентов&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PixelRNN_%D0%B8_PixelCNN&amp;diff=75020</id>
		<title>PixelRNN и PixelCNN</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PixelRNN_%D0%B8_PixelCNN&amp;diff=75020"/>
				<updated>2020-09-04T17:34:04Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Идея */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:pixel-1.png|450px|thumb|Рисунок 1. Пример использования PixelRNN/PixelCNN сетей]]&lt;br /&gt;
&lt;br /&gt;
'''''PixelRNN''''' и '''''PixelCNN''''' {{---}} алгоритмы машинного обучения, входящие в семейство авторегрессивных моделей. Используются для генерации и дополнения изображений. Алгоритмы были представлены в 2016 году компанией ''DeepMind''&amp;lt;ref name=PixelNet&amp;gt;[https://arxiv.org/abs/1601.06759 Pixel Recurrent Neural Networks]&amp;lt;/ref&amp;gt; и являются предшественниками алгоритма ''WaveNet''&amp;lt;ref name=WaveNet&amp;gt;[https://deepmind.com/blog/article/wavenet-generative-model-raw-audio WaveNet: A generative model for raw audio]&amp;lt;/ref&amp;gt;, который используется в голосовом помощнике ''Google''. &lt;br /&gt;
&lt;br /&gt;
Основным преимуществом ''PixelRNN'' и ''PixelCNN'' является уменьшение времени обучения, по сравнению с наивными способами попиксельной генерации изображений.&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
Пусть дано черно-белое изображение &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;N\times N&amp;lt;/tex&amp;gt;. Построчно преобразуем картинку в вектор &amp;lt;tex&amp;gt;V_X = \{x_1, x_2, \dots, x_{N^2} \}&amp;lt;/tex&amp;gt;, соединяя конец текущей строки с началом следующей. В таком представлении изображения можно предположить, что значение любого пикселя &amp;lt;tex&amp;gt;x_i\in V_X&amp;lt;/tex&amp;gt; может зависеть от значений предыдущих пикселей &amp;lt;tex&amp;gt;x_j, j = 1,2,\dots i-1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Тогда значение пикселя &amp;lt;tex&amp;gt;x_i\in V_X&amp;lt;/tex&amp;gt; можно выразить через условную вероятность &amp;lt;tex&amp;gt;p(x_i|x_1, x_2, \dots x_{i-1})&amp;lt;/tex&amp;gt;, и, используя цепное правило для вероятностей&amp;lt;ref name=ChainRule&amp;gt;[https://en.wikipedia.org/wiki/Chain_rule_(probability) Chain rule (probability)]&amp;lt;/ref&amp;gt;, оценка совместного распределения всех пикселей будет записываться в следующем виде: &amp;lt;tex&amp;gt;p(X)=\prod_{i=1}^{N^2}p(x_i|x_1, x_2, \dots x_{i-1})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задача алгоритма - восстановить данное распределение. Учитывая тот факт, что любой пиксель принимает значение &amp;lt;tex&amp;gt;0&amp;lt;=x_i&amp;lt;=255&amp;lt;/tex&amp;gt;, необходимо восстановить лишь дискретное распределение.&lt;br /&gt;
&lt;br /&gt;
== Идея ==&lt;br /&gt;
&lt;br /&gt;
Так как утверждается, что значение текущего пикселя зависит от значений предыдущего, то уместно использовать [[:Рекуррентные_нейронные_сети|''рекуррентные нейронные сети, RNN'']], а точнее [[Долгая краткосрочная память|''долгую краткосрочную память, LSTM'']]. В ранних работах&amp;lt;ref name=SpatialLSTM&amp;gt;[https://arxiv.org/abs/1506.03478 Generative Image Modeling Using Spatial LSTMs]&amp;lt;/ref&amp;gt; уже использовался данный подход, и вычисление скрытого состояния происходило следующим образом: &amp;lt;tex&amp;gt;h_{i,j}=f(h_{i-1,j}, h_{i,j-1}, x_{i,j})&amp;lt;/tex&amp;gt;, т.е. для того, чтобы вычислить текущее скрытое состояние, нужно было подсчитать все предыдущие, что занимает достаточно много времени. &lt;br /&gt;
&lt;br /&gt;
Авторы алгоритма модернизировали [[Долгая краткосрочная память|''LSTM'']] в '''''RowLSTM''''' и '''''Diagonal BiLSTM''''' таким образом, чтобы стало возможным распараллеливание вычислений, что в итоге положительно сказывается на времени обучения модели.&lt;br /&gt;
&lt;br /&gt;
=== RowLSTM ===&lt;br /&gt;
[[File:pixel-2.png|350px|thumb|Рисунок 2. Визуализация работы модификаций ''LSTM''. Снизу кружками обозначены пиксели, сверху - состояния на каждом пикселе. Синим обозначено то, что влияет на текущее скрытое состояние. Пустые кружки не принимают участие в вычислениях для данного скрытого состояния]]&lt;br /&gt;
В данной модификации [[Долгая краткосрочная память|''LSTM'']] предлагается рассчитывать скрытое состояние следующим образом: &amp;lt;tex&amp;gt;h_{i,j}=f(h_{i-1,j-1}, h_{i-1,j}, h_{i-1,j+1}, x_{i,j})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Как видно из формулы и Рисунка 2, значение текущего скрытого состояния не зависит от предыдущего слева, а зависит от предыдущих сверху, которые можно параллельно рассчитать. &lt;br /&gt;
&lt;br /&gt;
Из плюсов данного алгоритма можно отметить его быстродействие {{---}} модель обучается быстрее, нежели наивный [[Долгая краткосрочная память|''LSTM'']]. Из минусов - относительно плохое качество получаемых изображений. Это связанно как минимум с тем, что мы используем контекст пикселей с предыдущей строки, но никак не используем контекст соседнего слева пикселя, которые является достаточно важным, т.к. является ближайшим с точки зрения построчной генерации изображения. &lt;br /&gt;
&lt;br /&gt;
Отсюда напрашивается идея каким-то образом найти скрытое состояние пикселя слева, но при этом не потерять в производительности.&lt;br /&gt;
&lt;br /&gt;
=== Diagonal BiLSTM ===&lt;br /&gt;
[[File:pixel-3.png|350px|thumb|Рисунок 3. Операция сдвига в ''Diagonal BiLSTM''. Параллелизация происходит по диагоналям.]]&lt;br /&gt;
В данной версии скрытое состояние считается таким же образом, как и в наивном подходе: &amp;lt;tex&amp;gt;h_{i,j}=f(h_{i-1,j}, h_{i,j-1}, x_{i,j})&amp;lt;/tex&amp;gt;, но при этом есть хитрость в самом вычислении. Построчно сдвинем строки вправо на один пиксель относительно предыдущей, а затем вычислим скрытые состояния в каждом столбце, как показано на Рисунке 3.&lt;br /&gt;
&lt;br /&gt;
Данная версия позволяет учитывать контекст более качественно, но при этом занимает больше времени, чем ''RowLSTM''.&lt;br /&gt;
&lt;br /&gt;
=== PixelCNN ===&lt;br /&gt;
Идея в том, что обычно соседние пиксели (в рамках ядра 9x9) хранят самый важный контекст для пикселя. Поэтому предлагается просто использовать известные пиксели для вычисления нового, как показано на рисунке 2.&lt;br /&gt;
&lt;br /&gt;
== Архитектура ==&lt;br /&gt;
В алгоритмах ''PixelRNN'' и ''PixelCNN'' используются несколько архитектурных трюков, позволяющих производить вычисления быстрыми и надежными.&lt;br /&gt;
&lt;br /&gt;
=== Маскированные сверточные слои ===&lt;br /&gt;
В описаниях алгоритмов фигурируют два типа маскированных сверточных слоя {{---}} '''''MaskA''''', '''''MaskB'''''. Они необходимы для сокрытия от алгоритма лишней информации и учета контекста - чтобы не обрабатывать изображение после каждого подсчета, удаляя значения пикселей, можно применить маску к изображению, что является более быстрой операцией. &lt;br /&gt;
&lt;br /&gt;
Для каждого пикселя в цветном изображении в порядке очереди существуют три контекста: красный канал, зеленый и синий. В данном алгоритме очередь важна, т.е. если сейчас обрабатывается красный канал, то контекст только от предыдущих значений красного канала, если зеленый {{---}} то от всех значений на красном канале и предыдущих значениях на зеленом и т.д.&lt;br /&gt;
&lt;br /&gt;
'''''MaskA''''' используется для того, чтобы учитывать контекст предыдущих каналов, но при этом не учитывать контекст от предыдущих значений текущего канала и следующих каналов. &lt;br /&gt;
'''''MaskB''''' выполняет ту же функцию, что и '''''MaskA''''', но при этом учитывает контекст от предыдущих значений текущего канала.&lt;br /&gt;
&lt;br /&gt;
=== Уменьшение размерности === &lt;br /&gt;
[[File:pixel-4.png|350px|thumb|Рисунок 4. Блоки уменьшения размерности. Слева - блок для ''PixelCNN'', справа - ''PixelRNN''. ]]&lt;br /&gt;
На вход в любой их указанных выше алгоритмов (''PixelCNN'', ''RowLSTM'', ''Diagonal BiLSTM'') подается большое количество объектов. Поэтому внутри каждого из них сначала происходит уменьшение их количества в два раза, а затем обратное увеличение до исходного размера. Структура алгоритма с учетом уменьшения размерности показана на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
=== Внутреннее устройство LSTM === &lt;br /&gt;
Внутреннее устройство ''RowLSTM'' и ''Diagonal BiLSTM'' блоков одинаково, за исключением того, что во втором случае добавляется операция сдвига в начале и возврат к исходной структуре изображения в конце. &lt;br /&gt;
&lt;br /&gt;
Структура ''LSTM'' блока: &lt;br /&gt;
# ''MaskB'' слой ''input-to-state'' &amp;lt;tex&amp;gt;K_{is}&amp;lt;/tex&amp;gt; учитывает контекст из входа. &lt;br /&gt;
# Сверточный слой ''state-to-state'' &amp;lt;tex&amp;gt;K_{ss}&amp;lt;/tex&amp;gt; учитывает контекст из предыдущих скрытых слоев. &lt;br /&gt;
&lt;br /&gt;
Используя эти два сверточных слоя формально вычисление ''LSTM'' блока можно записать следующим образом: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
[o_i, f_i, i_i, g_i] = \sigma (K_{ss}\circledast h_{i-1} + K_{is}\circledast x_{i}) \\&lt;br /&gt;
c_i=f_i\odot c_{i-1} + i_i\odot g_i\\&lt;br /&gt;
h_i = o_i\odot tanh(c_i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt; {{---}} функция активации,  &amp;lt;tex&amp;gt;\circledast&amp;lt;/tex&amp;gt; {{---}} операция свертки,  &amp;lt;tex&amp;gt;\odot&amp;lt;/tex&amp;gt; {{---}} поэлементное умножение.&lt;br /&gt;
&lt;br /&gt;
=== Архитектура PixelRNN ===&lt;br /&gt;
# ''MaskA'' размером &amp;lt;tex&amp;gt;7\times 7&amp;lt;/tex&amp;gt; &lt;br /&gt;
# Блоки уменьшения размеренности с ''RowLSTM'' блоком, в котором &amp;lt;tex&amp;gt;K_{is}&amp;lt;/tex&amp;gt; имеет размер &amp;lt;tex&amp;gt;3\times 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;K_{ss}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;3\times 2&amp;lt;/tex&amp;gt;. Для ''Diagonal BiLSTM'' &amp;lt;tex&amp;gt;K_{is}&amp;lt;/tex&amp;gt; имеет размер &amp;lt;tex&amp;gt;1\times 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;K_{ss}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;1\times 2&amp;lt;/tex&amp;gt;. Количество блоков варьируется. &lt;br /&gt;
# ''ReLU'' активация  &lt;br /&gt;
# Сверточный слой размером &amp;lt;tex&amp;gt;1\times 1&amp;lt;/tex&amp;gt; &lt;br /&gt;
# ''Softmax'' слой&lt;br /&gt;
&lt;br /&gt;
=== Архитектура PixelCNN ===&lt;br /&gt;
# ''MaskA'' размером &amp;lt;tex&amp;gt;7\times 7&amp;lt;/tex&amp;gt; &lt;br /&gt;
# Блоки уменьшения размеренности для ''PixelCNN''. &lt;br /&gt;
# ''ReLU'' активация  &lt;br /&gt;
# Сверточный слой размером &amp;lt;tex&amp;gt;1\times 1&amp;lt;/tex&amp;gt; &lt;br /&gt;
# ''Softmax'' слой&lt;br /&gt;
&lt;br /&gt;
== Сравнение подходов ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;font-weight:bold;&amp;quot; | Критерий\название&lt;br /&gt;
! style=&amp;quot;font-weight:bold;&amp;quot; | PixelCNN&lt;br /&gt;
! style=&amp;quot;font-weight:bold;&amp;quot; | PixelRNN(Row LSTM)&lt;br /&gt;
! style=&amp;quot;font-weight:bold;&amp;quot; | PixelRNN(Diagonal BiLSTM)&lt;br /&gt;
|-&lt;br /&gt;
| Время обучения&lt;br /&gt;
| Быстрый&lt;br /&gt;
| Средний&lt;br /&gt;
| Медленный&lt;br /&gt;
|-&lt;br /&gt;
| Качество генерируемых изображений&lt;br /&gt;
| Наихудшее&lt;br /&gt;
| Средне-низкое&lt;br /&gt;
| Средне-высокое&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Примеры реализации ==&lt;br /&gt;
* [https://github.com/singh-hrituraj/PixelCNN-Pytorch PixelCNN на Pytorch]&lt;br /&gt;
* [https://github.com/ardapekis/pixel-rnn PixelRNN на Pytorch]&lt;br /&gt;
* [https://github.com/shirgur/PixelRNN PixelRNN на Keras]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [https://towardsdatascience.com/auto-regressive-generative-models-pixelrnn-pixelcnn-32d192911173 Auto-Regressive Generative Models]&lt;br /&gt;
* [http://slazebni.cs.illinois.edu/spring17/lec13_advanced.pdf Advanced Generation Methods]&lt;br /&gt;
* [https://github.com/tensorflow/magenta/blob/master/magenta/reviews/pixelrnn.md Pixel Recurrent Neural Networks]&lt;br /&gt;
* [http://bjlkeng.github.io/posts/pixelcnn/ PixelCNN]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75019</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75019"/>
				<updated>2020-09-04T17:30:53Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* В разработке */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Многопоточность в машинном обучении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
*[[Графовые нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Рекурсивные нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Сети глубокого доверия]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Оценка положения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
&lt;br /&gt;
=Виды обучения=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение в реальном времени]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Автоматическое машинное обучение==&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;br /&gt;
&lt;br /&gt;
==Обучение с подкреплением==&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Примеры кода=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на Scala]]&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Дополнение к ранжированию]]&lt;br /&gt;
*[[Генерация объектов]]&lt;br /&gt;
*[[Распознавание текста на изображении]]&lt;br /&gt;
*[[Примеры кода на Kotlin]]&lt;br /&gt;
*[[Примеры кода на Kotlin в Jupyter Notebook]]&lt;br /&gt;
*[[Анализ видео]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75018</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75018"/>
				<updated>2020-09-04T17:28:14Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Многопоточность в машинном обучении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
*[[Графовые нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Рекурсивные нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Сети глубокого доверия]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Оценка положения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
&lt;br /&gt;
=Виды обучения=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Обучение в реальном времени]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Автоматическое машинное обучение==&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;br /&gt;
&lt;br /&gt;
==Обучение с подкреплением==&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Примеры кода=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на Scala]]&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
*[[Дополнение к ранжированию]]&lt;br /&gt;
*[[Генерация объектов]]&lt;br /&gt;
*[[Распознавание текста на изображении]]&lt;br /&gt;
*[[Примеры кода на Kotlin]]&lt;br /&gt;
*[[Примеры кода на Kotlin в Jupyter Notebook]]&lt;br /&gt;
*[[Анализ видео]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75017</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75017"/>
				<updated>2020-09-04T17:09:18Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Многопоточность в машинном обучении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
*[[Графовые нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Рекурсивные нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Сети глубокого доверия]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Оценка положения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
&lt;br /&gt;
=Автоматическое машинное обучение=&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
&lt;br /&gt;
=Обучение с подкреплением=&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Активное обучение=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Примеры кода=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на Scala]]&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
*[[Дополнение к ранжированию]]&lt;br /&gt;
*[[Генерация объектов]]&lt;br /&gt;
*[[Распознавание текста на изображении]]&lt;br /&gt;
*[[Обучение в реальном времени]]&lt;br /&gt;
*[[Примеры кода на Kotlin]]&lt;br /&gt;
*[[Примеры кода на Kotlin в Jupyter Notebook]]&lt;br /&gt;
*[[Анализ видео]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75016</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75016"/>
				<updated>2020-09-04T16:53:15Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Многопоточность в машинном обучении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
*[[Графовые нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Рекурсивные нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Сети глубокого доверия]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Оценка положения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
&lt;br /&gt;
=Автоматическое машинное обучение=&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
&lt;br /&gt;
=Обучение с подкреплением=&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Активное обучение=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Примеры кода=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на Scala]]&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
*[[Дополнение к ранжированию]]&lt;br /&gt;
*[[Генерация объектов]]&lt;br /&gt;
*[[Распознавание текста на изображении]]&lt;br /&gt;
*[[Обучение в реальном времени]]&lt;br /&gt;
*[[Примеры кода на Kotlin]]&lt;br /&gt;
*[[Примеры кода на Kotlin в Jupyter Notebook]]&lt;br /&gt;
*[[Анализ видео]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75015</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75015"/>
				<updated>2020-09-04T16:36:38Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Многопоточность в машинном обучении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
*[[Графовые нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Рекурсивные нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Сети глубокого доверия]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Оценка положения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
&lt;br /&gt;
=Автоматическое машинное обучение=&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
&lt;br /&gt;
=Обучение с подкреплением=&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Активное обучение=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Примеры кода=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на Scala]]&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
*[[Дополнение к ранжированию]]&lt;br /&gt;
*[[Генерация объектов]]&lt;br /&gt;
*[[Распознавание текста на изображении]]&lt;br /&gt;
*[[Обучение в реальном времени]]&lt;br /&gt;
*[[Примеры кода на Kotlin]]&lt;br /&gt;
*[[Примеры кода на Kotlin в Jupyter Notebook]]&lt;br /&gt;
*[[Анализ видео]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75014</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75014"/>
				<updated>2020-09-04T16:27:27Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Многопоточность в машинном обучении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Графовые нейронные сети]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Сети глубокого доверия]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Оценка положения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
&lt;br /&gt;
=Автоматическое машинное обучение=&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
&lt;br /&gt;
=Обучение с подкреплением=&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Активное обучение=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Примеры кода=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на Scala]]&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
*[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]&lt;br /&gt;
*[[Дополнение к ранжированию]]&lt;br /&gt;
*[[Генерация объектов]]&lt;br /&gt;
*[[Распознавание текста на изображении]]&lt;br /&gt;
*[[Обучение в реальном времени]]&lt;br /&gt;
*[[Примеры кода на Kotlin]]&lt;br /&gt;
*[[Примеры кода на Kotlin в Jupyter Notebook]]&lt;br /&gt;
*[[Анализ видео]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75013</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75013"/>
				<updated>2020-09-04T14:53:14Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Многопоточность в машинном обучении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Сети глубокого доверия]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Оценка положения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
&lt;br /&gt;
=Автоматическое машинное обучение=&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
&lt;br /&gt;
=Обучение с подкреплением=&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Активное обучение=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Примеры кода=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на Scala]]&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Графовые нейронные сети]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
*[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]&lt;br /&gt;
*[[Дополнение к ранжированию]]&lt;br /&gt;
*[[Генерация объектов]]&lt;br /&gt;
*[[Распознавание текста на изображении]]&lt;br /&gt;
*[[Обучение в реальном времени]]&lt;br /&gt;
*[[Примеры кода на Kotlin]]&lt;br /&gt;
*[[Примеры кода на Kotlin в Jupyter Notebook]]&lt;br /&gt;
*[[Анализ видео]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75011</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75011"/>
				<updated>2020-09-03T18:28:54Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Сети глубокого доверия]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Оценка положения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
&lt;br /&gt;
=Автоматическое машинное обучение=&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
&lt;br /&gt;
=Обучение с подкреплением=&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Активное обучение=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Примеры кода=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на Scala]]&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Графовые нейронные сети]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
*[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]&lt;br /&gt;
*[[Дополнение к ранжированию]]&lt;br /&gt;
*[[Генерация объектов]]&lt;br /&gt;
*[[Распознавание текста на изображении]]&lt;br /&gt;
*[[Обучение в реальном времени]]&lt;br /&gt;
*[[Примеры кода на Kotlin]]&lt;br /&gt;
*[[Примеры кода на Kotlin в Jupyter Notebook]]&lt;br /&gt;
*[[Многопоточность в машинном обучении]]&lt;br /&gt;
*[[Анализ видео]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75010</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75010"/>
				<updated>2020-09-03T18:22:06Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Сети глубокого доверия]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Оценка положения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
&lt;br /&gt;
=Автоматическое машинное обучение=&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
&lt;br /&gt;
=Обучение с подкреплением=&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Активное обучение=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Примеры кода=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на Scala]]&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Графовые нейронные сети]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
*[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]&lt;br /&gt;
*[[Дополнение к ранжированию]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;br /&gt;
*[[Генерация объектов]]&lt;br /&gt;
*[[Распознавание текста на изображении]]&lt;br /&gt;
*[[Обучение в реальном времени]]&lt;br /&gt;
*[[Примеры кода на Kotlin]]&lt;br /&gt;
*[[Примеры кода на Kotlin в Jupyter Notebook]]&lt;br /&gt;
*[[Многопоточность в машинном обучении]]&lt;br /&gt;
*[[Анализ видео]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75009</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=75009"/>
				<updated>2020-09-03T17:44:04Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Оценка положения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
&lt;br /&gt;
=Автоматическое машинное обучение=&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
&lt;br /&gt;
=Обучение с подкреплением=&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Активное обучение=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Примеры кода=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на Scala]]&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Графовые нейронные сети]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
*[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]&lt;br /&gt;
*[[Дополнение к ранжированию]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;br /&gt;
*[[Генерация объектов]]&lt;br /&gt;
*[[Распознавание текста на изображении]]&lt;br /&gt;
*[[Обучение в реальном времени]]&lt;br /&gt;
*[[Примеры кода на Kotlin]]&lt;br /&gt;
*[[Примеры кода на Kotlin в Jupyter Notebook]]&lt;br /&gt;
*[[Сети глубокого доверия]]&lt;br /&gt;
*[[Многопоточность в машинном обучении]]&lt;br /&gt;
*[[Анализ видео]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=73613</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=73613"/>
				<updated>2020-04-13T12:55:26Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Компьютерное зрение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
&lt;br /&gt;
=Автоматическое машинное обучение=&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
&lt;br /&gt;
=Обучение с подкреплением=&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Активное обучение=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Примеры кода=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на Scala]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Графовые нейронные сети]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
*[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]&lt;br /&gt;
*[[Дополнение к ранжированию]]&lt;br /&gt;
*[[Поиск архитектуры нейронной сети]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=73550</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=73550"/>
				<updated>2020-04-11T15:35:16Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
=Общие понятия=&lt;br /&gt;
*[[Общие понятия]]&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Кросс-валидация]]&lt;br /&gt;
*[[Стохастический градиентный спуск]]&lt;br /&gt;
*[[Регуляризация]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Обучение с частичным привлечением учителя]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Жизненный цикл модели машинного обучения]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классификация и регрессия=&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Вариации регрессии]]&lt;br /&gt;
*[[Линейная регрессия]]&lt;br /&gt;
*[[Логистическая регрессия]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Ядра]]&lt;br /&gt;
*[[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Байесовские сети]]&lt;br /&gt;
*[[Поиск ближайших соседей с помощью иерархического маленького мира]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Кластеризация=&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[Оценка качества в задаче кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Эволюционные алгоритмы кластеризации]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ансамбли=&lt;br /&gt;
*[[Виды ансамблей]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[XGBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[CatBoost]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Нейронные сети=&lt;br /&gt;
*[[Нейронные сети, перцептрон]]&lt;br /&gt;
*[[Обратное распространение ошибки]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;br /&gt;
&lt;br /&gt;
==Глубокое обучение==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Рекуррентные нейронные сети]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
&lt;br /&gt;
===Сверточные сети===&lt;br /&gt;
*[[Сверточные нейронные сети]]&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Компьютерное зрение===&lt;br /&gt;
*[[Компьютерное зрение]]&lt;br /&gt;
*[[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Сегментация изображений]]&lt;br /&gt;
&lt;br /&gt;
===Порождающие модели===&lt;br /&gt;
*[[Порождающие модели]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
*[[Автокодировщик]]&lt;br /&gt;
*[[Вариационный автокодировщик]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обработка естественного языка===&lt;br /&gt;
*[[Распознавание речи]]&lt;br /&gt;
*[[Обработка естественного языка]]&lt;br /&gt;
*[[Векторное представление слов]]&lt;br /&gt;
*[[Классификация текстов и анализ тональности]]&lt;br /&gt;
*[[Долгая краткосрочная память]]&lt;br /&gt;
*[[Механизм внимания]]&lt;br /&gt;
&lt;br /&gt;
=Автоматическое машинное обучение=&lt;br /&gt;
*[[Автоматическое машинное обучение]]&lt;br /&gt;
*[[Модель алгоритма и ее выбор]]&lt;br /&gt;
*[[Мета-обучение]]&lt;br /&gt;
&lt;br /&gt;
=Работа с данными=&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[Алгоритмы сэмплирования]]&lt;br /&gt;
*[[Известные наборы данных]]&lt;br /&gt;
*[[Метод главных компонент (PCA)]]&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением]]&lt;br /&gt;
&lt;br /&gt;
=Обучение с подкреплением=&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Методы policy gradient и алгоритм асинхронного актора-критика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Активное обучение=&lt;br /&gt;
*[[Активное обучение]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Примеры кода=&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Примеры кода на Scala]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=В разработке=&lt;br /&gt;
*[[Графовые нейронные сети]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Примеры кода на R]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[PixelRNN и PixelCNN]]&lt;br /&gt;
*[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]&lt;br /&gt;
*[[Дополнение к ранжированию]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D1%86%D0%B5%D0%BD%D0%BA%D0%B0_%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D0%B2_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0%D1%85_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8_%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=73344</id>
		<title>Оценка качества в задачах классификации и регрессии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D1%86%D0%B5%D0%BD%D0%BA%D0%B0_%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D0%B2_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0%D1%85_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8_%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=73344"/>
				<updated>2020-03-25T21:40:34Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В машинном обучении различают оценки качества для задачи классификации и регрессии. Причем оценка задачи классификации часто значительно сложнее, чем оценка регрессии.&lt;br /&gt;
&lt;br /&gt;
== Оценки качества классификации ==&lt;br /&gt;
&lt;br /&gt;
=== Матрица ошибок (англ. Сonfusion matrix) ===&lt;br /&gt;
&lt;br /&gt;
Перед переходом к самим метрикам необходимо ввести важную концепцию для описания этих метрик в терминах ошибок классификации — confusion matrix (матрица ошибок).&lt;br /&gt;
Допустим, что у нас есть два класса &amp;lt;math&amp;gt;y = \{ 0, 1 \}&amp;lt;/math&amp;gt; и алгоритм, предсказывающий принадлежность каждого объекта одному из классов.&lt;br /&gt;
Рассмотрим пример. Пусть банк использует систему классификации заёмщиков на кредитоспособных и некредитоспособных. При этом первым кредит выдаётся, а вторые получат отказ. Таким образом, обнаружение некредитоспособного заёмщика (&amp;lt;math&amp;gt;y = 1 &amp;lt;/math&amp;gt;) можно рассматривать как &amp;quot;сигнал тревоги&amp;quot;, сообщающий о возможных рисках.&lt;br /&gt;
&lt;br /&gt;
Любой реальный классификатор совершает ошибки. В нашем случае таких ошибок может быть две:&lt;br /&gt;
&lt;br /&gt;
* Кредитоспособный заёмщик распознается моделью как некредитоспособный и ему отказывается в кредите. Данный случай можно трактовать как &amp;quot;ложную тревогу&amp;quot;.&lt;br /&gt;
* Некредитоспособный заёмщик распознаётся как кредитоспособный и ему ошибочно выдаётся кредит. Данный случай можно рассматривать как &amp;quot;пропуск цели&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Несложно увидеть, что эти ошибки неравноценны по связанным с ними проблемам. В случае &amp;quot;ложной тревоги&amp;quot; потери банка составят только проценты по невыданному кредиту (только упущенная выгода). В случае &amp;quot;пропуска цели&amp;quot; можно потерять всю сумму выданного кредита. Поэтому системе важнее не допустить &amp;quot;пропуск цели&amp;quot;, чем &amp;quot;ложную тревогу&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Поскольку с точки зрения логики задачи нам важнее правильно распознать некредитоспособного заёмщика с меткой &amp;lt;math&amp;gt;y = 1 &amp;lt;/math&amp;gt;, чем ошибиться в распознавании кредитоспособного, будем называть соответствующий исход классификации положительным (заёмщик некредитоспособен), а противоположный - отрицательным (заемщик кредитоспособен &amp;lt;math&amp;gt;y = 0 &amp;lt;/math&amp;gt;). Тогда возможны следующие исходы классификации:&lt;br /&gt;
&lt;br /&gt;
* Некредитоспособный заёмщик классифицирован как некредитоспособный, т.е. положительный класс распознан как положительный. Наблюдения, для которых это имеет место называются '''истинно-положительными''' ('''True Positive''' {{---}} '''TP''').&lt;br /&gt;
* Кредитоспособный заёмщик классифицирован как кредитоспособный, т.е. отрицательный класс распознан как отрицательный. Наблюдения, которых это имеет место, называются '''истинно отрицательными''' ('''True Negative''' {{---}} '''TN''').&lt;br /&gt;
* Кредитоспособный заёмщик классифицирован как некредитоспособный, т.е. имела место ошибка, в результате которой отрицательный класс был распознан как положительный. Наблюдения, для которых был получен такой исход классификации, называются '''ложно-положительными''' ('''False Positive''' {{---}} '''FP'''), а ошибка классификации называется '''ошибкой I рода'''.&lt;br /&gt;
* Некредитоспособный заёмщик распознан как кредитоспособный, т.е. имела место ошибка, в результате которой положительный класс был распознан как отрицательный. Наблюдения, для которых был получен такой исход классификации, называются '''ложно-отрицательными''' ('''False Negative''' {{---}} '''FN'''), а ошибка классификации называется '''ошибкой II рода'''.&lt;br /&gt;
&lt;br /&gt;
Таким образом, ошибка I рода, или ложно-положительный исход классификации, имеет место, когда отрицательное наблюдение распознано моделью как положительное. Ошибкой II рода, или ложно-отрицательным исходом классификации, называют случай, когда положительное наблюдение распознано как отрицательное. Поясним это с помощью матрицы ошибок классификации:&lt;br /&gt;
&lt;br /&gt;
: {| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;math&amp;gt;y = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;y = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;a ( x ) = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
|Истинно-положительный ('''True Positive — TP''')&lt;br /&gt;
|Ложно-положительный ('''False Positive — FP''')&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;a ( x ) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
|Ложно-отрицательный ('''False Negative — FN''')&lt;br /&gt;
|Истинно-отрицательный ('''True Negative — TN''')&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;a ( x )&amp;lt;/math&amp;gt; — это ответ алгоритма на объекте, а &amp;lt;math&amp;gt;y &amp;lt;/math&amp;gt; — истинная метка класса на этом объекте.&lt;br /&gt;
Таким образом, ошибки классификации бывают двух видов: '''False Negative''' ('''FN''') и '''False Positive''' ('''FP'''). &lt;br /&gt;
'''P''' означает что классификатор определяет класс объекта как положительный ('''N''' {{---}} отрицательный). '''T''' значит что класс предсказан правильно (соответственно '''F''' {{---}} неправильно). Каждая строка в матрице ошибок представляет спрогнозированный класс, а каждый столбец {{---}} фактический класс.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# код для матрицы ошибок&amp;lt;/font&amp;gt;&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;'''# Пример классификатора, способного проводить различие между всего лишь двумя&amp;lt;/font&amp;gt;&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;'''# классами, &amp;quot;пятерка&amp;quot; и &amp;quot;не пятерка&amp;quot; из набора рукописных цифр MNIST&amp;lt;/font&amp;gt;&lt;br /&gt;
  '''import''' numpy '''as''' np&lt;br /&gt;
  '''from''' sklearn.datasets '''import''' fetch_openml&lt;br /&gt;
  '''from''' sklearn.model_selection '''import''' cross_val_predict&lt;br /&gt;
  '''from''' sklearn.metrics '''import''' confusion_matrix&lt;br /&gt;
  '''from''' sklearn.linear_model '''import''' SGDClassifier&lt;br /&gt;
  mnist = fetch_openml('mnist_784', version=1)&lt;br /&gt;
  X, y = mnist[&amp;quot;data&amp;quot;], mnist[&amp;quot;target&amp;quot;]&lt;br /&gt;
  y = y.astype(np.uint8)&lt;br /&gt;
  X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]&lt;br /&gt;
  y_train_5 = (y_train == 5) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# True для всех пятерок, False для в сех остальных цифр. Задача опознать пятерки&amp;lt;/font&amp;gt;&lt;br /&gt;
  y_test_5 = (y_test == 5)&lt;br /&gt;
  sgd_clf = SGDClassifier(random_state=42)&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt; # классификатор на основе метода стохастического градиентного спуска (англ. Stochastic Gradient Descent SGD)&amp;lt;/font&amp;gt;&lt;br /&gt;
  sgd_clf.fit(X_train, y_train_5) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# обучаем классификатор распозновать пятерки на целом обучающем наборе&amp;lt;/font&amp;gt;&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Для расчета матрицы ошибок сначала понадобится иметь набор прогнозов, чтобы их можно было сравнивать с фактическими целями&amp;lt;/font&amp;gt;&lt;br /&gt;
  y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3)&lt;br /&gt;
  print(confusion_matrix(y_train_5, y_train_pred))&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# array([[53892, 687],&lt;br /&gt;
  #        [ 1891, 3530]])&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Безупречный классификатор имел бы только истинно-поло­жительные и истинно отрицательные классификации, так что его матрица ошибок содержала бы ненулевые значения только на своей главной диа­гонали (от левого верхнего до правого нижнего угла):&lt;br /&gt;
&lt;br /&gt;
  '''import''' numpy '''as''' np&lt;br /&gt;
  '''from''' sklearn.datasets '''import''' fetch_openml&lt;br /&gt;
  '''from''' sklearn.metrics '''import''' confusion_matrix&lt;br /&gt;
  mnist = fetch_openml('mnist_784', version=1)&lt;br /&gt;
  X, y = mnist[&amp;quot;data&amp;quot;], mnist[&amp;quot;target&amp;quot;]&lt;br /&gt;
  y = y.astype(np.uint8)&lt;br /&gt;
  X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]&lt;br /&gt;
  y_train_5 = (y_train == 5) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# True для всех пятерок, False для в сех остальных цифр. Задача опознать пятерки&amp;lt;/font&amp;gt;&lt;br /&gt;
  y_test_5 = (y_test == 5)&lt;br /&gt;
  y_train_perfect_predictions = y_train_5 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# притворись, что мы достигли совершенства&amp;lt;/font&amp;gt;&lt;br /&gt;
  print(confusion_matrix(y_train_5, y_train_perfect_predictions))&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# array([[54579, 0],&lt;br /&gt;
  #        [ 0, 5421]])&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Аккуратность (англ. Accuracy) ===&lt;br /&gt;
&lt;br /&gt;
Интуитивно понятной, очевидной и почти неиспользуемой метрикой является ''accuracy'' — доля правильных ответов алгоритма:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
accuracy = \dfrac{TP+TN}{TP+TN+FP+FN}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эта метрика бесполезна в задачах с неравными классами, что как вариант можно исправить с помощью [[алгоритмы сэмплирования|алгоритмов сэмплирования]] и это легко показать на примере.&lt;br /&gt;
&lt;br /&gt;
Допустим, мы хотим оценить работу спам-фильтра почты. У нас есть 100 не-спам писем, 90 из которых наш классификатор определил верно (True Negative = 90, False Positive = 10), и 10 спам-писем, 5 из которых классификатор также определил верно (True Positive = 5, False Negative = 5).&lt;br /&gt;
Тогда accuracy:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
accuracy = \dfrac{5+90}{5+90+10+5} = 86,4&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако если мы просто будем предсказывать все письма как не-спам, то получим более высокую ''аккуратность'':&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
accuracy = \dfrac{0+100}{0+100+0+10} = 90,9&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом, наша модель совершенно не обладает никакой предсказательной силой, так как изначально мы хотели определять письма со спамом. Преодолеть это нам поможет переход с общей для всех классов метрики к отдельным показателям качества классов.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# код для для подсчета аккуратности:&amp;lt;/font&amp;gt;&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;'''# Пример классификатора, способного проводить различие между всего лишь двумя&lt;br /&gt;
  '''# классами, &amp;quot;пятерка&amp;quot; и &amp;quot;не пятерка&amp;quot; из набора рукописных цифр MNIST&amp;lt;/font&amp;gt;&lt;br /&gt;
  '''import''' numpy '''as''' np&lt;br /&gt;
  '''from''' sklearn.datasets '''import''' fetch_openml&lt;br /&gt;
  '''from''' sklearn.model_selection '''import''' cross_val_predict&lt;br /&gt;
  '''from''' sklearn.metrics '''import''' accuracy_score&lt;br /&gt;
  '''from''' sklearn.linear_model '''import''' SGDClassifier&lt;br /&gt;
  mnist = fetch_openml('mnist_784', version=1)&lt;br /&gt;
  X, y = mnist[&amp;quot;data&amp;quot;], mnist[&amp;quot;target&amp;quot;]&lt;br /&gt;
  y = y.astype(np.uint8)&lt;br /&gt;
  X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]&lt;br /&gt;
  y_train_5 = (y_train == 5)&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt; # True для всех пятерок, False для в сех остальных цифр. Задача опознать пятерки&amp;lt;/font&amp;gt;&lt;br /&gt;
  y_test_5 = (y_test == 5)&lt;br /&gt;
  sgd_clf = SGDClassifier(random_state=42) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# классификатор на основе метода стохастического градиентного спуска (Stochastic Gradient Descent SGD)&amp;lt;/font&amp;gt;&lt;br /&gt;
  sgd_clf.fit(X_train, y_train_5) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# обучаем классификатор распозновать пятерки на целом обучающем наборе&amp;lt;/font&amp;gt;&lt;br /&gt;
  y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3)&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# print(confusion_matrix(y_train_5, y_train_pred))&lt;br /&gt;
  # array([[53892, 687]&lt;br /&gt;
  #        [ 1891, 3530]])&amp;lt;/font&amp;gt;&lt;br /&gt;
  print(accuracy_score(y_train_5, y_train_pred))&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt; # == (53892 + 3530) / (53892 + 3530  + 1891 +687)&amp;lt;/font&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# 0.9570333333333333&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Точность (англ. Precision) ===&lt;br /&gt;
&lt;br /&gt;
Точностью (''precision'') называется доля правильных ответов модели в пределах класса {{---}} это доля объектов действительно принадлежащих данному классу относительно всех объектов которые система отнесла к этому классу.&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
Precision = \dfrac{TP}{TP+FP}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Именно введение ''precision'' не позволяет нам записывать все объекты в один класс, так как в этом случае мы получаем рост уровня ''False Positive''.&lt;br /&gt;
&lt;br /&gt;
=== Полнота (англ. Recall) ===&lt;br /&gt;
&lt;br /&gt;
Полнота {{---}} это доля истинно положительных классификаций. Полнота показывает, какую долю объектов, реально относящихся к положительному классу, мы предсказали верно.&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
Recall = \dfrac{TP}{TP+FN}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Полнота (''recall'') демонстрирует способность алгоритма обнаруживать данный класс вообще.&lt;br /&gt;
&lt;br /&gt;
Имея матрицу ошибок, очень просто можно вычислить точность и полноту для каждого класса. Точность (''precision'') равняется отношению соответствующего диагонального элемента матрицы и суммы всей строки класса. Полнота (''recall'') {{---}} отношению диагонального элемента матрицы и суммы всего столбца класса. Формально:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
Precision_c = \dfrac{A_{c,c}}{\sum \limits_{i=1}^{n} A_{c,i}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
Recall_c = \dfrac{A_{c,c}}{\sum \limits_{i=1}^{n} A_{i,c}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результирующая точность классификатора рассчитывается как арифметическое среднее его точности по всем классам. То же самое с полнотой. Технически этот подход называется '''macro-averaging'''.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# код для для подсчета точности и полноты:&lt;br /&gt;
  '''# Пример классификатора, способного проводить различие между всего лишь двумя&lt;br /&gt;
  '''# классами, &amp;quot;пятерка&amp;quot; и &amp;quot;не пятерка&amp;quot; из набора рукописных цифр MNIST&amp;lt;/font&amp;gt;&lt;br /&gt;
  '''import''' numpy '''as''' np&lt;br /&gt;
  '''from''' sklearn.datasets '''import''' fetch_openml&lt;br /&gt;
  '''from''' sklearn.model_selection '''import''' cross_val_predict&lt;br /&gt;
  '''from''' sklearn.metrics '''import''' precision_score, recall_score&lt;br /&gt;
  '''from''' sklearn.linear_model '''import''' SGDClassifier&lt;br /&gt;
  mnist = fetch_openml('mnist_784', version=1)&lt;br /&gt;
  X, y = mnist[&amp;quot;data&amp;quot;], mnist[&amp;quot;target&amp;quot;]&lt;br /&gt;
  y = y.astype(np.uint8)&lt;br /&gt;
  X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]&lt;br /&gt;
  y_train_5 = (y_train == 5) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# True для всех пятерок, False для в сех остальных цифр. Задача опознать пятерки&amp;lt;/font&amp;gt;&lt;br /&gt;
  y_test_5 = (y_test == 5)&lt;br /&gt;
  sgd_clf = SGDClassifier(random_state=42)&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt; # классификатор на основе метода стохастического градиентного спуска (Stochastic Gradient Descent SGD)&amp;lt;/font&amp;gt;&lt;br /&gt;
  sgd_clf.fit(X_train, y_train_5) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# обучаем классификатор распозновать пятерки на целом обучающем наборе&amp;lt;/font&amp;gt;&lt;br /&gt;
  y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3)&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# print(confusion_matrix(y_train_5, y_train_pred))&lt;br /&gt;
  # array([[53892, 687]&lt;br /&gt;
  #        [ 1891, 3530]])&amp;lt;/font&amp;gt;&lt;br /&gt;
  print(precision_score(y_train_5, y_train_pred)) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# == 3530 / (3530 + 687)&amp;lt;/font&amp;gt;&lt;br /&gt;
  print(recall_score(y_train_5, y_train_pred)) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# == 3530 / (3530 + 1891)&amp;lt;/font&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# 0.8370879772350012&lt;br /&gt;
  # 0.6511713705958311&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== F-мера (англ. F-score) ===&lt;br /&gt;
&lt;br /&gt;
''Precision'' и ''recall'' не зависят, в отличие от ''accuracy'', от соотношения классов и потому применимы в условиях несбалансированных выборок.&lt;br /&gt;
Часто в реальной практике стоит задача найти оптимальный (для заказчика) баланс между этими двумя метриками. Понятно что чем выше точность и полнота, тем лучше. Но в реальной жизни максимальная точность и полнота не достижимы одновременно и приходится искать некий баланс. Поэтому, хотелось бы иметь некую метрику которая объединяла бы в себе информацию о точности и полноте нашего алгоритма. В этом случае нам будет проще принимать решение о том какую реализацию запускать в производство (у кого больше тот и круче). Именно такой метрикой является ''F-мера''.&lt;br /&gt;
&lt;br /&gt;
F-мера представляет собой [https://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B5%D0%B4%D0%BD%D0%B5%D0%B5_%D0%B3%D0%B0%D1%80%D0%BC%D0%BE%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5 гармоническое среднее] между точностью и полнотой. Она стремится к нулю, если точность или полнота стремится к нулю.&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt; F = \dfrac{ 2 \times precision \times recall }{ precision + recall }&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Данная формула придает одинаковый вес точности и полноте, поэтому F-мера будет падать одинаково при уменьшении и точности и полноты. Возможно рассчитать ''F-меру'' придав различный вес точности и полноте, если вы осознанно отдаете приоритет одной из этих метрик при разработке алгоритма:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
F_β = \dfrac{(1+β^2) \times precision \times recall }{ (β^2 \times precision) + recall }&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;β&amp;lt;/math&amp;gt; принимает значения в диапазоне &amp;lt;math&amp;gt;0&amp;lt;β&amp;lt;1&amp;lt;/math&amp;gt; если вы хотите отдать приоритет точности, а при &amp;lt;math&amp;gt;β&amp;gt;1&amp;lt;/math&amp;gt; приоритет отдается полноте. При &amp;lt;math&amp;gt;β=1&amp;lt;/math&amp;gt; формула сводится к предыдущей и вы получаете сбалансированную F-меру (также ее называют &amp;lt;math&amp;gt;F_1&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[Файл:F_balanc.jpg|thumb|none|450px|Рис.1 Сбалансированная F-мера, &amp;lt;math&amp;gt;β=1&amp;lt;/math&amp;gt;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[Файл:F_prior_Prec.jpg|thumb|none|450px|Рис.2 F-мера c приоритетом точности, &amp;lt;math&amp;gt;β^2=\dfrac{ 1 }{ 4 }&amp;lt;/math&amp;gt;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[Файл:F_prior_Recal.jpg|thumb|none|450px|Рис.3 F-мера c приоритетом полноты, &amp;lt;math&amp;gt;β^2=2&amp;lt;/math&amp;gt;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''F-мера'' достигает максимума при максимальной полноте и точности, и близка к нулю, если один из аргументов близок к нулю.&lt;br /&gt;
&lt;br /&gt;
''F-мера'' является хорошим кандидатом на формальную метрику оценки качества классификатора. Она сводит к одному числу две других основополагающих метрики: точность и полноту. Имея &amp;quot;F-меру&amp;quot; гораздо проще ответить на вопрос: &amp;quot;поменялся алгоритм в лучшую сторону или нет?&amp;quot; &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# код для подсчета метрики F-mera:&lt;br /&gt;
  '''# Пример классификатора, способного проводить различие между всего лишь двумя&lt;br /&gt;
  '''# классами, &amp;quot;пятерка&amp;quot; и &amp;quot;не пятерка&amp;quot; из набора рукописных цифр MNIST&amp;lt;/font&amp;gt;&lt;br /&gt;
  '''import''' numpy '''as''' np&lt;br /&gt;
  '''from''' sklearn.datasets '''import''' fetch_openml&lt;br /&gt;
  '''from''' sklearn.model_selection '''import''' cross_val_predict&lt;br /&gt;
  '''from''' sklearn.linear_model '''import''' SGDClassifier&lt;br /&gt;
  '''from''' sklearn.metrics '''import''' f1_score&lt;br /&gt;
  mnist = fetch_openml('mnist_784', version=1)&lt;br /&gt;
  X, y = mnist[&amp;quot;data&amp;quot;], mnist[&amp;quot;target&amp;quot;]&lt;br /&gt;
  y = y.astype(np.uint8)&lt;br /&gt;
  X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]&lt;br /&gt;
  y_train_5 = (y_train == 5)&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt; # True для всех пятерок, False для в сех остальных цифр. Задача опознать пятерки&amp;lt;/font&amp;gt;&lt;br /&gt;
  y_test_5 = (y_test == 5)&lt;br /&gt;
  sgd_clf = SGDClassifier(random_state=42)&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt; # классификатор на основе метода стохастического градиентного спуска (Stochastic Gradient Descent SGD)&amp;lt;/font&amp;gt;&lt;br /&gt;
  sgd_clf.fit(X_train, y_train_5) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# обучаем классификатор распознавать пятерки на целом обучающем наборе&amp;lt;/font&amp;gt;&lt;br /&gt;
  y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3)&lt;br /&gt;
  print(f1_score(y_train_5, y_train_pred))&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# 0.7325171197343846&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ROC-кривая ===&lt;br /&gt;
&lt;br /&gt;
'''Кривая рабочих характеристик''' (англ. '''Receiver Operating Characteristics curve'''). &lt;br /&gt;
Используется для анализа поведения классификаторов при различных пороговых значениях. &lt;br /&gt;
Позволяет рассмотреть все пороговые значения для данного классификатора. &lt;br /&gt;
Показывает долю ложно положительных примеров (англ. '''false positive rate, FPR''') в сравнении с долей истинно положительных примеров (англ. '''true positive rate, TPR''').&lt;br /&gt;
&lt;br /&gt;
[[Файл:ROC_2.png]]&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt; TPR = \dfrac{TP}{TP+FN} = Recall&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt; FPR = \dfrac{FP}{FP+TN} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доля '''FPR''' {{---}} это пропорция отрицательных образцов, которые были некорректно классифицированы как положительные.&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt; FPR = 1 - TNR&amp;lt;/math&amp;gt;, &lt;br /&gt;
&lt;br /&gt;
где '''TNR''' {{---}} доля истинно отрицательных классификаций (англ. '''Тrие Negative Rate'''), пред­ставляющая собой пропорцию отрицательных образцов, которые были кор­ректно классифицированы как отрицательные.&lt;br /&gt;
&lt;br /&gt;
Доля '''TNR''' также называется '''специфичностью''' (англ. '''specificity'''). Следовательно, ROC-кривая изображает '''чувствительность''' (англ. '''seпsitivity'''), т.е. полноту, в срав­нении с разностью '''1 - specificity'''.&lt;br /&gt;
&lt;br /&gt;
Прямая линия по диагонали представляет ROC-кривую чисто случайного классификатора. Хороший классификатор держится от указанной линии настолько далеко, насколько это&lt;br /&gt;
возможно (стремясь к левому верхнему углу).&lt;br /&gt;
&lt;br /&gt;
Один из способов сравнения классификаторов предусматривает измере­ние '''площади под кривой''' (англ. '''Area Under the Curve {{---}} AUC'''). Безупречный клас­сификатор будет иметь площадь под  ROC-кривой ('''ROC-AUC'''), равную 1, тогда как чисто случайный классификатор - площадь 0.5.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Код отрисовки ROC-кривой&lt;br /&gt;
  '''# На примере классификатора, способного проводить различие между всего лишь двумя классами&lt;br /&gt;
  '''# &amp;quot;пятерка&amp;quot; и &amp;quot;не пятерка&amp;quot; из набора рукописных цифр MNIST&amp;lt;/font&amp;gt;&lt;br /&gt;
  '''from''' sklearn.metrics '''import''' roc_curve&lt;br /&gt;
  '''import''' matplotlib.pyplot '''as''' plt&lt;br /&gt;
  '''import''' numpy '''as''' np&lt;br /&gt;
  '''from''' sklearn.datasets '''import''' fetch_openml&lt;br /&gt;
  '''from''' sklearn.model_selection '''import''' cross_val_predict&lt;br /&gt;
  '''from''' sklearn.linear_model '''import''' SGDClassifier&lt;br /&gt;
  mnist = fetch_openml('mnist_784', version=1)&lt;br /&gt;
  X, y = mnist[&amp;quot;data&amp;quot;], mnist[&amp;quot;target&amp;quot;]&lt;br /&gt;
  y = y.astype(np.uint8)&lt;br /&gt;
  X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]&lt;br /&gt;
  y_train_5 = (y_train == 5)  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# True для всех пятерок, False для в сех остальных цифр. Задача опознать пятерки&amp;lt;/font&amp;gt;&lt;br /&gt;
  y_test_5 = (y_test == 5)&lt;br /&gt;
  sgd_clf = SGDClassifier(random_state=42) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# классификатор на основе метода стохастического градиентного спуска (Stochastic Gradient Descent SGD)&amp;lt;/font&amp;gt;&lt;br /&gt;
  sgd_clf.fit(X_train, y_train_5) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# обучаем классификатор распозновать пятерки на целом обучающем наборе&amp;lt;/font&amp;gt;&lt;br /&gt;
  y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3)&lt;br /&gt;
  y_scores = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3, method=&amp;quot;decision_function&amp;quot;)&lt;br /&gt;
  fpr, tpr, thresholds = roc_curve(y_train_5, y_scores)&lt;br /&gt;
  def plot_roc_curve(fpr, tpr, label=None):&lt;br /&gt;
      plt.plot(fpr, tpr, linewidth=2, label=label)&lt;br /&gt;
      plt.plot([0, 1], [0, 1], 'k--') # dashed diagonal&lt;br /&gt;
      plt.xlabel('False Positive Rate, FPR (1 - specificity)')&lt;br /&gt;
      plt.ylabel('True Positive Rate, TPR (Recall)')&lt;br /&gt;
      plt.title('ROC curve')&lt;br /&gt;
      plt.savefig(&amp;quot;ROC.png&amp;quot;)&lt;br /&gt;
  plot_roc_curve(fpr, tpr)&lt;br /&gt;
  plt.show()&lt;br /&gt;
&lt;br /&gt;
=== Precison-recall кривая ===&lt;br /&gt;
&lt;br /&gt;
'''Чувствительность к соотношению классов.''' &lt;br /&gt;
Рассмотрим задачу выделения математических статей из множества научных статей. Допустим, что всего имеется 1.000.100 статей, из которых лишь 100 относятся к математике. Если нам удастся построить алгоритм &amp;lt;math&amp;gt;a(x)&amp;lt;/math&amp;gt;, идеально решающий задачу, то его TPR будет равен единице, а FPR — нулю. Рассмотрим теперь плохой алгоритм, дающий положительный ответ на 95 математических и 50.000 нематематических статьях. Такой алгоритм совершенно бесполезен, но при этом имеет TPR = 0.95 и FPR = 0.05, что крайне близко к показателям идеального алгоритма.&lt;br /&gt;
Таким образом, если положительный класс существенно меньше по размеру, то AUC-ROC может давать неадекватную оценку качества работы алгоритма, поскольку измеряет долю неверно принятых объектов относительно общего числа отрицательных. Так, алгоритм &amp;lt;math&amp;gt;b(x)&amp;lt;/math&amp;gt;, помещающий 100 релевантных документов на позиции с 50.001-й по 50.101-ю, будет иметь AUC-ROC 0.95.&lt;br /&gt;
&lt;br /&gt;
'''Precison-recall (PR) кривая.''' Избавиться от указанной проблемы с несбалансированными классами можно, перейдя от ROC-кривой к PR-кривой. Она определяется аналогично ROC-кривой, только по осям откладываются не FPR и TPR, а полнота (по оси абсцисс) и точность (по оси ординат). Критерием качества семейства алгоритмов выступает '''площадь под PR-кривой''' (англ. '''Area Under the Curve — AUC-PR''')&lt;br /&gt;
&lt;br /&gt;
[[Файл:PR_curve.png]]&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Код отрисовки Precison-recall кривой&lt;br /&gt;
  '''# На примере классификатора, способного проводить различие между всего лишь двумя классами&lt;br /&gt;
  '''# &amp;quot;пятерка&amp;quot; и &amp;quot;не пятерка&amp;quot; из набора рукописных цифр MNIST&amp;lt;/font&amp;gt;&lt;br /&gt;
  '''from''' sklearn.metrics '''import''' precision_recall_curve&lt;br /&gt;
  '''import''' matplotlib.pyplot '''as''' plt&lt;br /&gt;
  '''import''' numpy '''as''' np&lt;br /&gt;
  '''from''' sklearn.datasets '''import''' fetch_openml&lt;br /&gt;
  '''from''' sklearn.model_selection '''import''' cross_val_predict&lt;br /&gt;
  '''from''' sklearn.linear_model '''import''' SGDClassifier&lt;br /&gt;
  mnist = fetch_openml('mnist_784', version=1)&lt;br /&gt;
  X, y = mnist[&amp;quot;data&amp;quot;], mnist[&amp;quot;target&amp;quot;]&lt;br /&gt;
  y = y.astype(np.uint8)&lt;br /&gt;
  X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]&lt;br /&gt;
  y_train_5 = (y_train == 5) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# True для всех пятерок, False для в сех остальных цифр. Задача опознать пятерки&amp;lt;/font&amp;gt;&lt;br /&gt;
  y_test_5 = (y_test == 5)&lt;br /&gt;
  sgd_clf = SGDClassifier(random_state=42)&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt; # классификатор на основе метода стохастического градиентного спуска (Stochastic Gradient Descent SGD)&amp;lt;/font&amp;gt;&lt;br /&gt;
  sgd_clf.fit(X_train, y_train_5) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# обучаем классификатор распозновать пятерки на целом обучающем наборе&amp;lt;/font&amp;gt;&lt;br /&gt;
  y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3)&lt;br /&gt;
  y_scores = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3, method=&amp;quot;decision_function&amp;quot;)&lt;br /&gt;
  precisions, recalls, thresholds = precision_recall_curve(y_train_5, y_scores)&lt;br /&gt;
  def plot_precision_recall_vs_threshold(precisions, recalls, thresholds):&lt;br /&gt;
      plt.plot(recalls, precisions, linewidth=2)&lt;br /&gt;
      plt.xlabel('Recall')&lt;br /&gt;
      plt.ylabel('Precision')&lt;br /&gt;
      plt.title('Precision-Recall curve')&lt;br /&gt;
      plt.savefig(&amp;quot;Precision_Recall_curve.png&amp;quot;)&lt;br /&gt;
  plot_precision_recall_vs_threshold(precisions, recalls, thresholds)&lt;br /&gt;
  plt.show()&lt;br /&gt;
&lt;br /&gt;
== Оценки качества регрессии ==&lt;br /&gt;
&lt;br /&gt;
Наиболее типичными мерами качества в задачах регрессии являются &lt;br /&gt;
&lt;br /&gt;
=== Средняя квадратичная ошибка (англ. Mean Squared Error, MSE) ===&lt;br /&gt;
&lt;br /&gt;
''MSE'' применяется в ситуациях, когда нам надо подчеркнуть большие ошибки и выбрать модель, которая дает меньше больших ошибок прогноза. Грубые ошибки становятся заметнее за счет того, что ошибку прогноза мы возводим в квадрат. И модель, которая дает нам меньшее значение среднеквадратической ошибки, можно сказать, что что у этой модели меньше грубых ошибок.&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
MSE = \dfrac{1}{n}\sum \limits_{i=1}^{n}(a(x_i) - y_i)^2&lt;br /&gt;
&amp;lt;/math&amp;gt;  и&lt;br /&gt;
&lt;br /&gt;
=== Cредняя абсолютная ошибка (англ. Mean Absolute Error, MAE) === &lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
MAE = \dfrac{1}{n}\sum \limits_{i=1}^{n}|a(x_i) - y_i|&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Среднеквадратичный функционал сильнее штрафует за большие отклонения по сравнению со среднеабсолютным, и поэтому более чувствителен к выбросам. При использовании любого из этих двух функционалов может быть полезно проанализировать, какие объекты вносят наибольший вклад в общую ошибку — не исключено, что на этих объектах была допущена ошибка при вычислении признаков или целевой величины.&lt;br /&gt;
&lt;br /&gt;
Среднеквадратичная ошибка подходит для сравнения двух моделей или для контроля качества во время обучения, но не позволяет сделать выводов о том, на сколько хорошо данная модель решает задачу. Например, MSE = 10 является очень плохим показателем, если целевая переменная принимает значения от 0 до 1, и очень хорошим, если целевая переменная лежит в интервале (10000, 100000). В таких ситуациях вместо среднеквадратичной ошибки полезно использовать коэффициент детерминации {{---}} &amp;lt;math&amp;gt;R^2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Коэффициент детерминации === &lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
R^2 = 1 - \dfrac{\sum \limits_{i=1}^{n}(a(x_i) - y_i)^2}{\sum \limits_{i=1}^{n}(y_i - \overline{y})^2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Коэффициент детерминации измеряет долю дисперсии, объясненную моделью, в общей дисперсии целевой переменной. Фактически, данная мера качества — это нормированная среднеквадратичная ошибка. Если она близка к единице, то модель хорошо объясняет данные, если же она близка к нулю, то прогнозы сопоставимы по качеству с константным предсказанием.&lt;br /&gt;
&lt;br /&gt;
=== Средняя абсолютная процентная ошибка (англ. Mean Absolute Percentage Error, MAPE) ===&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
MAPE = 100\% \times \dfrac{1}{n}\sum \limits_{i=1}^{n} \dfrac{|y_i - a(x_i)|}{|y_i|}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это коэффициент, не имеющий размерности, с очень простой интерпретацией. Его можно измерять в долях или процентах. Если у вас получилось, например, что MAPE=11.4%, то это говорит о том, что ошибка составила 11,4% от фактических значений.&lt;br /&gt;
Основная проблема данной ошибки — нестабильность.&lt;br /&gt;
&lt;br /&gt;
=== Корень из средней квадратичной ошибки (англ. Root Mean Squared Error, RMSE) ===&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
RMSE = \sqrt{\dfrac{1}{n}\sum \limits_{i=1}^{n}(y_i - \overline{y_i})^2}&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Примерно такая же проблема, как и в MAPE: так как каждое отклонение возводится в квадрат, любое небольшое отклонение может значительно повлиять на показатель ошибки. Стоит отметить, что существует также ошибка MSE, из которой RMSE как раз и получается путем извлечения корня.&lt;br /&gt;
&lt;br /&gt;
=== Cимметричная MAPE (англ. Symmetric MAPE, SMAPE) ===&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
SMAPE = \dfrac{1}{n}\sum \limits_{i=1}^{n} \dfrac{2 \times |y_i - a(x_i)|}{|y_i| + |a(x_i)|}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Средняя абсолютная масштабированная ошибка (англ. Mean absolute scaled error, MASE) ===&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt; MASE = \dfrac{\sum \limits_{i=1}^n |Y_i - e_i|}{\frac{n}{n-1}\sum \limits_{i=2}^n | Y_i-Y_{i-1}|} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''MASE'' является очень хорошим вариантом для расчета точности, так как сама ошибка не зависит от масштабов данных и является симметричной: то есть положительные и отрицательные отклонения от факта рассматриваются в равной степени.&lt;br /&gt;
Обратите внимание, что в ''MASE'' мы имеем дело с двумя суммами: та, что в числителе, соответствует тестовой выборке, та, что в знаменателе - обучающей. Вторая фактически представляет собой среднюю абсолютную ошибку прогноза. Она же соответствует среднему абсолютному отклонению ряда в первых разностях. Эта величина, по сути, показывает, насколько обучающая выборка предсказуема. Она может быть равна нулю только в том случае, когда все значения в обучающей выборке равны друг другу, что соответствует отсутствию каких-либо изменений в ряде данных, ситуации на практике почти невозможной. Кроме того, если ряд имеет тенденцию к росту либо снижению, его первые разности будут колебаться около некоторого фиксированного уровня. В результате этого по разным рядам с разной структурой, знаменатели будут более-менее сопоставимыми. Всё это, конечно же, является очевидными плюсами ''MASE'', так как позволяет складывать разные значения по разным рядам и получать несмещённые оценки.&lt;br /&gt;
&lt;br /&gt;
Недостаток ''MASE'' в том, что её тяжело интерпретировать. Например, ''MASE''=1.21 ни о чём, по сути, не говорит. Это просто означает, что ошибка прогноза оказалась в 1.21 раза выше среднего абсолютного отклонения ряда в первых разностях, и ничего более.&lt;br /&gt;
&lt;br /&gt;
== Кросс-валидация ==&lt;br /&gt;
&lt;br /&gt;
Хороший способ оценки модели предусматривает применение [[Кросс-валидация|кросс-валидации]] (cкользящего контроля или перекрестной проверки).&lt;br /&gt;
&lt;br /&gt;
В этом случае фиксируется некоторое множество разбиений исходной выборки на две подвыборки: обучающую и контрольную. Для каждого разбиения выполняется настройка алгоритма по обучающей подвыборке, затем оценивается его средняя ошибка на объектах контрольной подвыборки. Оценкой скользящего контроля называется средняя по всем разбиениям величина ошибки на контрольных подвыборках.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [https://www.coursera.org/lecture/vvedenie-mashinnoe-obuchenie/otsienivaniie-kachiestva-xCdqN] Лекция &amp;quot;Оценивание качества&amp;quot; на www.coursera.org&lt;br /&gt;
# [https://stepik.org/lesson/209691/step/8?unit=183195] Лекция на www.stepik.org о кросвалидации&lt;br /&gt;
# [https://stepik.org/lesson/209692/step/5?unit=183196] Лекция на www.stepik.org о метриках качества, Precison и Recall&lt;br /&gt;
# [https://stepik.org/lesson/209692/step/7?unit=183196] Лекция на www.stepik.org о метриках качества, F-мера&lt;br /&gt;
# [https://stepik.org/lesson/209692/step/8?unit=183196] Лекция на www.stepik.org о метриках качества, примеры&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Оценка качества в задаче кластеризации]]&lt;br /&gt;
* [[Кросс-валидация]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
# [https://compscicenter.ru/media/courses/2018-autumn/spb-recommendation/materials/lecture02-linregr_1.pdf] Соколов Е.А. Лекция линейная регрессия&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/images/5/59/PZAD2016_04_errors.pdf] - Дьяконов А. Функции ошибки / функционалы качества&lt;br /&gt;
# [https://forecasting.svetunkov.ru/etextbook/forecasting_toolbox/models_quality/] - Оценка качества прогнозных моделей&lt;br /&gt;
# [https://shtem.ru/%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-%D0%BF%D1%80%D0%BE%D0%B3%D0%BD%D0%BE%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB%D0%B0/] - HeinzBr Ошибка прогнозирования: виды, формулы, примеры&lt;br /&gt;
# [https://habr.com/ru/company/ods/blog/328372/] - egor_labintcev Метрики в задачах машинного обучения&lt;br /&gt;
# [https://habr.com/ru/post/19657/] - grossu Методы оценки качества прогноза&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F] -  К.В.Воронцов, Классификация&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/index.php?title=CV] - К.В.Воронцов, Скользящий контроль&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
[[Категория:Классификация]]&lt;br /&gt;
[[Категория:Регрессия]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%AF%D0%B4%D1%80%D0%BE&amp;diff=73205</id>
		<title>Ядро</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%AF%D0%B4%D1%80%D0%BE&amp;diff=73205"/>
				<updated>2020-03-23T12:26:01Z</updated>
		
		<summary type="html">&lt;p&gt;Evaleria: /* Описание */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:kernel2_3.png|500px|thumb|right|Пример использования ядерного трюка]]&lt;br /&gt;
'''Ядерный трюк''' (англ. ''kernel function'') метод в машинном обучении, позволяющий перевести элементы для случая линейной неразделимости в новое линейно разделимое пространство. Такое пространство называют '''спрямляющим'''. Поскольку для любой непротиворечивой выборки соответствующее пространство большей размерности существует, главной проблемой становится его найти.&lt;br /&gt;
&lt;br /&gt;
'''Пример''': На первой картинке справа можно увидеть, что 2 класса не разделимы линейно, но после преобразования появляется разделяющая плоскость.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Функция $K(x,x'):X×X\rightarrow \mathbb{R}$ называется '''ядром''' (англ. kernel), если она может быть представлена в виде $K(x,x')=\langle \varphi(x),\varphi(x')\rangle_H$ при некотором отображении $\varphi(x):X\rightarrow H$, где $H$ {{---}} пространство со скалярным произведением.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Поскольку для задачи линейного разделения объектов не требуется их признаковое описание, а достаточно скаляров, то можно заменить скалярное произведение $\langle x,x'\rangle$ на ядро $K(x,x')$. Более того, можно вообще не строить спрямляющее пространство $H$ в явном виде, и вместо подбора отображения $\varphi$ заниматься непосредственно подбором ядра.&lt;br /&gt;
&lt;br /&gt;
Можно пойти ещё дальше, и вовсе отказаться от признаковых описаний объектов. Во многих практических задачах объекты изначально задаются информацией об их попарном взаимоотношении, например, отношении сходства. Если эта информация допускает представление в виде двуместной функции $K(x,x')$, удовлетворяющей аксиомам скалярного произведения, то задача может решаться методом[[Метод опорных векторов (SVM) | опорных векторов]].&lt;br /&gt;
&lt;br /&gt;
== Преимущества и недостатки ==&lt;br /&gt;
&lt;br /&gt;
'''Преимущества'''&lt;br /&gt;
&lt;br /&gt;
* Обобщение линейных методов на нелинейный случай:&lt;br /&gt;
&lt;br /&gt;
а) с сохранением вычислительной эффективности линейных методов.&lt;br /&gt;
&lt;br /&gt;
б) с сохранением преимуществ линейных методов (локальный оптимум является глобальным, нет локальных оптимумов=&amp;gt;меньше переобучение).&lt;br /&gt;
&lt;br /&gt;
* Объекты для которых не существует векторных представлений фиксированной длины.&lt;br /&gt;
&lt;br /&gt;
* Ускоренное вычисление скалярных произведений для высоких значений размерностей.&lt;br /&gt;
&lt;br /&gt;
'''Недостатки'''&lt;br /&gt;
&lt;br /&gt;
* Вычислительно сложно проверять принадлежность функции ядру.&lt;br /&gt;
&lt;br /&gt;
* Поиск подходящего ядра экспоненциально сложен из-за их большого многообразия.&lt;br /&gt;
&lt;br /&gt;
== Характерные случаи применения ==&lt;br /&gt;
* Признаковое пространство высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Например все полиномы до степени $M$, для случая Гаусовского ядра {{---}} признаковое пространство бесконечной размерности.&lt;br /&gt;
&lt;br /&gt;
* Случай, когда сложно представить объекты векторами фиксированной длины.&lt;br /&gt;
&lt;br /&gt;
Такие, как строки, множества, картинки, тексты, графы, 3D-структуры и т.д.&lt;br /&gt;
&lt;br /&gt;
* Существование естественного определения скалярного произведения.&lt;br /&gt;
&lt;br /&gt;
Такие, как строки (число совместно встречающихся подстрок) или множества (напр. для множеств $S_1$ и $S_2$ ядром будет являться $K(S_1, S_2) = 2^{|S_1\cap S_2|}$).&lt;br /&gt;
&lt;br /&gt;
* Скалярное произведение может быть подсчитано эффективно.&lt;br /&gt;
&lt;br /&gt;
== Выбор функции ядра ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=merser&lt;br /&gt;
|author=Мерсера&lt;br /&gt;
|statement = Функция $K(x,y)$ является ядром тогда и только тогда, когда она симметрична: $K(x,y)=K(y,x)$ и неотрицательно определена, то есть $\forall g: X \rightarrow \mathbb{R}, \int_X \int_X K(x, x')g(x)g(x')dxdx' \geqslant 0$ &lt;br /&gt;
|proof = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Таким образом мы видим, что класс ядер достаточно широк.&lt;br /&gt;
&lt;br /&gt;
Проверка неотрицательной определённости функции в реальных задачах может быть сложной. Чаще всего ограничиваются перебором конечного числа функций, про которые известно, что они являются ядрами. Среди них выбирается лучшая (обычно по критерию скользящего контроля). Такое решение не будет оптимальным, и на сегодняшний день проблема выбора ядра, оптимального для данной конкретной задачи, остаётся открытой, лучшие из известных на данный момент решений основываются на генетических алгоритмах&amp;lt;ref&amp;gt;[https://www.researchgate.net/publication/221080223_An_Evolutionary_Approach_to_Automatic_Kernel_Construction - T.Howley, M.G.Madden — An Evolutionary Approach to Automatic Kernel Construction]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Конструктивные способы построения ядер ==&lt;br /&gt;
1. Произвольное скалярное произведение $ K(x,x') =\langle x,x'\rangle $ является ядром.&lt;br /&gt;
&lt;br /&gt;
2. Константа $K(x,x') = 1$ является ядром.&lt;br /&gt;
&lt;br /&gt;
3. Произведение ядер $K(x,x')=K_1(x,x')K_2(x,x')$является ядром.&lt;br /&gt;
&lt;br /&gt;
4. Для любой функции $\psi :X\rightarrow R$ произведение $K(x,x′) =\psi(x)\psi(x')${{---}} ядро.&lt;br /&gt;
&lt;br /&gt;
5. Линейная комбинация ядер с неотрицательными коэффициентами $K(x,x')=\alpha_1K_1(x,x') +\alpha_2K_2(x,x')$является ядром.&lt;br /&gt;
&lt;br /&gt;
6. Композиция произвольной функции $\varphi:X \rightarrow X$ и произвольного ядра $K_0$ является ядром: $K(x,x')=K_0(\varphi(x),\varphi(x'))$.&lt;br /&gt;
&lt;br /&gt;
7. Если $s:X×X\rightarrow R$ произвольная симметричная интегрируемая функция, то $K(x,x′) =\int_Xs(x,z)s(x',z)dz$ является ядром.&lt;br /&gt;
&lt;br /&gt;
8. Функция вида $K(x,x') = k(x−x')$ является ядром тогда и только тогда, когда Фурье-образ $F[k](\omega) = (2\pi)^{\frac{n}{2}}\int_Xe^{−i\langle\omega,x\rangle }k(x)dx$ неотрицателен.&lt;br /&gt;
&lt;br /&gt;
9. Предел локально-равномерно сходящейся последовательности ядер {{---}} ядро.&lt;br /&gt;
&lt;br /&gt;
10. Композиция произвольного ядра $K_0$ и произвольной функции $f:R\rightarrow R$, представимой в виде сходящегося степенного ряда с неотрицательными коэффициентами $K(x,x') = f(K_0(x,x'))$, является ядром. В частности, функции $f(z) =e^z$ и $f(z) =\frac{1}{1−z}$ где $z$ {{---}} функция ядра {{---}} являются ядрами.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Некоторые часто используемые ядра ==&lt;br /&gt;
&lt;br /&gt;
0. '''Линейное''' (англ. linear) $K(x, x')= \langle x, x'\rangle$&lt;br /&gt;
&lt;br /&gt;
Используется в алгоритме [[Метод опорных векторов (SVM) | SVM ]] по умолчанию.&lt;br /&gt;
&lt;br /&gt;
1. '''Полиномиальное''' (англ. polynomial) $K(x, x') = (\langle x, x' \rangle + R)^d$&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Polynomial_kernel - Polynomial kernel&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется когда необходимо получить полином $p(y)$, где в качестве $y$ выступает скалярное произведение $\langle x, x' \rangle$. Поскольку в конструктивных возможностях у нас есть умножение ядер, умножение на коэффициент и сложение, то любой многочлен так же является ядром.&lt;br /&gt;
&lt;br /&gt;
2. '''Гаусово''' (англ. gaussian) ядро RBF (Radial basis function)&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Radial_basis_function_kernel - RBF]&amp;lt;/ref&amp;gt; $K(x, x') = exp(-\frac{\parallel x - x'\parallel^2}{2\sigma^2})$&lt;br /&gt;
&lt;br /&gt;
Такое ядро соответствует бесконечномерному пространству. Поскольку оно является пределом последовательности полиномиальных ядер при стремлении степени ядра к бесконечности.&lt;br /&gt;
&lt;br /&gt;
3. '''Сигмоидальное''' (англ. sigmoid) ядро $tangh (\gamma \langle x, x'\rangle + r)$ &lt;br /&gt;
&lt;br /&gt;
В отличие от предыдущих 3-х не является ядром Мерсера (не выполняет условие теоремы), но при этом на практике работает хорошо.&lt;br /&gt;
&lt;br /&gt;
4. '''Строковое'''&lt;br /&gt;
&lt;br /&gt;
Строковые ядра &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D0%BE%D0%BA%D0%BE%D0%B2%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE#%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5 - Строковое ядро]&amp;lt;/ref&amp;gt; это различные ядерные функции для вычисления расстояний между двумя строками.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Метод опорных векторов (SVM)]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Логистическая регрессия]]&lt;br /&gt;
* [[Регуляризация]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/images/6/6d/Voron-ML-1.pdf Ядра и спрямляющие пространства p.73-75 — К. В. Воронцов Математические методы обучения по прецедентам]&lt;br /&gt;
#[https://github.com/esokolov/ml-course-msu/blob/master/ML16/lecture-notes/Sem12_linear.pdf github.com/esokolov/ml-course-msu — Евгений Соколов Ядра и их применение в машинном обучении]&lt;br /&gt;
#[https://ru.wikipedia.org/wiki/%D0%AF%D0%B4%D0%B5%D1%80%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4#%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0:_%D1%8F%D0%B4%D0%B5%D1%80%D0%BD%D1%8B%D0%B9_%D1%82%D1%80%D1%8E%D0%BA wikipedia.org — Ядерный метод]&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/images/7/78/Kitov-ML-09-Kernel_methods.pdf www.machinelearning.ru — Виктор Китов Ядерные методы]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Классификация]]&lt;br /&gt;
[[Категория: Регрессия]]&lt;/div&gt;</summary>
		<author><name>Evaleria</name></author>	</entry>

	</feed>