Есть два основных соображения.
Первое связано с дозированием.Поскольку обычно мы хотим выполнить каждый шаг оптимизации на основе расчета градиента для ряда обучающих примеров (а не только для одного), полезно выполнить вычисления для всех из них одновременно.Поэтому стандартный подход во многих библиотеках заключается в том, что первое измерение - это пакетное измерение, и все операции применяются независимо для каждого субтенца в первом измерении.Поэтому большинство тензоров в реальном коде, по крайней мере, двумерно: [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
).4-мерные тензоры в CNN характерны для 2-мерного зрения. Вы можете встретить 3-мерные тензоры в 1-мерной обработке сигналов (например, звука): [batch, feature, time]
, 5-мерные в 3D-обработке громкости [batch, feature, x, y, z]
и совершенно другие схемы в других типах сетей, которые не являются полностью-связанные или сверточные.
Подводя итог: если кто-то скажет вам, что они используют 1d-векторы, это упрощение: почти наверняка использование как минимум двух для пакетной обработки.Затем, в контексте 2d компьютерного зрения, сверточные сети являются стандартом, и они идут с 4d тензорами.В других сценариях вы можете увидеть даже разные макеты и размеры.Ключевые слова для Google для дополнительного чтения: fully connected neural networks
, convolutional neural networks
, minibatching
или stochastic gradient descend
(эти два тесно связаны).