Коротка відповідь:
Так, паралельно проводилася лінійна регресія. Наприклад, Xiangrui Meng та ін. (2016) для машинного навчання в Apache Spark. Це працює за допомогою стохастичного градієнтного спуску (SGD). У розділі 3, основні особливості, автор згадав:
Узагальнені лінійні моделі вивчаються за допомогою алгоритмів оптимізації, які паралелізують градієнтне обчислення, використовуючи швидкі бібліотеки лінійних алгебр на основі C ++ для обчислень робітників.
Приклад того, як працює SGD, можна знайти в моїй відповіді тут: Як стохастичний градієнтний спуск дозволить заощадити час порівняно зі стандартним схилом градієнта?
Довга відповідь:
Зауважте, позначення не узгоджується з наданим мною посиланням, я вважаю, що матричне позначення краще в цьому питанні.
Щоб зробити лінійну регресію, яку ми намагаємося зробити
minimize ∥Xβ−y∥2
Похідна є
2XT(Xβ−y)
У невеликих налаштуваннях даних ми можемо встановити похідну на та вирішити її безпосередньо. (наприклад, розкладання QR в Р.) У великих параметрах даних матриця даних занадто велика, щоб зберігатися в пам'яті, і може бути важко вирішити безпосередньо. (Мені не знайоме, як зробити розкладання QR або розкладання Чолеського для величезних матриць).X0X
Одним із способів паралелізації цього є намагання використовувати ітеративний метод: стохастичний градієнтний спуск, де ми можемо наблизити градієнт за допомогою підмножини даних. (Якщо ми використовуємо , для представлення підмножини даних, градієнт можна наблизити до , і ми можемо оновити з наближеним градієнтом).y s 2 X T s ( X s β - y s ) βXsys2XTs(Xsβ−ys)β
Крім того, для статистики ми можемо обчислити для всіх даних паралельно або наблизити їх, використовуючи підмножину даних.R 2R2R2
Інтуїція про те, як це працює (парадигма зменшення карти):
Я постійно кажу наближення за допомогою підмножини; інтуїцію, чому це працює, можна описати на наступному прикладі: припустимо, у мене є 100 мільярдів точок даних, і ми хочемо обчислити середнє значення всіх точок даних. Припустимо, проведення такої операції займає дуже багато часу, і, крім того, цілі дані не можуть зберігатися в пам'яті.
Що ми можемо зробити, це просто взяти підмножину, скажімо, 1 мільярд елементів, і обчислити середнє значення. Отримане таким чином наближення не повинно бути далеко від істини (тобто, використовуючи цілі дані).
Для паралельного використання ми можемо використовувати 100 комп’ютерів, причому кожен з них приймає різний підмножина з 1 мільярда точок даних і обчислює середнє значення. (Зазвичай називається кроком MAP). Нарешті, запустіть ще одне середнє значення на цих 100 числах (він же крок ЗНИЖЕННЯ).
Зверніть увагу, що "парадигма перерахунку на карту" буде добре працювати в деяких випадках, але в інших не так. Наприклад, згадана раніше "середня" операція дуже проста, оскільки ми знаємо , ( якщо припустити, що довжина і однакова). Для деяких ітераційних методів, тобто поточна ітерація залежить від попередніх результатів ітерації, їх важко паралелізувати. Стохастичний градієнтний спуск вирішує цю проблему шляхом наближення градієнта за допомогою підмножини даних. А деталі можна знайти у відповіді @ user20160.х уmean(<x,y>)=mean(x)+mean(y)xy
Список літератури:
Xiangrui Meng та ін. (2016) . MLlib: Машинне навчання в Apache Spark