연합학습(Federated Learning)
연합학습은 구글에서 제안된 기법으로 개인 모바일 기기에 저장된 데이터를 이용하여 인공지능 모델 학습을 수행하는 방법이다. 기존 인공지능 학습 방법은 빅데이터를 중앙 저장소에 구축하여 학습 데이터로써 모델 학습에 사용하였다. 연합학습은 이와 다르게, 다수의 개인 모바일 기기에 저장된 데이터를 이용하여 인공지능 모델을 학습하고 학습된 파라미터를 클라우드 상의 서버로 전송하여 통합한 파라미터를 인공지능 모델 학습에 사용하고 이를 반복하는 방법이다.
최근 연합학습이 주목을 받고 있는데, 중앙 서버에 구축된 빅데이터를 이용하는 것이 아닌 학습 정보만을 이용하여 연산 속도의 우수함과 데이터가 개인 모바일 기기에서만 이용되기 때문에 정보보호 측면에서도 안전하다. 아무래도 개인 데이터는 민감한 정보이고 유출 되었을 경우 악용될 우려가 크기 때문이다.
아래는 구글 ai 블로그에 소개된 연합학습 흐름이다.
개인 모바일 기기에서 인공지능 모델이 저장된 사용자의 모바일 기기 데이터에 맞게 학습하고(로컬 모델), 다양한 사용자의 학습 파라미터를 중앙 서버로 전송된다. 중앙 서버에서는 개인 모바일 기기에서 학습한 인공지능 모델 정보를 바탕으로 더 우수한 성능의 인공지능 모델(글로벌 모델)을 학습하고 학된 인공지능 모델을 개인 모바일로 전송하는 과정을 반복한다.
인공지능 모델 학습은 자원이 많이 필요로 하기 때문에 사용자 모바일 기기 성능에 영향을 줄 수 있다. 그래서 사용자가 모바일을 사용하지 않는 시간을 활용하고, 모델 학습 정보 전송에도 통신 비용이 들기 때문에 무료 와이파이 접속되었을 경우에만 통신을 하게 된다.
구글은 이미 연합학습을 자사 키보드 서비스인 Gboard에 적용하여 사용자가 단어 입력시, 유사 단어 추천 기능에 연합학습을 사용하고 있다.
연합학습은 분산학습과 유사하지만, 기본 가정이 다르다. 분산학습의 경우 하나의 모델을 병렬적으로 학습하고 각 데이터가 독립적이며 동일한 분포를 가진다고 가정한다. 그러나 연합학습은 서로 이질적인(Heterogeneous) 데이터를 학습하기 위한 가정을 가지고 수행된다. 그래서 연합학습에서는 Non-IID, Unbalanced, Massively distributed, Limited communication이라는 특성을 가지고 있다.
현재, 연합학습은 의료분야에서 가장 관심을 가지고 있는 듯 보이고 있다. 아무래도 개인정보에 민감한 분야이다 보니 기관 밖으로 데이터가 유출될 가능성이 낮은 상황에서 인공지능 모델을 개발할 수 있다는 점에서 주목하고 있다. 최근에는 NVIDIA, Intel에서 의료기관과 현업을 통해 연합학습 연구과 플랫폼을 개발하고 있다는 기사가 보도 되고 있다. 아래 그림은 Intel에서 제시하고 있는 연합학습의 아키텍처이다.
기존 구글에서 제시한 아키텍처에서 다수의 개인 모바일 기기가 각 의료기관으로 변경되고 각각 의료기관 내부의 데이터를 이용하여 인공지능 모델 학습을 수행하고 학습된 파라미터를 중앙 서버로 전송하여 글로벌 모델을 학습해 나가는 과정을 확인할 수 있다. 이 외에도 제시되고 있는 연합학습의 다양한 학습방법(Horizontal Federated Learning, Vertical Federated Learning, Federated Transfer Learning)을 아래에서 확인할 수 있다.
연합학습에서 학습하는 방법은 FedSGD(Federated Stocahstic Gradient Descent)와 FedAVG(Federated Averaging)이 대표적이다. 아래 그림에서 좌측을 보면 기기에서 매번 업데이트된 파라미터를 전송하는 반면(FedSGD) 오른쪽 그림에서는 일정 수준까지 모바일 기기에서 업데이트를 수행한 파라미터를 전송(FedAVG)하게 되는데 이는 모바일 기기에서 네트워크 비용을 가장 적게, 효율적으로 사용할 수 있는 상황을 가정하고 있다. 그리고 논문에서 둘의 결과가 크게 차이 나지 않아 FedAVG를 권장하고 있다.
연합학습은 직접 구현(Client, Server 구조) 또는 Tensorflow Federated, Pytorch(Pysyft)등을 이용하여 구현가능하며 어느 것을 이용하여도 무방할거 같다. 아직까지 대표적으로 자리잡은 연합학습 패키지가 없기 때문이다. 연합학습을 개발한 Google의 Tensorflow Federated도 아직까지 수정과 업데이트가 계속되고 있는걸 보면 알 수 있다.
https://www.tensorflow.org/federated?hl=ko
국내 자료로는 신수용 교수님의 논문과 Github(Federated Learning on Clinical Benchmark Data: Performance Assessment, J Med Internet Res 2020;22(10):e20891), 카이스트 AI대학원 황성주 교수님의 논문과 Github(Federated Semi-Supervised Learning with Inter-Client Consistency & Disjoint Learning, https://github.com/wyjeong/FedMatch)를 참고할 수 있다.