내맘대로 정리하는 개념.
출퇴근시간에 게임하는것도 슬슬 질린다.
자투리 시간에 심심하니까 이거나 좀 채워봐야지.
찾기 귀찮아서 그냥 아는거 정리하는것도 많아서 틀릴 수 있음.
빠르게 한번 훑고 세세한 개념 설명 추가해야지
각 주제 관련해서 참고해볼 자료를 링크로 걸어두었다.
Ian Goodfellow- Deep Learning 책 목차 보면서 떠오르는대로 정리해도 될듯
https://github.com/janishar/mit-deep-learning-book-pdf/tree/master/chapter-wise-pdf
1. 머신러닝과 딥러닝.
http://www.tcpschool.com/deep2018/deep2018_deeplearning_intro 딥러닝
https://blog.naver.com/mhn_noonai/222285873816 머신러닝
https://tensorflow.blog/%ED%95%B8%EC%A6%88%EC%98%A8-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-1%EC%9E%A5-2%EC%9E%A5/1-3-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%98-%EC%A2%85%EB%A5%98/ 머신러닝
딥러닝은 머신러닝 방법 중 하나로, neural network을 기반으로함.
MultiLayer Perceptron같은거 생각하면 되는데, 신경망 가중치(weight)를 입력에 곱하고 bias를 더하여 output을 내는 구조가 여러 레이어 쌓여있다고 보면 된다. loss function을 정의하고 forward 후에 backpropagation하여 각 learnable parameter들에 대해 loss를 편미분해서 gradient descent하면서 loss minimization하는 방향으로 learning rate만큼 학습하는 것.
다른 유명한 머신러닝 알고리즘들에 비해서 데이터를 많이 필요로 하다보니까, 최근들어 장비 가격이나 데이터에 대한 접근성이 완화되어서야 유행한 듯.
머신러닝은 데이터에 기반으로하여 규칙성, 패턴을 찾는 알고리즘 혹은 통계적 모델이다. neural network 말고 일반적인 머신러닝 알고리즘도 다양하다. 되게 다양한게 종류를 크게 2가지로 나눈다.
supervised, unsupervised learning. reward를 줘서 학습하는 reinforcement learning도 있는데 일단 이건 논외로 한다.
supervised learning에는 linear, logistic regression이나 Naive bayes, SVM, K-nearest-neighbor, Decision Tree, Random Forest (classification)같은 알고리즘이 있다.
unsupervised learning에는 K-means clustering 등이 있다. (내가 비전 위주의 딥러닝을 다뤘다보니 이쪽은 안써서, 조금 나중에 쓰겠다.)
2. activation function.
https://deepinsight.tistory.com/113 활성화함수
https://hongl.tistory.com/236 GELU
왜 나왔는가
딥러닝이 퍼셉트론 기반으로 하다보니까 신경망에서 착안하였고, 그래서 입력신호를 활성화할지 말지 activation하는 부분을 모방하여 나온 개념. 출력값의 범위가 정해지는 장점도 있음
종류
sigmoid, tanh / relu leakyRelu elu maxout 등등이 있는데, 최근에 논문 보면 nlp나 ViT 계열 등에서 gelu 많이 쓰는 것 같다.
생각해보기
- Sigmoid 대신 Relu를 사용하는 이유는?
- Relu의 단점과, 이를 대신하기 위한 방법은 무엇이 있나요?
2-2. non linearity?
https://mole-starseeker.tistory.com/m/40
비선형성이라는건 직선으로 표현되지 않는다는 의미다. 평범한 feedforward neural network를 생각하면 그냥 행렬 weight곱과 bias 더하는건데, 선형대수학 배울 때 linear combination과 span을 떠올리면 이 모델은 주어진 representation space가 한정되어있다는걸 상상할 수 있다. 더 복잡한 것들을 표현하기 위해서는 선형적이지 않은 변환이 가능해야하며 그래서 activation function을 쓰는거다.
(참고: bias를 통해 활성화함수가 적용되는 기준을 바꿀 수 있다)
주로 이거 설명할때 다들 XOR 연산을 언급한다.
2-3. bias? variance?
https://gaussian37.github.io/machine-learning-concept-bias_and_variance/
그 바이어스 말고 모델 바이어스요. 의식의 흐름을 따라 생각난김에 아래 추가한다.
3. weight initialization.
- https://velog.io/@cha-suyeon/DL-%EA%B0%80%EC%A4%91%EC%B9%98-%EC%B4%88%EA%B8%B0%ED%99%94Weight-Initialization- 종류별
- https://kjhov195.github.io/2020-01-07-weight_initialization/ torch default?
- xavier나 he 많이 쓴다.
- nn.Linear는 xavier, conv는 he를 default로 두는 것 같다.
- 둘다 이전 레이어의 뉴런 개수에 반비례하게 표준편차를 두는 방식이다.
- 뭐 아니면 transfer learning, pretraining 개념에서 미리 학습된거 불러오거나.
4. loss function
- https://ynebula.tistory.com/28 cost function
regression이면 MSE, MAE 등. (이외에도 regularization term에 비슷한 값 나오라고 L2, L1 norm 넣거나)
classification이면 주로 Cross Entropy Loss.
Cosine Similarity도 많이 쓴다. self-supervised learning할때 augmentation 다양하게 적용하고 feature들 간에 비슷하라고.
생각해볼 것
Supervised learning과 Unsupervised learning의 Objective fuction과 그 차이를 딥러닝 모델 중심으로 설명해 주세요
5. Gradient Descent? Stochastic?
- GD
- 로스를 줄이기 위해서 일정 lr만큼 단계적으로 gradient 방향으로 학습 파라미터를 업데이트 하는데, 모든 데이터에 대해서 한번에 계산하기엔 메모리가 너무 든다.
- 아무튼 배치(전체 데이터)로 학습하는게 일반 gd.
- SGD
- 배치가 1이면 sgd.
- 단어 자체의 의미: stochastic = probabilistic + time
배치에 들어갈 하나의 데이터가 랜덤하게 선택됨을 의미. 그런데 노이즈가 너무 심하다.
- Mini Batch SGD
- 그래서 대안으로 많이 쓰는 게 미니배치 sgd. 흔히 말하는 배치 사이즈 256 그런거다.
딥러닝 overfitting을 막는 방법으로 고전적으로 많이 언급되는 것이 batch normalization, weight regularization, dropout 등이 있다.
이름이 정규화인게 3가지나 있어서 이거 공부할때 헷갈린다. Normalization, Standardization, Regularization. https://realblack0.github.io/2020/03/29/normalization-standardization-regularization.html
6. Normalization
Normalization의 정의는 데이터 값의 스케일을 원하는 범위로 스케일링 하는 것. 학습에 데이터 범위가 안좋은 영향을 주는걸 막기 위함.
특히나 여기서 mean 0 std 1의 표준정규분포를 따르게 하는걸 Standardization이라하고, normalization 기법의 일종이다.
https://sonsnotation.blogspot.com/2020/11/8-normalization.html
가장 흔한 Batch Norm, 그리고 다른 normalization
BN
- 개념
- batch norm은 internal covariance shift 때문에 쓴다. 다음 레이어로 갈때 분포가 바뀔 수 있기 때문.
- 0 mean 1 std 분포로 노멀라이즈한다. 하지만 input을 가지고 statistic을 구하는 것 뿐만 아니라 output에도 scaling, shift를 적용함. (수식 봐주자) 얘네는 backprop으로 학습된다.
- 쓰는 이유: 쓰는 이유는 활성화 함수의 비선형성을 잃게 될 수 있어서, 이를 보전하기 위함이라함.
- 물론 요즘에는 shift를 해결해서라기보다는 다르게 설명하는듯 하다만...
- train test모드 이야기
- data statistics 뽑아쓰는건 학습모드에서만 그렇다.
- 인퍼런스때에는 인풋 데이터의 mean std를 사용할수는 없는 노릇이니 deterministic하게 한다.
- 학습때 사용한 running mean, running variance를 불러와서 활용.
https://eehoeskrap.tistory.com/m/430 BN 설명 참고
다른 normalization 기법
아무래도 배치 사이즈가 작을 수 밖에 없는 task도 있고, recurrent한 구조는 bn을 적용하기가 뭐하다.https://subinium.github.io/introduction-to-normalization/
- LN은 레이어에 하는데, 미니배치에서 feature dim이 같아야하는구나. 그래서 RNN같은거에 효과적이래.
- IN은 채널마다 따로해서, GAN style vector 얘기.
7. 모델 Generalization을 위하여? Overfitting 막기?
이것저것. 전반적으로 참고하려고 한다. 여기 블로그에도 AIML 기본기 관련글이 많다.
https://glanceyes.tistory.com/entry/Deep-Learning-%EC%B5%9C%EC%A0%81%ED%99%94Optimization
Regularization.
https://velog.io/@sp1rit/Regularization Normalization과 Regularization
https://huidea.tistory.com/154. L1, L2 설명
https://rain-bow.tistory.com/entry/Semi-Supervised-Learning-SSL-%EC%86%8C%EA%B0%9C-%EB%B0%8F-%EB%8F%99%ED%96%A5 일반적인 L1, L2 외에 Regularizer라고 불리는 것들
L2 Regularization. Weight Decay.
https://sanghyu.tistory.com/88
dropout 등 키워드.
data augmentation.
8. optimization
요즘 optimizer 종류도 많음. 이 글 아랫부분 참고 (Adam, RMSProp, AdaGrad 등...)
- https://velog.io/@chang0517/Optimizer-%EC%A2%85%EB%A5%98-%EB%B0%8F-%EC%A0%95%EB%A6%AC
- https://wikidocs.net/36033
- https://velog.io/@reversesky/Optimizer%EC%9D%98-%EC%A2%85%EB%A5%98%EC%99%80-%EA%B0%84%EB%8B%A8%ED%95%9C-%EC%A0%95%EB%A6%AC.
+ scheduler도 봐주자.
Q. local minima가 있음에도 딥러닝이 잘되는 이유는?
https://variety82p.tistory.com/entry/Local-Minima-%EB%AC%B8%EC%A0%9C%EC%97%90%EB%8F%84-%EB%B6%88%EA%B5%AC%ED%95%98%EA%B3%A0-%EB%94%A5%EB%9F%AC%EB%8B%9D%EC%9D%B4-%EC%9E%98-%EB%90%98%EB%8A%94-%EC%9D%B4%EC%9C%A0%EB%8A%94
9. input 관련
생각해볼 것
분포가 불균형한 비정형 데이터를 분류 할 때 발생하는 문제는 무엇인가요? 해결법은?
-> weight balancing과 샘플링.
CE Loss 발생시킬때 가중치를 줘서 해결하거나 (귀찮아서 난 주로 샘플링+이걸로함..) focal loss를 사용한다.
아니면 학습용 데이터셋 구성할때 애초에 샘플링을 통해서 맞춰주든가.
https://techblog-history-younghunjo1.tistory.com/74
이 블로그에 MLDL 관련글이 많아서 천천히 읽어보면 좋을 것 같다.
[주관을 확고히 하기 위해 생각해볼 지점]
Domain Knowledge가 머신 러닝 모델에 미치는 영향에 대해 프로젝트 경험을 중심으로 설명해주세요
머신러닝 모델을 활용해서 문제를 해결하려고 할 때 가장 중요하게 생각하는 것은 어떤 것인가요?
최근 가장 인상적으로 읽은 논문은 무엇인가요?
'전공 기본기를 다져요 > 지식 테스트' 카테고리의 다른 글
AIML 개념 빠르게 정리해보기 (2): 딥러닝 특정 모델 관련 (0) | 2022.07.26 |
---|
댓글