딥러닝은 장님이 코끼리를 만지는 것처럼 한 사람이 다 다루기에는 넓은 분야이다.
좋은 딥러닝 연구자의 조건은?
구현 능력(Implementation Skills) :
tensorflow 또는 pytorch를 활용하여 머릿속에 있는 것을 코드로 구현하고 실행할 수 있는 능력
수학적 능력(Math Skills) :
선형대수학(Linear Algebra), 확률통계(Probability) 를 중심으로 한 수학적 이해 능력
많은 최근 논문들에 대한 지식 = 최근 트렌드에 대한 이해(Knowing a lot of recent Papers)
학습에 필요한 Data는 풀고자하는 문제에 따라 달라진다.
풀고자 하는 문제의 예시 (CV 분야)
모델은 데이터가 주어졌을 때 내가 알고자 하는 것(label, sentimental analysis등)으로 형태를 바꿔주는 역할을 한다.
모델 예시
손실함수(loss function)는 우리가 도달하고자 하는 것의 근사치이다.
풀고자 하는 Task 별 손실함수
Regression Task : MSE
Classifcation Task : CE(Cross Entropy)
Probabilistic Task : MLE ( = MSE)
최적화 알고리즘은 데이터, 모델, 손실함수가 주어졌을 때 목표에 도달하기 위해
모델 파라미터를 어떻게 업데이트 할지를 결정하는 역할을 한다.
일반적으로 우리가 활용하는 방법들은 모두 다 first-order method,
즉 뉴럴 네트워크의 파라미터를 loss function에 대해서 일차 미분한 정보를 활용한다.
Algorithm 종류
일차 미분 정보를 그냥 활용하는 것 : SGD (잘 동작을 안함)
예 ) AdaGrad / Adam /...
우리의 목적은 단순히 손실 함수를 최소화 하는 것이 아니라,
이 모델이 학습하지 않은 데이터에서도 잘 동작할 수 있게 하는 것이다.
따라서
dropout
early stopping
k-fold validation
weight decay
batch normalization
mixup
ensamble
bayesian optimization
등의 테크닉을 활용해서 네트워크가 한 번도 보지 못한 데이터에 대해서도 잘 학습할 수 있게 한다.
from 논문 : Denny Britz, Deep Learning's Most Important Ideas - A Brief Historical Review, 2020
(다 중요하지만, 진한 글씨는 나중에 더 깊게 다룰 주제들입니다.)
대부분의 논문들이 Adam을 사용하는 이유 : Adam이 대부분 결과가 잘 나옴
보통 연구를 할 때 여러가지 Optimizer를 써보고 Learning rate도 많이 바꿔가면서 실험을 해야 하는데(hyperparameter 탐색), 그러기 위해서는 많은 computing power가 필요함.
그래서 우리같은 소상공인(?)들에게는 웬만하면 잘 되는 Adam이 참 좋은 알고리즘이다..ㅎㅎ
많고 다양한 데이터를 가지고 Pre-training 후,
그 모델을 내가 풀고자하는 문제에 맞게 fine-tuning을 시켜서 좀 더 효율적으로 모델을 학습할 수 있게 됨
OpenAI GPT-3, autoregressive language model with 175 billion parameters
파라미터를 매우 많이, 모델을 매우 크게, 데이터를 매우 많이 써서 모델을 학습시키면 성능이 좋아진다.