Даже я не могу придумать, как сделать это интересным

Иногда нужно просто есть овощи.

В моем следующем посте мы собираемся углубиться в математику, лежащую в основе прямого распространения в нейронных сетях. Но прежде чем мы это сделаем, мне нужно убедиться, что мы все на одной волне, когда речь идет об одной из самых важных математических концепций во всем машинном обучении: умножении матриц и, в частности, вычислении внутренних продуктов.

Начнем с определения двух матриц x1 и x2 следующим образом:

Я буду использовать обозначение numpy @, чтобы указать, что выполняется вычисление внутреннего продукта (или, по крайней мере, запрошено); например х1 @ х2.

Если мы хотим вычислить внутренний продукт этих двух матриц, нам нужно понять некоторые правила — первое касается форм. Наша матрица x1 имеет форму (3, 4), что означает 3 строки (или наблюдения) и 4 столбца (или признаки/переменные). Наша матрица x2 имеет форму (3, 3). Чтобы вычислить внутренний продукт между этими двумя, мы должны убедиться, что значение второго значения формы в нашей первой матрице соответствует значению первого значения формы во второй. Другими словами, внутренние значения формы должны совпадать, чтобы это работало.

Это означает следующее: если я попытаюсь запустить x1 @ x2, я попытаюсь определить внутренний продукт между x1 (форма 3, 4) и x2 (форма 3,3). Немного переписав, мы запрашиваем (3, 4) @ (3, 3). Взгляните на эти внутренние значения — второе значение формы в первой матрице — это 4, а первое значение во второй матрице — это 3. Следовательно, попытка запустить x1 @ x2 вернет ошибку.

Есть несколько способов смягчить это. Во-первых, можно использовать функцию транспонирования numpy, которую можно вызвать, просто добавив «.T» в конец матрицы. Транспонирование в основном инвертирует матрицу, так что ее строки становятся столбцами, а столбцы — строками. Если бы мы попробовали x1.T @ x2, это сформулировалось бы по форме как (4, 3) @ (3, 3). И теперь, поскольку внутренние числа совпадают, мы получим результат. В качестве альтернативы мы могли бы изменить порядок x1 и x2 и просто поставить x2 на первое место. Если бы мы попробовали x2 @ x1, это сформулировалось бы как (3, 3) @ (3, 4). И снова внутренние значения совпадают, поэтому можно вычислить внутренний продукт.

Так откуда взялись эти ценности? По сути, внутренний продукт — это произведение значений в каждой строке первой матрицы на соответствующие им значения в столбце второй матрицы. Давайте посмотрим, как это работает на самом деле.

Мы начинаем с умножения первого значения в первой строке на первое значение в первом столбце, затем добавляем это к произведению второго значения каждого, а затем снова третьего. Математика для первого результата в нашей матрице ответов выглядит следующим образом:

Это дает нам первое значение в первой строке результирующей матрицы. Для следующего результата мы снова используем первую строку в первой матрице, но на этот раз умножаем значения на соответствующие значения во втором столбце, что дает нам второе значение в нашей результирующей матрице. Повторяем еще раз, используя первую строку первой матрицы, но теперь используя третий столбец второй матрицы, а затем, наконец, еще раз, подставляя четвертый столбец второй матрицы. Это дает четыре значения, которые соответствуют первой строке в первой матрице, и поэтому выводятся следующим образом:

Этот процесс повторяется для второй строки первой матрицы:

И, наконец, для третьего ряда:

Почему это важно

Важно, чтобы вы это понимали, потому что этот вид матричного умножения проявляется во многих случаях машинного обучения. Хотя я старался избегать использования матричных обозначений при обсуждении математических концепций, когда мы погружаемся в математику для глубокого обучения, использование методов матричного умножения позволит нам значительно упростить процесс выполнения прямого распространения — как от простого количества вычислений до выполнять, и в частности, шаг в процессе, необходимый для учета значений смещения/смещения по пути. Я объясню это подробнее в следующем посте, но чтобы действительно понять, что происходит, вам нужно понять, что происходит, когда вы вычисляете внутренний продукт между двумя матрицами.

А теперь иди за десертом. Ты заслужил это.