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

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

Чем нейронная сеть отличается от машинного обучения?

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

Зачем использовать глубокое обучение?

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

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

Преимущества понимания структуры?

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

Как работает нейронная сеть?

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

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

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

Строки сетки располагаются в виде горизонтального одномерного массива, который затем преобразуется в вертикальный массив, образуя первый слой нейронов. Именно так;

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

В данном случае у нас есть 28x28 входных пикселей, что дает нам всего 784 нейрона во входном слое. Каждый нейрон будет иметь значение активации либо 0, либо 1, в зависимости от того, является ли соответствующий пиксель на входном изображении черным или белым соответственно.

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

Скрытые слои

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

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

Прямое распространение

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

Математическое уравнение:

y = g (wo + Sigma xi. wi) or y = g (wo + Xt. W)

где y — выход нейронной сети, g — нелинейная функция активации, xi относится к i-му входному признаку или входная переменная, wi — это вес, связанный с i-м входным признаком или переменной, а wo — член смещения, представляющий собой постоянное значение, добавляемое к линейной Комбинация входов.

Сигма xi. wi: это линейная комбинация входных признаков и связанных с ними весов. Этот термин также иногда называют «взвешенной суммой» входных данных.

Обратное распространение

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

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

Терминология, используемая в нейронных сетях

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

  • Смещение.Смещение — это еще один изученный параметр, который добавляется к взвешенной сумме входных данных для нейрона в данном слое. Это дополнительный вход нейрона, который помогает регулировать выход функции активации.
  • Нелинейная функция активации: нелинейная функция активации применяется к выходу нейрона, чтобы ввести нелинейность в сеть. Нелинейность важна, потому что она позволяет сети моделировать сложные нелинейные отношения между входами и выходами. Общие функции активации, используемые в нейронных сетях, включают сигмовидную функцию, функцию ReLU (выпрямленную линейную единицу) и функцию softmax.
  • Функция потерь. Это математическая функция, которая измеряет ошибку или разницу между прогнозируемым выходом нейронной сети и истинным выходом. эмпирические потери измеряют общие потери по всему набору данных. Кросс-энтропийные потери обычно используются с моделями, которые выводят вероятность от 0 до 1, а среднеквадратичные потери ошибки используются с моделями регрессии, которые выводят непрерывные действительные числа. Цель состоит в том, чтобы минимизировать функцию потерь во время обучения, чтобы повысить точность прогнозов сети.
  • Оптимизация потерь. Это процесс минимизации ошибок или потерь, понесенных нейронной сетью при прогнозировании. Это делается путем настройки весов сети.
  • Градиентный спуск. Это алгоритм оптимизации, используемый для нахождения минимума функции, например функции потерь нейронной сети. Он включает в себя итеративную корректировку весов в направлении отрицательного градиента функции потерь. Идея состоит в том, чтобы продолжать перемещать веса в направлении, уменьшающем потери, пока мы не достигнем минимума.

Давайте вспомним термины на реальных примерах

1. Рассмотрим сценарий, в котором компания хочет максимизировать свою прибыль, продавая продукт. У них может быть модель, которая прогнозирует прибыль на основе различных факторов, таких как цена, расходы на маркетинг и т. д. Смещение может относиться к любым фиксированным факторам, влияющим на прибыль продукта, но не связанным напрямую с цена или расходы на маркетинг. Например, если продукт является сезонным товаром, может быть предвзятость в отношении более высокой прибыли в определенное время года. Разница между фактической прибылью и прогнозируемой прибылью представляет собой функцию убытков. Градиентный спуск включает в себя вычисление градиента функции потерь по отношению к каждому входному признаку и использование этого градиента для итеративной корректировки значений признаков до тех пор, пока не будут найдены оптимальные значения, а также процесс, включающий поиск оптимальных значений для входными функциями для минимизации функции потерь является оптимизация потерь. Модель прогнозирования прибыли может использовать нелинейную функцию активации для преобразования входных характеристик (например, цены, маркетинговых расходов) в прогнозируемое значение прибыли. Эту функцию можно использовать для введения нелинейных отношений между входными характеристиками и выходной прибылью.

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

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

Использованная литература:

P.S. Я выражаю благодарность сообществу 3Blue1Brown, которое вдохновило меня на написание этой статьи.. :)