Звучит тривиально для 1D, но как насчет 3D-тензора (или любого *D-тензора)?
Мы понимаем суть Linear Layer через изображения ниже:
Входной – это вектор из 3 элементов, который при преобразовании W даетвектор Выходной из 4 элементов. W — это матрица, которая инициализируется и изучается как часть этого линейного слоя после завершения обучения.
А как насчет преобразования трехмерного тензора:
В контексте НЛП типичная входная матрица имеет 3 измерения, соответствующие пакету, длине последовательности и размеру внедрения.
В таких случаях,
Линейный слой воздействует на последнее измерение (встраивающее измерение) входной матрицы, преобразуя только вложения из одного размера в другой.
Это означает, что в приведенном выше примере матрица 2x2x3 представляет собой набор из 4 (2*2) векторов, каждый из которых имеет размер 3.
Затем линейный слой применяет преобразование к каждому из этих 4 векторов, как показано ниже. Каждый вектор преобразуется из размера 3 в размер 4.
Представьте преобразованные векторы, откатывающиеся назад, чтобы сформировать исходную матрицу:
Таким образом, общая трансформация выглядит так:
API nn.Linear в Pytorch упоминает in_features и out_features, которые относятся к форме последнего измерения (входной и выходной матриц).
В нашем примере: in_features (D) → 3 и out_features (D’) → 4
Вывод:
форма входной матрицы не имеет значения. Это только последнее измерение, которое трансформируется
Первоначально опубликовано по адресу:
Подпишитесь на Intuitive Shorts (информационный бюллетень Substack), чтобы прочитать краткие и интуитивно понятные обзоры концепций ML/NLP/DS.