- Вопрос или проблема
- Размер входного слоя
- Размер пакета
- Взаимосвязь между двумя
- Пример
- Примечание:
- Ответ или решение
- Связь между размером батча и числом нейронов на входном слое LSTM
- Введение
- Размер входного слоя
- Определение размера батча
- Взаимосвязь между размерами батча и нейронов на входном слое
- Независимость параметров
- Как это работает на практике
- Пример обработки данных в LSTM
- Заметка о размере LSTM-слоя
- Заключение
Вопрос или проблема
Что касается нейронных сетей LSTM, мне не удается понять взаимосвязь между размером пакета, количеством нейронов в входном слое и количеством “переменных” или “столбцов” на входе. (Предполагая, что связь существует и несмотря на примеры, показывающие обратное, я не могу понять, почему связи нет)
Для ясности я собираюсь использовать пример для формулировки своего вопроса.
Предположим, что набор данных содержит три столбца входных данных и один столбец выходных данных. Значит, это будет что-то вроде
входная переменная 1 входная переменная 2 входная переменная 3 выходная переменная 1
Насколько я понимаю, входной слой сети LSTM должен иметь 3 нейрона, соответствующих каждой из входных переменных. Он не может быть меньше или больше. Хотя я видел примеры, такие как этот ответ (который, как кажется, очень хорошо описан, но, к сожалению, я не могу его понять.)
Теперь скажем, что у нас есть 50 строк из вышеупомянутых 4 столбцов.
Что, по сути, для меня означает, что у нас есть 50 образцов. Теперь, если размер пакета составляет 5, то сколько у нас нейронов на входе? Является ли количество нейронов во входном слое независимым от размера пакета? Как я понимаю, размер пакета — это количество образцов, которые нейронная сеть увидит перед обновлением своих весов. Итак, предположим, что у нас есть только три нейрона во входном слое, тогда мы будем передавать первую строку входной переменной, затем вторую строку входной переменной и повторять это до пятой строки, прежде чем мы обновим веса. Чем это будет отличаться от передачи только пятой строки?
В общем, я думаю, что вы поняли оба понятия. Я постараюсь подробнее рассмотреть оба из них.
Размер входного слоя
В нейронных сетях (NN) размер входного слоя всегда равен количеству переменных (или признаков), как мы обычно их называем в машинном обучении), в ваших данных.
Размер пакета
Это относится к количеству образцов данных, которые сеть увидит перед обновлением своих весов.
Обычно, выполняя градиентный спуск (то есть алгоритм, который обучает NN), сеть вводит все образцы, чтобы рассчитать функцию потерь и обновить веса. Однако, особенно в глубоких нейронных сетях (DNN), это невозможно, так как размер набора данных слишком велик и даже если бы сеть имела достаточно памяти, вычисление градиентов было бы неэффективным. Вместо этого мы передаем несколько образцов (называемых пакетом) за раз и обучаем модель на них. Затем передается следующий пакет и так далее. Количество образцов, которое мы вводим в модель на каждой итерации, называется размером пакета.
Взаимосвязь между двумя
В теории, если у вас много признаков (в тысячах), вы не можете использовать достаточно большой размер пакета, и чем больше у вас признаков, тем меньше размер пакета вы можете использовать. Тем не менее, на практике я обнаружил, что оба понятия практически не связаны! В глубоких нейронных сетях размер пакета в основном определяется размером модели. Простая (но не всегда точная) способ оценить этот размер — это количество обучаемых параметров в модели. Большее количество параметров означает больше памяти для модели (и более длительные вычисления градиентов), что приводит к меньшему размеру пакета. В DNN, которые имеют несколько слоев, лишь небольшая часть параметров — это параметры входного слоя. Таким образом, количество признаков играет небольшую роль в выборе размера пакета.
Пример
В вашем примере вы говорите, что у вас 50 строк и 4 столбца, из которых 3 являются входными переменными.
Количество нейронов во входном слое будет 3, чтобы соответствовать количеству входных переменных (или признаков). Это мы не можем изменить, даже если бы захотели!
Размер пакета — это то, что мы можем изменить. Давайте скажем, что мы используем размер пакета 5.
1-я итерация:
На первом этапе NN будет предоставлено первые 5 строк данных. Для каждой из них первые три столбца будут переданы на первый слой сети, который вычислит выход. После того, как все 5 выходов будут сгенерированы, они будут сравнены с первыми 5 строками 4-го столбца, чтобы рассчитать функцию потерь. Используя эту потерю, сеть вычислит градиенты и выполнит обновления. Опять же, эта потеря соответствует первым 5 образцам, а не только пятому.
2-я итерация:
Строки 6-10 будут переданы сети, которая выполнит ту же процедуру, что и на первом этапе.
10-я итерация:
Строки 45-50 будут переданы сети. Это обозначает момент, когда NN увидела каждый образец данных один раз. В контексте машинного обучения мы называем это эпохой. В этот момент данные перемешиваются и начинается 1-я итерация 2-й эпохи.
Примечание:
В большинстве фреймворков образцы в каждом пакете обрабатываются параллельно сетью и не последовательно. Это не влияет на результат, я просто хотел на это указать.
Я не Соглашаюсь с @Djib2011 на то, что он сказал: “Количество нейронов во входном слое будет 3, чтобы соответствовать количеству входных переменных (или признаков). Это мы не можем изменить, даже если бы захотели!” Количество нейронов, также называемое единицами или узлами, является совершенно свободным параметром, который вы задаете по своему усмотрению. Не обязательно, чтобы оно совпадало с количеством признаков. Тем не менее, это определяет размер выходов этого слоя.
Посмотрите пример здесь https://keras.io/layers/core/, где первый слой
model.add(Dense(32, input_shape=(16,)))
Здесь 32 — это количество нейронов, а 16 — это количество признаков. Другой скрытый слой
model.add(Dense(32))
где 32 также является количеством нейронов, и в keras вам не нужно указывать размер входа (выход из предыдущих слоев) после первого скрытого слоя (примечание: входной слой не является истинным слоем, а является тензором).
Также посмотрите этот пример https://machinelearningmastery.com/tutorial-first-neural-network-python-keras/, где автор упомянул:
Мы можем собрать все вместе, добавив каждый слой:
- Модель ожидает строки данных с 8 переменными (аргумент input_dim=8)
- Первый скрытый слой имеет 12 узлов и использует активационную функцию relu.
- Второй скрытый слой имеет 8 узлов и использует активационную функцию relu.
- Выходной слой имеет один узел и использует сигмоидальную активационную функцию.
# define the keras model
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
Я нашел очень хорошее объяснение о итерациях и размере пакета, размещенное здесь много лет назад от @Djib2011. Теперь мой вопрос касается следующего. Если размер пакета (5) строк (1-5) был передан пяти ячейкам lstm (1-5) для пяти итераций градиентного процесса (гипотеза с параллельными итерациями), и второй размер пакета строк (6-10) был передан другим пяти ячейкам lstm (6-10), что произошло в скрытом слое с 32 ячейками lstm, так как 32 не делится на 5?? Спасибо
Ответ или решение
Связь между размером батча и числом нейронов на входном слое LSTM
Введение
Понимание взаимосвязи между размером батча и количеством нейронов на входном слое нейронной сети, особенно в таких архитектурах, как LSTM (долгая краткосрочная память), является важной частью обучения моделей глубокого обучения. В данном ответе мы рассмотрим основные аспекты этой взаимосвязи, опираясь на понятие размера батча и структуры входного слоя.
Размер входного слоя
Количество нейронов в входном слое нейронной сети определяется числом входных переменных (также называемых признаками или фичами) в ваших данных. В вашем примере, если у вас три входные переменные (колонны), то количество нейронов в входном слое должно быть равно трем. Это требование связано с тем, что каждый нейрон на входе отводится для обработки одной из переменных.
Определение размера батча
Размер батча – это количество данных (примеров), которые обрабатываются одновременно до обновления весов модели. Лучше всего это понимать как количество образцов, которые используются для вычисления градиента за один шаг оптимизации. Когда вы задаете размер батча равным 5, это означает, что в каждой итерации обучения модель будет обрабатывать 5 последовательных образцов, прежде чем обновить свои параметры.
Взаимосвязь между размерами батча и нейронов на входном слое
Независимость параметров
Как было упомянуто ранее, количество нейронов в входном слое зависит исключительно от числа входных признаков. Оно фиксировано и не изменяется в зависимости от выбранного размера батча. Это означает, что, имея три входные переменные, вы всегда будете использовать три нейрона на входе, независимо от того, используете ли вы размер батча 5, 10 или любой другой.
Как это работает на практике
При размере батча, равном 5, в первой итерации будет обработано 5 первых образцов (строк) данных. Модель получит значения трех переменных для каждого из этих 5 образцов и вычислит соответствующие выходы. После вычисления всех выходов для текущего батча будет рассчитан общий градиент на основе этих выходов и фактических значений целевой переменной. Затем произойдет обновление весов сети.
Пример обработки данных в LSTM
Если у вас есть 50 строк данных и размер батча равен 5, процесс обучения будет следующим:
- Итерация 1: Модель получает строки 1-5. Каждая строка передается через входной слой с тремя нейронами.
- Итерация 2: Строки 6-10 проходят через ту же структуру; входной слой снова будет иметь три нейрона, обрабатывающих соответствующие значения.
- Итерация 10: Строки 46-50 повторно обрабатываются, обновляя вес модели, когда сети видят все образцы.
Заметка о размере LSTM-слоя
Если вы используете LSTM слой с, например, 32 нейронами, необходимо отметить, что размер батча и количество LSTM-нейронов не должны быть взаимосвязаны в контексте обработки данных. Важно помнить, что выход LSTM слоя будет обрабатываться по размеру батча, и в случае когда количество нейронов в LSTM больше размера батча, сеть все равно будет функционировать корректно, обрабатывая большее количество внутренних состояний.
Заключение
В заключение можно сказать, что размер входного слоя зафиксирован в зависимости от числа входных переменных, в то время как размер батча является параметром, который можно изменять для оптимизации процесса обучения. Осознание этой взаимосвязи позволяет более эффективно настраивать модели глубокого обучения и понимать, как лучше всего их обучать, что, в свою очередь, ведет к более успешным результатам в области машинного обучения.