#machine-learning #pytorch
#машинное обучение #pytorch
Вопрос:
Читая о машинном обучении, я продолжаю видеть ссылки на «входной вектор» или «вектор признаков», 1d тензор, который содержит входные данные для нейронной сети. Так , например, изображение в оттенках серого 28×28 будет 784-мерным вектором.
Затем я также продолжаю видеть ссылки на изображения, являющиеся 4-мерным тензором с размерами, равными числу в пакете, цветовому каналу, высоте и ширине. Например, вот как это описано в «Глубокое обучение с помощью Python, автор Франсуа Шоле».
Мне интересно, почему это описывается по-разному? Когда один будет использоваться по сравнению с другим?
Ответ №1:
Есть два основных соображения.
Первое связано с пакетной обработкой. Поскольку мы обычно хотим выполнять каждый шаг оптимизации на основе вычисления градиента для нескольких обучающих примеров (а не только для одного), полезно запускать вычисления для всех из них сразу. Поэтому стандартный подход во многих библиотеках заключается в том, что первое измерение является пакетным измерением, и все операции применяются независимо для каждого подтензора вдоль первого измерения. Поэтому большинство тензоров в реальном коде, по крайней мере, двумерные: [batch, any_other_dimensions...]
. Однако, с точки зрения нейронной сети, пакетирование — это деталь реализации, поэтому ее часто пропускают для наглядности. В вашей ссылке говорится о 784-мерных векторах, которые на практике почти несомненно обрабатываются пакетами, поэтому, например, тензоры с размером пакета 16 будут иметь размер [batch, features] = [16, 784]
. Подводя итог, мы имеем первое измерение, описанное как пакетное, а затем есть те, any_other_dimensions...
которые в приведенном выше примере являются одним features
измерением размером 784.
Затем идут 4-мерные тензоры, которые возникают при использовании сверточных нейронных сетей вместо полностью связанных. Полностью подключенная сеть использует полные матрицы, что означает, что каждый нейрон предыдущего уровня вносит свой вклад в каждый нейрон следующего уровня. Можно рассматривать сверточные нейронные сети как использующие специально структурированную разреженную матрицу, где каждый нейрон предыдущего уровня влияет только на некоторые нейроны следующего уровня, а именно те, которые находятся на некотором фиксированном расстоянии от его местоположения. Следовательно, свертки накладывают пространственную структуру, которая должна быть отражена в промежуточных тензорах. Следовательно, вместо [batch, features]
нам нужно [batch, x, y]
отражать пространственную структуру данных. Наконец, сверточные нейронные сети в повседневной практике немного отличаются от полносвязных: у них есть понятие множества «объектов», которые локализованы пространственно, что приводит к так называемым «картам объектов», а тензор повышается до 4d: [batch, feature, x, y]
. Каждое значение tensor_new[b, f, x, x]
вычисляется на основе всех предыдущих значений tensor_previous[b', f', x', x']
с учетом следующих ограничений:
b = b'
: мы не смешиваем элементы пакетаx'
находится не более чем на некотором расстоянии отx
и аналогично дляy'
: мы используем только значения в пространственной окрестности- Используются все
f'
s: это «полностью подключенная» часть.
Сверточные нейронные сети лучше подходят для визуальных задач, чем полносвязные, которые становятся неосуществимыми для достаточно больших изображений (представьте, что вы храните полносвязную матрицу размера (1024 * 1024) ^ 2
для 1024 x 1024px
изображения). тензоры 4d в CNNs специфичны для 2d-зрения, вы можете столкнуться с тензорами 3d при обработке сигналов 1d (например, звука): [batch, feature, time]
, 5d при обработке объемности 3d [batch, feature, x, y, z]
и совершенно другими макетами в других типах сетей, которые не являются ни полносвязными, ни сверточными.
Подводя итог: если кто-то говорит вам, что они используют одномерные векторы, это упрощение: почти наверняка используется как минимум два для пакетной обработки. Затем, в контексте 2d компьютерного зрения, сверточные сети являются стандартом, и они поставляются с 4d тензорами. В других сценариях вы можете увидеть даже другие макеты и размерности. Ключевые слова в Google для дополнительного чтения: fully connected neural networks
, convolutional neural networks
, minibatching
или stochastic gradient descend
(эти два тесно связаны).