Статья Автор: Деникина Н.В., Деникин А.В.

Слой: от нейрона к матрице

Несколько прогнозов сразу

Приложению нужны не один, а два прогноза:

  • сколько времени займёт доставка заказа до клиента;
  • сколько времени придётся ждать, пока курьер заберёт заказ.


Признаки для обоих прогнозов одинаковые (расстояние, число свободных курьеров, время суток и т.д.), но важность признаков разная. Например, число свободных курьеров сильно влияет на время ожидания, но слабее — на время самой поездки.

Поэтому мы используем два выходных нейрона: один предсказывает время дороги, второй — время ожидания. У каждого нейрона свой набор весов. Если записать веса в матрицу, то признаки будут строками, а два столбца — это веса первого и второго нейрона.


Слой нейросети  - это матрица весов

Слой нейросети - это несколько нейронов, которые:

  • смотрят на одни и те же признаки (например, расстояние, число курьеров, время суток),
  • но у каждого нейрона свои веса и своё смещение.
 

Матрица весов

Если:

  • входов (признаков) — \(n\),
  • нейронов в слое — \(m\),

то веса записывают в матрицу \(W\) размера \((n \times m)\):

  • строки — признаки,
  • столбцы — нейроны.

Смещения — вектор \(\mathbf{b}\) длины \(m\): по одному числу на нейрон.
 

Как считается выход

Данные: \(X\) — батч примеров, форма \((\text{примеры}, \text{входы})\).

\[ Y = XW + \mathbf{b} \]

Пример:

\[ X: (4, 3) \quad @ \quad W: (3, 2) \quad = \quad Y: (4, 2) \]
  • Внутренние числа (3 и 3) должны совпасть — иначе умножение невозможно.
  • Внешние числа (4 и 2) дают форму результата: 4 примера, 2 нейрона.
X(4, 3)@W(3, 2)=Y(4, 2)33внутренние размеры совпадают — иначе умножения не будетвнешние размеры 4 и 2 и дают форму результата

Смещение

Вектор \(\mathbf{b}\) длины \(m\) добавляется ко всем примерам сразу (broadcasting): к каждой строке \(Y\) прибаляется один и тот же вектор смещений.
 

Почему важен порядок осей

Правильно:

\[ W: (\text{входы}, \text{нейроны}) \]

Если перепутать и записать \((\text{нейроны}, \text{входы})\):

  • либо формы не сойдутся,
  • либо, если случайно сойдутся, модель будет считать «не то » и учиться на неверной структуре.


Батч не меняет веса

\(W\) и \(\mathbf{b}\) - это правило, а не данные:

  • один пример или тридцать тысяч - веса те же,
  • меняется только вход \(X\) и выход \(Y\).

Слой - несколько нейронов, которые смотрят на одни и те же признаки, но каждый со своими весами. Веса всего слоя складывают в матрицу: один столбец на нейрон.

X имеет форму (примеры, входы). W  - форму (входы, нейроны). Результат - (примеры, нейроны).

Внутренние размеры должны совпасть. Это не формальность: третье число примера обязано встретиться с третьей строкой весов, иначе перемножатся не те пары.

Смещение  - вектор длины «число нейронов», по одному базовому уровню на прогноз. Прибавляется broadcasting-ом из прошлой пары ко всем строкам сразу.

Порядок осей в W важен: (входы, нейроны), а не наоборот. Записав наоборот, ты либо получишь несовпадение форм, либо, если размеры случайно сойдутся, тихо посчитаешь чушь.

Батч не меняет веса. Подашь один заказ или тридцать тысяч - W и b те же самые. Они описывают правило, а не данные, и в этом вся идея: правило одно, применяется ко всем.


 

@ — это оператор матричного умножения (matmul).

Он появился в Python 3.5 специально для того, чтобы отличать матричное умножение от обычного поэлементного умножения (которое делается через *)



Вывод
(4, 3)
(3, 2)
(4, 2)
[[ 20.    5.5]
 [ 22.   11.5]
 [  7.  -16.5]
 [ 24.    9. ]]

Смотри на третий заказ. Рядом двадцать свободных курьеров, и время подачи вышло минус шестнадцать с половиной минут.

Отрицательного времени не бывает. Линейная формула просто не знает, что ожидание не падает ниже минуты. Позже это починим.
 

Сколько в слое параметров

Параметры - числа, которые подбирает обучение: все веса плюс все смещения. Именно их количество называют размером модели, когда говорят «модель на семь миллиардов».

Их столько же, сколько клеток в W, плюс по одному смещению на нейрон.



Вывод
100352
128
100480

Сто тысяч чисел - и это один слой самой скромной сети из тех, что решают MNIST.


Слой принимает 784 числа и выдаёт 128. Сколько у него параметров вместе со смещениями?
Печать