В этой статье всесторонне обсуждается сверточная нейронная сеть CNN, углубленный анализ фона и важности, введение определения и уровня, обучение и оптимизация, подробный анализ ее слоя свертки, функции активации, уровня пула, уровня нормализации и, наконец, списки. Он включает в себя множество ключевых технологий для обучения и оптимизации: подготовка и улучшение обучающего набора, функция потерь, оптимизатор, регулировка скорости обучения, методы регуляризации, а также оценка и настройка модели. Автор TechLead имеет более чем 10-летний опыт работы в области архитектуры интернет-сервисов, опыт разработки продуктов искусственного интеллекта и опыт управления командой. Он имеет степень магистра Университета Тунцзи в Университете Фудань, член Лаборатории интеллекта роботов Фудань, старший архитектор, сертифицированный Alibaba Cloud. профессионал в области управления проектами и менеджер по исследованиям и разработкам продуктов с доходом в сотни миллионов долларов.
Сложность и гибкость сверточных нейронных сетей (CNN) делают их одной из основных тем исследований в области глубокого обучения. В этом вводном разделе мы углубимся в историческую подоплеку, основы, важность и влияние CNN в науке и промышленности.
Сверточные нейронные сети созданы на основе зрительной системы человека, в частности структуры нейронов зрительной коры. Со времени новаторской работы Хьюбела и Визеля в 1962 году эта идея положила начало серии исследований и разработок.
Важность CNN отражается не только в ее точности и эффективности, но и в ее теоретических открытиях. Например, сверточные слои уменьшают количество параметров за счет совместного использования весов, что помогает более эффективно обучать модель, а также улучшает понимание модели трансляционной инвариантности.
Сверточная нейронная сеть — это нейронная сеть прямого распространения, искусственные нейроны которой могут реагировать на локальные области окружающих единиц, тем самым имея возможность идентифицировать некоторые структурные особенности визуального пространства. Ниже приведены ключевые компоненты сверточной нейронной сети:
Эти компоненты сверточной нейронной сети работают вместе, чтобы позволить CNN автоматически изучать значимые иерархии функций на основе необработанных пикселей. По мере увеличения глубины эти функции постепенно абстрагируются от базовых форм и текстур к сложным представлениям объектов и сцен.
Уникальным преимуществом сверточных нейронных сетей является их способность автоматизировать многие части проектирования функций, которые требуют ручного вмешательства в традиционном машинном обучении. Это не только позволяет ему достигать превосходных результатов во многих задачах, но также стимулирует широкий академический и промышленный интерес.
Сверточные нейронные сети состоят из нескольких слоев, каждый из которых имеет определенную цель и функцию. В этой части будут рассмотрены основные концепции операций свертки, функций активации, слоев пула и слоев нормализации.
Операция свертки является ядром сверточной нейронной сети и включает в себя множество сложных концепций и деталей. Мы представим их один за другим.
Ядро свертки представляет собой небольшую матрицу, которая генерирует карты объектов путем скольжения по входным данным. Каждое ядро свертки может захватывать различные функции, такие как края, углы и т. д.
Размер ядра свертки влияет на масштаб функций, которые оно может захватывать. Меньшие ядра свертки могут захватывать более подробные функции, тогда как более крупные ядра свертки могут захватывать более широкие функции.
# Используйте ядро свертки 3x3
conv_layer_small = nn.Conv2d(3, 64, 3)
# Используйте ядро свертки 5x5
conv_layer_large = nn.Conv2d(3, 64, 5)
Свертка выполняется для многоканального ввода, каждый входной канал свертывается с помощью ядра свертки, а затем все результаты складываются. Это позволяет модели захватывать различные функции из разных каналов.
длина контроль работы шаги и наполнения Геометрические свойства свертки.
длина шаг определяет скорость, с которой ядро свертки движется на входе. большая длина шаг может уменьшить размер вывода, а меньшая длина шаг сохраняет размер неизменным.
# использоватьдлина шага2
conv_layer_stride2 = nn.Conv2d(3, 64, 3, stride=2)
наполнение Управляйте размером вывода, добавляя нули к краям ввода. Это помогает контролировать потерю информации при операции свертки.
# Используйте наполнение1, чтобы выходные размеры были такими же, как входные (при условии, что длина шагадля1)
conv_layer_padding1 = nn.Conv2d(3, 64, 3, padding=1)
Атрусная свертка — это метод расширения рецептивного поля ядра свертки путем вставки пробелов между элементами ядра свертки. Это позволяет сети захватывать более широкий спектр информации без увеличения размера ядра или вычислительных затрат.
# Используйте ядро свертки с частотой дырок 2.
conv_layer_dilated = nn.Conv2d(3, 64, 3, dilation=2)
Групповая свертка расширяет операцию свертки, группируя входные каналы и используя разные ядра свертки для каждой группы. Это увеличивает емкость модели и позволяет ей изучать более сложные представления.
# Используйте 2 группы
conv_layer_grouped = nn.Conv2d(3, 64, 3, groups=2)
Функция активации играет решающую роль в нейронных сетях. Они увеличивают нелинейность модели, позволяя ей обучаться и аппроксимировать сложные функции.
ReLU (выпрямленная линейная единица) — одна из самых популярных функций активации в современном глубоком обучении. Он нелинейный, но очень эффективный в вычислительном отношении.
Основными преимуществами ReLU являются его высокая вычислительная эффективность и поддержка редких активаций. Однако это может привести к феномену «мертвого ReLU», когда определенные нейроны никогда не активируются.
# Определите функцию с помощью PyTorch активации ReLU
relu = nn.ReLU()
Leaky ReLU — это вариант ReLU, который допускает небольшие положительные наклоны для отрицательных входных значений. Это помогает смягчить проблему «мертвого ReLU».
# Определение Leaky с помощью PyTorch Функция активации ReLU
leaky_relu = nn.LeakyReLU(0.01)
Функция активации сигмовидной кишки может сжимать любое значение от 0 до 1.
Сигмоид может представлять вероятность при использовании в выходном слое, но может вызывать проблемы с исчезновением градиента в скрытом слое.
# Определите функцию с помощью PyTorch активации сигмовидной кишки
sigmoid = nn.Sigmoid()
Tanh — еще одна функция активации, похожая на Sigmoid, но она сжимает выходные данные в диапазоне от -1 до 1.
Tanh, как правило, лучше, чем Sigmoid, поскольку его выходной диапазон шире, но все равно может вызывать исчезновение градиентов.
# Определите функцию с помощью PyTorch активации Тана
tanh = nn.Tanh()
Swish — это адаптивная функция активации, которая может автоматически корректировать свою форму в соответствии с конкретной проблемой.
# Определите функцию с помощью PyTorch активации Swish
class Swish(nn.Module):
def forward(self, x):
return x * torch.sigmoid(x)
Есть еще много других функции активации,Такие как Softmax, Mish, ELU и т. д.,Каждый из них имеет свои преимущества и применимые сценарии.
Выбор функции Эффективность зависит от многих факторов, таких как архитектура модели, тип данных и потребности конкретной задачи. Путем экспериментирования и настройки можно найти лучшую функцию для конкретной проблемы. активации。
Уровень пула играет важную роль в сверточных нейронных сетях и обычно используется для уменьшения размерности карт признаков, тем самым снижая вычислительные требования и увеличивая восприимчивое поле детектора признаков.
Максимальное объединение — один из наиболее часто используемых методов объединения. Он уменьшает размер карты объектов, выбирая максимальное значение в окне.
# Определите максимальный размер Слоя 2x2 с помощью PyTorch. объединения
max_pooling = nn.MaxPool2d(2)
Основное преимущество максимального пула заключается в том, что при нем сохраняются наиболее важные функции окна. Однако при этом теряются некоторые детали.
В отличие от максимального пула, средний пул использует среднее значение всех значений в окне.
# Определите 2x2 означает Слой, используя PyTorch объединения
average_pooling = nn.AvgPool2d(2)
Среднее объединение может облегчить проблему, связанную с тем, что максимальное объединение может привести к чрезмерному подчеркиванию определенных функций, но может преуменьшить некоторые важные функции.
Объединение глобальных средних значений — это более сложная стратегия объединения, которая вычисляет среднее значение для всей карты объектов. Это часто используется на последнем уровне сети, непосредственно для классификации.
# Определение глобального среднего значения с помощью PyTorch объединения
global_average_pooling = nn.AdaptiveAvgPool2d(1)
Размер и длина окна пула шага напрямую повлияет на размер вывода. Большие окна и длина шага уменьшит размер более существенно.
Слой Уже существуют некоторые современные альтернативы объединению, такие как использование слоев. сверткииздлина шаг больше 1 или используйте расширенную свертку. Эти методы могут обеспечить лучшее сохранение функций.
Выбор конкретного типа слоя пула зависит от требований задачи и конкретных характеристик данных. Глубокое понимание того, как работают различные методы объединения, может дать представление о том, как они влияют на производительность модели.
Слой нормализации играет ключевую роль в обучении глубоких нейронных сетей и в основном используется для повышения стабильности и скорости обучения. Слои нормализации помогают решить проблемы исчезновения и взрыва градиента во время обучения путем масштабирования входных данных до подходящего диапазона.
Пакетная нормализация масштабирует входные данные до нулевого среднего значения и единичной дисперсии путем нормализации входных данных для каждого канала признаков.
# Определение пакетов с помощью PyTorch нормализации
batch_norm = nn.BatchNorm2d(num_features=64)
Нормализация слоев — это вариант нормализации всех функций в одном образце. Он особенно популярен в обработке предложений и рекуррентных нейронных сетях.
# Определение нормализации слоев с помощью PyTorch
layer_norm = nn.LayerNorm(normalized_shape=64)
Нормализация экземпляра в основном используется для задач передачи стиля, где нормализация выполняется независимо для каждого канала каждого сэмпла.
# Определение нормализации экземпляра с помощью PyTorch
instance_norm = nn.InstanceNorm2d(num_features=64)
Групповая нормализация представляет собой компромисс между пакетной нормализацией и нормализацией слоев, разделяя каналы на разные группы и нормализуя внутри каждой группы.
# Определите нормализацию группы с помощью PyTorch
group_norm = nn.GroupNorm(num_groups=32, num_channels=64)
Выбор уровня нормализации должен основываться на конкретных задачах и архитектуре модели. Например,в визуальных задачах,Пакетная нормализация может быть предпочтительнее.,И в задачах НЛП,Нормализация слоев может быть более полезной.
Обучение и оптимизация сверточных нейронных сетей включает в себя множество ключевых компонентов и методов, которые вместе определяют производительность и удобство использования модели. Эти аспекты подробно описаны ниже.
Эффективные данные обучения являются основой успеха глубокого обучения. Для эффективного обучения сверточных нейронных сетей решающее значение имеет выбор и улучшение обучающих наборов.
Предварительная обработка является ключевым этапом подготовки обучающего набора, включающим:
Увеличение данных — это метод, который увеличивает объем данных путем применения случайных преобразований, тем самым увеличивая способность Модели к обобщению.
# Различные улучшения изображений с помощью PyTorch
from torchvision import transforms
transform = transforms.Compose([
transforms.RandomRotation(10),
transforms.RandomResizedCrop(224),
transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1)
])
Данные обычно делятся на обучающие, проверочные и тестовые наборы, чтобы гарантировать, что модель не переобучится.
Функция потерь измеряет разрыв между предсказаниями модели и истинной целью. Выбор подходящей функции потерь является важным шагом в оптимизации производительности модели.
Для непрерывного прогнозирования значений обычно используйте:
# Определение потерь MSE с использованием PyTorch
mse_loss = nn.MSELoss()
Для прогнозирования категорий общие функции потерь включают в себя:
# использоватьPyTorchопределениеперекрестная потеря энтропии
cross_entropy_loss = nn.CrossEntropyLoss()
Выбор подходящей функции потерь зависит не только от типа задачи, но и от архитектуры модели, распределения данных и конкретных бизнес-показателей. Иногда может потребоваться специальная функция потерь, чтобы уловить основные проблемы конкретной проблемы.
Оптимизатор используется для обновления весов нейронной сети, чтобы минимизировать функцию потерь. Каждый оптимизатор имеет свои специфические математические принципы и сценарии применения.
SGD — это самый простой алгоритм оптимизации.
# Определение SGD с помощью PyTorch с импульсомоптимизатор
optimizer_sgd_momentum = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
адаптивный оптимизатор может автоматически регулировать скорость обучения.
# Определите оптимизатор Адама с помощью PyTorch
optimizer_adam = torch.optim.Adam(model.parameters(), lr=0.001)
Скорость обучения является ключевым гиперпараметром оптимизатора, и ее настройка оказывает глубокое влияние на обучение модели.
Самый простой способ — использовать фиксированную скорость обучения. Но он может оказаться недостаточно гибким.
Более сложный подход заключается в динамической корректировке скорости обучения во время обучения.
# Определите косинусный с помощью PyTorch планировщик отжига
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer_adam, T_max=50)
Постепенно увеличивайте скорость обучения на ранних этапах обучения.
Регуляризация — это ключевая технология, позволяющая предотвратить переоснащение и улучшить способность модели к обобщению.
# Удалить диапазон PyTorch из L1 и L2
l1_лямбда = 0,0005
l2_лямбда = 0,0001
потеря = потеря + l1_lambda *torch.norm(веса, 1) + l2_lambda *torch.norm(веса, 2);
Случайным образом отключите некоторые нейроны, чтобы сделать модель более надежной.
Ускорьте обучение и уменьшите чувствительность инициализации за счет нормализации входных данных слоев.
Как упоминалось ранее, увеличение данных является важным методом регуляризации.
Оценка модели — это процесс измерения производительности модели, а настройка — это процесс улучшения производительности.
Используйте перекрестную проверку, чтобы оценить способность Модели к обобщению.
Если потери при проверке больше не уменьшаются, обучение прекращается, чтобы предотвратить переобучение.
Улучшите производительность за счет объединения нескольких моделей.
В этой статье всесторонне обсуждается сверточная нейронная сеть CNN, углубленный анализ фона и важности, введение определения и уровня, обучение и оптимизация, подробный анализ ее слоя свертки, функции активации, уровня пула, уровня нормализации и, наконец, списки. Он включает в себя множество ключевых технологий для обучения и оптимизации: подготовка и улучшение обучающего набора, функция потерь, оптимизатор, регулировка скорости обучения, методы регуляризации, а также оценка и настройка модели. Его цель — предоставить исследователям искусственного интеллекта комплексное руководство по использованию сверточных нейронных сетей (CNN).