본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Federated learning, FL; 연합 학습
데이터를 한곳에 모으지 않고, 데이터를 가진 기기나 기관이 각자 학습한 모델 갱신값만 서버가 모아 하나의 모델을 만드는 분산 기계 학습 방식

연합 학습(federated learning, FL)은 여러 클라이언트(스마트폰, 병원, 은행 등)가 원본 데이터를 내보내지 않은 채 중앙 서버의 조율 아래 공동으로 모델을 학습하는 방식이다.[1] 국내에서는 연합학습으로 붙여 쓰는 경우도 많다. 구글의 브렌던 맥마핸(H. Brendan McMahan) 등이 2016년 논문에서 이름을 붙이고 FedAvg(Federated Averaging) 알고리즘을 제안했으며, 이 논문은 AISTATS 2017에 실렸다.[2]

서버는 원본 대신 기울기나 가중치 차이만 받으므로 데이터 최소화 원칙에 맞고, 데이터를 옮기기 어려운 의료·금융 분야와 키보드 입력처럼 민감한 기기 데이터에서 쓰인다. 다만 갱신값에도 개인 정보가 남아 있어 그것만으로는 프라이버시가 보장되지 않는다. 실제 시스템은 차분 프라이버시, 보안 집계, 기밀 컴퓨팅 같은 개인정보 보호 강화기술을 함께 쓴다. 신경망 분산 학습이 한 조직 안의 데이터센터에서 속도를 위해 데이터를 나누는 것과 달리, 연합 학습은 데이터가 처음부터 흩어져 있고 참여자를 통제할 수 없다는 조건에서 출발한다.

클라이언트 k = 1, …, K가 각자 nk개의 표본을 가지고 있고 전체 표본 수가 n=∑knk일 때, 연합 학습이 푸는 문제는 다음과 같다.[2]

minwf(w)=∑k=1KnknFk(w),Fk(w)=1nk∑i∈𝒫kℓ(xi,yi;w)

일반적인 분산 최적화와 다른 점으로 맥마핸 등은 네 가지를 꼽았다.

  • 비IID: 각 클라이언트 데이터는 그 사용자의 사용 습관을 반영하므로 전체 분포를 대표하지 않는다.
  • 불균형: 클라이언트마다 데이터 양이 크게 다르다.
  • 대규모 분산: 클라이언트 수가 클라이언트당 평균 표본 수보다 많을 수 있다.
  • 제한된 통신: 기기는 자주 꺼지고, 느리거나 비싼 연결을 쓴다. 그래서 계산보다 통신 라운드 수가 병목이다.

FedAvg는 클라이언트에서 로컬 확률적 경사 하강법을 여러 번 돌린 뒤 서버가 가중치를 표본 수 비례로 평균한다. 매개변수는 세 개다. C는 라운드마다 참여시키는 클라이언트 비율, E는 로컬 에포크 수, B는 로컬 미니배치 크기다.[2]

서버:
  w_0 초기화
  for t = 1, 2, ...:
      m = max(C*K, 1)
      S_t = 무작위로 고른 클라이언트 m개
      for 각 k in S_t (병렬):
          w_{t+1}^k = ClientUpdate(k, w_t)
      m_t = sum_{k in S_t} n_k
      w_{t+1} = sum_{k in S_t} (n_k / m_t) * w_{t+1}^k

ClientUpdate(k, w):   # 클라이언트 k에서 실행
  로컬 데이터를 크기 B의 배치로 나눔
  for e = 1..E:
      for 각 배치 b:
          w = w - eta * grad(loss(w; b))
  return w

B = ∞(로컬 데이터 전체를 한 배치), E = 1이면 클라이언트가 기울기를 한 번만 계산해 보내는 FedSGD와 같다. FedAvg는 클라이언트당 계산(E, 1/B)을 늘려 통신 라운드를 줄이는 방법이며, 원 논문은 다섯 가지 모델 구조와 네 가지 데이터셋 실험에서 동기식 SGD 대비 필요한 통신 라운드를 10~100배 줄였다고 보고했다.[2] 비볼록 목적 함수에서 서로 다른 모델을 평균하면 이론상 나쁜 모델이 나올 수 있지만, 같은 초기값 wt에서 출발한 모델끼리는 평균이 잘 동작한다는 것이 이 논문의 관찰이다.

넘파이 구현 예

편집 원본 편집

선형 회귀로 FedAvg의 구조만 보여 주는 최소 예시다. 클라이언트마다 데이터 양과 입력 분포를 다르게 했다.

import numpy as np
rng = np.random.default_rng(0)

def client_update(w, X, y, epochs=5, lr=0.02, batch=32):
    w = w.copy()
    for _ in range(epochs):
        idx = rng.permutation(len(X))
        for s in range(0, len(X), batch):
            b = idx[s:s + batch]
            grad = X[b].T @ (X[b] @ w - y[b]) / len(b)
            w -= lr * grad
    return w

def fedavg(clients, rounds=20, frac=0.3, dim=5):
    w = np.zeros(dim)
    for _ in range(rounds):
        m = max(int(frac * len(clients)), 1)
        chosen = rng.choice(len(clients), m, replace=False)
        new_ws = [client_update(w, *clients[k]) for k in chosen]
        n_k = np.array([len(clients[k][0]) for k in chosen], dtype=float)
        w = np.average(new_ws, axis=0, weights=n_k)   # 표본 수 가중 평균
    return w

true_w = rng.normal(size=5)
clients = []
for _ in range(100):
    n = rng.integers(20, 200)                                # 불균형
    X = rng.normal(loc=rng.normal(), size=(n, 5))            # 클라이언트별 입력 분포 이동
    clients.append((X, X @ true_w + 0.1 * rng.normal(size=n)))
print(true_w.round(3), fedavg(clients).round(3))

Flower는 프레임워크에 묶이지 않는 오픈소스 연합 학습 라이브러리다. 2026년 10월 문서(1.40) 기준으로 서버 쪽은 ServerApp과 flwr.serverapp.strategy.FedAvg, 클라이언트 쪽은 ClientApp과 메시지 API를 쓴다.[3] 1.x 초기 버전의 NumPyClient·fraction_fit 방식 예제와는 API가 다르다.

# server_app.py
from flwr.app import ArrayRecord, ConfigRecord, Context
from flwr.serverapp import Grid, ServerApp
from flwr.serverapp.strategy import FedAvg

app = ServerApp()

@app.main()
def main(grid: Grid, context: Context) -> None:
    strategy = FedAvg(fraction_train=0.1, min_available_nodes=10)  # 가중치 키 기본값 "num-examples"
    result = strategy.start(
        grid=grid,
        initial_arrays=ArrayRecord(Net().state_dict()),
        train_config=ConfigRecord({"lr": 0.01}),
        num_rounds=20,
    )

# client_app.py
from flwr.app import ArrayRecord, Context, Message, MetricRecord, RecordDict
from flwr.clientapp import ClientApp

app = ClientApp()

@app.train()
def train(msg: Message, context: Context):
    model = Net()
    model.load_state_dict(msg.content["arrays"].to_torch_state_dict())
    loss = local_train(model, load_local_data(context), msg.content["config"]["lr"])
    content = RecordDict({
        "arrays": ArrayRecord(model.state_dict()),
        "metrics": MetricRecord({"train_loss": loss, "num-examples": num_local_examples}),
    })
    return Message(content=content, reply_to=msg)

Net, local_train, load_local_data는 사용자가 정의하는 부분이다. 서버의 FedAvg는 클라이언트가 보낸 "num-examples" 값을 가중치로 평균한다.[3]

데이터 분할 방식

편집 원본 편집

치앙 양(Qiang Yang) 등은 데이터가 참여자 사이에 어떻게 나뉘어 있는지에 따라 세 가지로 나누었다.[4]

유형 데이터 모양 예 기술적 특징
수평 연합 학습(horizontal FL, 표본 기반) 특성(열)은 같고 표본(행)이 다름 서로 다른 지역의 두 은행, 수많은 스마트폰 각자 같은 구조의 모델을 학습해 평균. FedAvg가 대표
수직 연합 학습(vertical FL, 특성 기반) 표본(사용자)은 겹치고 특성이 다름 같은 도시의 은행과 전자상거래 회사 공통 사용자를 암호학적으로 맞추는 개체 정렬(PSI) 후, 모델을 특성별로 나눠 중간값을 동형 암호 등으로 교환. 추론 때도 협력 필요
연합 전이 학습(federated transfer learning) 표본도 특성도 조금만 겹침 다른 나라의 은행과 전자상거래 회사 전이 학습으로 공통 표현을 학습
구분 교차 기기(cross-device) 교차 사일로(cross-silo)
참여자 수백만 대의 휴대전화·IoT 기기 병원, 은행 등 2~100개 안팎의 기관
가용성 일부만 그때그때 참여(충전 중·와이파이 연결 시) 대부분 항상 참여
상태 클라이언트가 상태를 유지하지 않음, 한 기기가 몇 번만 참여 기관별 상태 유지 가능
주요 위협 다수의 위조 기기, 갱신값으로 개인 데이터 유출 참여 기관 사이의 신뢰, 경쟁사 정보 유출

위 구분은 카이루즈 등의 서베이가 정리한 것이다.[1] 중앙 서버 없이 이웃끼리 모델을 교환하는 탈중앙 연합 학습(decentralized FL)도 연구된다.

비IID 데이터 문제

편집 원본 편집

클라이언트 데이터가 서로 다른 분포를 따르면 각 클라이언트가 로컬 최적점 쪽으로 끌려가는 클라이언트 드리프트(client drift)가 생기고, 평균한 모델이 수렴이 느려지거나 정확도가 떨어진다. 비IID의 형태는 레이블 분포 차이(어떤 사용자는 특정 클래스만 가짐), 특성 분포 차이(기기·병원마다 촬영 장비가 다름), 데이터 양 차이 등이다. 대표적인 대응은 다음과 같다.

방법 핵심 아이디어
FedProx 로컬 목적 함수에 근접 항 μ2‖w−wt‖2를 더해 전역 모델에서 너무 멀어지지 않게 함. 기기마다 로컬 계산량이 달라도 됨[5]
SCAFFOLD 서버·클라이언트 제어 변수로 로컬 기울기의 편향을 보정해 드리프트를 줄임[6]
서버 최적화기(FedAdam 등) 클라이언트 평균 변화량을 의사 기울기로 보고 서버에서 모멘텀·적응형 최적화기를 적용[7]
개인화 연합 학습 전역 모델을 출발점으로 삼아 클라이언트별로 일부 층을 따로 두거나 로컬 미세 조정

교차 기기 환경에서는 업로드 대역폭이 가장 비싸다. 갱신값 양자화, 희소화(상위 k개만 전송), 저랭크 근사, 참여 클라이언트 표본 추출, 로컬 단계 수 조정이 쓰인다. LoRA 같은 어댑터만 학습해 보내면 대형 모델도 연합 미세 조정을 할 수 있다.

프라이버시 위협과 방어

편집 원본 편집

기울기에서 데이터 복원

편집 원본 편집

갱신값은 원본 데이터의 함수이므로 데이터를 복원할 단서가 된다. 리겅 주(Ligeng Zhu) 등의 기울기 누출(Deep Leakage from Gradients, DLG)은 무작위 가짜 입력 x′, 레이블 y′에서 출발해, 그 기울기가 공유된 기울기와 같아지도록 가짜 데이터 자체를 최적화한다.[8]

x'*,y'*=arg⁡minx′,y′‖∇wℓ(F(x′,w),y′)−∇wℓ(F(x,w),y)‖2

이 방법으로 이미지는 화소 단위로, 텍스트는 토큰 단위로 복원되었고, 저자들은 기울기 가지치기(gradient pruning)를 가장 효과적인 방어로 들었다.[8] 배치가 크거나 로컬 단계가 많을수록 복원은 어려워지지만, 후속 연구는 코사인 유사도 기반 최적화로 더 큰 배치와 여러 로컬 단계를 거친 갱신값에서도 이미지를 복원했다.[9] 이런 기울기 반전은 모델 인버전 공격의 한 갈래로 분류되며, 서버가 악의적이면 내려보내는 모델 구조나 가중치를 조작해 클라이언트 데이터를 더 쉽게 빼내는 공격도 가능하다.[10]

보안 집계(secure aggregation)는 서버가 개별 클라이언트의 갱신값은 보지 못하고 합계만 얻게 하는 암호 프로토콜이다. 키스 보나위츠(Keith Bonawitz) 등의 2017년 프로토콜이 대표적이다.[11]

  1. 클라이언트 쌍 (u, v)는 디피-헬먼 키 교환으로 공유 시드를 만들고, 그 시드로 같은 크기의 마스크 su,v를 생성한다.
  2. u는 +su,v를, v는 −su,v를 자기 갱신값에 더해 보낸다. 서버가 전부 더하면 쌍 마스크가 상쇄되어 합계만 남는다.
  3. 중간에 이탈하는 클라이언트가 있으면 마스크가 상쇄되지 않으므로, 각 시드를 샤미르 비밀 분산으로 다른 클라이언트들에게 미리 나눠 두었다가 복원한다. 서버가 이탈을 핑계로 특정 클라이언트의 마스크를 벗기지 못하도록 개인 마스크를 한 겹 더 씌운다.

논문은 16비트 입력에서 2¹⁰명·2²⁰차원 벡터일 때 평문 전송 대비 통신량 1.73배, 2¹⁴명·2²⁴차원일 때 1.98배로 보고했다.[11] 보안 집계는 서버로부터 개별 갱신값을 숨기지만, 집계 결과(모델)에 남은 정보까지 막지는 않으므로 차분 프라이버시와 함께 쓴다.

차분 프라이버시 결합

편집 원본 편집

연합 학습에서는 보통 사용자 수준(user-level) DP를 목표로 한다. 한 사용자의 모든 데이터가 바뀌어도 모델 분포가 거의 같아야 한다는 뜻이다. 맥마핸 등의 DP-FedAvg는 각 클라이언트의 갱신값(가중치 차이) 노름을 자르고, 서버가 평균에 가우시안 잡음을 더한다. LSTM 언어 모델 실험에서 사용자가 충분히 많으면 정확도 손실은 작고 주된 비용은 추가 계산이라고 보고했다.[12] 잡음을 서버가 넣으면 서버를 믿어야 하므로, 각 기기가 작은 잡음을 넣고 보안 집계로 합치는 분산 DP가 쓰인다.

모델 중독과 백도어

편집 원본 편집

클라이언트를 통제할 수 없으므로 악의적 참여자가 조작한 갱신값을 보낼 수 있다. 데이터 오염 공격과 같은 원리지만 학습 데이터 대신 갱신값을 직접 조작하므로 더 강하다.

  • 모델 교체 공격: 유진 바그다사리안(Eugene Bagdasaryan) 등은 공격자가 자기 백도어 모델과 현재 전역 모델의 차이를 참여자 수에 맞게 크게 키워 보내면, 평균 후 전역 모델이 사실상 공격자 모델로 바뀐다는 것을 보였다. 한 라운드에 한 번 선택된 공격자 하나로 백도어 과제 정확도 100%에 이르렀고, 이상 탐지를 피하도록 학습 손실에 회피 항을 넣는 방법도 제시했다.[13] 자세한 내용은 백도어 공격 (인공지능) 참고.
  • 비잔틴 공격: 무작위나 반대 방향 갱신으로 수렴 자체를 방해한다(비잔틴 장애 허용 참고).
  • 방어: 갱신값 노름 제한, 좌표별 중앙값·절사 평균, Krum처럼 다른 갱신값들과 가장 가까운 것을 고르는 강건 집계,[14] 검증 데이터로 갱신값 평가, 참여 기기 인증·평판 관리. KISA 「인공지능(AI) 보안 안내서」 개발자 체크리스트 3.1.3도 갱신값 비교 검증, 서버 검증 데이터 평가, 기기 인증서와 참여 이력 기반 신뢰 점수, 의심 장치 격리를 예로 든다.[15]
  • 충돌: 보안 집계를 쓰면 서버가 개별 갱신값을 볼 수 없어 이상 탐지형 방어가 어렵다. 프라이버시와 강건성 사이의 상충은 연합 학습의 대표적인 미해결 과제다.[1]
  • 구글 지보드: 구글은 2017년 4월 안드로이드용 지보드의 검색어 제안 모델에서 연합 학습을 시험 중이라고 밝혔다. 휴대전화가 유휴 상태이고 충전 중이며 무료 무선 연결에 있을 때만 학습하도록 했다.[16] 2018년에는 다음 단어 예측 순환 신경망 언어 모델을 FedAvg로 학습해 서버 학습 모델보다 예측 재현율이 높았다고 보고했다.[17] 2023년 논문은 20개 넘는 지보드 언어 모델을 DP-FTRL과 함께 학습했고(zCDP ρ 0.2~2), 지보드의 다음 단어 예측 신경망 언어 모델 전부가 DP 보장을 갖게 되었다고 밝혔다.[18]
  • 교차 사일로: 병원 사이의 의료 영상 모델, 금융기관 사이의 이상 거래 탐지처럼 데이터 반출이 법·계약으로 막힌 분야에서 쓰인다. OECD는 휴대전화 입력 예측처럼 민감한 키 입력을 보내지 않으려는 용도에 연합 학습이 대규모로 배포되었다고 정리했다.[19]
  • 온디바이스 AI: 기기 안에서 추론하는 온디바이스 AI와 결합하면, 사용자 데이터로 개인화하면서도 서버로는 갱신값만 보내는 구조가 된다.
이름 개발 주체 특징
Flower Flower Labs, 오픈소스 파이토치·텐서플로·JAX 등 프레임워크 무관. 시뮬레이션과 실제 배포 같은 코드
TensorFlow Federated(TFF) 구글 텐서플로 기반. 연합 계산을 함수형으로 표현, 연구용 시뮬레이션
NVIDIA FLARE 엔비디아 교차 사일로 의료·기업 배포 중심
FATE 위뱅크(WeBank) 수직 연합 학습과 동형 암호 기반 프로토콜 지원
PySyft OpenMined 원격 데이터 과학, DP·다자간 계산과 결합
  1. ↑ 1.0 1.1 1.2 Peter Kairouz 외 58명, 〈Advances and Open Problems in Federated Learning〉, Foundations and Trends in Machine Learning 14(1~2), 2021. arXiv:1912.04977
  2. ↑ 2.0 2.1 2.2 2.3 H. Brendan McMahan, Eider Moore, Daniel Ramage, Seth Hampson, Blaise Agüera y Arcas, 〈Communication-Efficient Learning of Deep Networks from Decentralized Data〉, AISTATS 2017, PMLR 54. arXiv:1602.05629
  3. ↑ 3.0 3.1 Flower 문서, flwr.serverapp.strategy.FedAvg, Quickstart PyTorch (2026-10-16 확인)
  4. ↑ Qiang Yang, Yang Liu, Tianjian Chen, Yongxin Tong, 〈Federated Machine Learning: Concept and Applications〉, ACM Transactions on Intelligent Systems and Technology 10(2), 2019. arXiv:1902.04885
  5. ↑ Tian Li 외, 〈Federated Optimization in Heterogeneous Networks〉, MLSys 2020. arXiv:1812.06127
  6. ↑ Sai Praneeth Karimireddy 외, 〈SCAFFOLD: Stochastic Controlled Averaging for Federated Learning〉, ICML 2020. arXiv:1910.06378
  7. ↑ Sashank J. Reddi 외, 〈Adaptive Federated Optimization〉, ICLR 2021. arXiv:2003.00295
  8. ↑ 8.0 8.1 Ligeng Zhu, Zhijian Liu, Song Han, 〈Deep Leakage from Gradients〉, NeurIPS 2019. arXiv:1906.08935
  9. ↑ Jonas Geiping, Hartmut Bauermeister, Hannah Dröge, Michael Moeller, 〈Inverting Gradients: How easy is it to break privacy in federated learning?〉, NeurIPS 2020. arXiv:2003.14053
  10. ↑ Liam Fowl 외, 〈Robbing the Fed: Directly Obtaining Private Data in Federated Learning with Modified Models〉, ICLR 2022. arXiv:2110.13057
  11. ↑ 11.0 11.1 Keith Bonawitz 외, 〈Practical Secure Aggregation for Privacy-Preserving Machine Learning〉, ACM CCS 2017. IACR ePrint 2017/281
  12. ↑ H. Brendan McMahan, Daniel Ramage, Kunal Talwar, Li Zhang, 〈Learning Differentially Private Recurrent Language Models〉, ICLR 2018. arXiv:1710.06963
  13. ↑ Eugene Bagdasaryan, Andreas Veit, Yiqing Hua, Deborah Estrin, Vitaly Shmatikov, 〈How To Backdoor Federated Learning〉, AISTATS 2020. arXiv:1807.00459
  14. ↑ Peva Blanchard, El Mahdi El Mhamdi, Rachid Guerraoui, Julien Stainer, 〈Machine Learning with Adversaries: Byzantine Tolerant Gradient Descent〉, NeurIPS 2017. NeurIPS 논문 페이지
  15. ↑ 과학기술정보통신부·한국인터넷진흥원, 「인공지능(AI) 보안 안내서」, 2025-12(2026-03 정오 수정본), 제2장 3.1.3.
  16. ↑ H. Brendan McMahan, Daniel Ramage, Federated Learning: Collaborative Machine Learning without Centralized Training Data, Google Research 블로그, 2017-04-06.
  17. ↑ Andrew Hard 외, 〈Federated Learning for Mobile Keyboard Prediction〉, 2018. arXiv:1811.03604
  18. ↑ Zheng Xu 외, 〈Federated Learning of Gboard Language Models with Differential Privacy〉, 2023. arXiv:2305.18465
  19. ↑ OECD, 〈Emerging Privacy-Enhancing Technologies: Current Regulatory and Policy Approaches〉, OECD Digital Economy Papers No. 351, 2023-03. OECD 발행 페이지