1. 데이터 시각화
- 시험 끝나고, 데이터 분석 연습하면서 실습할 예정.
- 공식 문서 들어가서 parameter 많이 찾아보고, 실습코드랑 비교하면서 보기.
- fig, axes로 구분해서 코딩하는 스타일은 아니었는데, 강의 들으면서 보니까 구분해서 해야 각 subplot들에 대해서 더 자세하게 지정해줄 수 있어서 새로운 스타일에 적응중...
2. Deep Learning Basic
1. Intro
- Data / Model / Loss
구하려는 타겟에 따라서 model과 loss를 설정한다.
ex) classifier에서는 일반적으로 cross entropy를 쓴다. - optimization
optimal로 가기위한 최적화 요소
model / loss 등 여러가지 분야에서 변경 가능하다.
2. Neural Networks & Multi-layer Perceptron
- Neural Network
Tensor to Vector를 위한 Fuction approximator
같은 Linear라도 차원이 다를 수 있다.
이를 행렬곱 표현할 수 있고, x에서 선형변환 W, bias b를 추가하여 y로 매핑한다.
이러한 Layer를 여러번 쌓는다고 해도 기존 Linear Transform의 반복이라서 Linear Transform이다.
이를 해결하기 위해 Non-Linear Transform요소를 추가한다.
ex) sigmoid, ReLu, tanh 등 여러 비선형 함수가 존재한다. 문제마다
상황마다 다르며 일반적으로 ReLu를 많이 사용한다.
데이터셋이나, 모델에 따라서 ReLu를 변형한 다양한 비선형 함수가 존재한다. - Loss Function
MAE, MSE, CE 등 사용할 때 어떤 차이가 있는가? 어떤 loss function을 사용했을 때 최적의 결과를 얻는가?
loss function에 따라서 결과가 달라지기 때문에 잘 선택해야 함
ex) Classifier 문제에서는 출력층에서 가장 값이 큰 class를 선택한다 -> entropy 사용
ex) outlier가 존재하는 경우 MSE는 error 패널티가 MAE나 RMSE보다 크다. 이상치에 민감
3. Optimization
- Generalization
Training error와 Test error의 gap -> 성능이 좋다 train / test 사이 차이가 적다. - under fitting / over fitting
학습 데이터를 잘 못맞춘다 / 학습 데이터는 잘 못맞추는데 test는 많이 틀린다. - cross validation -> K-fold validation
train / test를 나누고, train을 나눠서 특정 데이터를 사용하지 않음
자세한건 나중에... - Bias / Variance
정답으로부터 멀리있는 / 같은 입력에 대해서 출력 결과가 비슷한
train data에 noise가 있을 때, bias^2와 variance는 trade-off 관계이다. (cost function에서 유도 가능) - Bootstrap
train data가 고정되어 있을 때, random sampling을 통해서 여러 model과 metric을 생성.
Bagging : 독립적인 모델을 여러개 만들고, 합쳐서 하나의 모델을 만든다.
Boosting : weak learner들을 합쳐서 하나의 sequential model을 만들고 strong learner을 만든다.
- Gradient Descent Methods
Batch size : test에서도 잘 동작하는 batch size를 알고싶다!
training function의 min이랑 testing function의 min이랑 다를 수 있다. sharp min 근처라면 차이가 더욱 커진다.
즉, Flat하면 일반화 성능이 좋지만 sharp하면 일반화 성능이 떨어진다. 또한, 한 번도 사용하지 않은 test data에 대해서는 잘 동작하지 않을 수 있다.
batch size가 줄면 일반화 성능이 좋아진다 -> large batch에서는 어떻게 해야 좋을까?
SGD : single sample의 grad를 각각 구해서 업데이트
Mini batch GD : batch-size를 정하고 subset data의 grad를 구해서 업데이트 (보통은 미니배치!)
Batch Gd : 전체 데이터의 grad를 구해서 평균내서 업데이트
SGD : learning rate와 step 설정이 어렵다.
Momentum : GD, SGD를 수정한 방법으로 이전 iter에서 사용됐던 momentum을 고려해서 loss function을 업데이트. -> converge를 못하는 현상이 발생한다.
Nesterov Accelerate Gradient (NAG): lookahead grad를 사용해서 업데이트. Momentum보다 converge ratio가 빠르다.
Adagrad : parameter가 많이 변한 것은 적게, 적게 변한 것은 많이 변화시키는 adaptive learning을 사용한다. 하지만, grad sum이 점점 커지기 때문에 학습이 멈추는 문제가 발생한다.
Adadelta : Adagrad 문제를 수정. exp moving avg(EMA)를 사용하고 window size를 통해 특정 시점의 일부분을 memorize해준다. 최신의 정보만 활용하면서 불안정한 움직임을 줄여준다.
RMSprop : EMA grad square에 step size를 추가.
Adam : momentum, EMA of grad square, m, v 4가지 parameter 사용함.
- Regularization : generalization이 잘되게 하고싶다.
Early Stopping : val loss가 증가하면 멈춰주는..
Parameter Norm : 파라미터가 너무 커지지 않게 function space를 scaling 해줘서 부드러운 함수를 만들어준다는 가정이 있음. (L1 norm, L2 norm)
Data Augmentation : 데이터를 회전, noise 추가, 크기 변환 등 여러 변화를 주어서 data를 수정한다. (lable preserving augmentation : 라벨이 변하지 않고 데이터에 변화를 주는)
Noise Robustness : 입력, NN의 weight에 noise를 주어서 성능을 향상시키는 기법
Lable Smooting : class를 구분하는 boundary를 찾고싶음 -> cutmix, mixup, cutout을 통해서 구현
Dropout : parameter를 0으로 만들어버리는. drop out rate를 정한다.
Batch Normalization : parameter들의 값들을 normalize 시킨다. Layer가 깊을수록 일반적으로 성능이 향상된다.
4. CNN
- Padding
convolution filter size에 따라서 양 끝 주변의 값들을 사용하지 못하는 경우가 생긴다. 즉, boundary 정보가 버려지는 문제가 발생한다.
이를 해결하거나, 입력 채널의 수와 출력 채널의 수를 맞춰주기 위해서 양 끝을 임의의 값으로 채워주는 것을 말한다. 보통은 zero padding을 사용한다. - Stride
convolution을 진행하면서 얼만큼 건너뛸지를 지정해준다. 얼마나 dense하게 conv를 진행할지를 정한다. - Pooling
avg pooling, max pooling 등 feature extraction의 역할 - Fully connected layer
decision making의 역할을 한다. 최근에는 parameter 숫자를 줄이기 위해서 FC를 최대한 줄이는 추세.
모델을 deep하게 만들고 FC를 줄이는 추세로 변화하는 중.
하나의 kernel이 모든 위치에 대해서 동일하게 적용된다 -> FC에서 굉장히 많은 parameter를 가지게 된다.
5. Modern CNN
- model의 layer를 깊게 쌓으면서 parameter를 최대한 적게 가져가는 방법?
- AlexNet
ReLU 사용 -> grad vanishing 해결 (sig tanh 값이 커지면 grad가 0에 수렴)
local response normalization, overlapping pooling 사용
data augmentation / dropout 사용 - VGGNet
3*3 conv 사용 : 3*3 conv 2회 = 5*5 conv 1회 (receptive field 기준) but parameter 수에서 이점이 있음 - GoogleNet
1x1 conv 사용 : dimension reduction
inception blocks 사용 : 하나의 입력이 여려개의 recept field를 갖는 filter를 거치고 response를 concat한다. + 1x1 conv가 있기 때문에 channel 방향의 parameter 수를 줄일 수 있게 된다. - ResNet
parameter수가 늘어나면 overfitting 위험이 있음 + layer를 깊게 쌓아도 성능이 좋아지지 않음.
skip connection 사용 : layer를 깊게 쌓아도 다른 구조와 다르게 성능을 높일 수 있음
simple shortcut / projected shortcut(차원 맞춰주는 1x1 conv)를 사용한다
bottleneck architecture : channel 수를 조정하면서 차원을 맞춘다. (inception block과 비슷) - DenseNet
Resnet과 다르게 add시키지 않고 concat 시키는 방법. 하지만, layer가 늘어나면 feature가 굉장히 많아지는 단점 존재
Dense block으로 늘려주고 1x1 conv, 2x2 Avgpooling 사용해서 축소 시키는것을 반복
6. CV Application
- Semantic Segmentation
이미지의 영역마다 어떤 class에 속하는지 구분 (dense classification)
Fully Convolutional Network : dense layer -> conv layer
input image shape에 상관없이 작동해서 좋다. 하지만 output spacial dimension이 떨어져있어서 upsampling 필요
Deconvolution (conv transpose) : 역연산은 아니지만 shape를 역으로 맞춰주는. - Detection
R-CNN : image마다 region(bounding box)을 뽑아서 같은 크기로 만들어내고 SVM으로 classifiy
SPPNet : R-CNN은 region마다 CNN을 돌려야해서 비효율적 -> CNN을 한 번만 돌리고 싶음 -> bounding box를 뽑고
feature map에서 sub tensor를 뽑아온다.
Fast R-CNN : SPPNet과 비슷한데 맨 뒷단에 neural network를 통해서 ROI feature map을 통해서 bounding box regression과 classification을 한다.
Faster R-CNN : bounding box를 뽑는 것 부터 학습을 시키는 network를 추가한다. (region proposal network)
YOLO : region proposal network에서 sub tensor를 뽑는게 아니라 image에서 한 번에 분류 -> 속도 빠르다
bb 개수를 지정하고 찾는다. 이 중 유효한 bb를 사용
7. RNN
- Sequential model
이전 sequential input에 대해서 다음 번 입력을 예측
window size를 정해서 현재로부터 특정 시점까지만 고려 - Markov model : 가장 간단한 모델. 바로 이전 시점만 고려한다. -> 말이 안된다. 과거의 정보를 이용하는데 어떤 정보를 이용할 것인가.
- RNN : feedback loop가 존재함. 현재 cell state를 이용해서 update. 하지만, short-term dependency 존재. 먼 과거 시점의 정보를 활용하기 어려움. vanishing(sigmoid) / exploding(ReLU) grad 문제가 발생
- LSTM : 기억해야할 info들을 현재 input과 hidden input을 통해 업데이트함.
Forget gate : 현재 입력을 바탕으로, 이전에 기억하고 있던 정보를 지울지 결정
Input gate : 현재 입력을 바탕으로, 이전에 기억하고 있던 정보를 이용해 새로운 정보 생성
Update cell : 두 정보를 취합해서 cell을 update
Output gate : update cell에서 어떤 정보를 ouput으로 만들어 낼 지 결정 - GRU : LSTM에서 parameter를 줄인 모델
Reset gate / Update gate
8. Transformer
- Sequential data를 다루는 방법론
- 기존의 RNN 구조와 다르게 재귀적 형태가 아님
1. n개의 sequence가 어떻게 encoder에서 처리가 되는지
2. encoder와 decoder 사이 어떤 정보를 주고 받는지
3. decoder가 output을 어떻게 generation하는지
- Self-Attention : n개의 input을 각각 embedding vector로 vectorize 시킬 때, 나머지 n-1개의 vector 정보 활용 (단어로 치면 문맥을 고려)
- input -> Query / Key / Value 3개의 vector를 생성한다.
score vector (사실 scalar) : 현재 선택한 단어의 query vector Qi와 모든 key vector와 내적을 해서 구한다
attention weight : score를 normalize시킨 후 (key vector의 dimension SQR-> hyper parameter임) softmax를 시킨다.
encoding vector : 이후 value vector와 weighted sum
주의점 : Qi와 Vi는 차원이 같아야함 (내적해야함), Vi는 차원 상관x
- encoder 요약
input X : 각 단어가 embedding
Q,K,V를 구하는 MLP가 있음 (각 단어가 MLP를 공유)
Q와 K를 내적해서 scalar를 뽑고 square root로 normalize한 후 softmax
score와 value vector에 대해서 weighted sum을 통해 embedding vector 생성
입력이 고정되어 있어도, 같이 들어오는 입력에 따라서 출력이 다르다. 즉, MLP보다 조금 더 flexible
but, O(n^2)인게 한계
9. Generative Model
- 확률 분포를 이용해서 모델링
- fully independent / not independent : 유의미한 데이터는 이 사이에 존재
- independence assumption -> parameter를 줄여주지만 원하는 output을 모델링 할 수 없다
- Chain rule / Bayes' rule / Conditional indipendence : 2^n-1 (fully indep) -> 2n-1 (cond indep)
- auto regressive model : 다차원 image를 raster scan 등 flatten하는 방식이 필요
- 병렬화 불가능 : 시점 t는 시점 t-1에 의존...
코테준비
이번주는 바텀업 기반 DP.
[파이썬] 백준 2156 : 포도주 시식 (실버1) (tistory.com)
[파이썬] 백준 17404 : RGB거리 2 (골드4) (tistory.com)
[파이썬] 백준 1563 : 개근상 (골드4) (tistory.com)
[파이썬] 백준 18244 : 변형 계단 수 (골드3) (tistory.com)
[파이썬] 백준 10844 : 쉬운 계단 수 (실버1) (tistory.com)
[파이썬] 백준 1562: 계단 수 (골드1) (tistory.com)
머리로 쓱쓱 푸는거보다, 그림으로 state 나눠서 node연결 해주는게 실수없이 빠르게 푸는 듯
코멘트
generative model 뭔가뭔가임.. 잘 안와닿음. 자격증 시험 끝나면 따로 복습하기.
'etc > 공부방' 카테고리의 다른 글
리트코드 문제풀이 진행 상황 (0) | 2024.09.01 |
---|---|
[네부캠] 5주차 정리 (0) | 2023.12.04 |
[네부캠] 4주차 정리 (0) | 2023.11.27 |
[네부캠] 2주차 정리 (0) | 2023.11.17 |
[네부캠] 1주차 정리 (0) | 2023.11.10 |
댓글