Джейд Картер – Сверточные нейросети (страница 6)
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(32*32*3, 128)
self.fc2 = nn.Linear(128, 64)
self.fc3 = nn.Linear(64, 10) # 10 классов изображений
self.softmax = nn.Softmax(dim=1) # Применение Softmax по размерности 1 (по классам)
def forward(self, x):
x = torch.flatten(x, 1)
x = torch.relu(self.fc1(x))
x = torch.relu(self.fc2(x))
x = self.fc3(x)
x = self.softmax(x) # Применение Softmax к выходам
return x
# Создание экземпляра модели
model = SimpleNN()
# Обучение модели и применение Softmax в выходном слое
```
В этом примере мы используем нейронную сеть с тремя полносвязными слоями. После двух скрытых слоев мы применяем ReLU в качестве функции активации, а в выходном слое – Softmax. Softmax преобразует выходные значения нейронов в вероятности для каждого класса, суммирующиеся до 1. Это позволяет нам интерпретировать выход модели как вероятности принадлежности к каждому классу, что особенно полезно в задачах многоклассовой классификации.
Эти функции активации важны для эффективной работы нейронных сетей, позволяя им адаптироваться к сложным структурам данных и делать точные предсказания в различных задачах машинного обучения и компьютерного зрения. Комбинация этих функций с другими компонентами нейронных сетей обеспечивает их способность анализировать и извлекать полезные признаки из данных, что делает их мощным инструментом для решения разнообразных задач.
Развитие архитектуры CNN
Сверточные нейронные сети (CNN) являются ключевым инструментом в обработке данных с сетчатой структурой, таких как изображения. Их развитие прошло через несколько этапов, начиная с ранних моделей, вдохновленных биологическими системами, и заканчивая современными архитектурами, обладающими высокой эффективностью и точностью.
1. Ранние модели: Неокогнитрон, предложенный Кунихико Фукусимой в 1980 году, представляет собой важный момент в истории развития сверточных нейронных сетей (CNN). Эта модель была вдохновлена структурой и функционированием зрительной коры головного мозга у животных, где нейроны отвечают за обнаружение и выделение определенных признаков в изображениях. Фукусима ввел ключевые концепции, которые легли в основу сверточных сетей, такие как свертка и пулинг.
Сверточная операция, предложенная Фукусимой, позволяла модели обрабатывать изображения, выделяя локальные признаки через прохождение окна (ядра) по входным данным и выполнение умножения на веса. Пулинг, или субдискретизация, в свою очередь, уменьшала размерность данных, сохраняя основные характеристики, что делало модель устойчивой к небольшим трансформациям изображений.
Хотя неокогнитрон сам по себе не обладал мощностью современных CNN и в основном использовался в контексте исследований, его идеи и методы стали отправной точкой для создания более сложных и эффективных архитектур. Этот вклад Фукусимы в мир нейронных сетей сделал возможным развитие сверточных моделей, которые сегодня успешно применяются в широком спектре задач компьютерного зрения, начиная от распознавания объектов до анализа медицинских изображений.
2. LeNet-5 (1998): LeNet-5, разработанная Яном Лекуном в 1998 году, занимает особое место в истории сверточных нейронных сетей (CNN), став одной из первых успешных архитектур для распознавания рукописных цифр. Эта модель была создана для решения задачи распознавания цифр на изображениях, что стало актуальным для автоматической обработки почтовых индексов и других сценариев, связанных с распознаванием письменного текста.
Особенностью LeNet-5 было то, что она использовала несколько слоев свертки и пулинга, что позволило ей эффективно извлекать признаки из изображений разной сложности. Сверточные слои позволяли модели автоматически находить локальные шаблоны и признаки в изображениях, такие как грани, углы и текстуры. После этого применялись слои пулинга, которые уменьшали размерность данных, сохраняя важные характеристики и ускоряя вычисления.
Кроме того, в LeNet-5 присутствовали полносвязные слои, которые объединяли выделенные признаки и выполняли классификацию по распознанным цифрам. Эти слои играли решающую роль в формировании окончательных предсказаний модели. Благодаря комбинации сверточных, пулинговых и полносвязных слоев LeNet-5 стала мощным инструментом в задачах распознавания и классификации рукописных цифр, а также стимулировала дальнейшее развитие сверточных архитектур в области компьютерного зрения.
3. AlexNet (2012): AlexNet, представленная в 2012 году Джеффри Хинтоном и его командой, стала революционным событием в области компьютерного зрения и глубокого обучения. Эта архитектура не только продемонстрировала мощь глубоких сверточных нейронных сетей (CNN), но и существенно улучшила результаты в задаче классификации изображений на конкурсе ImageNet.
Основной особенностью AlexNet было использование восеми сверточных и полносвязных слоев, что на тот момент было революционным для области компьютерного зрения. Эта глубокая архитектура позволила модели извлекать более абстрактные признаки из изображений и более эффективно решать сложные задачи классификации. Кроме того, для улучшения производительности использовались графические процессоры (GPU), что значительно ускорило обучение и выполнение модели.
Применение AlexNet привело к значительному улучшению точности классификации изображений на датасете ImageNet, снизив ошибку на несколько процентных пунктов по сравнению с предыдущими методами. Этот успех показал потенциал глубокого обучения и сверточных нейронных сетей в области компьютерного зрения, стимулировав дальнейшее развитие этой области и внедрение CNN в широкий спектр приложений, от распознавания объектов до автономного вождения.
4. VGGNet (2014): VGGNet, представленная в 2014 году, стала важным шагом в развитии сверточных нейронных сетей, предложив новый подход к архитектуре сети. Её создание было обусловлено стремлением к увеличению глубины нейронной сети с целью улучшения её способности к извлечению признаков из изображений. В отличие от предыдущих архитектур, VGGNet предлагала использовать последовательные слои свертки с небольшими ядрами размером 3x3, что значительно упростило структуру сети.
Этот подход позволил строить нейронные сети с большей глубиной, что отразилось на их способности к обучению и классификации изображений. Вместо того чтобы использовать большие ядра свертки, как это делали предыдущие модели, VGGNet сосредотачивалась на использовании множества последовательных слоев с более мелкими ядрами, что давало более гибкий и эффективный способ анализа изображений.
Благодаря своей простоте и эффективности, VGGNet стала популярным выбором для многих задач компьютерного зрения. Её способность строить глубокие сети и достигать высокой точности в классификации изображений привлекла внимание исследователей и инженеров, стимулируя дальнейшее развитие сверточных нейронных сетей и их применение в различных областях, от распознавания объектов до медицинской диагностики.
5. GoogLeNet (Inception, 2014): GoogLeNet, представленная в 2014 году, представила инновационный подход к архитектуре сверточных нейронных сетей (CNN), введя новый тип модулей, названных Inception. Эти модули существенно отличались от предыдущих подходов, так как объединяли свертки с различными размерами ядер в одном слое. Это позволило сети одновременно изучать признаки на разных уровнях детализации, что существенно улучшило её способность к анализу изображений.
Использование Inception-модулей в архитектуре GoogLeNet привело к созданию более эффективных сетей с меньшим количеством параметров по сравнению с традиционными архитектурами. Это стало возможным благодаря параллельному применению сверток различных размеров внутри одного модуля, что позволило сети эффективно изучать различные аспекты изображений на разных масштабах.
Кроме того, GoogLeNet внедрила дополнительные техники, такие как использование 1x1 сверток для уменьшения размерности признакового пространства и улучшения вычислительной эффективности. Эти инновации помогли создать сеть, которая достигала высокой точности в классификации изображений при более низкой вычислительной сложности, что было важным преимуществом при работе с огромными наборами данных, такими как ImageNet.
6. ResNet (2015): ResNet, представленная в 2015 году, предложила инновационное решение для проблемы исчезающего градиента, с которым сталкиваются глубокие нейронные сети при обучении. Одной из ключевых проблем при обучении глубоких сетей является затухание градиентов: по мере прохождения градиентов через множество слоев они могут становиться слишком малыми, что затрудняет обучение и приводит к ухудшению производительности сети. ResNet решает эту проблему с помощью введения остаточных связей, или "скачков" ("residual connections"), которые позволяют пропускать градиенты через несколько слоев непосредственно, минуя промежуточные операции.
Остаточные связи позволяют сети строить глубокие архитектуры, состоящие из сотен или даже тысяч слоев, сохраняя при этом стабильный градиент и обеспечивая более эффективное обучение. Это достигается путем добавления к выходу слоя предыдущего слоя (с учётом функции активации) или, иначе говоря, суммирования выхода текущего слоя с пропущенным через нелинейную функцию активации выходом предыдущего слоя.