본문 바로가기
파이썬 & 머신러닝

최근 머신 러닝 핫한 연구 분야 (1/3)

by 두재 2020. 12. 14.

최근 유명한, 핫한 머신 러닝 연구 분야에 대해서 아주아주 짤막하게 정리해보고 얘기를 좀 해보겠습니다. 저 또한 모든 분야에 대해서 다 잘 아는 것은 아니고 몇 개는 잘 모릅니다. 그냥 이런 게 있다 정도로만 보시고 정확하고 자세한 설명은 따로 찾아보시는 것을 추천드립니다. 얘기가 조금 긴 것 같아 포스트를 나눠 놓겠습니다.

  1. Generative Model (생성 모델)
  2. Reinforcement Learning (강화 학습)
  3. Bayesian Deep Learning (베이지안 딥러닝)
  4. Meta-Learning (메타 러닝)
  5. Semi-Supervised, Self-Supervised Learning (SSL)
  6. Continual Learning (지속 가능한 학습)
  7. Interpretable Neural Network (설명 가능한 뉴럴 네트워크)
  8. Federated Learning (연합 학습)
  9. 그 외 # Neural Cryptography, CryptoNet, Novelty(Anomaly) Detection

아마 재밌을 겁니다. 제가 전문가는 아니지만, 자잘 자잘한 키워드나 컨셉들을 최대한 작성해보았으니 궁금하시면 댓글에 달아주시거나 추가로 찾아봐주세요. 댓글 달아주시면 저도 한 번 찾아보고 최대한 답변해드리겠습니다. 

 

1. Generative Model (생성 모델)

이건 최신인지는 모르겠는데, Computer Vision에서 정말 정말 핫하죠. Variational AutoEncoder (VAE는 생성 모델이지만 AE는 딱히 생성모델은 아니죠)부터 Flow based generative model 부터 Generative Adversarial Networks(GAN)가 있습니다.

Fig. 1. Comparison of three categories of generative models. lilianweng.github.io/lil-log/2018/10/13/flow-based-deep-generative-models.html

 

VAE는 학습을 할 때 기존의 AE와 같이 Reconstruction loss와 함께 latent vector z와 prior distribution (우리가 정하는 간단한 형태의 분포, 정규분포가 주로 사용됩니다.)과의 KL divergence를 loss로 사용하죠. GAN도 많은 분들이 아실 것이고 Discriminator와 Generator을 각각 학습해가며 점차 인풋 distribution에서 나올법한 데이터(이미지 혹은 음성?)를 만들어냅니다. Flow-based 생성 모델은 그림에서 볼 수 있다시피 inverse가 가능한 함수들로 Flow를 만듭니다. AE와 비슷한 구조입니다.

간략하게 정리해보자면 위 3개의 모델의 장단점, 특징은 다음과 같습니다.

  • GAN

(장점) 굉장히 사실적인 이미지를 만들 수 있다. 재밌는 프로젝트들이 많습니다. Cycle-GAN이나 StyleGAN 등... 

[Karras et al. 2019] A Style-Based Generator Architecture for Generative Adversarial Networks 에서 소개된 StyleGAN은 NVIDIA에서 만들었는데, 이미지의 스타일, 성별, 머리스타일, 얼굴각도, 피부색 등을 조절할 수 있습니다. [Karras et al. 2020] Analyzing and Improving the Image Quality of StyleGAN 에서 소개된 StyleGAN2도 있는데 이것은 StyleGAN에서 생기는 이상한 artifact를 없애고, 미세한 보정을 추가했습니다. 미세한 보정이 무엇이냐하면, 기존 GAN에서 만들어지는 이미지의 경우 얼굴각도가 다른 곳을 보더라도 이빨이 앞쪽을 보고 있습니다. 아래 오른쪽 사진처럼요. 그래서 사실 약간 어색했는데요, 이런 부분도 수정한 것입니다.

(Left) Images from StyleGAN, Mixing source images from destination images, (right) The "phase" artifacts.

(단점) GAN은 기본적으로 min-max problem을 푸는 것입니다. Discriminator는 최대한 잘 구별하려고 하고 Generator는 최대한 잘 만드려고 하고 이 두 개의 균형이 잘 맞아 떨어져야 학습이 잘 됩니다. 그래서 학습이 조금 불안정한 이슈가 있는데, Wasserstein GAN이 등장하며 학습이 굉장히 안정적으로 되었다고 하네요. 

그리고 mode collapse라는 것이 있는데 여기서 mode는 최빈값의 의미로 사용됩니다. 이 현상은 뭐냐하면 Generator가 만약 정말 하나를 잘 만들어서 Discriminator가 구별을 잘 못할 경우 Generator가 이 이미지 하나만 (실제로는 정말 하나만은 아니겠죠. 극단적인 예시입니다.) 계속 만들면 된다는 것입니다.

그리고 비교 기준이 조금 애매합니다. 대부분 눈으로 보고 data의 quality를 구분합니다.

  • VAE

(장점) ELBO라고 Evidence Lower BOund를 maximize하도록 학습합니다. 수학적으로 정교하게 설명이 되어 있습니다.

(단점) 이미지 같은 경우에서는 약간 블러합니다. 다시 말해 퀄리티가 그렇게 좋지는 않습니다. Auto-Encoder 구조 자체에서도 Reconstruction이 정말 잘 되지는 않습니다. 물론 [Razavi et al. 2019] Generating Diverse High-Fidelity Images with VQ-VAE-2에서 소개된  VQ-VAE-2의 경우 아래와 같이 VAE 기반이면서도 굉장히 선명한 사진들을 만들어냅니다.

Generated images from VQ-VAE-2

  • Flow-based

(장점) VAE와 같이 수학적이고 내부에 있는 flow라는 것을 통해 어떤 식으로 인코딩되고 그 inverse를 통해 어떻게 다시 고차원의 데이터가 되는지 볼 수 있습니다.

(단점) Inverse를 계산할 때 Jacobian이 필요한데, 이 부분이 연산이 많이 드는 경우가 있습니다. 그래서 flow를 구성할 때 Jacobian이 간단한 함수들로 만듭니다.

 

또 최신 신기한 논문을 소개해드리자면, OpenAI에서 나온 2020년 논문인데, [Chen et al. 20] Generative Pretraining from Pixels 논문에서는 자연어처리(NLP)에서 사용되는 GPT라는 모델을 이미지에 접목시켰습니다. NLP의 단어처럼 이미지의 픽셀들을 단어라고 생각하고 빈 칸을 채우는 것과 같은 원리이죠. 한 번 읽어보셔도 좋을 것 같습니다.

[Chen et al. 20] Generative Pretraining from Pixels

 

 

2. Reinforcement learning (강화 학습)

강화 학습도 많이 들어보셨을 겁니다. 바둑을 하는 AlphaGo(알파고)와 스타크래프트를 하는 AlphaStar, DOTA 2라는 리그오브레전드 같은 게임을 하는 OpenAI사의 Five라는 Agent가 있죠. Agent가 강화 학습에서 이제 모델과 같은 애입니다.

 

DeepMind는 알파고라 아마 다들 아실거고, OpenAI는 인공지능을 연구하는 신생? 회사인데, 일론 머스크도 참여하고 굉장한 인공지능 연구자들이 공동 창업을 했거나 속해 있어서 최근 엄청 잘 나가고 있습니다. 뭐 OpenAI의 Five의 경우 5개의 Agent가 있는 것입니다. 롤(LOL)처럼 5명이 한 팀이 되어서 하는 거라 Multi-agent Reinforcement Learning이라는, 여러 Agent가 팀이 되는 상황에서의 RL을 만든 것입니다. 스타크래프트는 1 Agent로 하는 것이고요. 참고로 AlphaStar 논문은 Nature 지에 올라와있습니다.

 

강화 학습은 쉽게 생각해서 Agent가 Environment라는 환경과 State라는 정보를 받아와 Action을 하고 Reward를 받는 상황 속에서 Reward를 maximize해야 하는 것입니다. 그래서 Agent는 어떤 State가 왔을 때 이러한 Action을 해라 라고 결정해야 하는 것이죠. 예로 Atari 게임에서 벽돌깨기의 예시를 보면, agent는 이제 게임을 하는 애고, 현재 벽돌이 어떻게 있는지와 공이 어디있는지 이미지를 보고 (State) 내 튕기는 판을 왼쪽으로 할지 오른쪽으로 할지 (Action)를 정하고 만약 벽돌이 깨지면 점수를 (Reward) 받게 됩니다.

강화 학습은 쉽게 생각해서 Loss 함수를 안 줬다 혹은 대충 줬다라고 생각하면 됩니다. 우리가 Regression이나 classification을 풀 때에는 MSE loss, Cross-EntroyLoss 등을 활용하여 식을 정말 계산하지만, 강화 학습에서는 State를 활용하여 Reward를 계산하는 식을 직접 주지도 않고 아마 굉장히 정말 정말 복잡할 것입니다. 강화 학습에서는 Agent가 직접 action을 해보고 바뀐 state와 reward를 확인하면서 알아서 학습하도록 기대하는 것이죠.

 

강화학습에는 정말 여러 알고리즘도 있고 한데, 오늘 다루지는 않겠습니다. 대신 강화학습에서도 최근 트렌드가 되고 있는 두 가지 부분을 알려드리겠습니다.

 

  • Meta Reinforcement Learning

후에 메타 러닝을 알려드리겠지만, 메타 학습과 강화 학습을 함께 섞은 것입니다. 쉽게 말하자면 다양한 Task에 대해서 모두 잘하는 RL agent를 만들자입니다. 강화 학습에서 굉장히 대가이신 Sergey Levine 교수님이 최근에 공개한 Meta-world라는 데이터셋이 있는데, 아래 그림과 같이 Train tasks에 몇 가지 task, 버튼 누르기, 서랍 닫기 등이 있고 Test task에는 서랍 열기, 문 닫기 등이 있습니다. 조금 후에 메타 러닝에 대해서 더 얘기를 해보겠습니다.

 

  • Offline Reinforcement Learning (Batch Reinforcement Learning이라고도 썼는데, 이제 표현이 바뀐듯)

제가 조금 전에 설명한 RL 개념은 Online RL입니다. 이게 무슨 소리냐하면, 우리의 Agent가 환경이랑 interaction을 하면서, 즉 어떤 액션을 하고 Reward를 받고 State가 바뀌는 것을 직접 보면서 학습을 합니다. 그래서 아 이런 액션을 했더니 갑자기 리워드가 엄청 올라갔네? 이런 것이 가능합니다.

Offline RL은 환경과 interaction을 할 수 없는 상황입니다. 대신, 다른, 임의의 agent가 interaction을 해놓은 데이터만 보면서 학습하는 것입니다. 그것이 이제 Offline Dataset이라고 하는데 이 데이터셋을 만들 때 사용한 Agent가 정말 똑똑한 expert agent일 수도, random한 action만 그냥 하는 random agent일 수도, 사람이 직접하는 human agent일 수도, 아니면 이것들을 다 섞어놓은 것일수도 있습니다.

왜 이런 상황이 있느냐 하는지에 대한 예시로는, 예를 들어 약물 투여와 같은 것이 있습니다. 환자의 상황이 어떨 때 이런 약들을 줘보자, 그랬더니 환자가 죽었다. 그러면 마이너스 reward고 환자가 잘 살았다 이러면 플러스 reward이겠죠. 이것을 계속 반복해보면 약물을 어떻게 투여할지 잘 고르는 agent가 될 것입니다. 이게 바로 기존의 RL 생각인데, 이건 좀 그렇죠... 환자가 죽는 경우가 생길 수 있잖아요. 그 대신, 기존에 약물을 투여하고 어떻게 되었는지에 대한 기록이 dataset처럼 있다면, 이것을 바탕으로 agent를 학습하자! 의 문제 상황인 것입니다.

이 경우 문제가 뭐냐? 이제 학습을 하려고 하는 Agent가 offline dataset을 가지고만 학습을 하면 Distribution shift라고 하는 문제가 발생합니다. 바로 내 현재 agent가 맞이한 State와 그 때 하려고 하는 Action이 Offline dataset에 없을수가 있습니다. 이처럼 내가 맞이하게 되는 데이터의 distribution과 offline dataset이 현재 가지고 있는 dataset은 다를 수밖에 없습니다. 그래서 학습이 잘 안되게 되는 것이죠.

그렇다면 이런 생각도 해볼 수 있습니다. 내 agent가 가지고 있는 policy (policy는 state를 통해서 어떤 액션을 할지 고르는 것을 말합니다.)를 offline dataset의 agent가 가지고 있는 policy랑 같게 만들어버리자. 이게 바로 Behavior cloning이 되는데 (behavior를 따라하자는 것이죠), offline dataset이 expert agent로부터 만들어진 것이면 그나마 behavior cloning을 해도 되는데, random이나 medium(중간 정도 퍼포먼스)로부터 나온 것이면 성능이 잘 나오지 않겠죠. Offline RL은 이러한 상황 속에서도 좋은 성능을 내고자 하는 것이 목표입니다.

 

3. Bayesian Deep Learning (베이지안 학습)

2020/09/29 - [논문] - [BNN] Efficient and Scalable Bayesian Neural Nets with Rank-1 Factors

 

[BNN] Efficient and Scalable Bayesian Neural Nets with Rank-1 Factors

아직 한국어 설명이 많지 않은 최신 논문들, 블루 오션을 타겟으로 한 포스팅입니다. 최신 논문에서 중점적으로 다루는 아이디어를 커버하려고 하고 기본적인 지식은 간략하게 다룰 예정입니다

honeyjamtech.tistory.com

저번에 포스트했던 BNN 논문에서도 BNN에 대한 설명이 나오는데요, 간략하게 소개를 하자면 다음과 같습니다.

기존에 뉴럴 네트워크가 파라미터를 어떠한 값으로 가지고 있었다면 파라미터 자체를 하나의 분포로 생각하자는 것입니다. 결과를 낼 때에는 파라미터 하나 하나를 그 파라미터의 분포에서 Sampling을 통해서 얻고, 학습은 파라미터를 하는 것이 아니라 그 파라미터의 분포를 설명할 수 있는 값 ((ex) 정규분포에서 평균과 표준편차)를 업데이트하자 입니다.

이 분야는 Uncertainty를 다루기 위해서 나왔습니다. 예를 들어보겠습니다. 기존의 뉴럴 넷 관점에서 만약 classification을 하는 상황입니다. 개와 고양이 두개로 학습을 진행하고 test 때에 앵무새 혹은 자동차를 집어넣었습니다. 그 아웃풋들이 과연 의미가 있는 결과일까요? 기존 뉴럴 넷은 어쨌건 결과는 내보냅니다. 만약 앵무새를 넣었을 때 개와 고양이의 확률이 (45%, 55%) 가 나왔다고 하면 뭐 앵무새가 고양이와 더 가깝다는 뜻도 아니고.. 만약 저런 45:55처럼 모호한 결과에 대해서는 무시하자! 라고 해버린다면 개와 고양이 중에서도 약간 데이터가 어려워지면 못 맞출 수도 있습니다.

이러한 케이스에 대해서 우리가 진정으로 모델에게 원하는 것은 모르면 모른다고 말해라 입니다. 기존의 뉴럴 넷은 모르는 게 없습니다. 단지 틀릴 뿐이지 ㅋㅋ.  그래서 이제 사람들이 Uncertainty, 잘 모르겠다 라는 것을 답할 수 있는 뉴럴 넷에 대해서 고민한 것입니다.

그래서 이제 Bayesian Neural network가 나온 것입니다. 기존의 뉴럴 넷에서 베이지안 뉴럴 넷으로의 바뀐 점은 맞다, 틀리다 로부터 이건 95%로 맞을거다 잘 모르겠다 이런 식으로 바뀌게 됩니다. 운전을 해보셨다면 아시겠지만, 저 차가 직진하고 있다고 저 차를 안 보면 안되고, 초록 불이라고 해서 그냥 속도를 계속 내면 안됩니다. 저 차가 갑자기 들어올 수도 있고 갑자기 빨간 불이 될 수도 있는 것이죠. 그래서 자율 주행 분야에서는 이 BNN을 많이 사용하고 있다고 합니다.

[McAllister et al. 17] Concrete Problems for Autonomous Vehicle Safety: Advantages of Bayesian Deep Learning

 

PyTorch나 Tensorflow모두 Bayesian 뉴럴 넷을 짤 수 있도록 구현이 모두 되어있는데 한 가지 신기한 것을 알려드립니다. [Gal and Ghahramani 2016] Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning이라는 페이퍼인데, 우리가 흔히 사용하는 Dropout을 Bayesian 뉴럴 넷처럼 생각할 수 있다는 것입니다. 물론 한 가지 다른 점은, 기존 Dropout은 학습 때만 적용하고 evaluation 단계에서는 dropout을 사용하지 않고 모든 뉴런을 사용하지만, Bayesian approximation을 위해서는 evaluation 때에도 dropout을 사용합니다. 번외로 Pytorch로 implement할 때에는 torch.nn.functional에서 functional.dropout을 사용하면 됩니다. Evaluation에서도 dropout을 사용하고 dropout이 랜덤하게 적용되기 때문에 매 시행마다 결과가 조금씩은 다를 것입니다. 이를 Monte Carlo dropout 줄여서 MC dropout이라고 부릅니다. 또한 이 때 모델은 uncertainty를 estimate할 수 있는 특성이 생기는데, 학습된 모델에다가 같은 데이터를 T 번 집어넣고 결과의 표준편차를 계산합니다. 만약 학습에 사용된 data였다면 충분히 학습되었다면 몇 번 집어넣던지 표준편차가 굉장히 낮고, 결과가 거의 같은 값들로 나오겠죠. 만약 정말 보지 못한 data였다면 학습이 된 적 없으니 어떤 식으로 dropout되는지에 따라 정말 랜덤한 결과가 나올 것이고 표준편차가 굉장히 클 것입니다.

[Gal and Ghahramani 2016] Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning

위 그림에서 하늘색 세로 점선 왼쪽에 있는 데이터를 가지고 학습을 하고 하늘색 세로 점선 오른쪽에 결과로는 prediction을 하는 것인데, 진한 선이 mean(평균)을 그린 것이고 $\pm 2\sigma$까지 $0.5\sigma$기준으로 그려놓은 것입니다. (c)를 보면 학습에 사용한 데이터로부터 멀어질수록 점점 uncertainty가 커짐을 볼 수 있습니다. 이러한 BNN의 특성이 기존의 뉴럴 넷보다는 납득이 가는 구조입니다.

Uncertainty modeling을 하는 방법은 MC dropout외에 Deep ensemble, 저번에 포스팅한 Rank-1 BNN, SWAG등이 있습니다. 

 


일단 오늘은 Generative Model, Reinforcement Learning, Bayesian Deep Learning을 봤는데 이들은 최신 분야이긴 하지만 이미 널리 알려져있는 분야입니다. 블로그에 찾아보면 한국어 블로그가 많다는 뜻이죠. Generative Model은 정말 이미 경이로운 결과물들을 만들어내고 있고요. 물론 Meta RL 특히 Offline RL은 정말 최신 분야이긴 합니다. 최근에 NeurIPS Offline RL Workshop도 있었고 논문들도 거의 2020년 9월부터 나오고 있습니다. 다음, 다다음 포스트에서 더 최신 분야들을 다뤄보겠습니다.