Умножение матриц с помощью скалярных произведений и косинусное подобие звучат довольно сложно. Есть простые способы понять и запомнить их навсегда. Читать дальше. Мы представим очень простой способ понять и запомнить скалярное произведение.
Подпишитесь на нас, чтобы получить материалы по обучению программированию, анализу данных, машинному обучению и техническим собеседованиям для начинающих. Примером может служить наш суперпопулярный учебник по Softmax. Скажите [email protected]. Но сначала формальное определение и объяснение, почему скалярное произведение полезно.
Википедия: в математике скалярное произведение или скалярное произведение - это алгебраическая операция, которая берет две последовательности чисел одинаковой длины (обычно координатные векторы) и возвращает одно число.
Не волнуйтесь, мы займемся этим очень скоро.
Есть два вывода: он принимает на вход два вектора одинаковой длины и выводит только одно число! Не вектор.
И вот формула, опять же, не беспокойтесь о деталях:
Предпочитаете простой для понимания пример из реальной жизни? Прокрутите вниз, чтобы увидеть, как наша цена, умноженная на количество, равна общему объему продаж. Он объясняет точечный продукт, используя термины непрофессионала.
Чем полезен скалярный продукт?
Это базовые вычисления линейной алгебры. Он хорошо моделирует проблемы реального мира (позже вы увидите, как использовать точечное произведение для расчета доходов). Широко разрекламированные методы глубокого обучения и машинного обучения ВСЕГДА используют умножение скалярных произведений!
Сначала давайте рассмотрим простейшую однослойную нейронную сеть h = wx+b
w=weights, x=inputs, b=bias, h=outputs
. Каждый нейрон в нейронной сети принимает результат скалярного произведения в качестве входных данных, а затем использует свой предустановленный порог для определения выходных данных. Использование комбинации умножения матриц и точечных произведений на уровне строк, фреймворков глубокого обучения и машинного обучения, а также библиотеки numpy позволяет создавать сложную архитектуру, получая при этом повышение производительности (используйте matmul вместо циклов).
Изображение выше эквивалентно приведенному ниже коду:
y = activation(torch.sum(features * weights) + bias)
Примечание *
на самом деле здесь matmul
матричное умножение.
Вот как вы рассчитываете выход для одного нейрона. Укладка нейронных единиц в слои и стопки слоев, в конечном итоге в мощные нейронные сети.
Самый большой вывод: dot product
двух одномерных данных приводят к скалярному числу. matmul
умножение матриц работает с многомерными данными, и часть его операций включает скалярное произведение. Как показано здесь, на mathisfun
Расшифровка формулы скалярного произведения
На самом деле формула скалярного произведения говорит о том, что возьмите два вектора одинаковой длины (каждое измерение равно 1, n). Мы умножаем каждый член в списке A на соответствующий член в списке B, а затем складываем все n терминов вместе.
Что вам нужно знать об умножении матриц, так это то, что размеры должны совпадать определенным образом m by n matrix matmul with n by l matrix to product m by l matrix. mxn * nxl = m*l
. Обратите внимание, что n должно совпадать? Размер столбца первой матрицы должен совпадать с размером строки второй матрицы. Результатом умножения матриц является новая матрица измерения: количество строк первой матрицы на количество столбцов второй матрицы m by l
.
Вот более технический способ запомнить операцию скалярного произведения, а позже мы представим простой способ запомнить ее.
1xn * nx1 = 1x1
Если вы матрично умножаете вектор-строку на вектор-столбец, в результате вы получаете одно число, то есть скаляр. Скажем, если вы хотите вычислить скалярное произведение [1,3,1] and [3,1,12]
, вам просто нужно транспонировать второй вектор в вектор-столбец!
# a visual way to display a column vector 3 1 12 # a technical, or numeric way to display a column vector [[3],[1],[12]]
Используя формулу умножения матриц, вы всегда будете получать в результате одно число 1*3+ 3*1+1*12 = 18
. Мы умножаем каждый элемент в первом векторе на соответствующий ему элемент во втором векторе, а затем складываем результаты вместе, чтобы получить скалярное произведение.
Легкий способ запомнить это - использовать price times quality equals revenue trick
ниже.
sold 3 apples today $1 each sold 1 pineapple today $3 each sold 12 avocados today $1 each
Давайте переведем это в векторы, также известные как матрицы из одной строки или столбца.
prices = [1,3,1] #dimension [1,3] quantities= [3,1,12] #dimension [1,3]
Другой способ думать о скалярном продукте - это ваш пенсионный счет IRA каждый stock share price multiplied by corresponding number of shares in a portfolio = the total amount of monetary value of your retirement account
.
Видишь, к чему я клоню? Внезапно вы выглядите как профессиональный специалист по данным, а не кассир. При чем здесь точечный продукт?
А теперь вот вам трюк, чтобы вы навсегда запомнили точечный продукт. Уловка для запоминания скалярного произведения вектора-строки и вектора-столбца похожа на price * quantities = revenues
. Да! Вот и все. Оцените вектор-строку, умноженную на количество, которое вектор-столбец дает вам единственное число, которое является ежедневным доходом! Вот сколько долларов вы продали товаров.
Теперь. Вам больше нравится точечный продукт, матричное умножение? Почему бы просто не использовать петли? Даже с помощью генераторов Python циклы в реальной жизни работают медленно, когда у вас есть миллионы строк данных. Умножение матриц может быстро изменять числа с помощью оптимизированной математики в бэкенде (некоторые из самых быстрых фреймворков построены на C ++ для дальнейшего ускорения pytorch, включая тензорный поток. Знаете ли вы, что в области финансов большинство программ написаны на C ++? Кстати).
Вот как это будет выглядеть, реализованное с использованием понимания списков Python и циклов.
def dot(self, v): return sum([x*y for x,y in zip(self.coordinates, v.coordinates)])
(Конец части 1, этот пост все еще в разработке…)
(Будущие разделы… этот пост обновляется…)
(Будущие разделы… скоро появится сопутствующее видео на Youtube…)
(дайте нам знать, какие темы вы хотите, чтобы мы затронули)
Передовой
Википедия: «Геометрически это произведение евклидовых величин двух векторов и косинуса угла между ними».
В следующем разделе мы рассмотрим расширенное использование точечных произведений в реальном мире: как измерить косинусное сходство между двумя предложениями. Это также приблизительная мера сходства между двумя векторами. Глубокое обучение постоянно использует точечное произведение, как и специалисты по машинному обучению обработки естественного языка.
(Скоро: многомерная матрица, скалярное произведение по столбцу или строке без суммирования.)
Резюме
Вы узнали, что скалярное произведение - это частный случай умножения матриц. Скалярное произведение принимает на вход два вектора одинаковой длины и выводит только одно число. Вы можете использовать уловку цена * количество = доход, чтобы навсегда запомнить точечный продукт.