- BrainTools - https://www.braintools.ru -
TL;DR [1]
Введение [2]
Заключение [9]
📌 Telegram @TheWeeklyBrief [10] — краткие обзоры и подкасты 📰🎧
📌 GitHub Pages [11] — углублённые статьи, код и формулы 📝💻
1. Введение и Проблема Фрагментации в Обучении [12] Представлений
Развитие машинного обучения в последние годы привело к появлению множества разнообразных методов обучения представлений. Каждый из этих методов часто имеет свои уникальные архитектуры, функции потерь и стратегии обучения. Эта фрагментация создает значительные трудности для исследователей:
Сложность понимания взаимосвязей: Трудно увидеть, как связаны между собой, казалось бы, разные подходы (например, методы снижения размерности и контрастное обучение).
Выбор оптимального метода: Определить, какой из множества существующих методов лучше всего подходит для конкретной задачи, становится нетривиальной задачей.
Разрозненные формулировки: Методы используют разные математические языки (например, “максимизация взаимной информации vs. минимизация MSE”), что затрудняет их сравнение и анализ.
Как отмечается в источнике:
“Эта фрагментация затрудняет для исследователей понимание взаимосвязей между различными методами и определение того, какой подход лучше всего подходит для данной задачи.”
2. Концепция Обучения Представлений (Representation Learning)
Обучение представлений — это ключевое направление, которое направлено на автоматическое извлечение полезных признаков из “сырых” данных. Вместо ручного проектирования признаков, алгоритмы самостоятельно учатся кодировать информацию в компактные векторные формы (эмбеддинги), сохраняющие семантические закономерности.
Ключевые аспекты:
Автоматическое извлечение: Преобразование данных (изображений, текста, звука) в векторные эмбеддинги.
Типы методов: Включают supervised (с учителем, используют метки), self-supervised (без учителя, учатся на структуре данных, например, контрастивные методы) и методы на основе информационной теории (оптимизация взаимной информации).
Применение: Уменьшение размерности, transfer learning, интерпретируемость моделей.
Проблема фрагментации выражается в существовании “зоопарка” методов, таких как Triplet Loss, NT-Xent (в SimCLR), VAE, которые используют разные математические основы для достижения схожих целей.
3. Фреймворк I-CON: Унификация через Теорию Информации
Статья “I-CON: Унифицированная платформа для обучения представлений” предлагает решение проблемы фрагментации, вводя всеобъемлющую информационно-теоретическую платформу, которая “объединяет более 23 различных методов обучения представлений под единой математической формулировкой.”
Основная идея I-CON заключается в рассмотрении обучения представлений как задачи минимизации средней дивергенции Кульбака-Лейблера (KL) между двумя условными распределениями вероятностей:
Эталонное распределение : Отражает желаемые взаимосвязи между точками данных (например, близость, принадлежность к классу, связь в графе).
Обучаемое распределение : Моделирует эти взаимосвязи в пространстве представлений, которое модель научилась строить.
Целевая функция формулируется следующим образом:
Эта формулировка создает “универсальный язык”, позволяющий описать разные виды “соседства” (близость по пикселям, принадлежность к классу и т.д.) и четкую цель для обучения: “сделать так, чтобы ее собственное видение соседства (qq) стало как можно больше похоже на идеальное видение (pp)”.
Рисунок 1 иллюстрирует этот процесс: данные проходят через функцию отображения, создавая представления, которые затем сравниваются с контрольными распределениями с помощью KL-дивергенции.
4. Унификация Существующих Методов в Рамках I-CON
Авторы демонстрируют, что I-CON может воспроизвести широкий спектр существующих алгоритмов обучения представлений, “выбирая определенные параметризации для контрольных и обученных распределений”.
Рисунок 3 визуализирует эту унификацию, классифицируя методы по категориям (уменьшение размерности, кластерное обучение, самообучение, обучение с учителем).
Примеры унификации:
t-SNE: Получается, когда и
являются распределениями Стьюдента.
SimCLR: Получается, когда равномерно по парам аугментации, а
— гауссово на единичной сфере.
K-means: Получается, когда — гауссово, а
— равномерно по членам кластера.
PCA: Получается, когда — тождественное распределение, а
— гауссово с
Эта способность объединять методы “выявляет неожиданные связи между, казалось бы, разрозненными методами.”
Эта способность объединять методы “выявляет неожиданные связи между, казалось бы, разрозненными методами.”
5. Роль и Выбор Распределений Представлений
Выбор конкретных вероятностных распределений для и
критически важен и определяет свойства получаемых эмбеддингов. В статье исследуются несколько ключевых распределений:
Гауссовское распределение: Используется в SNE, создает вложения на основе евклидова расстояния.
Распределение Стьюдента: Используется в t-SNE, сохраняет как локальную, так и глобальную структуру благодаря более тяжелым хвостам.
Равномерное распределение по k ближайшим соседям: Учитывает только локальную структуру, фокусируясь на k ближайших точках.
Рисунок 4 визуализирует эти распределения, демонстрируя их разные характеристики. Использование распределений позволяет точно измерить расхождение между идеальным и реальным соседством с помощью KL-дивергенции и обучать модель для минимизации этого расхождения.
6. Стратегия Устранения Смещения (Bias Correction)
Одним из ключевых нововведений I-CON является принципиальный подход к устранению внутренних смещений в методах обучения представлений. Эта стратегия заключается в модификации целевого (эталонного) распределения . Вместо того чтобы модель
соответствовала исходному
, она стремится соответствовать его измененной версии
.
Предлагается модификация контролирующего распределения с помощью равномерного компонента, управляемого параметром :
Эта стратегия имеет два важных следствия:
1. “Она способствует более разнообразному вниманию [13] к различным примерам”.
2. “Она улучшает калибровку оценок уверенности в изученных представлениях”.
Рисунок 5 показывает, как увеличение αα улучшает кластеризацию, делая ее “более четкой и лучше разделенной”. Рисунок 6 демонстрирует, что устранение смещения улучшает как точность, так и калибровку на реальных данных.
7. Экспериментальные Результаты
Авторы оценивают эффективность алгоритмов, полученных с помощью I-CON, на стандартных наборах данных классификации изображений (ImageNet-1K, CIFAR-100, STL-10). Используя предобученный Vision Transformer DiNO, они показывают значительные улучшения:
На ImageNet-1K их подход кластеризации InfoNCE с устранением смещения достигает “8% улучшения по сравнению с предыдущими передовыми методами для неконтролируемой классификации”.
Визуализации на CIFAR и STL-10 (Рисунки 7 и 8) демонстрируют, как параметры устранения смещения (например, τ+τ+) влияют на структуру вложений, улучшая связность кластеров.
Тестирование на моделях разного размера (Рисунок 9) показывает, что устранение смещения последовательно улучшает точность валидации.
8. Приложения и Последствия
I-CON предлагает как теоретические, так и практические преимущества:
Перенос идей: Фреймворк облегчает обмен успешными техниками между различными областями обучения представлений.
Разработка алгоритмов: Позволяет систематически создавать новые методы, варьируя и
.
Повышенная производительность: Стратегия устранения смещения приводит к более надежным представлениям и улучшению производительности в downstream задачах.
Простота реализации: Унифицированная формулировка позволяет “более лаконично и последовательно реализовывать различные методы.”
9. Заключение
I-CON является “значительным прогрессом в нашем понимании обучения представлений”. Предоставляя “единую математическую структуру”, которая объединяет разнообразные методы (кластеризация, снижение размерности, контрастное обучение, контролируемая классификация), фреймворк проясняет основные принципы, лежащие в их основе.
Фреймворк не только объединяет существующие методы, но и стимулирует разработку новых, более эффективных алгоритмов, что подтверждается улучшенными результатами в экспериментах, особенно за счет подхода к устранению смещения.
Как заключают авторы:
“Поскольку обучение представлений продолжает развиваться, I-CON предоставляет исследователям мощный инструмент для понимания существующих методов, разработки новых алгоритмов и повышения производительности в широком спектре задач машинного обучения.”
Способность фреймворка объединять традиционно разделенные области предполагает, что “дальнейшее перекрестное опыление идей может привести к еще более эффективным методам обучения представлений в будущем.”
В последние годы в исследованиях машинного обучения наблюдается распространение методов обучения представлений, каждый из которых имеет уникальную архитектуру, функции потерь и стратегии обучения. Эта фрагментация затрудняет для исследователей понимание взаимосвязей между различными методами и определение того, какой подход лучше всего подходит для данной задачи.
В статье “I-CON: Унифицированная платформа для обучения представлений” предлагается всеобъемлющая информационно-теоретическая платформа, которая вносит ясность в этот сложный ландшафт, объединяя более 23 различных методов обучения представлений под единой математической формулировкой.
Фреймворк I-CON, показывающий взаимосвязь между входными данными, контрольными сигналами, изученными представлениями и распределениями вероятностей.
Обучение представлений (representation learning) — это направление в машинном обучении, целью которого является автоматическое выявление и выделение полезных признаков (features) из исходных данных. В отличие от традиционных методов, где признаки проектируются вручную (feature engineering), обучение представлений позволяет алгоритмам самостоятельно находить оптимальные способы кодирования информации.
Автоматическое извлечение признаков
Методы обучения представлений преобразуют “сырые” данные (изображения, текст, звук) в компактные векторные формы (эмбеддинги), сохраняющие семантически значимые закономерности.
Пример: свёрточные нейросети (CNN) выделяют иерархию признаков в изображениях — от границ объектов до их семантических частей.
Типы методов
С учителем (supervised): используют размеченные данные (например, классификационные метки) для обучения.Пример: Fine-tuning предобученных моделей (ResNet, BERT).
Без учителя (self-supervised): учатся на внутренней структуре данных без явных меток.Пример: Контрастивные методы (SimCLR), маскирование в NLP (BERT).
На основе информационной теории: оптимизируют взаимную информацию между представлениями (например, VAE, InfoGAN).
Применение
Уменьшение размерности (t-SNE, PCA).
Перенос обучения (transfer learning).
Интерпретируемость моделей (визуализация эмбеддингов).
Разнообразие подходов — от автоэнкодеров до contrastive learning — создаёт “зоопарк” методов, которые часто:
Используют разные математические формулировки (например, максимизация взаимной информации vs. минимизация MSE).
Требуют специфичных архитектур (например, наличие memory bank в MoCo).
Затрудняют сравнение эффективности на новых задачах.
Пример: Для одной и той же задачи (классификация изображений) можно применить:
Triplet Loss (на основе расстояний между эмбеддингами).
Нормализованную температурно-масштабированную кросс-энтропию (NT-Xent, как в SimCLR).
Вариационный автоэнкодер (VAE) с регуляризацией KL-дивергенцией.
Рисунок 1: Фреймворк I-CON иллюстрирует, как обучение представлений может быть сформулировано как согласование условных распределений вероятностей. Фреймворк показывает, как данные проходят через функцию отображения для создания представлений, которые затем сравниваются с контрольными распределениями с использованием дивергенции Куллбака-Лейблера.
Метод I-CON (Информационно-теоретическая конвергенция) рассматривает обучение представлений как задачу минимизации средней дивергенции Кульбака-Лейблера (KL) между двумя условными распределениями вероятностей:
1. Эталонное распределение , которое отражает взаимосвязи между точками данных.
2. Обучаемое распределение , которое моделирует эти взаимосвязи в пространстве представлений.
Целевая функция метода записывается следующим образом:
Эта компактная формулировка позволяет анализировать и интерпретировать различные методы обучения. Эталонное распределение задаёт желаемые взаимосвязи между точками данных (например, на основе близости в пространстве, принадлежности к одному классу или пар аугментаций), а обучаемое распределение
показывает, как модель воспроизводит эти взаимосвязи.
Авторы демонстрируют, что, выбирая определенные параметризации для контрольных и обученных распределений, I-CON может воспроизвести широкий спектр существующих алгоритмов обучения представлений:
Рисунок 2: Различные типы контрольных сигналов могут использоваться для определения взаимосвязей между точками данных, включая пространственную близость, дискретные взаимосвязи, принадлежность к кластеру и связность графа.
Например:
t-SNE: когда оба распределения являются распределениями Стьюдент;
SimCLR: когда является равномерным по парам аугментации, а
является гауссовым на единичной сфере;
K-means: когда является гауссовым, а
является равномерным по членам кластера;
PCA: когда является тождественным распределением, а
является гауссовым с
.
Эта унификация выявляет неожиданные связи между, казалось бы, разрозненными методами. Например, авторы показывают, что подходы контрастного обучения (например, InfoNCE) и методы снижения размерности (например, t-SNE) фундаментально связаны через их основные целевые функции.
Рисунок 3: I-CON объединяет различные алгоритмы обучения представлений, показывая, как они возникают из различных вариантов контролирующих и изученных распределений. Цвета указывают на различные категории: уменьшение размерности (синий), кластерное обучение (оранжевый), одномодальное самообучение (красный), многомодальное самообучение (фиолетовый) и обучение с учителем (зеленый).
Выбор распределения представлений значительно влияет на результирующие вложения. В статье исследуются несколько ключевых распределений:
1. Гауссовское распределение: создает вложения на основе евклидова расстояния, как используется в SNE.
2. Распределение Стьюдента: сохраняет как локальную, так и глобальную структуру с более тяжелыми хвостами, как в t-SNE.
3. Равномерное распределение по k ближайшим соседям: учитывает только k ближайших соседей каждой точки.
Рисунок 4: Визуализация различных распределений вероятностей, используемых в I-CON: гауссовское (слева), Стьюдента (в центре) и равномерное по k ближайшим соседям (справа). Каждое распределение создает различные свойства вложения.
Представьте, что основная задача обучения представлений — это создать хорошую “карту” ваших данных. На этой карте похожие объекты (например, картинки с котиками) должны оказаться рядом, а непохожие (котики и автомобили) — далеко друг от друга.
Фреймворк I-CON предлагает посмотреть на эту задачу так:
Определим “идеальное соседство”: сначала решим, как должны выглядеть окрестности каждого объекта на нашей идеальной карте. Например, мы можем сказать: “Для этой картинки с котиком (i) другие картинки с котиками (j) должны считаться ‘близкими соседями’ с высокой вероятностью, а картинки с машинами — с низкой”. Это наше целевое представление о соседстве.
Посмотрим на “реальное соседство” в модели: затем посмотрим, как нейросеть на самом деле расположила объекты на своей текущей “карте” (в пространстве эмбеддингов). Насколько близки там котики к котикам? Насколько далеки от машин? Это фактическое соседство, созданное моделью.
Как сравнить “идеальное” и “реальное” соседство? Вот тут-то и приходят на помощь вероятностные распределения:
— это описание “идеального” соседства: для каждого объекта
i это распределение говорит, с какой вероятностью любой другой объект j должен считаться его “важным соседом”. Это наша цель, основанная на исходных данных или знаниях (например, метках классов, аугментациях).
— это описание “реального” соседства в модели: для каждого объекта
i это распределение показывает, с какой вероятностью модель считает объект j его “важным соседом”, основываясь на близости их текущих представлений (эмбеддингов). Это то, что модель выучила.
Зачем это нужно?
Универсальный язык: вероятности позволяют описать самые разные виды “соседства” (близость по пикселям, принадлежность к классу, связь в графе) единым математическим языком.
Четкая цель для обучения: задача модели теперь проста — сделать так, чтобы ее собственное видение соседства (q) стало как можно больше похоже на идеальное видение (p).
Измеримое расхождение: мы можем использовать KL-дивергенцию , чтобы точно измерить, насколько
отличается от
. Минимизируя эту дивергенцию, мы обучаем модель создавать представления, которые отражают желаемую структуру соседства.
Одним из ключевых нововведений в I-CON является принципиальный подход к устранению смещения, который решает проблему внутренних смещений в методах обучения представлений. Стратегия устранения смещения в I-CON заключается в модификации целевого (эталонного) распределения . Вместо того чтобы модель
пыталась идеально соответствовать исходному
, она будет стремиться соответствовать его слегка измененной версии,
. Авторы предлагают модифицировать контролирующее распределение с помощью равномерного компонента, контролируемого параметром α:
Эта стратегия устранения смещения имеет два важных следствия:
Она способствует более разнообразному вниманию к различным примерам;
Она улучшает калибровку оценок уверенности в изученных представлениях.
Влияние этого устранения смещения можно визуализировать в пространствах вложения:
Рисунок 5: Визуализация изученных вложений с различными коэффициентами устранения смещения (α). По мере увеличения α от 0 до 0.6 кластеры становятся более четкими и лучше разделенными.
В статье демонстрируется, что этот подход к устранению смещения приводит к значительным улучшениям в различных наборах данных:
Рисунок 6: Слева: Точность проверки с различными размерами пакетов и коэффициентами устранения смещения. Справа: Кривые калибровки, показывающие, как устранение смещения улучшает взаимосвязь между вероятностями присваивания и фактической точностью.
Авторы оценивают алгоритмы, полученные с помощью I-CON, на стандартных задачах классификации изображений, включая ImageNet-1K, CIFAR-100 и STL-10. Используя предварительно обученный Vision Transformer DiNO в качестве экстрактора признаков, они демонстрируют, что их подход кластеризации InfoNCE с устранением смещения достигает 8% улучшения по сравнению с предыдущими передовыми методами для неконтролируемой классификации на ImageNet-1K.
Визуализация вложений на наборе данных CIFAR показывает, как различные параметры устранения смещения влияют на представление:
Рисунок 7: Визуализация вложений набора данных CIFAR с различной степенью устранения смещения. Параметр τ⁺ контролирует информативность сигналов контроля.
Аналогично, на STL-10 фреймворк показывает улучшенную кластеризацию с устранением смещения:
Рисунок 8: Встраивания набора данных STL-10 с различными параметрами устранения смещения. На правом изображении (τ⁺ = 0.1) показаны более связные кластеры по сравнению с левым (τ⁺ = 0).
В статье также исследуется влияние различных коэффициентов устранения смещения на модели разных размеров:
Рисунок 9: Точность валидации с различными параметрами устранения смещения для трех размеров модели DiNO (маленький, базовый, большой). Устранение смещения обеих дистрибуций последовательно превосходит устранение смещения только целевой дистрибуции.
Помимо теоретического вклада, I-CON предлагает практические преимущества для обучения представлений:
Перенос идей: фреймворк облегчает перекрестное опыление успешных техник между различными областями обучения представлений.
Разработка алгоритмов: исследователи могут систематически изучать новые методы обучения представлений, изменяя контролирующие и изученные дистрибуции в рамках фреймворка I-CON.
Повышенная производительность: стратегия устранения смещения, полученная из I-CON, приводит к более надежным и устойчивым представлениям, улучшая производительность в последующих задачах.
Простота реализации: Унифицированная формулировка позволяет более лаконично и последовательно реализовывать различные методы:
# Пример реализации SNE во фреймворке I-CON
SNE_model = ICon(
target_dist = Gaussian(sigma = 2),
learned_dist = Gaussian(sigma = 1),
mapper = Embedding(num_embeddings=N, dim=m)
)
# Пример реализации SimCLR во фреймворке I-CON
SimCLR_model = ICon(
target_dist = Augmentation(num_views = 2),
learned_dist = Gaussian(sigma=0.7, metric='cos'),
mapper = ResNet50(embedding_dim=d)
)
I-CON представляет собой значительный прогресс в нашем понимании обучения представлений. Предоставляя единую математическую структуру, которая охватывает различные методы от кластеризации и снижения размерности до контрастного обучения и контролируемой классификации, она помогает прояснить основные принципы, связывающие эти подходы.
Фреймворк не только объединяет существующие методы, но и позволяет разрабатывать новые алгоритмы с улучшенной производительностью. Подход к устранению смещения, полученный из принципов I-CON, демонстрирует существенные успехи в задачах неконтролируемой классификации, подчеркивая практическую ценность этого теоретического объединения.
Поскольку обучение представлений продолжает развиваться, I-CON предоставляет исследователям мощный инструмент для понимания существующих методов, разработки новых алгоритмов и повышения производительности в широком спектре задач машинного обучения. Способность фреймворка объединять традиционно разделенные области предполагает, что дальнейшее перекрестное опыление идей может привести к еще более эффективным методам обучения представлений в будущем.
Автор: Verbasik
Источник [14]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/15062
URLs in this post:
[1] TL;DR: https://file+.vscode-resource.vscode-cdn.net/Users/cyberrunner/Documents/Code/me/Paper/Weekly-arXiv-ML-AI-Research-Review/2025/week-19/summary.md#tldr
[2] Введение: https://file+.vscode-resource.vscode-cdn.net/Users/cyberrunner/Documents/Code/me/Paper/Weekly-arXiv-ML-AI-Research-Review/2025/week-19/summary.md#%D0%B2%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5
[3] Теоретическая основа: https://file+.vscode-resource.vscode-cdn.net/Users/cyberrunner/Documents/Code/me/Paper/Weekly-arXiv-ML-AI-Research-Review/2025/week-19/summary.md#%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0
[4] Унификация разрозненных методов: https://file+.vscode-resource.vscode-cdn.net/Users/cyberrunner/Documents/Code/me/Paper/Weekly-arXiv-ML-AI-Research-Review/2025/week-19/summary.md#%D1%83%D0%BD%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F-%D1%80%D0%B0%D0%B7%D1%80%D0%BE%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D1%85-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2
[5] Распределения представлений: https://file+.vscode-resource.vscode-cdn.net/Users/cyberrunner/Documents/Code/me/Paper/Weekly-arXiv-ML-AI-Research-Review/2025/week-19/summary.md#%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%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%B9
[6] Стратегия устранения смещения: https://file+.vscode-resource.vscode-cdn.net/Users/cyberrunner/Documents/Code/me/Paper/Weekly-arXiv-ML-AI-Research-Review/2025/week-19/summary.md#%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%B5%D0%B3%D0%B8%D1%8F-%D1%83%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F-%D1%81%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D1%8F
[7] Экспериментальные результаты: https://file+.vscode-resource.vscode-cdn.net/Users/cyberrunner/Documents/Code/me/Paper/Weekly-arXiv-ML-AI-Research-Review/2025/week-19/summary.md#%D1%8D%D0%BA%D1%81%D0%BF%D0%B5%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D1%8B
[8] Приложения и последствия: https://file+.vscode-resource.vscode-cdn.net/Users/cyberrunner/Documents/Code/me/Paper/Weekly-arXiv-ML-AI-Research-Review/2025/week-19/summary.md#%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B8-%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D1%81%D1%82%D0%B2%D0%B8%D1%8F
[9] Заключение: https://file+.vscode-resource.vscode-cdn.net/Users/cyberrunner/Documents/Code/me/Paper/Weekly-arXiv-ML-AI-Research-Review/2025/week-19/summary.md#%D0%B7%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5
[10] @TheWeeklyBrief: https://t.me/TheWeeklyBrief
[11] GitHub Pages: https://verbasik.github.io/Weekly-arXiv-ML-AI-Research-Review/
[12] Обучении: http://www.braintools.ru/article/5125
[13] вниманию: http://www.braintools.ru/article/7595
[14] Источник: https://habr.com/ru/articles/908306/?utm_campaign=908306&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.