일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 이진탐색
- 백준
- mrc
- 백트랙킹
- 정렬
- 기술면접
- 알고리즘_스터디
- ODQA
- dfs
- python3
- 부스트캠프_AITech3기
- Level1
- 그리디
- 주간회고
- 다시보기
- Level2
- 최단경로
- 알고리즘스터디
- 구현
- 파이썬 3
- 글또
- 그래프이론
- Level2_PStage
- 부스트캠프_AITech_3기
- 단계별문제풀이
- 이코테
- dp
- 개인회고
- 프로그래머스
- U_stage
- Today
- Total
국문과 유목민
[일일리포트] Day 13 (DL Basics) 본문
해당 일일리포트에서는 네이버 커넥트에서 진행하는 '부스트캠프 AI Tech 3기'에서 배운 내용을 다루고 있습니다. 저작권 이슈 때문에 관련 자료를 올릴 수는 없기에 핵심 이론과 코드를 요약해서 올리고 있기에 내용이 부족할 수 있습니다.
▶ Today I Learned (핵심 요약 정리)
1. DL Introduction
Articial Inteligence(mimic human Inteligence) > Machine Learning (Data-Driven Approach) > Deep Learning(NN)
- Key Components of Deep Learning: 논문을 볼 때 이 4가지에 집중해서 보면, 논문을 좀 더 이해하기 쉽다.
- The data that the model can learn from
- The model how to transform the data
- The loss function that quantifies the badness of the model
- The algorithm to adjust the parameters to minimize the loss
Historical Review
DeepLearning에서 있었던 굵직한 모델들을 연도별로 정리한 자료이다. 여기서 몇 가지 대표 모델의 경우 아래에서 한 번 더 다룬다.
2012 - AlexNet (DeepLearning이 실제적으로 성능을 발전하기 시작한 계기)
2013 - DQN (Q-learning방법을 사용해 Atari 게임을 스스로 학습)
2014 - Encoder / Decoder (주어진 언어를 다른 언어로 번역) / Adam (웬만하면 잘 되는 optimizer)
2015 - GAN (적대적 생성 모델) / ResNet (네트워크를 깊게 쌓을 수 있게 된 방법)
2016
2017 - Transformer (attenion is all you need, 최근에 웬만한 RNN구조를 대체함)
2018 - BERT (fine-tuned NLP models)
2019 - Big Language Models (GPT-X)
2020 - Self Supervised Learning (simCLR )
2. NN / MLP
Neural Networks는 뇌의 모방에서 시작되었다고 할 수 있지만, 작금에 와서는 많이 달라졌다고 할 수 있다. NN에 대한 정의는 다음이 더 깔끔하다고 생각(마스터님 의견, 동의)
Neural networks are function approximators that stack affine transformations followed by nonlimear transformations
LNN (Linear Neural Networks)
gradient descent: loss function을 w로 편미분한 값을 찾아서, w 편미분에 적절한 값을 곱해서(stepsize (𝜂)) 빼주면서 기울기를 업데이트를 해간다.
- 우리는 N차원에서 M차원으로 가는 모델에도 사용할 수 있다. 이러한 변환을 affine transform이라고 한다.
- Activation Function: 네트워크를 여러 개 쌓을 때, 단순한 선형변환을 반복하는 것이 아니라 Nonlinear Transform을 거치게 함으로써 더 많은 표현력을 가질 수 있게 하기 위해 사용하는 function (Hyperbolic Tangent, Sigmid, Relu)
MLP (Multi-Layer Perceptron)
HiddenLayer가 한 층 이상으로 이루어진 구조를 MLP라고 한다. MLP의 Task로는 크게 Regression, Classification, Probabilistic들이 존재한다.
- Regression Task: Mean Squared Error
$$MSE = \frac{1}{N}\sum^N_{i=1}\sum^D_{d=1}(y_i^{(d)}-\hat{y}_i^{(d)})^2$$
- Classification Task: Cross Entropy loss function
accuracy관점에서는 분류하고자 하는 데이터(i)가 분류에 포함되는지 아닌지만 구분하면 된다. 나머지는 분류는 0이어도 된다.
$$CE = -\frac{1}{N}\sum^N_{i=1}\sum^D_{d=1}y_i^{(d)}-log\hat{y}_i^{(d)}$$
- Probabilistic Task: Maximum Likelihood Estimation
확률적인 값을 계산하고자 할 때 사용 가우시안 된 logslikelihood를 Maximize하겠다라는 의미이다.
$$MLE = \frac{1}{N}\sum^N_{i=1}\sum^D_{d=1}logN(y_i^{(d)};\hat{y}_i^{(d)},1) \ \ \text{(=MSE)}$$
3. Optimization
Important Conceptes in Optimization
- Generalization: 일반화 성능. 학습 데이터의 성능이 테스트 데이터의 성능과 유사하게 나오는 지을 말한다. 많은 경우에 일반화 성능을 올리는 것이 목적이다.
- Underfitting/overfitting: underfitting: 학습데이터도 잘 못맞춤 / overfitting: 학습데이터를 잘 예측하지만 테스트 데이터는 잘 맞추지 못함
- Cross-Validation(k-fold): 학습데이터를 K개로 나누고, train과 valid의 역할을 바꿔가면서 k-1번 학습한다. 학습에는 train 데이터와 validation 데이터만을 사용하고 test 데이터는 모델 학습이나 하이퍼 파라미터 튜닝에 사용하면 안된다.
- Bias and Variance: 분산과 편차 (Bias and Variance Tradeoff). cost를 minimize한다는 것은 $bias^2$, variance, noise 세 가지를 건드려야 한다는 것이다.
$$ \begin{matrix} E \begin{bmatrix}(t-\hat{f})^2 \end{bmatrix} &=& E \begin{bmatrix}(f-E[\hat{f}]^2)^2 \end{bmatrix}
+ E \begin{bmatrix}(E[\hat{f}]-\hat{f})^2 \end{bmatrix} + E[\epsilon] \\
cost & & \qquad bias^2 \qquad \qquad variance \quad \qquad noise
\end{matrix}$$
- Bootstrapping: 학습 데이터가 고정되어 있을 때, 데이터를 랜덤하게 뽑아서 여러 개의 모델을 만들어서 무엇을 하겠다는 의미
- Bagging vs. Boosting
- Bagging: 여러 모델을 random subsampling해서 만들고, 그 값의 평균이나 투표를 해서 계산함으로써 하나의 모델을 쓸 때보다 좋은 성능 기대
- Boosing: 모델 여러 개를 간단하게 만들고(Weak Learner) 이를 합해서 하나의 모델을 만든다(Strong Learner)
Gradient Descent Methods
1. (Stochastic) Gradient descent:
$W_{t+1} \gets W_t - \eta g_t$
2. Momentum(관성):
$a_{t+1} \gets \beta a_t + g_t $
$W_{t+1} \gets W_t - \eta a_{t+1}$
3. Nestov Accelerated Gradiet(NAG): Momentum과 유사하지만 lookahead gradient라는 것을 활용해서 미리 해당 위치로 가보고 accumulate를 실시. 가장 큰 장점은 빠르게 최소점에 도달할 수 있다는 것이다.
4. Adagrad: NN 파라미터가 얼마나 변했는지, 안 변했는지를 확인해서 다음 계산에 반영한다. (G:Sum of gradient squares)
$W_{t+1} = W_t - \frac{\eta}{\sqrt{G_t + \epsilon}}g_t$
5. Adadelta: Adagrad가 가지는 large G가 계속해서 커지는 문제를 막기 위해 나온 방법. exponential moving average를 통해서 large G_t를 업데이트 하는게 Adadelta이다. monotonically decreasing을 방지하기 위한 방법. 단, learning rate가 없기 때문에 자주 활용되지 않는다.
6. RMSprop(꽤 사용): 재프리 힌튼이 강의에서 제안했던 비공식적인 방법
$G_t = \gamma G_{t-1} + (1-\gamma)g_t^2$
$W_{t+1} = W_t - \frac{\eta}{\sqrt{G_t + \epsilon}}g_t$
7. Adam(가장 무난하게 많이 사용): 그레디언트의 크기가 변함에 따라서 이를 이전 그레디언트의 모멘텀과 잘 합친 게 Adam이다. Momentum, EMA of gradient squares, $\epsilon$, $\eta$를 설정하는게 중요하다.
Regularization
일반화(Generalization)를 잘 하기 위해 학습에 반대가 되는 방해를 걸어주는 것이다. 그렇게 함으로써 학습 데이터 뿐만 아니라 테스트 데이터에도 잘 적용될 수 있게 만든다.
- Early stopping: validation data를 활용해서 train의 loss를 확인해서 일찍 stop하는 방법
- Parameter Norm Penalty: NN 파라미터가 너무 커지지 않게 하는 방법. 크기 관점에서 작게 하자
- Data Augmentation: 데이터는 많으면 많을 수록 좋기 때문에, 주어진 데이터를 변경하면서 테스트 데이터의 개수를 늘리는 방법
- Noise Robustness: 입력데이터에 Noise를 집어넣는 방법. Weight에도 중간중간 noise를 집어넣으면 Test 단계에서도 잘 된다.
- Label Smoothing: 학습데이터 내에 데이터를 2개 가져와서 섞는 방법. Mix-up: Label을 겹쳐서 섞는 방법, Cutout: 잘라서 없애는 것, CutMix: 특정 영역을 잘라서 섞는 방법. 일반적으로 성능이 많이 올라간다고 한다. (분류 문제를 풀 경우 Smoothing방법을 활용해보자)
- Dropout: weight의 일부를 0으로 만드는 방법. 그렇게 함으로써 각각의 뉴런들이 robust한 feature가 될 수 있다.
- Batch Normalizaion: BN을 적용시키려고 하는 Layer의 statistic을 정교화 시키는 것. 평균을 빼주고 표준편차를 나눈다. 간단한 분류문제의 경우 일반적으로 성능이 올라간다.
4. CNN
RGB Image Convolution
- Image가 32x32x3일 때, 5x5 filter를 사용해 convolution을 한다는 것은 5x5x3을 활용한다는 의미가 된다.
- Convolution filter의 개수가 4개가 되면, output feature의 개수도 4개가 된다.
- Convolution layer를 쌓을 때는 filter와 Nonlinear function(ReLU)를 Layer 사이에 넣어준다.
Convolution Neural Networks
CNN Order: Convolution - pooling - ... - Convolution - pooling - fully connected - OutputPredictions
- convolution and pooling layers: feature extractions
- fully connected layer: decision making(e.g. classification)
- 네트워크 별로 파라미터의 개수가 몇 개인지 감을 가지고 있는게 매우 중요하다. 내가 학습해야 하는 파라메터의 수가 늘어날 수록 학습이 어렵고, Generalization이 떨어지게 된다. Layer는 깊게, 하지만 파라메터를 조금 가져갈 수 있게 연구해야 한다.
Params
- Stride - convolution filter를 얼마나 loose하게 찍을 것인가 (step)
- Padding - Input layer에 덧 대준다. 이렇게 함으로써 output 출력시 결과가 줄어들지 않게 할 수 있다.
Convolution Arthimetic
조건) padding(1), stride(1), 3x3 kernel
Q> "40x50x128 -> ? -> 40x50x64"
A> ? = 3x3x128x64 = 73728
따라서 파라미터의 수는 73,728개이다.
- Convolution Operation을 하는 커널과 필터에 의해 파라미터가 결정된다. 해당 문제에서 padding이나 stride는 파라미터와 무관하다.
- 단위 개념에서 감을 잡고 있는게 중요하다.
Alexnet을 통한 Parameter 계산
- 1layer: 11x11x3x48*2 ≈≈ 35k
- 2layer: 5x5x48x128*2 ≈≈ 307k
- 3layer: 3x3x1282x1922 ≈≈ 884k
- 4layer: 3x3x192x192*2 ≈≈ 663k
- 5layer: 3x3x192x128*2 ≈≈ 442k
- 6layer(DenseLayer): 13x13x128x2048*2 ≈≈ 177M
- 7layer(DenseLayer): 2048*2x2048*2≈≈16M
- 8layer(DenseLayer): 2048*2x1000 ≈≈ 4M
Convolution Operator는 하나의 kernel이 모든 위치에 대해서 동일하게 적용된다. 일종의 Shared Parameter이기 때문에 DenseLayer보다 파라메터의 개수가 적다.
1x1 convolution
1x1 convolution을 사용하는 이유는 Dimension reduction을 하기 위해서이다. 여기서 dimension은 channel을 의미하며, depth를 깊게 쌓으면서 파라메터를 줄이기 위해서 사용한다. (e.g.bottleneck network에 사용)
- 256x256x128 -> 1x1x128x32-> 256x256x32
5. ModernCNN
ILSVRC(ImageNet Large-Scale Visual Recognition Challenge) 대회에서 좋은 성적을 보여줬던 모델들 중 가장 성능이 좋은 모델 5가지에 대해서 정리 (2018년 기준 Modern이기에 더 좋은 모델이 나와있기도 하다)
AlexNet
2012년에 현대 딥러닝에서 사용하는 여러가지 방법들을 처음으로 사용한 모델이라고 할 수 있다.
- 11x11x3 filter, 5 Convolution layers, 3 Dense layers
- Rectified Linear Unit(ReLU) activation
- GPI implementation (2 GPUs)
- Local response normalization, Overlapping pooling
- Data augmentation
- Dropout
> Relu: linear model이 가지는 장점을 가지고 있으며, optimize하기 쉽다는 특징을 가지고 있지만 대표적으로 vanishing gradient 문제를 해결할 수 있다.
VGGNet
- 3x3 Convolution filter, dropout 사용 (VGG16, VGG19)
- 3x3 Convolution을 사용하는 이유는 Receptive field 면에서 3x3을 두 번 활용한 게, 5x5를 한 번 활용한 것보다 parameter의 수가 더 적다. filter 사이즈가 커질 수록 parameter의 수가 늘어난다.
GoogleNet
- GoogleNet에는 Inception blocks가 존재하는데, 이를 Network in Network(NIN) 구조라고 한다.
- Inception block
- AlexNet (8_Layers) [60M]
- VGGNet (19_Layers) [110M]
- GoogleNet (22_Layers) [4M]
- 1x1 conv를 활용해서, 전체적인 파라미터의 개수를 줄일 수 있다. 1x1은 채널 방향으로 dimension을 줄이는 효과가 있기 때문이다. 아래 그림을 보면 같은 output dimension을 갖더라도 Paramter의 수가 차이 나는 것을 확인할 수 있다.
ResNet
원래는 네트워크가 깊어짐에도 불구하고, 특정 지점 이후까지 더 깊이 학습을 할 수 없다는 문제가 있었다. 이때, ResNet은 Residual Block이라는 것을 활용해서 이러한 문제를 해결했다. 이때 Convolution연산에서는 f(x)는 연산 전의 차이만 학습하게 된다. Identity map을 활용하면서, Network를 더 깊게 쌓을 수 있는 가능성이 열리게 되었다. Bottleneck architecture를 활용한다.
- Projected Shortcut: Residual Block을 거쳐서 나오는 값과 이전 값의 차원을 맞추기 위해 1x1 conv를 활용
- Simple Shortcut을 활용한다.
Bottleneck architecture
Inception block과 같은 시스템이다. 3x3 conv를 하기 전에 input을 줄이고, 이후에 다시 늘린다. Parameter의 size가 줄어들 수록 performance는 증가하기 때문에 다음과 같은 구조를 사용한다.
참고) [딥러닝] DeepLearning CNN BottleNeck 원리(Pytorch 구현)
DenseNet
addition연산 대신에 Concatenation을 한다. 하지만, 이렇게 되면 채널이 점점 커지게 되기 때문에 중간에 파라미터의 개수를 줄이는 Transition Block이 존재한다. 그래서 DenseNet에서는 Dense Block으로 차원을 늘리고 Transition Block에서 차원을 줄이는 연산을 하게 된다.
(참고) 논문 읽기] DenseNet(2017) 리뷰, Densely Connected Convolutional Networks
6. Computer Vision Applications
Semantic Segmentation
이미지가 주어질 때 이미지 픽셀마다 labeling을 하는 것. 자율주행 문제에 많이 활용된다.
- Fully Convolutional Network
DenseLayer를 없앤다. flat-dense-label을 수행하는 대신에 conv-label과정으로 줄인다. 하지만 이 경우 파라미터의 수는 달라지지 않는다.
- before: 4x4x16x10 = 2560
- Convolutionalization: 4x4x16x10 = 2560
파라미터의 수가 달라지지 않아도, 이러한 연산을 하는 이유는 input 이미지가 커지더라도 output dimension을 유사하게 출력해낼 수 있다. 하지만 이때 줄어든 output dimension을 다시 늘려야 하기 때문에 Deconvolution연산이 존재한다.
Deconvolution(conv transpose)
사실 실제적으로 Convolution의 aggregation된 값을 정확하게 복원할 수는 없지만, 차원을 얼추 맞추게 할 수는 있다.
Detection
Detection 방법들이 어떻게 변했는지 흐름을 이해하면 좋다. Detection 모델들은 이전 모델이 사용했던 방법들을 사용해서 보완 및 발전하기 때문이다.
- R-CNN: 이미지를 넣고, 2000개의 지역을 나누고, feature를 AlexNet을 통해 알아내고, SVM을 통해 분류하자는 방법. 하지만 이미지를 나눈 2000개를 전부 feature로 넣어줘야 했다.
- SPPNet: R-CNN과는 다르게 2000개를 다 돌기보다는 CNN을 한 번만 돌게 만든다. 그렇게 얻어진 featuremap에서 bounding box를 넣고자 한다.
- Fast R-CNN: 이미지를 Input으로 받고 2000개로 나누고, featuremap을 하나 얻는다. (여기까지는 위의 방법과 동일) 각 region에 대해 fixed length feature를 ROI pooling으로 뽑는다. 그리고 class와 bounding-box regressor를 뽑아낸다.
- Fater R-CNN: Region Proposal Network(RPN) + Fast R-CNN Bounding Box를 뽑는 알고리즘도 학습을 하자는 방법
- Region Proposal Network(RPN): 이미지의 특정 영역이 바운딩 박스로서 의미가 있을지를 찾아준다. 물체가 있을 것 같은 Region Proposal 해준다. Anchor boxes를 제공해준다.
- 9: Three different region sizes(128, 256, 512) with three different ratios(1:1, 1:2. 2:1)(앵커 타입)
- 4: four bounding box regression parameters (상, 하, 좌, 우 비율)
- 2: box classification (whether to use it or not) (yes, no)
- 9*(4+2) = 54개의 값을 통해서 해당 영역의 값을 사용할지 말지 정한다.
- Region Proposal Network(RPN): 이미지의 특정 영역이 바운딩 박스로서 의미가 있을지를 찾아준다. 물체가 있을 것 같은 Region Proposal 해준다. Anchor boxes를 제공해준다.
- YOLO: Faster R-CNN보다도 훨씬 빠르다. 왜냐하면 bounding box를 결정해주는 알고리즘을 사용할 필요가 없이 한 번에 하기 때문에 속도가 빠르다.
- 이미지가 들어오면 SxS Grid로 나누고, 물체의 중앙이 Grid안에 들어가면, Grid Cell이 해당 물체에 대한 바운딩 박스와 물체가 무엇인지 같이 예측해준다.
- B개의 바운딩 박스를 예측하게 된다. 해당 박스의 x/y/w/h를 결정하고, 쓸모 있는지 아닌지를 결정한다.
- 각 cell이 어떤 클래스인지를 예측한다.
- 이 정보를 취합하게 되면 SxS(b*5+C) size의 텐서를 구한다.
▶ Review (생각)
이번 주는 DeepLearning에 대한 이론적인 부분을 나가는 것 같다. 보통 딥러닝에 관한 이론을 배우고 그 이후에 파이토치를 들어갔던 것 같던데, 이번에는 오히려 파이토치를 먼저 배우고 딥러닝에 관한 이론을 배우게 됐다. 처음에는 괜찮을까 하는 생각이 있었는데, 이번에 수업을 들으면서 이 방법이 훨씬 괜찮구나를 느끼게 됐다. 우선 파이토치의 딥러닝 모델을 만드는 과정과 그 과정에서 필요한 함수나, 여러가지 파라메터들을 배우고 난 이후 이론에서 보게되니 친숙한 느낌이 들었다. 그리고 해당 파라메터들을 접하면서 생겼던 궁금증이 있다보니 수업에 더 집중하게 되고, 이해도 더 수월하게 됐던 것 같다. (이게 많이 접해서일 수도 있고, 마스터님이 강의를 잘하셔서 일 수도 있다)
오늘 정리한 내용들은 DL에 기본이 되는 부분이기에 전체적인 흐름을 기억하고자 했다. 특히 ModerCNN을 보게 되면 모델 별로 흐름이 있기 때문에 이를 기억하고 있으면 좋을 것 같다. 왜냐하면 발전된 모델의 경우 이전 모델을 가지고 와서 레이어를 늘리거나, 학습 방식을 변형하는 등의 방향으로 발전하기 때문이다. 따라서 이러한 흐름을 익혀두면 좋을 것 같다.
아무튼 오늘은 DL에서 가장 기본이 되는 부분을 학습했는데, 난이도가 크게 어렵지 않고 또한 기본과제나 퀴즈 등도 시간이 오래 안 걸려서 오늘 내일 중으로 강의를 다 듣고 수요일 멘토링 전까지 심화과제를 볼 생각이다. 또한 멘토님께서 추천해주셨던 'Attention is All you need' 논문을 보고 멘토링에 들어가야 될 것 같아서 내일까지 강의를 우선적으로 끝내야겠다.
'IT 견문록 > 2022_부스트캠프 AITech 3기(100일)' 카테고리의 다른 글
[일일리포트] Day 15 (0) | 2022.02.09 |
---|---|
[일일리포트] Day 14 (RNN 계열) (0) | 2022.02.08 |
[3주차] 학습 정리 및 회고 (0) | 2022.02.04 |
[일일리포트] Day 12 (Matplotlib2) (0) | 2022.02.04 |
[일일리포트] Day 11 (Matplotlib) (0) | 2022.02.03 |