`[연합학습 기본] 구조와 고려 사항`에 이어지는 내용입니다.
학습: Step-by-Step
FedSGD
가장 처음 소개되는 FedSGD는 Federated Stochastic Gradient Descent 입니다. SGD는 사실 머신러닝 개념을 설명하기 위해 가장 처음 소개되는 방법론이며, 실제로는 이렇게 하지 않고, minibatch방법을 사용하여 결과를 냅니다. 이 방법 역시 개념 설명을 위해 가장 먼저나온 baseline 방법으로 이해하면 됩니다.
우선 FedSGD는 client에서 서버로 gradient를 보내고, 서버는 모든 client에서 gradient를 받아 평균냅니다. 평균낸 gradient를 가지고, 새로운 parameter를 계산합니다. 가장 Naïve algorithm이라 직관적이지만, 성능이나 communication cost가 뒤에나올 FedAVG에 비하면 좋지 못합니다.
가장 핵심되는 step을 그림으로 보자면 아래와 같습니다.
각 스텝은 아래와 같습니다.
- Weight initialization
- 먼저 global weight를 초기화 시킨다.
- Client sampling
- 효율적인 계산을 위해 client를 hyperparameter 𝐶와 함께 샘플링한다. 여기서 𝐶는 0~1사이 값으로 0.75면 4개중 3개만 뽑아 쓰라는 client fraction parameter라 생각하면 된다.
- Local learning
- 초기화 된 weight를 sampling 된 client로 보내어 각각의 local data로부터 새로운 gradient를 계산한다.
- Update parameter
- 각자의 client에서 계산된 gradient를 중앙서버로 보내어 가중평균내고, 새로운 global weight를 update한다.
- 최신의 global weight를 local로 보내어 위의 방법을 (2번 ~ 4번) 반복한다.
(아래의 애니메이션 참고. 원래는 위처럼 가중평균이 맞는데, 표현상 간단하게 단순평균으로 표시했습니다.)
그리고 이렇게 gradient를 보내기도하고, weight를 보내어 중앙서버에서 평균만 내기도 합니다. Client나 서버에 걸리는 부하를 예상하여 잘 조절해주면 될듯합니다.
FedAVG
FedAVG는 FedSGD에 minibatch 개념을 도입하여, client내에서 반복하여 weight를 업데이트 시켜 중앙서버로 보냅니다. communication cost를 줄이는 좋은 방법입니다. Minibatch가 도입된 만큼 다른 hyperparameter가 중요해집니다. 실제 결과에서도 hyperparameter에 따라 성능에 큰 편차가 있습니다.
가장 핵심되는 step은 아래와 같습니다.
여기서 몇가지 hyperparameter가 등장하는데, $B$는 미니배치 크기, $E$는 에포크입니다. 여기서 FedSGD는 FedAVG의 특수한 경우라고 알 수 있습니다. $B = \inf$ & $E = 1$ 인 경우!
Step을 보자면 아래와 같습니다.
- Weight initialization
- 먼저 global weight를 초기화 시킨다.
- Client sampling
- 효율적인 계산을 위해 client를 hyperparameter $C$와 함께 샘플링한다.
- Local learning
- 초기화 된 weight를 sampling 된 client로 보내어 각각의 local data로부터 새로운 weight를 계산한다.
- 이때 계산은 미니배치 단위($B$)로 계산되며, 전체의 자료를 사용하면 하나의 에폭의 update가 일어난다.
- 이러한 update를 에폭($E$)만큼 진행하여 하나의 client당 하나의 weight가 나오도록 한다.
- 위의 FedAVG core step 참고
- Update parameter
- 각자의 client에서 계산된 weight를 중앙서버로 보내어 가중평균내고, 새로운 global weight로 update한다.
- 최신의 global weight를 local로 보내어 위의 방법을 (2번 ~ 4번) 반복한다.
(아래의 애니메이션과 psuedo code 참고)
'통계 & 머신러닝 > 연합학습' 카테고리의 다른 글
[Split Learning] 기본 구조 (0) | 2024.08.11 |
---|---|
[연합학습 기본] 결과 (0) | 2024.08.06 |
[연합학습 기본] 예시를 통한 핵심 개념 및 작동 원리 확인 (0) | 2024.08.06 |
[연합학습 기본] 구조와 고려 사항 (0) | 2024.08.06 |
[연합학습 기본] 개념 (0) | 2024.08.06 |