Обычный способ обучения модели на конфиденциальных данных — сначала собрать их все в одно место. Сбросьте записи каждого пользователя в центральное хранилище, обучите и готово. Эта центральная стопка также представляет собой единую приманку с возможностью поиска, и именно поэтому чай безопасности...
Обычный способ обучения модели на конфиденциальных данных — сначала собрать их все в одно место. Сбросьте записи каждого пользователя в центральное хранилище, обучите и готово. Эта центральная стопка также представляет собой единую приманку, доступную для поиска, и именно поэтому службы безопасности начали сопротивляться ей.
Федеративное обучение переворачивает идею: вместо того, чтобы передавать данные в модель, вы отправляете модель в данные. Каждое устройство или сайт обучается на собственных локальных данных и отправляет обратно только результирующие веса. Необработанные данные никогда не перемещаются.
Это звучит абстрактно, пока вы не увидите это в коде. Вот полный работоспособный пример основного алгоритма (FedAvg) в простом NumPy.
Все это
импортировать numpy как np
# У каждого клиента СОБСТВЕННЫЕ данные. Это никогда не покидает клиента.
Защиту make_client (n, true_w, шум = 0,1):
X = np.random.randn(n, len(true_w))
y = X @ true_w + шум * np.random.randn(n)
вернуть Х, у
true_w = np.array([2.0, -3.0, 0.5])
клиенты = [make_client(100, true_w) для _ в диапазоне(5)]
def local_train(X, y, w, lr=0,05, шаги=20):
# Один клиент выполняет градиентный спуск только для данных ITS.
для _ в диапазоне (шаги):
град = X.T @ (X @ w - y) / len(y)
w = w - lr * град
вернуть ш
# Федеративное усреднение
global_w = np.zeros(3)
для