0% нашли этот документ полезным (0 голосов)
47 просмотров18 страниц

NN Callback Embedings 2025

Документ описывает стандартные параметры нейронных сетей, включая архитектуру, функции активации и алгоритмы оптимизации. Он также охватывает использование обратных вызовов (callbacks) в Keras для управления процессом обучения и включает примеры настройки сети с использованием слоев эмбеддинга и регуляризации. Дополнительно рассматриваются методы батч-нормализации и примеры реализации в Keras и PyTorch.

Загружено:

g2qxgpyw67
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
47 просмотров18 страниц

NN Callback Embedings 2025

Документ описывает стандартные параметры нейронных сетей, включая архитектуру, функции активации и алгоритмы оптимизации. Он также охватывает использование обратных вызовов (callbacks) в Keras для управления процессом обучения и включает примеры настройки сети с использованием слоев эмбеддинга и регуляризации. Дополнительно рассматриваются методы батч-нормализации и примеры реализации в Keras и PyTorch.

Загружено:

g2qxgpyw67
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
Вы находитесь на странице: 1/ 18

Laboratory for Social and Cognitive

Informatics,
Department of Applied Mathematics
and Business Informatics

CALLBACKS & EMBEDDING'S

Koltcov S.

Saint Petersburg, 2025


Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics

Стандартные параметры нейронных сетей


1. Aархитектура сети (количество слоев).

2. Количество единиц для скрытых слоев (количество нейронов)

3. Функция активации (Relu, Sigmoid, Tanh) - определяет выход данного узла при наличии входа или
набора входов.

5. Алгоритм оптимизации (стохастический градиентный спуск, Adam Optimizer, RMSprop, e.t.c) -


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

6. Функция потерь - измерение того, насколько хороша ваша модель с точки зрения предсказания
ожидаемого результата.

7. Скорость обучения - контролирует, насколько сильно изменять модель в ответ на оценочную ошибку
при каждом обновлении весов модели.

8. Количество итераций обучения (эпох) - количество раз, которое алгоритм обучения прорабатывает
весь набор данных для обучения.

9. Размер партии (batch) - гиперпараметр градиентного спуска, контролирующий количество обучающих


выборок, которые необходимо проработать перед обновлением внутренних параметров модели.
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics

Настройка сети - Обратные вызовы (Callback)


Callback(Обратный вызов ) – набор функций, применяемых в определенные моменты во время
процедуры обучения. Функции callback используют чтобы получить информацию о внутреннем
состоянии модели в процессе обучения. Нужно передавать список callback’ов (именованным
аргументом callbacks) методу .fit() Sequential или Model классов.

History
keras.callbacks.callbacks.History(). Callback, записывающий события в объект History.
Можно использовать для построения кривых точности работы сети.

ModelCheckpoint
keras.callbacks.callbacks.ModelCheckpoint(filepath, monitor=’val_loss’, verbose=0,
save_best_only=False, save_weights_only=False, mode=’auto’, period=1)
Сохранение модели после каждой эпохи. Удобно использовать для отбора нужной версии
сетки.

EarlyStopping
keras.callbacks.callbacks.EarlyStopping(monitor=’val_loss’, min_delta=0, patience=0,
verbose=0, mode=’auto’, baseline=None, restore_best_weights=False)
Прекращение обучения, когда параметр ‘monitor’ перестает улучшаться. Удобно
использовать для сохранения лучшей модели сети.
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics

Example of History
# Создание сети
from keras import models
from keras import layers

model = models.Sequential()
# вход в сеть
model.add(layers.Dense(64, activation='relu',
input_shape=(1000,)))
model.add(layers.Dense(64, activation='relu'))

# Dropout - дает возможно забывать сетью часть своих


нейронов
model.add(layers.Dropout(0.1))

# Выход
model.add(layers.Dense(3, activation='softmax'))
# Компилируем модель
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy', metrics=['accuracy'])

model.summary()
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics

Example of History
# 2. компиляция сети
# optimizer='rmsprop' - алгоритм обучения сети
# loss='categorical_crossentropy‘ – функция потерь
# metrics=['accuracy'] - тип метрики качества
# loss='categorical_crossentropy' - функция потерь, которая будет минимизироваться
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

# 3. Обучение сети
# запускаем процесс обучения сети
# x_train, y_train - датасет на котором обучаем сеть
# epochs=9 - число эпох обучения
# batch_size=512
# validation_data - датасет на котором производится
проверка качества обученной модели
history = model.fit(x_train, y_dummy_train,
epochs=20, batch_size=512,
validation_data=(x_valid, y_dummy_valid))

history_dict = history.history
history_dict.keys()

dict_keys(['loss', 'accuracy', 'val_loss', 'val_accuracy'])


Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics

Example of EarlyStopping & ModelCheckpoint


from keras.callbacks import EarlyStopping
earlystop = EarlyStopping(monitor = 'val_loss', min_delta = 1, patience = 3,
verbose = 1, restore_best_weights = True)
monitor: отслеживаемые значения, например, val_loss.
min_delta: минимальное изменение отслеживаемого значения. Например, min_delta=1
означает, что тренировка остановится, когда абсолютное изменение значения будет меньше
единицы.
patience: количество тренировок без улучшений, после которого обучение остановится.
restore_best_weights: установите в True, если хотите сохранить лучшие веса нейронов, как
только обучение остановится.
from keras.callbacks import ModelCheckpoin
tcheckpoint = ModelCheckpoint(filepath, monitor='val_loss', mode='min', save_best_only=True)
ModelCheckpoint cохраняет модель после каждой тренировки. Важные параметры:

filepath: путь к файлу модели.


monitor: отслеживаемое значение (функция потерь на тестовой части датасета).
save_best_only: установите в True, если хотите перезаписать последнюю лучшую модель.
mode: auto, min или max. Например, mode=’min’, если хотите минимизировать отслеживаемое
значение.
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics

Example of EarlyStopping & ModelCheckpoint


# задаем процедуры check point и early_stopping
checkpoint_best_only = get_checkpoint_best_only()
early_stopping = get_early_stopping()
# формируем список функций callbacks
callbacks = [checkpoint_best_only, early_stopping]

# 3. обучение сети
# запускаем процесс обучения сети
# x_train, y_train - датасет на котором обучаем сеть
# epochs=9 - число эпох обучения
# batch_size=512
# validation_data - датасет на котором производится проверка качества обученной модели

history = model.fit(x_train, y_dummy_train, epochs=25, batch_size=512, validation_data=(x_valid,


y_dummy_valid), callbacks = callbacks, verbose = 1)

При запуске обучения сети задаем список функций callbacks. В процессе обучения сети будут
сохранена лучшая модель (веса скомпилированной сети) в заданный каталог.
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics

Введение в слой embedding's


Преобразовывает положительные целые числа (индексы) в плотные (dense) векторы
фиксированного размера. Этот слой может использоваться только как первый слой в модели.

Эмбединги это векторное представление каждого слова в виде набора чисел фиксированного
размера. Исходя из этого слой эмбединг работает следующим образом. У нас есть текст в виде
последовательности id-ков слов.

мы подаем вектор с единицей на определенной


позиции, то у нас, фактически, используются только
связи для этого одного входа, остальные
умножаются на 0 и формируют нулевые суммы на
всех остальных нейронах скрытого слоя:
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics

Введение в слой embedding's


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

В Keras такой слой можно создать с помощью одноименного


класса:keras.layers.Embedding(input_dim, output_dim, …,
input_length)
•input_dim – input_dim: int > 0. Размер словаря, т.е.
максимальный целочисленный индекс в входном векторе + 1,
например 64551;
•output_dim – число выходов в полносвязном Embedding-слое
(например 256);
•input_length – размер входного вектора (например число
колонок, или размер pudding).

model.add(Embedding(64551, 256, input_length= maxlen))


В итоге, после слоя Embedding получим двумерный массив.
Если следующий слой одномерный слой типа Dense. То нам
нужно сделать преобразование из двумерного массива в
одномерный вектор. Это можно сделать при помощи слоя
Flatten.

Flatten() – слой, преобразующий 2D или 3D данные в 1D-


данные.
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics

Пример сети с входным слоем Embedding (Sequential)


# Построение модели
from keras.models import Sequential
from keras.layers import Flatten, Dense, Embedding

model = Sequential()
# Задаем слой эмбединга
model.add(Embedding(max_words, embedding_dim, input_length=my_max_len))

# Преобразование размерности
model.add(Flatten())

# Добавляем слой
model.add(Dense(32, activation='relu'))

# Выходной слой
model.add(Dense(3, activation='sigmoid'))
model.summary()

# Загрузка embedings в модель


model.layers[0].set_weights([embedding_matrix])
model.layers[0].trainable = False # False - означает, что слой замораживается
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics

Пример сети с входным слоем Embedding (API)


# Вход
deep_inputs = Input(shape=(my_max_len,), dtype='int32')

# Задаем слой эмбединга


embedding = Embedding(max_words, embedding_dim, input_length=my_max_len)(deep_inputs)

# Преобразование двумерного массива в одномерный


flatten = Flatten()(embedding)

# Задаем пару слоев


x3 = Dense(64, activation='relu')(flatten)
x4 = Dense(64, activation='relu')(x3)

# Добавляем основной выход


main_output = Dense(3, activation='softmax', name='main_output')(x4)

# Определяем модель
model = Model(inputs=[deep_inputs], outputs=[main_output])

model.summary()
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics

Регуляризация слоев нейронной сети


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

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

L2-регуляризация (L2 regularization) — добавляемый штраф пропорционален квадратам значений


весовых коэффициентов (L2-норма весов).
Примеры
model.add(Dense(32, activation='relu', kernel_regularizer=regularizers.l2(0.1)))

layer = layers.Dense(units=64, kernel_regularizer: Регуляризатор для


kernel_regularizer=regularizers.L1L2(l1=1e-5, l2=1e-4), применения штрафа к ядру слоя
bias_regularizer=regularizers.L2(1e-4), bias_regularizer: Регуляризатор для
применения штрафа к смещению слоя
activity_regularizer=regularizers.L2(1e-5)
activity_regularizer: Регуляризатор для
применения штрафа к выходу слоя
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics

Батч-нормализация в нейронных сетях


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

Батч-нормализация -предлагает весьма простое решение данной проблемы: нормализовать входные


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

В Keras добавить батч-нормализацию к сети очень просто: за нее отвечает слой BatchNormalization,
которому мы передадим несколько параметров, самый важный из которых — axis (вдоль какой оси
данных будут вычислять статистические характеристики). В частности, во время работы со
сверточными слоями, нам лучше нормализовать вдоль отдельных каналов, следовательно,
выбираем axis=1.

from keras.layers.normalization import BatchNormalization # batch normalisation


model.add(BatchNormalization(axis=1))
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics

Введение в нейронные сети

model.compile(optimizer='rmsprop',
model.add(Dense(3, activation='sigmoid')) loss='categorical_crossentropy', metrics=['accuracy'])
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics

Embeddings в pytorch
self.embeddings = nn.Embedding(vocab_size + 1, embedding_dim)

embedding_dim – размер эмбединга (размер каждого векторного представления )

vocab_size + 1: Размер словаря — это количество уникальных токенов в вашем наборе


данных. Добавление +1 резервирует один дополнительный индекс для целей padding. Это
обычно делается для того, чтобы обрабатывать входные последовательности переменной
длины в батче, где нужно дополнить более короткие последовательности, чтобы они
соответствовали самой длинной.

Если ваш изначальный vocab_size равен 1000, то без добавления +1 у вас будет 1000
индексов (от 0 до 999), которые могут быть использованы для токенов. Это означает, что
у вас нет специального индекса для падинга. При добавлении +1, у вас будет 1001
индекс, что позволит использовать индекс 0 для подброса, а токены будут mapped на
индексы от 1 до 1000.

Ну или можно убрать +1, при этом просто добавить изначально дополнительный токен в
vocab
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics

Embeddings в pytorch
# Модель с embedding для слов
class SimpleModel(nn.Module):
def __init__(self, vocab_size, embedding_dim):
super(SimpleModel, self).__init__()
# +1 для паддинга
self.embeddings = nn.Embedding(vocab_size, embedding_dim) Слой эмбединга
def forward(self, input):
embedded = self.embeddings(input)
return embedded

# Пример использования
vocab_size = 5 # 4 уникальных токена
embedding_dim = 3 # размер векторов
model = SimpleModel(vocab_size, embedding_dim)

# Примеры входных данных (батч индексов токенов с паддингом)


# Индексы: 1, 2, 3, 4 представляют токены; 0 — паддинг
input_indices = torch.tensor([
[1, 2, 3, 0], # Первое предложение (длина 3)
[2, 3, 0, 0], # Второе предложение (длина 2)
[1, 4, 0, 0] # Третье предложение (длина 2)
]) # Паддинг для выравнивания

# Получение векторов
output = model(input_indices)
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics

Embeddings в pytorch
В PyTorch есть несколько способов усреднения векторов, полученных после
применения слоя Embedding. Выбор подходящего метода зависит от задачи и
структуры ваших данных. Вот некоторые примеры:

1. Простое Усреднение (Mean)


Этот метод включает в себя вычисление среднего значения векторов токенов для
каждой последовательности.
output = embedded.mean(dim=0)

2. Усреднение с Учетом Длины Последовательности


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

lengths = torch.tensor([3, 2, 4]) # Напр., длины последовательностей


output = (embedded.sum(dim=0) / lengths.unsqueeze(1)) # Для средневзвешенного
усреднения

Есть и другие варианты, например можно сделать объединение эмбедингов в один


вектор.
https://linis.hse.ru/ Phone: +7 (911) 981 9165 Email: [email protected]

Вам также может понравиться