반응형

강의 소개

이번 글에선 딥러닝에 대한 소개, 그리고 딥러닝의 역사에 대해 알아본다.

딥러닝에 대한 소개 : CNN(Convolutional neural networks), RNN(Recurrent Neural Networks)와 같은 딥러닝 모델을 공부하기 전에 중요한 요소인, Data, Model, Loss, Optimization algorithms에 대해 배운다.

딥러닝의 역사 : 2012년 부터 2021년까지의 패러다임에 대해 배운다

 

 

딥러닝은 한사람이 짧은 시간동안 다루기에는 너무나 다양한 연구주제가 존재한다.(ex. 장님이 코끼리를 만지는 상황)

딥러닝 학문은 여러가지 분야들로 이루어져있다. 따라서 어떤 분야가 좋은 "deep learner"가 되는지는 일반적으로 3가지 정도로 생각한다.

그중 하나가, 구현실력이다.
보통 TensorFlow로 공부를 시작하고, 요즈음 대부분의 사람들은 PyTorch를 많이 사용한다.

그래서 이런 Implementation Skills이 굉장히 중요하다. 머릿속으로 생각하고, 아이디어를 가지고 있는 것들을 실제로 돌려보고, 그것을 통해서 결과를 뽑아낼 수 있는 능력이 굉장히 중요하다.

또 중요한 것은, Math Skills이다. 딥러닝에 필수인 여러 수학적인 BackGround가 필요하겠지만 선형대수, 확률론이 많이 언급이 될 것이다. 

그리고 연구를 하는 입장에서 가장 중요한 것은, "Knowing a lot of recent Paper" 이다. 
즉, 현재 어떤 트렌드가 있고, 어떤 논문들이 있고, 어떤 연구들이 발표되는지를 아는 것이 중요하다.

딥러닝의 개요

  1. Historical Review

  2. Neural Networks & Multi-Layer Perceptron
  3. Optimization Methods
  4. Convolutional Neural Networks
  5. Modern CNN
  6. Computer Vision Applications
  7. Recurrent Neural Networks
  8. Transformer
  9. Generative Models Part1
  10. Generative Models Part2

인공지능의 정의

인공지능의 정의

인공지능의 정의는 여러 사람마다 생각하는게 다르지만, 
기본적인 정의는 "사람의 지능을 모방하는 것"이다.
사람의 지능을 모방하기 위해서는 굳이 "딥러닝"만이 사용되지는 않는다.

이러한 인공지능의 분류체계를 잘 짚고 넘어가는게 용어를 활용함에 있어서 도움이 될 것이다.

인간의 지능을 모방하는 인공지능 안에 "머신러닝"이라는 분야가 있다.
"머신러닝" 분야는 일반적으로 Data-driven approach"이다. 
우리가 무언가를 학습하고자 할 때, 그 학습을 데이터를 통해서 한다.
예를 들어, 강아지와 고양이를 분류하는 문제를 풀고자 했을 때, 많은 양의 강아지 이미지와 많은 양의 고양이 이미지를 모아서 이것을 자동으로 분류하는 알고리즘, 모델을 만드는 것이 "머신러닝"이다.

인간의 지능을 모방하면서 데이터를통해 무언가를 학습하는 기계학습(머신러닝)안에 우리가 사용하는 Neural networks를 사용하는 어떤 세부적인 분야가 딥러닝이다.

따라서, 위 그림을 왜짚고 넘어가냐면,
"딥러닝"을 연구하는 것이 "인공지능"전체를 연구하는 것과 동일하지 않다는 것을 알려주기 위함이다.

딥러닝 분야

딥러닝 분야의 가장 중요한 요소 

  • data

앞서 얘기 했던 것처럼, 강아지와 고양이를 분류하고자 했을 때, 강아지와 고양이 이미지가 많이 필요하다.
혹은, 만약 자연어를 분류하고자 했을 때, 말뭉치가 필요하다.
그리고 비디오를 만들고 싶다면, 유튜브에 있는 수많은 비디오들이 우리의 데이터가 될 것이다.

  • model

그리고나서 이런 데이터들을 이용해서 학습하고자 하는 모델이 필요하다.
아까 들었던 강아지와 고양이를 구분하는 것을 예시를 사용해서 얘기하자면,  입력이 강아지가 되고, 출력으로는 분류하고자 하는 해당 입력이 강아지인지 고양이인지에 대한 라벨이 나와야 한다. 
결국 이미지를 라벨로 바꿔주는 모델이 필요하다. 물론 이 모델이 Convolution  Neural Networks일 수도 있고, Multi-Layer Perceptron 일 수도 있고, Recurrent Neural Networks일 수도 있다. 
이러한 모델을 우리가 학습하고 정의하는 것이 중요하다.

  • Loss function

모델을 정의하고 나면, 이러한 모델을 학습시킬 Loss function이 필요하다.
Regression 문제를 푼다고 가정하면,  제곱을 최소화한다고 볼 수도 있고, Classfication 문제를 푼다고 가정하면, Cross-Entropy를 사용할 수도 있다.

  • algorithm

이러한 Loss function을 최소화하는 알고리즘이 필요하다. Stochastic Gradient Descent(확률적 경사 하강법), Adam Optimizer 혹은 Adam을 개선하여 최근에 나온 RAdam. 이런식의 알고리즘이 필요하다.

data

데이터라는 것은 우리가 풀고자 하는 문제에 dependent하게 된다.
분류문제 중 하나인 강아지와 고양이를 분류문제에는 강아지와 고양이 이미지가 필요할 것입니다.

semantic Segmentation이라는 문제는, 어떤 이미지가 주어지면 이 이미지가 어떤 라벨인지 찾는 것이 아니라,  각이미지의 각필셀별로 해당 픽셀이 어떤 클래스에 속하는지를 보게 된다. 예를 들어 어떤 이미지가 주어졌을 때, "이 픽셀은 도로다", "이 픽셀은 자동차다", "이 픽셀은 하늘이다", "이 픽셀은 사람이다" 이런식으로 이미지의 픽셀별로 분류를 하는 dense calssfication 문제를 푸는 것이 Semantic Segmentation 이다

Detection은 Segmentation과 약간 비슷하지만, 어떤 물체가 있을 때, 이 물체에 대한 bounding을 찾고 싶은 것이다. 
즉, 해당 이미지의 어떤 영역에는 강아지가있고, 어떤 영역에는 고양이가 있고, 어떤 영역에는 사람이 있다 라는 bounding값으로 뱉어주는 것이 Detection 문제이다.

Pse Estimation은 이미지에 있는 사람의 3차원 스켈레톤 정보 혹은 2차원 스켈레톤 정보를 알아내는 것을 말하고,

Visual QnA는 이미지와 문장이 주어졌을 때, 그 질문의 답을 구하는 것을 말한다.
ex) 위의 사진이 주어졌을때 "What color are her eyes?"라고 하면 여자의 눈의 색깔이 무엇인지 뽑아낼 수 있는 것을 Visual QnA라 한다.

인공지능 모델

모델 이라는 것은, 결국 어떤 이미지가 주어지거나, 텍스트가 주어지거나, 단어가 주어졌을 때, 이러한 것을 내가 직접적으로 알고싶은 클래스 레이블같은 것으로 바꿔준다.

대표적인 모델로는

  • AlexNet
  • GoogleNet
  • LSTM
  • Deep Auto Encoders
  • GAN

같은 데이터, 같은 task가 주어졌다고 하더라도, 모델에 성질에 따라서 좋은 결과가 나올 수도 있고, 안좋은 결과가 나올 수도 있다.
그래서 결과를 잘 만들어 주기 위해서, 여러가지 테크닉들이 들어가게 된다. 그런것들을 하나하나 공부할 것이다.

loss function

loss function은 데이터가 정해져 있고, 모델이 정해져 있을 때, 이 모델을 어떻게 학습할건지에 대한 것이다.
딥러닝을 다룰 것이기 때문에, 여기서 다루는 모델은 어떤식으로든, Neural Networks형태를 가지게 될 것이다.
Neural Networks라는 것은 각 Layer 별로 들어가있는 weight와 bias로 이루어져 있다. 
그 weight에 각각 의 parameters를 어떻게 업데이트 할 지, 이때! 기준이 되는 loss function을 정의하게 된다. 

  • Regression Task

회귀문제를 푼다고 가정하면, Neural Network의 출력값과 내가 맞추고자 하는 Target점 사이에 (Two-Sqaured Loss)제곱을 최소화 시키는게 일반적인 목적이 된다. 제곱을 평균내서 줄인다 라고해서 "MSE(Mean Squared Error)"라고 부른다.

  • Classfication Task

분류문제를 풀때는, Neural Networks에서 나온 출력값과 라벨데이터 사이의 "Cross Entropy"라고 불리우는 것을 최소화하게 된다. 따라서 CE(Cross Entropy)라고 불린다.

  • Probabilistic Task

확률적인 모델을 활용할 때,  출력값을 단순히 어떠한 값이 아니라, 그 값에대한 평균과 분산 혹은 가우시안으로 모델링을 한다고 했을 때, MLE(maximum likely estimation) 최대가능도법 관점으로 문제를 풀 수있다.

가장 중요한 점은, Loss function 이라는 것은 우리가 이루고자 하는 것의 근사치에 불과하다는 것이다. 
일반적으로 만약에 분류문제나 회귀문제를 푼다고 가정했을 때, 단순히 Loss function이 줄어드는 것을 목적으로 볼 수 도 있지만, 사실, Loss function값이 줄어든다고해서 우리가 원하는 값을 항상 이룬다는 보장이 없다. 그래서 이러한 관계를 잘 이해하는 것이 새로운 연구를 하는데에 매우 중요하게 작용한다. 
ex) 회귀문제를 푼다고 가정했을때, 데이터에 노이즈가 많이 껴있으면 MSE 처럼 출력값과 타겟사이의 제곱을 최소화 하게되면 어떠한 아웃라이어들 (이상치, 에러)가 굉장히 클 경우에 이 제곱이 전체적인 네트워크의 학습을 줄이게 된다. 그럴때는, 이러한 MeanSquaredError 대신에 (l1 norm minimization)절댓값을  한다거나 회귀모델에 있는 다른 loss function을 제안하는 것이 중요하다.

즉, 다른 사람들이 회귀문제를 풀떄, Mean Squared Error을 사용하거나, 분류문제를 풀때, Cross Entropy를 사용한다고해서 꼭 이것들을 사용해야 하는 것이 아니다.
이것들을 왜 사용하며, 이 Loss가 줄어드는 것이 우리가 진짜 풀고자하는 문제를 어떻게 푸는지를 이해하는 것이 중요하다.

최적화 알고리즘

최적화 방법은 데이터가 정해져있고 모델이 정해져 있고, loss function이 정해져 있을 때, 네트워크를 어떻게 줄일지에대한 이야기이다. 
일반적으로 활용하는 방법들은 모두다 Neural Networks의 Parameter를 Loss function에 대해서 1차미분한 정보를 활용한다. 
1차미분한 정보를 그냥 활용하는 것이 Stochastic Gradient Descent(확률적 경사하강법)인데, 
이것들을 변형한 모멘텀, Adagrade등도 존재한다.
optimazation 방법론들의 특성을 이해하는 것이 매우 중요하다.

이것들 뿐만 아니라, regularizer (학습을 할 때, 학습이 오히려 잘 안되게 해주는 요건)이 있는 방법론들을 같이 추가해주게 되는데 이렇게 추가하는 이유는, 우리가 loss function을 단순히 줄이는 것이 우리의 목적이 아니기 때문이다. 
우리의 목적은 이 모델이 학습하지 않은 데이터에서 잘 동작하는 것이 목적이기 때문에 

  • Dropout
  • Early stopping
  • k-fold validation
  • Weight decay
  • Batch normalization
  • MixUp
  • Bayesian Optimization

과 같은 다양한 테크닉들을 같이 활용해서 네트워크가 단순히 학습데이터에서만 잘 동작하는 것이 아니라 내가 한번도 보지 못한 테스트 데이터, 실제 환경에서 잘 동작하는 것을 목표로, 그리고 그 목표를 잘 이루는데에 도움이 되는 것들을 공부 할 예정이다. 

딥러닝의 역사

딥러닝이라고 불리우는 것은 1980년도, 1990년도부터 발전을 해왔지만, 다른 머신러닝 방법론들에 비해 두각을 나타냈던 2012년도,2013년도부터 2018년도2019년도, 그리고 현재까지 이르도록 어떤 방법론들이 큰 임팩트가 있었는지 1년에 한두개 정도의 연구를 살펴보며 간단히 알아보도록 하겠다. 

딥러닝의 아이디어

"Deep Learnings  Most Important Ideas - A Brief Historical Review" 라는 제목에서 알 수 있듯, 딥러닝에 있어서 가장 중요한 아이디어들, 간단한 역사적 리뷰에 관한 내용이다.

alex net

2012년에 나온 Alex Net 논문이다.
그림을 보면 알 수 있듯, Convolution networks다.
이 네트워크가 하려고 하는 것은, 크기가 224*224 이미지가 들어왔을 때, 이것들을 분류하는 것이 목적이다.
2012년에 열린 이미지분류 대회에서 Alex Net이 1등을 했다.
2012년이전에도 대회가 있었지만, 2012년이 딥러닝을 이용한 모델이 처음으로 1등을 한 시기이다. 
그 이전에는 딥러닝을 활용하지 않고, 커널기반 방법론, Support vector machine 등의 고전적인 머신러닝 방법론을 이용해서 그것들을 잘 조합한 방법들이 1등을 해왔지만, 2012년에 Alex Net이 1등을 한 이후에는, 한번도 딥러닝을 제외한 방법론들이 1등을 한 적이 없다. 

즉, Paradigm shift(패러다임 시프트)가 일어난 것이다.
역사적으로 보았을때, 딥러닝이라고 불리우는 것이 인간을 모방한다고는 하지만, 막연히 잘될 것은 같던, 만년 유망주같던 딥러닝이 실제적으로 성능을 발휘하기 시작했고, 그 이후로 모든 머신러닝의 판도가 바뀌었다고 볼 수 있다. 

DQN



 2013년도에는 DQN방법론이 있다. 
한국인이라면, 이세돌과 알파고의 대결을 봣을 것이다. 
알파고를 만든 가장 기본이 되는 방법이 강화학습이고, 그것을 만든 회사가 deep mind인데, 딥마인드가 "아타리"라고 부르는 아케이드 게임을 강화학습으로 푸는데 사용한 방법이 "DQN"이다.
DQN 방법론 자체는 "QLearning"이라고 불리는 강화학습을 이용해서 딥러닝에 접목한 방법이고, 이때까지만해도 딥마인드는 영국 런던에 있는 스타트업이었는데, 이 연구 결과를 보고, 구글에서 회사인수를 제안했고, 지금의 구글 딥마인드가 되는 계기가 되었다. 그후, 엄청난 컴퓨팅 파워를 바탕으로  알파고부터, 최근에 핫한 "알파폴드2"까지 여러가지 연구결과가 나왔다. 따라서 오늘날의 딥마인드가 있게한 논문 "DQN"이다. 

encoder decoder

2014년도에 나왔던 encoder/decoder라고 하는 문제는, NMT(Neural Machine Translation)문제를 풀기위한 것이다.
우리가 구글번역을 활용할 때, 사용되는 방법론이 NMT인데, 결국 풀고자하는 문제는 간단하다.
다른언어로 되어있는 문장(단어의 연속)이 주어졌을 때, 이것을 어떻게든 잘 표현해서 우리가 원하는 다른 언어의 단어의 연속으로 아웃풋을 뱉어주는 것이 목적이다.  
Encoder 라고 불리우는 것은, 단어의 Sequence가

주어져 있을 때, 이것을 어떤 벡터로 인코딩을 하고, 그 인코딩된 벡터가 다른언어의 Sequence를 만들어 내게 하는것이 Encoder/Decoder model이 되고, 이때 활용하는 것이 Encoder/Decoder이다.
이때 이후로, Natural Machine Translation(기계어 변역)의 트랜드가 많이 바뀌었다고 볼 수 있다. 

adam optimize

2014년에 나왔던 또 다른 중요한 방법론은 "Adam Optimizer"이다.
Adam은 "Adaptive momentum optimizer" 의 약자인데, 이것이 왜 중요한지 많은 사람들은 관심이 없을 수도 있다. 
왜냐하면, 많은 사람들이 딥러닝 모델을 학습시킬 때, "Adam"을 그냥 사용한다.
근데 왜 "Adam"을 사용할까? 
우리가 학습시키려고 하는 모델이 있을때, Optimizer는 굉장히 여러가지가 있다. 예를 들어서, Stochastic Gradient Descent가 있고, Momentum Optimizer가 있고, Adagrade등 여러가지가 있는데, Adam을 그냥 쓰는 경우가 많다. 

왜 "Adam"을 그냥 쓰냐면, "Adam"이 결과가 잘 나오기 떄문이다. 
그래서 일반적으로 딥러닝에 관한 논문을 읽다보면(특히 구글 등 큰 그룹에서 쓴 논문), 굉장히 희한한 방법론을 많이 쓴다. 예를들어,  "CIFAR10"데이터셋을 학습시키는 네트워크가 처음 나왔을때, 어떻게 학습시켰는지를 보면, Adam을 쓰지 않고, STD를 사용하면서 ResNet같은 아키텍처를 사용하게 되고, 학습이 100epoch를 돌린다고 가정했을때, 50Epoch 정도가 됐을 때(절반정도 이루어졌을 때, ) learning rate를 10분의 1수준으로 줄인다. 그리고 epoch가 75%수준을 지났을 때, 또 다시 learning rate를 10분의 1로 줄인다. 그렇게 하면 논문에서 report되어있는 결과가 재현이 된다. 

그런데, 왜 그렇게 learning rate를 바꿧는지, 왜 다른 optimizer가 아니라 STD를 썻는지에 대해서는 논문에 설명이 없다. 
다른 논문들도 마찬가지이다. 다른논문들은 Adam을 사용했고, learning rate scheduling은 이렇게 했다 등 그리고 transfomer를 보면, 되게 희안한 learning rate scheduler 가 들어간다. 근데 왜그렇게 했는지에 대한 설명이 없다. 

바꿔말하면, 그렇게 하지 않으면, 같은 결과가 복원이 되지 않는다. 
같은 결과가 복원이 안된다는 것은, 더 안좋은 성능이 나온다는 것이다. 그래서 일반적으로 딥러닝모델을 만들고, 같은 데이터셋이 있을 때, 되게 다양한 Hyperparameters search를 한다.
Hyperparameter에 들어가는 것은, 어떤 Optimizer를 쓸지, Base learning rate를 얼마로 할지, learning rate scheduling은 어떻게 할지 등 여러가지를 정하게 되고, 그것을 정하기에 따라 성능의 결과가 많이 달라지는데, 이게 가능하려면, 많은 컴퓨팅 리소스가 필요하다. 예를들어, 구글에서 TPU를 한번에 1000개를 쓸 수 있다면, 1000개의 다른 경우들을 한번에 돌려볼 수 있겠지만, 일반적인 사람들의 경우에는, GPU가 많아봤자 2~3개이기 때문에 한번에 2~3개의 실험밖에 해보지 못하고, 1000개의 경우를 해보려면 뭐 1년정도가 지나가서 논문을 쓸수 없을지도 모른다. 

이럴 때, "Adam"이라는 방법론은 웬만하면 "잘된다"라는 의미를 가지고 있다. 
그래서 일반인이 실험하는데에 좀더 좋게 해주었다 라는 의미가 있다. 

gan

2015년에 GAN(Generative Adversarial Network)이라는 논문이 나왔다.
이 논문은, Generate Model, 우리가 어떤 이미지를 만든다고 했을 때 이미지를 어떻게 만들어 낼 수 있을지, 
혹은 어떤 텍스트를 만든다고했을때, 어떻게 만들어 낼 수 있을지에 대한 내용이다. 

GAN(Generate Model)은 딥러닝에서 굉장히 중요한 Topic이기 때문이다. 
네트워크가 generator와 discriminator 을 만들어서 학습을 시킨다.

이 논문에서 재밋는점이 있는데, 일반적으로 논문을 쓰게 되면, 마지막에 acknowledgement(감사의글) 나와 discussion했던 연구자에게 감사합니다. 등의 말이 써있는데, 이 논문에는 마지막에 술집에 관련되 말이 써있다. 
들리는 말에 의하면, GAN논문 작성자가 술집에가서 술을 마시는데, 술이 너무 맛이 없어서 연구에 대해서 생각을 했다고 한다. 그때 생각한 아이디어가 "GAN"이고 술집을 나와서 연구를 했더니 좋은 결과가 나왔다.라고해서 술집이름이 들어가있는 흔치않은 논문이고, 동시에 굉장히 유명한 논문이다. 

resnet

ResNet은 2015년에 나왔다. 이논문이 가지는 굉장히 큰 의의가 있는데,  어떻게 보면, 이 연구 덕분에 딥러닝이 딥러닝을 가능하게 하는데에 결정적이었다고 볼 수 있다. 무슨 말이냐면, 앞에서 정의하기를 우리가 딥러닝이라고 하는 것은, Neural Networks를 활용하는 어떠한 기계학습 분야라고 했지만, 왜 딥러닝이냐 라고 했을때 그거에 대한 설명은 하지 않았었다. 딥러닝이 왜 딥러닝이라고 불리나면, "뉴럴 네트워크를 깊게 쌓기때문" 이라는 말이 있다. 
ResNet이전에 어떤것들이 잘 알려져 있었냐 하면, "네트워크를 너무 깊게 쌓으면 학습이 잘 안된다" 라는 것이 알려져 있었다. 학습이 안된다는 말은 Training이 안된다는 말이 아니라 Test를 했을 떄 성능이 좋게 나오지 않는다는 것이다. 
즉, Training  error는 굉장히 작게 되지만, 그 모델을 Test data에 적용해보면 좋지 않은 성능이 나오는 것이다. 
그래서 성능이 안나오기 때문에  어느정도 Layer를 깊게 쌓으면, 그 이후로는 늘리지 못했었다

근데, ResNet이 나온 이후에는 트랜드가 바뀌었다. 
정확히 말하자면, 여전히 네트워크를 1000단위로 쌓으면 잘 안되지만, 네트워크를 20단 쌓았으면 그이상에서는 성능이 줄어드는 것을 100단위로 쌓아도 학습데이터가아니라 test data에서도 성능이 좋게 나오도록 만들어 준 것이다. 
그래서, 네트워크를 깊게 쌓을 수 있도록 만들어준 굉장히 좋은 Paradigm shift(패러다임 시프트)라고 생각한다.

transformer

2017년에 Transformer라는 논문이 나왔다. 정확한 논문 제목은 "Attention Is All You Need"이다.
오른쪽사진에 보이는 구조가 Transformer의 구조이다. 
"Attention Is All You Need" 이 논문은 제목부터 도전적이고 도발적인 제목이다. 
일반적으로 논문 제목을 쓰게 되면, 자신이 풀고자하는 문제와 어떻게 풀었는지를 설명해주거나, 자신이 만들고자하는 networks의 성질을 잘 설명해주는 제목을 쓰는것이 일반적인데, "Attention Is All You Need" 너가필요한 것은 Attention뿐이야. 라고 제목을 붙였다. 

그당시에는 Transformer라는 것이 특정분야에서는 좋은 성능을 냈지만, 이것이 모든것을 대체할 것이라고는 생각하지 못했다. 그래서 그냥 "구글에서 굉장히 도전적인 제목을 냈구나"라고만 받아들이고 넘어간 경우가 많다고 하는데, 2020년에는 Transformer라는 구조가 왠만한 recurrent neural networks 구조를 거의 대부분 대체했고, vision까지 넘보고 있는 중이다. 

그래서 Transformer 구조 혹은 더 깊게 이야기 하면 multi layer attention(MLT)의 구조를 이해하는 것은 매우 중요하다. 
이 구조가 다른 기존의 방법론들 (recurrent neural networks)에 비해서 어떤 장점이 있고, 왜 이것이 좋은 성능을 낼 수 있는지에 대한 것을 아는 것이 중요하다. 

bert

2018년에 나온 BERT는 Bidirectional Encoder Representations from Transformers의 약자이다. 
앞에서 보았던 Transformer의 구조를 활용하는데, 추가로 Bidirectional Encoder를 활용하는 것이다. 

BERT라는 알고리즘자체가 물론 중요하지만, 딥러닝의 Paradigm shift(패러다임 시프트)같이 어떤 흐름을 바꾸는데 있어서는 find-tuned NLP models개념이 매우 중요하다. 

NLP model(자연어 처리문제)는 모통 language model이라는 것을 학습한다. 
language model은 쉽게말하자면, 이전의 단어들이 주어졌을 때, 그다음에 어떤 단어들이 나올지 맞추는 것이다.
그래서 이것을 계속반복하다보면, 그럴싸한 문장이 만들어지고, 그럴싸한 프로그램이 만들어지고, 그럴싸한 글이 써질 것이다. language 모델이 이러한 것들을 해주는 것이다. 

근데 내가 지금 풀고자 하는 문제가 예를들어 내일의 날씨를 예측하거나, 좋은 뉴스를 작성하는 네트워크를 만들고 싶은  것이 있다고 가정해보자.  이것을 위해서는 뉴스데이터가 필요할 것이다. 근데 뉴스데이터가 그렇게 많지는 않다. 세상에는 일반적인 문장데이터가 많이 있다. 그러면 이 fine-tuned model은 굉장히 다양한 단어들, 혹은 위키피디아같은 굉장히 큰 말뭉치를 활용해서 training을 하는 것이다.
그 다음에, 내가 정말 풀고자 하는 소스의 데이터에 해당 네트워크를 fine-tuned 하는 것이다. 이러한 방식으로 좋은 성증을 낼 것이다 라는 것이 "BERT"이다. 

openai

fine-tuned NLP 모델이 많이 발전을 하기 시작한다. 
GPT-3라는 모델은 2018년에 나왔던 BERT의 fine-tuned NLP의 끝판왕이라고 볼 수 있는데, 앞서 보았듯 language model이다. 이것이 할 수 있는 것은, 약간의 fine-tuning을 통해서 다양한 문장을 만들거나, 프로그램을 만드거나, 표를 만들거나, 여러가지 sequential model을 만들 수 있게 된다. 

GPT-3의 가장 큰 강점이자 특징은, 굉장히 많은 parameters로 되어있다는 것이다. 
그래서 BERT와 다르게 Big Language Models라고 명명하고 있다. 

GPT-3, and autoregressive language model with 175 billion parameters라는 설명에 나와있듯, 1750억개의 파라미터로 이루어져 있는 모델이다. 그래서 아무나 학습시킬 수 는 없다. 

self supervised learning

2020년의 트랜드를 하나만 꼽으라면, 단연코 "Self Supervised Learning"이 될것이다.
"Self Supervised Learning"의 포문을 열었던 논문이 구글에서 나온 "SimCLR"(a simple framework for learning of visual representations)이라는 논문이다. 

이 방법론이 하려고 했던 것은, 간단하다.
이미지 분류와같은 분류문제를  풀고싶은데, 학습데이터는 한정적이다. 
이때, 한정적인 학습데이터를 이용하여, 내가 모델을 바꿔가면서 또는, loss function을 바꾸는 등, 여러가지 다른 modification을 주어서 좋은 결과를 내는것이 일반적인 방법이었다면,  

Self Supervised Learning에서는 주어진 학습데이터 외에 라벨을 모르는 Unsupervised 데이터를 활용하겠다는 것이다.

앞서 얘기했던 강아지와 고양이 분류 문제를 생각해 보았을 때, 
강아지와 고양이가 분류되어 라벨이 되어있는 데이터가 10만장이 있다고 가정하고, 라벨을 모르는(구글의 다양한 이미지) 학습에 같이 활용하고 싶은 것이다. 

그래서 이 논문(연구)에서  하고싶었던 것은 "이 이미지를 어떻게 하면 컴퓨터가 잘 이해하는 벡터로 바꿀지" 였고, 
이것을 단순히 학습데이터만 가지고 하는 것이 아니라, 비지도데이터(Unsupervised data)를 같이 활용해서 결과적으로 좋은 visual representations을 학습함으로서 우리가 진짜 풀고자 하는 분류문제를 잘 풀겠다. 라는 것이 논문의 흐름이다.
그래서 이 SimCLR이 굉장히 큰 성공을 거둔 이후에 되게 다양한 Self Supervised Learning방법론들이 제안이 되었었다.

Self Supervised Learning라는 분야에서 다른 한가지의 트랜드가 더 존재하는데,
앞에서 보았던 SimCLR은 결국은 이미지가 주어졌을 때, 이미지에 대한 좋은 representations을 내 학습데이터 외의 데이터를 추가로 활용해서 얻겠다라는 것이 목적이라면, 
내가 풀고자하는 이 문제에 대해서 굉장히 잘 알고있고, 이 문제에 대한 굉장히 고도화된 도메인 Knowledge가 있을 때 data set을 오히려 만들어내는 트랜드도 있다. 이런것을 "Self Supervised Data Sampling"이라고 불르기도 한다. 
따라서 학습 데이터를 내가 가지고 있는 도메인 지식을 통해서 추가로 만들어 내어서 학습데이터를 증가시킨 후 더 좋은 모델을 학습시키겠다 라는 것도 Self Supervised Learning이라고 불린다.

[참고자료]

https://dennybritz.com/blog/deep-learning-most-important-ideas/

 

Deep Learning's Most Important Ideas - A Brief Historical Review

The goal of this post is to review well-adopted ideas that have stood the test of time. I will present a small set of techniques that cover a lot of basic knowledge necessary to understand modern Deep Learning research. If you're new to the field, these ar

dennybritz.com

 

반응형