Мы используем cookie, чтобы пользоваться сайтом было удобно.
черный логотип neuroni.co

Как обучить диффузионную модель?

Генеративный искусственный интеллект (ИИ), быстро развивающаяся технология, используемая для создания уникальных данных и контента с минимальным вмешательством человека, способна привести к революционным результатам в области создания цифрового контента. Алгоритмы генеративного ИИ могут создавать новую музыку, изображения, код, симуляции и даже целые веб-сайты за считанные секунды. Виртуальные помощники с поддержкой ИИ, такие как Siri и Alexa, используют алгоритмы генеративного ИИ, чтобы отвечать на запросы и предоставлять полезную информацию. Использование генеративного ИИ приводит к более быстрому выполнению задач по созданию контента, что дает преимущества как на индивидуальном, так и на организационном уровне. По мере развития технологий генеративный ИИ, вероятно, сможет выполнять еще более сложные задачи, такие как составление научных статей или создание макетов визуального дизайна. Известные модели генеративного ИИ, такие как генеративно-состязательные сети (GAN), вариационные автоэнкодеры (VAE), генеративный предварительно обученный преобразователь 3 (GPT-3) и другие подобные модели генеративного ИИ в последнее время привлекают большое внимание. Модели распространения — это генеративные модели глубокого обучения, которые изучают базовое распределение входных данных посредством контролируемого и устойчивого процесса распространения для получения высококачественных и разнообразных выходных данных. Модели предлагают решения для нескольких приложений, таких как генерация текста, обработка звука и категоризация изображений. Модели распространения — это генеративные модели глубокого обучения, которые изучают базовое распределение входных данных посредством контролируемого и устойчивого процесса распространения для получения высококачественных и разнообразных выходных данных. Модели предлагают решения для нескольких приложений, таких как генерация текста, обработка звука и категоризация изображений. Модели распространения — это генеративные модели глубокого обучения, которые изучают базовое распределение входных данных посредством контролируемого и устойчивого процесса распространения для получения высококачественных и разнообразных выходных данных. Модели предлагают решения для нескольких приложений, таких как генерация текста, обработка звука и категоризация изображений.


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


Что такое диффузионная модель?

Представленные в 2015 году диффузионные модели, также известные как диффузионные вероятностные модели, представляют собой класс моделей со скрытыми переменными. Это цепи Маркова, обученные с помощью вариационного вывода. Единственная цель модели диффузии состоит в том, чтобы впитать скрытую структуру набора данных, моделируя способ распространения точек данных через скрытое пространство. Научившись обращать процесс диффузии вспять, нейронная сеть способна очищать изображения, размытые гауссовским шумом. Тремя примерами общих сред моделирования диффузии, используемых в компьютерном зрении, являются вероятностные модели диффузии с шумоподавлением, сети оценки с учетом шума и стохастические дифференциальные уравнения. Модели диффузии можно применять к таким задачам, как шумоподавление изображения, закрашивание, сверхвысокое разрешение и создание изображений. Примером диффузионной модели является DALL-E 2 от OpenAI, который будет начинаться со случайного шумового изображения, а затем, после обучения обращению процесса диффузии на естественных изображениях, модель сможет генерировать новые естественные изображения. DALL-E 2 использует диффузионные модели для априорной модели, которая создает изображение с внедренным текстовым заголовком, и декодер, который создает окончательное изображение.

Каково назначение диффузионной модели?

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

Какие существуют типы диффузионных моделей?

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

Модели встраивания в социальные сети

Эти модели фиксируют базовую структуру и отношения между людьми и изучают низкоразмерное представление людей в одной и той же социальной сети. Это представление можно использовать для прогнозирования распространения информации по сети. Некоторые модели, разработанные для встраивания в социальные сети, включают, помимо прочего, DeepWalk, GraRep, Node2Vec и Struc2Vec.

Глубокие генеративные модели

Используя глубокие нейронные сети, эти модели генерируют сфабрикованные данные, которые затем можно использовать для изучения распространения информации. Генеративную модель можно обучить на реальных данных распространения, а затем использовать для создания собственных данных с аналогичными свойствами, которые в конечном итоге можно использовать для изучения работы других моделей распространения. Некоторые примеры глубоких генеративных моделей включают вариационные автоэнкодеры (VAE), генеративно-состязательные сети (GAN), авторегрессионные модели (такие как PixelCNN или PixelRNN) и генеративные модели на основе потоков (такие как RealNVP или Glow).

Модели обучения с подкреплением

Используя алгоритмы обучения с подкреплением для изучения распространения информации по сети, эти модели имеют отдельные сети или агенты, а циркуляция информации представлена ​​как ряд действий, предпринимаемых этими отдельными сетями. Некоторые примеры моделей обучения с подкреплением включают Q-Learning, SARSA (State-Action-Reward-State-Action), Deep Q-Network (DQN) и Gradients Policy (PG).

Граф сверточных сетей

Эти модели используют графовые сверточные сети для изучения структуры социальной сети и отношений между людьми. Затем полученные представления можно использовать для прогнозирования распространения информации или идей по сети. Некоторые модели сверточных сетей графов включают, среди прочего, сеть графов внимания (GAT), сверточные сети графов Чебышева (ChebNet) и сверточные сети спектральных графов (SGC).

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

Запустите свой проект с neuroni.co
Создавайте генеративные модели искусственного интеллекта преобразования текста в изображение и изображения в изображение с помощью возможностей ИИ
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных

Каковы основные характеристики диффузионных процессов?

Структура сети

Динамика между людьми играет важную роль в распространении данных. Модели машинного обучения могут изучать структуру сети и делать прогнозы о распространении информации.

Временная динамика

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

Неоднородность

У каждого человека есть свои характеристики, такие как разные уровни влияния или разные пороги принятия, которые затем можно использовать для прогнозирования распространения информации.

Механизмы влияния

На распространение информации можно влиять через молву, маркетинговые кампании и стимулы. Модели машинного обучения могут фиксировать эти механизмы влияния, которые затем можно использовать для прогнозирования распространения информации.


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


Это некоторые из ключевых характеристик процессов распространения в машинном обучении, которые обеспечивают основу для моделирования и понимания распространения информации в популяции.

Какие еще факторы влияют на диффузию?

  • Социальное влияние : на распространение информации могут влиять решения и поведение других участников сети. Это может привести к усилению или ослаблению распространения информации.
  • Качество информации. Качество распространяемой информации может сильно повлиять на скорость распространения. Плохо продуманная или неверная информация может распространяться не так эффективно, как хорошо продуманная и правильная информация.
  • Время и контекст. На распространение информации могут влиять время ее распространения и конкретный контекст, в котором она распространяется. Например, скорость распространения может быть выше в кризисной ситуации или медленнее в контексте, когда информация не имеет значения.

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

Как обучить диффузионную модель?

Шаг 1: Подготовка данных

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


Очистка и предварительная обработка данных. После того, как данные собраны, их необходимо очистить и предварительно обработать, чтобы убедиться, что они подходят для использования в обучении диффузионной модели. Это может включать удаление отсутствующих или повторяющихся данных, работу с выбросами или преобразование данных в подходящий формат для обучения.


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

Шаг 2: Выбор модели

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


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


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

Шаг 3: Обучение модели

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


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


Обучение модели: после разделения данных и установки параметров модели последний шаг — обучение модели. Процесс обучения обычно включает многократное повторение обучающего набора и обновление параметров модели в зависимости от производительности модели на обучающем наборе. Цель процесса обучения — найти набор параметров модели, которые точно отражают отношения между людьми в популяции и хорошо обобщают новые данные.

Есть две реализации: условная и безусловная.

Модель

Модель безусловной диффузии по умолчанию состоит из UNet со слоями самоконтроля. У нас есть классическая структура U с путями понижения и повышения частоты дискретизации. Основное отличие от традиционной UNet заключается в том, что блоки up и down поддерживают дополнительный аргумент временного шага при их прямом проходе. Это делается путем линейного встраивания временного шага в свертки, для получения более подробной информации проверьте файл modules.py.


class UNet(nn.Module):
    def __init__(self, c_in=3, c_out=3, time_dim=256):
        super().__init__()
        self.time_dim = time_dim
        self.inc = DoubleConv(c_in, 64)
        self.down1 = Down(64, 128)
        self.sa1 = SelfAttention(128)
        self.down2 = Down(128, 256)
        self.sa2 = SelfAttention(256)
        self.down3 = Down(256, 256)
        self.sa3 = SelfAttention(256)
        self.bot1 = DoubleConv(256, 256)
        self.bot2 = DoubleConv(256, 256)
        self.up1 = Up(512, 128)
        self.sa4 = SelfAttention(128)
        self.up2 = Up(256, 64)
        self.sa5 = SelfAttention(64)
        self.up3 = Up(128, 64)
        self.sa6 = SelfAttention(64)
        self.outc = nn.Conv2d(64, c_out, kernel_size=1)
    def unet_forwad(self, x, t):
        "Classic UNet structure with down and up branches, self attention in between convs"
        x1 = self.inc(x)
        x2 = self.down1(x1, t)
        x2 = self.sa1(x2)
        x3 = self.down2(x2, t)
        x3 = self.sa2(x3)
        x4 = self.down3(x3, t)
        x4 = self.sa3(x4)


        x4 = self.bot1(x4)
        x4 = self.bot2(x4)
        x = self.up1(x4, x3, t)
        x = self.sa4(x)
        x = self.up2(x, x2, t)
        x = self.sa5(x)
        x = self.up3(x, x1, t)
        x = self.sa6(x)
        output = self.outc(x)
        return output
    def forward(self, x, t):
        "Positional encoding of the timestep before the blocks"
        t = t.unsqueeze(-1)
        t = self.pos_encoding(t, self.time_dim)
        return self.unet_forwad(x, t)

Условная модель почти идентична, но добавляет кодировку метки класса во временной шаг, передавая метку через слой внедрения. Это очень простое и элегантное решение.


class UNet_conditional(UNet):
    def __init__(self, c_in=3, c_out=3, time_dim=256, num_classes=None):
        super().__init__(c_in, c_out, time_dim)
        if num_classes is not None:
            self.label_emb = nn.Embedding(num_classes, time_dim)
    def forward(self, x, t, y=None):
        t = t.unsqueeze(-1)
        t = self.pos_encoding(t, self.time_dim)
        if y is not None:
            t += self.label_emb(y)
        return self.unet_forwad(x, t)
Запустите свой проект с neuroni.co
Создавайте генеративные модели искусственного интеллекта преобразования текста в изображение и изображения в изображение с помощью возможностей ИИ
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных

Экспоненциальное скользящее среднее с кодом EMA

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


class EMA:
    def __init__(self, beta):
        super().__init__()
        self.beta = beta
        self.step = 0
    def update_model_average(self, ma_model, current_model):
        for current_params, ma_params in zip(current_model.parameters(), ma_model.parameters()):
            old_weight, up_weight = ma_params.data, current_params.data
            ma_params.data = self.update_average(old_weight, up_weight)
    def update_average(self, old, new):
        if old is None:
            return new
        return old * self.beta + (1 - self.beta) * new
    def step_ema(self, ema_model, model, step_start_ema=2000):
        if self.step < step_start_ema:
            self.reset_parameters(ema_model, model)
            self.step += 1
            return
        self.update_model_average(ema_model, model)
        self.step += 1
    def reset_parameters(self, ema_model, model):
        ema_model.load_state_dict(model.state_dict())

Обучение

Мы переработали код, чтобы сделать его функциональным. Шаг обучения происходит в функции one_epoch:


 def train_step(self):
        self.optimizer.zero_grad()
        self.scaler.scale(loss).backward()
        self.scaler.step(self.optimizer)
        self.scaler.update()
        self.ema.step_ema(self.ema_model, self.model)
        self.scheduler.step()
    def one_epoch(self, train=True, use_wandb=False):
        avg_loss = 0.
        if train: self.model.train()
        else: self.model.eval()
        pbar = progress_bar(self.train_dataloader, leave=False)
        for i, (images, labels) in enumerate(pbar):
            with torch.autocast("cuda") and (torch.inference_mode() if not train else torch.enable_grad()):
                images = images.to(self.device)
                labels = labels.to(self.device)
                t = self.sample_timesteps(images.shape[0]).to(self.device)
                x_t, noise = self.noise_images(images, t)
                if np.random.random() < 0.1:
                    labels = None
                predicted_noise = self.model(x_t, t, labels)
                loss = self.mse(noise, predicted_noise)
                avg_loss += loss
            if train:
                self.train_step()
                if use_wandb: 
                    wandb.log({"train_mse": loss.item(),
                                "learning_rate": self.scheduler.get_last_lr()[0]})
            pbar.comment = f"MSE={loss.item():2.3f}"        
        return avg_loss.mean().item()

Здесь вы можете видеть, что в первой части нашего инструментария W&B мы регистрируем потери при обучении и значение скорости обучения. Таким образом, мы можем следовать планировщику, который мы используем. Чтобы фактически регистрировать образцы, мы определяем пользовательскую функцию для выполнения вывода модели:


@torch.inference_mode()
def log_images(self):
    "Log images to wandb and save them to disk"
    labels = torch.arange(self.num_classes).long().to(self.device)
    sampled_images = self.sample(use_ema=False, n=len(labels), labels=labels)
    ema_sampled_images = self.sample(use_ema=True, n=len(labels), labels=labels)
    plot_images(sampled_images)  #to display on jupyter if available
    # log images to wandb
    wandb.log({"sampled_images":     [wandb.Image(img.permute(1,2,0).squeeze().cpu().numpy()) for img in sampled_images]})
    wandb.log({"ema_sampled_images": [wandb.Image(img.permute(1,2,0).squeeze().cpu().numpy()) for img in ema_sampled_images]})

А также функция сохранения контрольных точек модели:


def save_model(self, run_name, epoch=-1):
    "Save model locally and to wandb"
    torch.save(self.model.state_dict(), os.path.join("models", run_name, f"ckpt.pt"))
    torch.save(self.ema_model.state_dict(), os.path.join("models", run_name, f"ema_ckpt.pt"))
    torch.save(self.optimizer.state_dict(), os.path.join("models", run_name, f"optim.pt"))
    at = wandb.Artifact("model", type="model", description="Model weights for DDPM conditional", metadata={"epoch": epoch})
    at.add_dir(os.path.join("models", run_name))
    wandb.log_artifact(at)

Все вписывается в функцию подгонки


def prepare(self, args):
    "Prepare the model for training"
    setup_logging(args.run_name)
    device = args.device
    self.train_dataloader, self.val_dataloader = get_data(args)
    self.optimizer = optim.AdamW(self.model.parameters(), lr=args.lr, weight_decay=0.001)
    self.scheduler = optim.lr_scheduler.OneCycleLR(self.optimizer, max_lr=args.lr, 
                                                steps_per_epoch=len(self.train_dataloader), epochs=args.epochs)
    self.mse = nn.MSELoss()
    self.ema = EMA(0.995)
    self.scaler = torch.cuda.amp.GradScaler()
def fit(self, args):
    self.prepare(args)
    for epoch in range(args.epochs):
        logging.info(f"Starting epoch {epoch}:")
        self.one_epoch(train=True)        
        ## validation
        if args.do_validation:
            self.one_epoch(train=False)        
        # log predicitons
        if epoch % args.log_every_epoch == 0:
            self.log_images(use_wandb=args.use_wandb)
    # save model
    self.save_model(run_name=args.run_name, use_wandb=args.use_wandb, epoch=epoch)

Шаг 4: Оценка модели

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


Интерпретация результатов модели. Оценка производительности модели включает вашу способность интерпретировать результаты модели. Поняв взаимоотношения между особями в популяции и то, как они влияют на процесс диффузии, вы сможете добиться этого. Этот шаг может также включать выявление наиболее влиятельных лиц в популяции и факторов, способствующих их влиянию.


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

Шаг 5: Реализация

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


Интеграция с другими системами. Интеграция с другими моделями может позволить развернутой модели стать частью более крупного решения. Модель может быть интегрирована с базой данных, API или пользовательским интерфейсом. Цель интеграции — гарантировать, что модель работает в тандеме с остальной системой, а также способна давать точные прогнозы в режиме реального времени.


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

Модели распространения обучения в машинном обучении:

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

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

  • Развертывание модели в новых областях: изучение использования моделей распространения в новых областях, таких как финансы или здравоохранение, для дальнейшей демонстрации их потенциала и гибкости.

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

  • Гибридные модели: диффузионные модели вместе с другими типами моделей, такими как модели глубокого обучения или модели обучения с подкреплением, могут работать вместе, чтобы повысить точность и универсальность.

Заключение

Машинное обучение — чрезвычайно динамичная сфера, произведшая революцию во многих областях и отраслях. У него есть потенциал изменить то, как мы живем и работаем, и будет интересно посмотреть, как он продолжит развиваться в ближайшие времена. Говоря об обучении модели распространения, оно включает в себя несколько шагов, в том числе выбор модели распространения, которая подходит для данных, выбор соответствующих параметров и гиперпараметров, а также обучение модели с использованием выбранных данных. Также важно оценить производительность модели и внести необходимые коррективы для оптимизации ее точности. Наконец, обученная модель должна быть развернута и интегрирована в производственную среду для использования. При правильном намерении модели распространения могут предоставить ключевую информацию и прогнозы в широком диапазоне приложений.


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

Читайте также
Читайте также
Тонкая настройка включает в себя обучение предварительно обученных моделей с определенным набором данных, чтобы адаптировать их к определенным областям или задачам, таким как обнаружение рака в здравоохранении и т.д.
Как создавать приложения для машинного обучения?
Машинное обучение — это область ИИ, которая разрабатывает статистические модели и алгоритмы, позволяющие компьютерам учиться и выполнять задачи так же эффективно, как и люди
С появлением известных инструментов генеративного ИИ, таких как ChatGPT, компании могут быстро создавать новый контент. Подробно изучите варианты использования генеративного ИИ
Свяжитесь с нами
Свяжитесь с нами
При необходимости мы подпишем NDA, чтобы сохранить ваши идеи в тайне и обсудить основные требования проекта. После этого наши аналитики и разработчики внимательно изучат их, и вместе мы придумаем следующий ход
При необходимости мы подпишем NDA, чтобы сохранить ваши идеи в тайне и обсудить основные требования проекта. После этого наши аналитики и разработчики внимательно изучат их, и вместе мы придумаем следующий ход
часть команды neuroni.co, узнайте больше о нас
Просто заполните форму или свяжитесь с нами
hi@neuroni.co
+7 (495) 077-01-73
telegram: anna_neuroni
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных