Плотный слой: как преобразовать вектор высокой размерности в одномерный? (сигмоидная функция)

Вопрос или проблема

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

Но я не понимаю, как она преобразует размерность векторов?

Я предлагаю посмотреть серию видео на YouTube от 3blue1brown о нейронных сетях, чтобы лучше понять, что происходит.

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

Если у вас есть только одна единица в выходном слое, он будет выдавать только одно число между 0 и 1. Если у вас есть 100 единиц в плотном слое, он будет выдавать 100 чисел, каждое из которых между 0 и 1.

Не думайте о том, что каждый слой выполняет преобразование размерности ваших данных. Если ваше входное значение 20-мерное, а структура вашей сети состоит из входного слоя, скрытого слоя размерности 100 и выходного слоя размерности 1, как в этом примере:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# Определение нейронной сети с использованием Sequential
model = Sequential([
    Dense(100, input_dim=20, activation='relu'), # Входной слой с 20 входами и скрытым слоем с 100 нейронами
    Dense(1, activation='sigmoid')               # Выходной слой с 1 нейроном и сигмоидной функцией активации
])

Первый слой просто принимает входные данные, а второй слой имеет размерность 100. Но обратите внимание, что это преобразование размерности на самом деле не выполняется “в слое”, а между слоями. Это выполняется простым умножением матриц (в данном случае размерности 20×100).

Функция активации применяется только после умножения матриц. Поэтому мы можем записать эту нейронную сеть математически:

$x \in \mathbb{R}^{20}$

$y_1 = Relu(W_1.x) \quad ; \quad W_1 \in \mathbb{R}^{100 \times 20}$

$y_2 = Simoid(W_2.y_2) \quad ; \quad W_2 \in \mathbb{R}^{1 \times 100}$

Где $W_1, W_2$ матрицы представляют шаги слоев, а $y_2$ будет окончательным выходом.

Ответ или решение

Преобразование высокоразмерного вектора в одномерный в Dense слое с использованием функции сигмоида

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

Основы работы с Dense слоями

Dense слой (полносвязный слой) в нейронных сетях принимает вектор-данные входного слоя и преобразует его в новый вектор, состоящий из значений, который определяется заданным числом нейронов. Например, если вы имеете входной вектор размерности 100, Dense слой может вернуть вектор другой размерности в зависимости от числа нейронов, заданных в этом слое.

Архитектура сети

Рассмотрим пример нейронной сети, которая преобразует вектор размерности 100 в одномерный выход:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# Определение нейронной сети с помощью Sequential
model = Sequential([
    Dense(100, input_dim=100, activation='relu'), # Входной слой с 100 входами и скрытым слоем на 100 нейронов
    Dense(1, activation='sigmoid')                # Выходной слой с 1 нейроном и сигмоидной активацией
])
Объяснение преобразований
  1. Матрицы весов: Когда Dense слой обрабатывает входной вектор, он умножает его на матрицу весов. Для данной сети размером 100-100, матрица весов будет размером ( W_1 \in \mathbb{R}^{100 \times 100} ). Это позволяет создать новый вектор выходных данных размером 100.

  2. Применение функции активации: После того как соответствующая матрица была умножена на входной вектор, результатом этого умножения будет 100-мерный вектор. К этому вектору затем применяется функция активации (например, ReLU для скрытого слоя), которая активирует нейроны в зависимости от их значений.

  3. Переход к выходному слою: На следующем шаге обработанный вектор передается в выходной слой (в данном случае слой размерностью 1). Здесь предыдущий 100-мерный вектор умножается на матрицу весов другого слоя, ( W_2 \in \mathbb{R}^{1 \times 100} ), что приводит к выходному значению. Результат этого умножения — это одно число, которое затем передается в функцию активации сигмоид:

    [
    y_2 = \text{Sigmoid}(W_2 \cdot y_1)
    ]

Здесь сигмоидная функция обеспечивает, что конечный выход будет в диапазоне [0, 1], что идеально подходит для задач бинарной классификации.

Краткий вывод

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

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

Оцените материал
Добавить комментарий

Капча загружается...