재교육시기와 언제 낙상을하지 않습니까?
데이터 개인 정보 보호 솔루션이 증가하고 있습니다
최근에는 일반 데이터 보호 규정 (GDPR) 및 CCPA (California Consumer Privacy Act)와 같은 법률이 핵심 역할을하는 데이터 프라이버시가 중심적인 초점이되었습니다.
조직은 사용자 데이터 삭제 요청을 준수해야한다는 압력을 받고 있습니다. 중요한 요구 사항 중 하나는 데이터 삭제에 대한 권리입니다. 사용자가 회사의 데이터베이스에서 제거하도록 개인 정보를 요청할 수있는 경우.
이전에 데이터 세트에서 데이터가 제거되면 회사는 기계 학습 모델을 재교육하여 규정 준수를 보장하지만 Machine Dolearning은 처음부터 재교육하지 않고 원치 않는 데이터를 선택적이고 효과적으로 제거하는 혁신적인 접근 방식을 제공합니다.
재교육이란 무엇입니까?
재교육은 데이터가 변경된 후 데이터 모델이 완전히 재건되는 전통적인 방법입니다. 여기에는 수정 된 데이터 세트를 사용하여 머신 러닝 모델을 처음부터 다시 작성하는 것이 포함됩니다. 전체 모델은 나머지 유효한 데이터를 사용하여 재구성됩니다.
재교육이 어떻게 작동 하는가
- 데이터 세트에서 원치 않는 데이터를 제거합니다
- 모델의 매개 변수를 다시 시작하십시오
- 처음부터 교육을 통해 데이터 세트를 업데이트합니다
재교육이 작동하는 이유
- 높은 정확도: 전체 데이터 세트가 처음부터 훈련되었으므로 현재 데이터에 대한 모델이 최적화됩니다.
- 데이터 무결성: 삭제 된 데이터 세트는 예측에 영향을 미치지 않습니다.
재교육의 도전
- 값비싼: 더 큰 모델의 경우 계산 비용이 증가합니다.
- 시간 소비: 복잡한 NN (신경망)을 훈련시키는 데 몇 시간 또는 며칠이 걸립니다.
- 자원 중심Y : 규모에 따라 높은 에너지 및 메모리 요구 사항으로 인해 비효율적입니다.
재교육을위한 코드 예제
재교육을위한 샘플 코드 : 먼저 모델을 훈련 한 다음 데이터를 제거하고 모델을 재교육합니다.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
# Original Dataset
X = np.array([[1, 2], [2, 3], [4, 5], [6, 7], [8, 9]])
y = np.array([0, 0, 1, 1, 1])
# split train test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, stratify=y, random_state=42)
# feature scaling
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# Before Retraining
model_before = LogisticRegression(solver="lbfgs", max_iter=200, class_weight="balanced")
model_before.fit(X_train_scaled, y_train)
# Ensuring atleast one sample for both
X_train_reduced = []
y_train_reduced = []
# Track the number of samples per class
class_counts = {0: 0, 1: 0}
for i in range(len(y_train)):
if class_counts[y_train[i]]
Initial Model Accuracy: 0.67
Model Accuracy After Retraining: 0.67
기계가 학자 란 무엇입니까?
Machine Dolearning은 기계 학습의 기술로 훈련 된 모델에서 특정 데이터 포인트의 영향을 선택적으로 제거하는 데 중점을 둡니다.
이 프로세스를 통해 모델은 처음부터 완전히 재교육 할 필요없이 특정 데이터 포인트를 잊어 버립니다.
작동 방식
- 선택적 데이터 제거: 모델에서 잊어 버리거나 제거 해야하는 데이터 포인트를 식별하십시오.
- 구배 반전: 모델 업데이트 중에 기여를 검색하여 특정 교육 예제의 효과를 취소합니다.
- 효율적인 업데이트: 전체 모델을 처음부터 재교육하는 대신 전문 기술을 사용하여 데이터 제거로 영향을받는 모델의 일부만 업데이트합니다.
그것이 작동하는 이유
- 효율적인 준수: 전체 모드를 재교육하지 않습니다.
- 데이터 개인 정보: 조직이 특정 사용자 데이터의 흔적을 제거하여 개인 정보 보호 요구 사항을 충족 할 수 있도록 도와줍니다.
- 비용 효율적인: 데이터가 처음부터 완전히 재교육되지 않기 때문에 시간과 인프라 비용이 줄어 듭니다.
머신 무등의 도전
- 복잡성: 특히 딥 러닝 모델의 경우, 도상화 알고리즘을 구현하는 것은 복잡 할 수 있습니다.
- 성능: 모델이 제대로 관리되지 않으면 성능이 저하 될 수 있습니다.
- 데이터 종속성: 정확도에 영향을 미치지 않고 상호 연결된 데이터를 제거하는 데 어려움
- 보안 문제: 모델의 데이터 추적은 보장되지 않으면 보안 문제로 이어질 수 있습니다.
머신 무등의 코드 예제 (선택적 데이터 잊어 버림)
이 코드는 프로덕션 준비가 가능한 “기계 무등어”라이브러리가 없으므로 모든 시나리오에 대한 완전한 솔루션이 아닌 개념을 보여줍니다.
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import matplotlib.pyplot as plt
# helper function get
def get_flat_params(model):
"""Flatten all the model parameters into a single vector"""
parameters = []
for parameter in model.parameters():
parameters.append(parameter.view(-1))
return torch.cat(parameters)
# helper function for set
def set_flat_params(model, flat_params):
"""Set model parameters from a flattened vector"""
offset = 0
for parameter in model.parameters():
numel = parameter.numel()
parameter.data.copy_(flat_params[offset:offset+numel].view(parameter.size()))
offset += numel
# LR Model
class LogisticRegressionModel(nn.Module):
def __init__(self, input_dim):
super().__init__()
self.linear = nn.Linear(input_dim, 1)
def forward(self, x):
return torch.sigmoid(self.linear(x))
# Datasets
X_np = np.array([[1, 2],[2, 3],[3, 4],[4, 5],[5, 6],[6, 7],[7, 8]], dtype=np.float32)
y_np = np.array([0, 1, 0, 1, 0, 1, 0], dtype=np.float32).reshape(-1, 1)
X = torch.tensor(X_np)
y = torch.tensor(y_np)
# Initialization and Training
model = LogisticRegressionModel(input_dim=2)
criterion = nn.BCELoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)
num_epochs = 1000
for epoch in range(num_epochs):
optimizer.zero_grad()
outputs = model(X)
loss = criterion(outputs, y)
loss.backward()
optimizer.step()
# Before unlearning
with torch.no_grad():
preds = (model(X) > 0.5).float()
accuracy_before = (preds == y).float().mean().item()
print("Accuracy before unlearning: {:.2f}".format(accuracy_before))
# Hessian and Its Inverse
loss_full = criterion(model(X), y)
grad_params = torch.autograd.grad(loss_full, model.parameters(), create_graph=True)
grad_flat = torch.cat([g.view(-1) for g in grad_params])
n_params = grad_flat.numel()
Hessian = torch.zeros((n_params, n_params))
for i in range(n_params):
grad2 = torch.autograd.grad(grad_flat[i], model.parameters(), retain_graph=True)
grad2_flat = torch.cat([g.contiguous().view(-1) for g in grad2])
Hessian[i] = grad2_flat
Hessian_inv = torch.inverse(Hessian)
# Influence for a Specific Data Point
index_to_remove = 2 # Data point [3, 4] with label 0
x_remove = X[index_to_remove:index_to_remove+1]
y_remove = y[index_to_remove:index_to_remove+1]
loss_remove = criterion(model(x_remove), y_remove)
grad_remove = torch.autograd.grad(loss_remove, model.parameters())
grad_remove_flat = torch.cat([g.view(-1) for g in grad_remove])
n = X.size(0)
delta_theta = - (1.0/n) * torch.matmul(Hessian_inv, grad_remove_flat)
# Update the Model Parameters
flat_params_new = get_flat_params(model) + delta_theta
set_flat_params(model, flat_params_new)
# Evaluate after unlearning
with torch.no_grad():
preds_after = (model(X) > 0.5).float()
accuracy_after = (preds_after == y).float().mean().item()
print("Accuracy after unlearning: {:.2f}".format(accuracy_after))
Accuracy before unlearning: 0.57
Accuracy after unlearning: 0.57
비교
특징 | 기계 무등 | 재교육 |
---|---|---|
목적 |
특정 데이터 포인트를 빠르게 제거합니다 |
모델을 처음부터 다시 작성합니다 |
속도 |
빠른 |
느린 |
정확성 |
재교육에 비해 낮습니다 |
기계 무등에 비해 높은 |
자원 사용 |
낮은 |
높은 |
결론
머신 라이프닝은 특정 데이터 포인트 세트, 특히 실시간 조정 및 개인 정보를 빠르게 제거하는 데 유용 할 수 있습니다. 재교육은 정확도를 보장하고 데이터 세트의 변경이 중요하다면 유용합니다. 학습과 재교육 사이의 선택은 목표에 달려 있습니다. 더 빠른 적응성 및 규정 준수 및 재교육은 장기적인 정확성을위한 것입니다.
Post Comment