Свёрточные нейронные сети: от основ до современных технологий. cnn.. cnn. python.. cnn. python. python3.. cnn. python. python3. tensorflow.. cnn. python. python3. tensorflow. глубокое обучение.. cnn. python. python3. tensorflow. глубокое обучение. компьютерное зрение.. cnn. python. python3. tensorflow. глубокое обучение. компьютерное зрение. Машинное обучение.. cnn. python. python3. tensorflow. глубокое обучение. компьютерное зрение. Машинное обучение. пуллинг.. cnn. python. python3. tensorflow. глубокое обучение. компьютерное зрение. Машинное обучение. пуллинг. фильтры.

Я подготовил для вас подробную статью о свёрточных нейронных сетях (Convolutional Neural Networks, CNN) — мощном инструменте машинного обучения, который изменил подход к обработке изображений. Моя цель — объяснить, как работают CNN, начиная с базовых понятий для новичков и заканчивая практическими примерами и сравнением с современными технологиями вроде Vision Transformers. Мы разберём их устройство, процесс обучения, популярные архитектуры и даже напишем код на Python. Давайте начнём!


1. Введение

Свёрточные нейронные сети (CNN) — это специализированный класс искусственных нейронных сетей, разработанный для задач, где важна пространственная структура данных, например, обработка изображений или видео. Впервые их идея была предложена Яном Лекуном в 1988 году, а широкую известность они получили после победы AlexNet в конкурсе ImageNet в 2012 году. CNN вдохновлены биологией: в зрительной коре мозга есть нейроны, реагирующие на локальные области, и эта концепция легла в основу их архитектуры.

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


2. Основы нейронных сетей

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

2.1. Что такое нейронные сети?

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

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

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

2.2. Искусственный нейрон

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

Математически:

y=fleft(sum_{i} (x_i cdot w_i) + bright)

  • x_i — входные данные (например, значения пикселей изображения).

  • w_i — веса (параметры, которые сеть подстраивает).

  • b — смещение (корректирующее значение).

  • f — функция активации, например, ReLU (f(x)=max(0, x)), добавляющая нелинейность.

Пример: если сеть распознаёт кошку, один нейрон может “голосовать” за наличие ушей, другой — за шерсть, а веса определяют, что важнее.

2.3. Слои в нейронной сети

Нейроны группируются в слои:

  • Входной слой: принимает исходные данные (например, 784 нейрона для изображения 28×28 пикселей).

  • Скрытые слои: обрабатывают данные, извлекая признаки.

  • Выходной слой: выдаёт результат (например, 10 нейронов для классификации цифр от 0 до 9).

Чем больше скрытых слоёв, тем сложнее задачи может решать сеть — это называется “глубокое обучение”.

2.4. Процесс обучения

Обучение — это настройка весов, чтобы сеть предсказывала правильные ответы. Процесс включает:

  1. Прямой проход: данные проходят через слои, и сеть делает предсказание.

  2. Вычисление ошибки: сравнение предсказания с реальным значением (например, с помощью функции потерь).

  3. Обратное распространение ошибки: корректировка весов с использованием градиентного спуска.

Аналогия: вы настраиваете радиоприёмник, крутя ручку (веса), пока не поймаете чёткий сигнал.


3. Свёрточные нейронные сети (CNN)

Теперь перейдём к CNN — специальной разновидности нейронных сетей, оптимизированной для изображений.

3.1. Почему обычные сети не подходят?

Полносвязные нейронные сети, где каждый нейрон соединён со всеми нейронами предыдущего слоя, плохо работают с изображениями. Для картинки 100×100 пикселей (10 000 входов) и скрытого слоя с 100 нейронами потребуется 1 миллион весов. Это не только медленно, но и не учитывает, что соседние пиксели связаны между собой (например, образуют края или текстуры). CNN решают эту проблему с помощью локальных операций.

3.2. Операция свёртки

Свёртка — это процесс, где небольшое ядро (фильтр) скользит по изображению и вычисляет новые значения, выделяя локальные признаки.

Математика свёртки

Для изображения I и ядра K размером m times n:

(I * K)(x, y)=sum_{i=0}^{m-1} sum_{j=0}^{n-1} I(x+i, y+j) cdot K(i, j)

Пример:

  • Изображение 5×5:

    1 2 3 4 5
    2 3 4 5 6
    3 4 5 6 7
    4 5 6 7 8
    5 6 7 8 9
    
  • Ядро 3×3 (для поиска вертикальных краёв):

    -1  0  1
    -1  0  1
    -1  0  1
    
  • Свёртка в позиции (1,1): (-1) cdot 1 + 0 cdot 2 + 1 cdot 3 + (-1) cdot 2 + 0 cdot 3 + 1 cdot 4 + (-1) cdot 3 + 0 cdot 4 + 1 cdot 5=-1 + 3 - 2 + 4 - 3 + 5=6.

Результат — карта признаков, где яркие области показывают вертикальные края.

Параметры

  • Размер ядра: обычно 3×3 или 5×5.

  • Шаг (stride): расстояние сдвига ядра (1 или 2).

  • Дополнение (padding): добавление нулей по краям (same padding — сохраняет размер, valid — уменьшает).

Визуализация свёртки

3.3. Компоненты CNN

CNN состоит из нескольких типов слоёв:

Свёрточный слой (Convolutional Layer)

  • Применяет несколько фильтров для извлечения признаков.

  • Выход — набор карт признаков.

Слой активации

  • Обычно ReLU (f(x)=max(0, x)).

  • Добавляет нелинейность, улучшая способность сети учить сложные зависимости.

Слой субдискретизации (Pooling Layer)

  • Уменьшает размер карт признаков.

  • Max Pooling: берёт максимум в окне (например, 2×2).

  • Пример:

    4  3    ->  4
    2  1
    

Полносвязный слой (Fully Connected Layer)

  • “Вытягивает” карты признаков в вектор и выполняет классификацию.


4. Архитектура CNN

Архитектура CNN — это комбинация слоёв, оптимизированная для конкретных задач. Рассмотрим ключевые примеры.

4.1. LeNet-5 (1998)

  • Автор: Ян Лекун.

  • Задача: распознавание цифр (MNIST).

  • Структура: 2 свёрточных слоя, 2 пулинга, 3 полносвязных.

  • Значимость: первая успешная CNN.

4.2. AlexNet (2012)

  • Прорыв в ImageNet.

  • Инновации: глубокая структура (8 слоёв), ReLU, dropout (случайное отключение нейронов для регуляризации).

  • Структура: 5 свёрточных, 3 полносвязных.

4.3. VGG (2014)

  • Особенность: много слоёв с фильтрами 3×3.

  • Глубина: до 19 слоёв.

4.4. GoogleNet (Inception, 2014)

  • Инновация: модули Inception (параллельные свёртки).

  • Эффективность: высокая точность при меньшем числе параметров.

4.5. ResNet (2015)

  • Проблема: глубокие сети теряют точность из-за затухания градиента.

  • Решение: остаточные связи (y=x + F(x)).

  • Глубина: до 152 слоёв.


5. Обучение CNN

Обучение CNN похоже на обучение обычных сетей, но с учётом свёрточных операций.

5.1. Обратное распространение ошибки

  1. Прямой проход: вычисление выхода.

  2. Функция потерь (например, кросс-энтропия):

    L=-frac{1}{N} sum_{i=1}^{N} y_i cdot log(hat{y}_i)

    Где y_i — истинный класс, hat{y}_i — предсказание.

  3. Обратный проход: обновление весов.

5.2. Оптимизаторы

  • Adam: адаптивный алгоритм, популярный для CNN.

  • Роль: ускоряет минимизацию ошибки.


6. Преимущества и недостатки CNN

6.1. Преимущества

  • Эффективность для изображений.

  • Меньше параметров благодаря общим весам.

  • Автоматическое извлечение признаков.

6.2. Недостатки

  • Требуют больших данных.

  • Менее эффективны для неструктурированных данных (например, текста).

  • Высокая вычислительная сложность.


7. Связь с современными технологиями

CNN долгое время были стандартом в компьютерном зрении, но появились альтернативы.

7.1. Vision Transformers (ViT)

  • Год: 2020.

  • Идея: изображение делится на патчи, которые обрабатываются как последовательность с механизмом self-attention.

  • Преимущества: лучше масштабируются на больших данных.

  • Недостатки: требуют больше вычислений.

  • Подробнее: Vision Transformer Paper.

7.2. Комбинация подходов

Модели вроде ConViT объединяют свёртки и трансформеры для лучшего результата.


8. Практический пример

Давайте реализуем CNN для классификации одежды из датасета Fashion MNIST.

8.1. Код на Python с TensorFlow

import tensorflow as tf
from tensorflow.keras import layers, models

# Загрузка данных
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.fashion_mnist.load_data()

# Предобработка
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255

# Создание модели
model = models.Sequential([
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),  # Первый свёрточный слой
    layers.MaxPooling2D((2, 2)),                                           # Первый пулинг
    layers.Conv2D(64, (3, 3), activation='relu'),                          # Второй свёрточный слой
    layers.MaxPooling2D((2, 2)),                                           # Второй пулинг
    layers.Conv2D(64, (3, 3), activation='relu'),                          # Третий свёрточный слой
    layers.Flatten(),                                                      # Вытягивание в вектор
    layers.Dense(64, activation='relu'),                                   # Полносвязный слой
    layers.Dense(10, activation='softmax')                                 # Выходной слой
])

# Компиляция
model.compile(optimizer='adam', 
              loss='sparse_categorical_crossentropy', 
              metrics=['accuracy'])

# Обучение
model.fit(train_images, train_labels, epochs=5, batch_size=64)

# Оценка
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f'Точность на тесте: {test_acc}')

8.2. Пояснения

  • Данные: 60 000 обучающих и 10 000 тестовых изображений 28×28.

  • Архитектура: 3 свёрточных слоя, 2 пулинга, 2 полносвязных.

  • Результат: точность ~90%.


9. Расширенные темы

9.1. Другие виды свёрток

  • Dilated Convolutions: разрежённые свёртки для увеличения поля зрения.

9.2. Рекомендации для изучения

  • Курс CS231n: CS231n.

  • Книга “Deep Learning” Яна Гудфеллоу.


10. Заключение

Свёрточные нейронные сети — это мощный инструмент, который произвёл революцию в компьютерном зрении. Они эффективно извлекают признаки из изображений, но требуют больших данных и вычислений. Vision Transformers бросают вызов CNN, но их сочетание открывает новые возможности.

Мы рассмотрели основы, архитектуры, обучение и написали код. Для наглядности рекомендую:

Автор: whynothacked

Источник

Рейтинг@Mail.ru
Rambler's Top100