Вопрос или проблема
Я на уроке 4 курса Fast AI “Глубокое обучение для программистов” и несколько раз пересматривал один и тот же урок, но, похоже, не совсем понимаю несколько вещей. Я хочу разобраться в том, что происходит, прежде чем двигаться дальше.
На этом уроке речь идет о MNIST — Джереми распознает 3 и 7. У него есть 12000 изображений (игнорируя мини-пакеты) по около 800 пикселей каждое, и его тензор имеет форму (12000, 800)
. Он случайным образом генерирует 800 весов, по одному для каждого пикселя, плюс смещение (цель которого я тоже не совсем понимаю).
Так что для первого изображения он умножает значение изображения на вес для этого пикселя. Если значение пикселя 0.9, а вес 0.1, то 0.9*0.1 = 0.09
. Или если значение пикселя 0.5, а вес 0.6, то 0.5*0.6 = 0.3
.
(и затем добавляется смещение, и это делается для каждого изображения)
Я не понимаю, в чем цель или польза умножения этих чисел. Если бы я хотел получить оценку того, насколько точно наш вес соответствует значению пикселя, я бы сделал abs(value - weight)
.
А затем сложение всех этих значений дало бы мне оценку точности моих весов.
Вот где я запутался. Что я упускаю?
Входные изображения содержат в общей сложности 784 (28 * 28) пикселя, что означает, что у модели 784 входа. Если мы затем используем один узел в следующем слое, который соединен со всеми входами, мы также получаем 784 веса, так как каждый пиксель соединен с узлом в следующем слое. См. также следующую картинку:
Входной слой содержит все различные входы в нашу модель (т.е. все пиксели), и, как вы можете видеть, все эти входы соединены со всеми узлами в следующем слое. Каждое соединение/линия имеет определенный вес, количество весов для полностью связанного слоя равно n_input * n_output
. В курсе fast ai это означает, что есть 784 веса (28 * 28 * 1
), в то время как в приведенном ниже примере есть 12 весов (3 * 4
) для первого и второго слоя и 8 (4 * 2
) для второго и третьего слоя.
Причина для смещения, похоже, уже объяснена в самом ноутбуке, без смещения функция недостаточно гибка. Если все входы равны нулю, то выход также будет равен нулю, в то время как он должен быть числом, отличающимся от нуля. Смещение позволяет это сделать, сдвигая функцию вверх или вниз, смотрите также термин b
для линейной регрессии.
Возможно, размышления о соотношении между нейронными сетями и регрессией могут помочь вам понять роль весов. Если вы возьмете неглубокую нейронную сеть с одним слоем, выход для одного входного примера с $m$ признаками будет:
$y = f(w_0 + \sum_{i=1}^m w_i x_i)$
где $w_0$ — это смещение, а $f$ — ваша активационная функция. Вы можете понять, что это формула для нелинейной регрессии, где смещение является пересечением — она сводится к линейной регрессии, когда $f$ является идентичностью.
Таким образом, веса — это просто параметры этой регрессии, это почему вы умножаете входные значения на веса.
Глубокая нейронная сеть просто добавляет другие слои, чтобы обеспечить произвольную (не ограниченную функцией $f$) нелинейность — на самом деле уже два слоя дают возможность подгонять произвольные функции, при условии, что достаточно нейронов, но такие сети могут быть практически невозможны для подгонки под данные, и здесь дополнительныеслои с какой-то структурой приходят на помощь, но это уже другая история.
Ваши входные признаки — это значения пикселей, поэтому они умножаются на веса, потому что именно так формулируется модель, подобно регрессии. Надеюсь, это поможет прояснить ситуацию.
Ответ или решение
Когда вы изучаете основы глубокого обучения и методы работы с нейронными сетями, важно понять, как работают веса и смещения (bias). Разберем вашу ситуацию с процессом умножения весов на значения пикселей на примере набора данных MNIST.
### Введение в набор данных MNIST
MNIST (Modified National Institute of Standards and Technology) — это стандартный набор изображений, содержащий рукописные цифры. Каждый изображение имеет размер 28×28 пикселей, что дает 784 пикселя на изображение. В вашем случае вы упоминаете 800 пикселей, что может быть связано с использованием скрытых или дополнительных коэффициентов, но в общем концептуальном объяснении это несущественно.
Ваши данные имеют форму тензора (12000, 800), где 12000 — это количество изображений, а 800 — количество пикселей (или весовых коэффициентов).
### Умножение весов на пиксели
Объяснение того, почему мы умножаем значения пикселей на соответствующие веса, можно провести через аналогию с линейной регрессией. Формула для линейной регрессии выглядит следующим образом:
\[ y = w_0 + w_1 x_1 + w_2 x_2 + \ldots + w_m x_m \]
где:
– \(y\) — это предсказание,
– \(w_0\) — слагаемое (bias),
– \(w_i\) — веса, соответствующие каждому входу \(x_i\),
– \(x_i\) — значения пикселей (в данном случае).
В случае нейронной сети, веса управляют тем, насколько важно каждое значение пикселя в предсказании. Умножение пикселей на веса позволяет модели присвоить различным участкам изображения разный уровень значимости. Например, если пиксель имеет высокое значение (близок к 1) и его вес тоже высок, это сильно повлияет на итоговый результат. Однако, если вес нулевой, тогда этот пиксель не будет иметь эффекта на итоговый вывод.
Ваше предложение о том, чтобы оценивать эффективность весов с помощью \( \text{abs(value – weight)} \), не совсем соответствует цели модели. Здесь главная задача заключается не в нахождении “правильных” весов, а в том, чтобы настроить веса так, чтобы модель могла делать точные прогнозы на основе входных данных.
### Понимание Bias
Смещение (bias) служит для того, чтобы увеличить гибкость модели. Без смещения, когда все входные данные равны нулю, выход тоже будет равен нулю. Это затрудняет модели предсказывать значения, отличные от нуля, что может быть критично в задачах классификации.
Смещение, по сути, позволяет сдвигать функцию, что делает её более способной к моделированию сложных взаимосвязей в данных.
### Заключение
Умножение весов на значения пикселей — это центральный процесс, позволяющий модели адаптироваться к данным, на которых она обучается. Понимание этого процесса поможет вам лучше осознать, как нейронные сети работают в общем. Подходите к этому шаг за шагом, и скоро вы увидите, как эти концепции объединяются для решения текущих задач в области глубокого обучения.
Если у вас возникнут дополнительные вопросы или непонимания, не стесняйтесь обращаться. Понимание этих основ важно для успешного продвижения в обучении.