Основные навыки ускорения для машинного обучения — векторизация

машинное обучение

[Система рекомендаций и руководство по машинному обучению] От традиционного машинного обучения до глубокого обучения векторизация является самым основным и необходимым навыком ускорения.

Машинному обучению необходимо обучить большой объем данных для обучения модели.Как ускорить процесс обучения - проблема, которую необходимо рассмотреть.Так называемая векторизация, грубо говоря, заключается в использовании вместо нее формы умножения матриц накопления циклов for. Давайте рассмотрим пример. Продемонстрируйте

один пример

Вопрос: Если бы вам дали 1 000 000 данных a1~a1000000 и 1 000 000 данных b1–b1000000, и вас попросили бы найти сумму c результатов умножения каждой пары ai и bi, что бы вы сделали?

Код, который использует цикл for для накопления, выглядит следующим образом.

计算结果:249879.05298545936, for 循环计算耗时:519.999980927ms

Если вы используете numpy для выполнения той же операции (векторизация)

计算结果:249879.05298545936, 矩阵计算耗时:0.999927520752ms

Разница в скорости вычислений глубже, чем у Марианской впадины.Причина, по которой разница настолько велика, заключается в том, что программы матричных операций, такие как numpy и matlab, в полной мере используют технологию SIMD современных процессоров, что значительно повышает эффективность работы. .

Применение векторизации в LR

Теперь поговорим о простейшей логистической регрессии LR, как использовать методы векторизации для ручного обучения модели

Если мы выберем BGD (пакетный градиентный спуск) или MBGD (мини-пакетный градиентный спуск), то формула обучения параметра для LR будет

Можно видеть, что в полученной выше формуле большая матрица в середине на самом деле является транспонированной матрицей входных данных, поэтому реализация кода очень проста.Алгоритм LR, реализованный numpy,

def grand_ascent(data_train, data_label):    dataMatrix = np.mat(data_train)    labelMat = np.mat(data_label).transpose()    m, n = np.shape(dataMatrix)    weights = np.ones((n, 1))    alpha = 0.001        for i in range(0, 500):        h = sigmoid(dataMatrix * weights)        weights = weights + alpha * dataMatrix.transpose() * (labelMat - h)            return weights

Нажмите и удерживайте QR-код, чтобы следовать

Рекомендательные системы и машинное обучение

ID: RecomAI