네이버 부스트캠프/LEVEL-1

[부스트캠프][WK-02 / Day6] 딥러닝 기초

1. 강의 내용

딥러닝 기본 용어 설명 (최성준 교수님)

1) Introduction

우리를 좋은 딥러너로 만드는 것은 크게 3가지가 있습니다. 먼저 텐서플로우, 파이토치와 같은 구현실력입니다. 두번째로 수학 스킬이며 마지막으로 논문의 트렌드를 따라가는 것입니다. 인공지능안에 데이터 기반 접근방식인 머신러닝이 포함되어 있고 그 안에 딥러닝이 포함되어 있습니다. 딥러닝의 주요 요소에는 학습을 위한 데이터, 데이터를 통해 무언가를 학습하는 모델, 모델을 학습키는데 사용되는 loss function, loss를 최소화 시키는 알고리즘이 있습니다.

2) Data

데이터는 풀고자 하는 문제에 의존적입니다. 분류문제에는 분류대상 이미지가 필요하며 Semantic Segmentation 문제에는 이미지의 픽셀별로 속하는 분류를 하는 것입니다. Detection은 이미지 내의 바운딩박스를 찾는 것이며 Pose Estimation은 사람의 스켈레톤 정보를 알아내는 것을 말합니다. Visual QnA는 이미지와 질문이 주어졌을 때, 질문에 대한 답을 말하는 것을 말합니다.

3) Model

같은 문제, 같은 데이터라도 모델에 따라 결과가 다르고 성능의 차이가 납니다. 결과를 잘 뱉어내기위해 여러가지 테크닉이 들어갑니다.

4) Loss

loss function은 모델과 데이터가 주어졌을 때 wieght를 업데이트하는 기준이 되는 것입니다. Regression task에서는 MSE(Mean Squared Error)를 사용하고, Classification task에서는 CE(Cross Entropy)를 사용해서 최적화시켜줍니다. Probabilistic task에서는 MLE를 사용합니다. loss function은 이루고자 하는 것에 대한 근사치에 불과하게 됩니다. loss function을 줄이는 것이 목적이지만 이것이 줄어든다해도 우리가 원하는 것을 이룬다는 보장은 없습니다. 결국 loss function을 해당 문제에서 왜 사용하고 어떻게 문제를 푸는지 이해해야 합니다.

5) Optimization Algorithm

최적화 방법은 데이터, 모델, loss가 정해져 있을 때 네트워크를 어떻게 줄일지에 대한 방법입니다. SGD 등의 최적화 방법들의 특성을 이해하는 것이 중요합니다. Dropout, Early stopping, k-fold validation, Weight decay, Batch normalization, MixUp, Ensemble, Bayesian Optimization과 같이 다양한 테크닉을 적용해 단순히 학습만 잘하는 것이 아닌 실환경에서 잘 동작하는 것을 목표로 합니다.

6) Historical Review

2012년 AlexNet이 이미지넷 대회에서 딥러닝을 활용해 처음으로 1위를 했습니다. 여기부터 딥러닝이 실질적으로 성능을 발휘하기 시작했습니다. 2013년 DQN은 q-learning을 활용한 강화학습으로 딥마인드가 구글에 들어가 완성되는 계기가 되었습니다. 2014년 Encoder/Decoder를 통해 기계어 번역의 트렌드가 바뀌었습니다. 같은 해 Adam Opitimizer의 등장으로 일반적으로 좋은 성능을 낼 수 있게 해주었습니다. 2015년 네트워크가 generator와 discriminator로 나누어 학습시키는 GAN이 등장했으며 ResNet의 등장으로 layer를 깊게 쌓아도 성능이 잘 나오게 되었습니다. 2017년 등장한 Transformer의 구조가 기존의 방법론들을 많이 대체하고 있으며 2018년 BERT를 통해 fine-tuning NLP 모델이 발전하기 시작합니다. 2019년 GPT-X는 아주 많은 파라미터로 구성되어 있는 모델입니다. 2020년 등장한 Self Supervised Learning는 한정된 학습데이터 외의 라벨을 모르는 unsupervised data를 학습에 활용하는 방식입니다.


뉴럴 네트워크 - MLP (Multi-Layer Perceptron) (최성준 교수님)

1) Neural Networks

Neural Networks는 인간의 뇌를 모방해 만든 것이라고 하지만 역전파가 뇌에서 작동하지 않듯 뇌를 모방해 시작했지만 지금은 많이 달라졌습니다. Neural Networks를 수학적으로 표현한 정의는 "function approximators that stack affine transformations followed by nonlinear transformations" 입니다.

2) Linear Neural Networks

 

선형 회귀 분석에서는 위의 그림과 같이 표현됩니다. 여기서 우리가 하고자 하는 것은 loss 값을 최소화하는 $w, b$ 입니다. 여기에는 많은 제약조건이 붙는데, loss가 줄어드는 방향으로 파라미터를 바꾸는 것이 목적이기 때문에
우리는 Backpropgation을 통해 이를 해결합니다.

 

 

 

loss function을 $w, b$에 대한 편미분 값을 구하고 각각 특정 step size만큼 곱한 후 $w, b$에 빼주는 식으로 업데이트 합니다. 이런식으로 업데이트 해가며 loss를 줄이는 방식을 gradient descent라고 합니다.

 

위 그림은 앞의 상황에서 $W, b$가 행렬로 변한 것으로 여기서 행렬간의 곱은 두 개의 vector spaces 사이의 선형 변환이라고 해석할 수 있습니다. 딥러닝은 위의 과정에서 $W$를 곱해 나오는 결과에 activation function을 곱해 non-linear transform을 거친것을 $h$라고 하고 이를 다음 $W$에 곱해주며 이 과정이 반복됩니다.

 

Activation function에는 ReLU, Sigmoid, Hyperbolic Tangent 등이 있으며 상황에 따라 쓰이는것이 다르지만 이것들이 있어야 network를 깊게 쌓았을 때 의미가 있습니다.

 

Neural Network가 학습이 잘 되는 이유는 히든 레이어 하나가 포함된 인공신경망은 원하는 값으로 근사할 수 있기 때문입니다. 하지만 이런 것은 존재성을 보이는 것이지 내가 학습 시킨 뉴럴넷이 이러한 성질을 가질 것이라고 생각해서는 안됩니다.

Loss function은 항상 우리의 목적을 만족하지는 않습니다. 어떤 loss를 사용하느냐에 따라 결과값의 성질이 달라집니다. 따라서 loss가 어떤 성질을 가지고 있고, 이것이 왜 내가 원하는 결과를 내는지에 대한 생각을 항상 해야합니다.


2. 과제 수행 과정 / 결과물 정리

필수과제 MLP 빈칸 채우기 제출


3. 피어세션 정리

https://hackmd.io/wDp7e7ndQ-OHz83AYA0wug?view