![post-thumbnail](https://velog.velcdn.com/images/pseeej/post/531bb63d-0acf-47d8-9622-481f74e6cf8f/boostcamp_logo.png)
Important Concepts in Optimization
Generalization
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F416d4092-6899-4352-b98e-fa668cf571da%2Fimage.png)
- generalization gap : test error와 training error 사이 간극
- 좋은 generalization 성능 : network 성능이 학습 data와 비슷하게 나올 것이라고 보장
Underfitting vs Overfitting
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F82bdff98-28e4-4c57-91bd-f403b50580f6%2Fimage.png)
- 모델이 너무 간단해서 학습 오류가 줄어들지 않는 underfitting
- training error가 test dataset에 대한 error보다 작은 경우를 overfitting
Cross-Validation (K-fold Validation)
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2Fb6655240-6efa-4446-922a-c60086a6a538%2Fimage.png)
- Cross-Validation은 일반화되는 방법을 평가하기 위한 모형 검증 기법
- 학습 data를 train data와 validation data로 나눔
- validation data : hyperparameter를 조정하기 위함
- K-1개로 학습시키고 나머지 하나로 validation 수행하는 K-fold validation
- i번을 제외한 데이터 전체를 train으로 사용
- i번 데이터를 validation 용도로 사용
- 최적의 hyper parameter set 찾기 위해 사용
- test data 활용해서 train 하는 건 절대 금지!!!
Bias and Variance Tradeoff
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F87787612-e921-4476-86d7-5282987f8d8b%2Fimage.png)
- Bias : 평균적으로 true target에 접근할수록 좋음
- Variance : 입력을 넣었을 때 출력이 얼마나 일관적으로 나오는지
- Tradeoff : 하나가 오르면 하나는 줄어드는 반비례 관계
- Bias ∝ 1/Variance
Bootstrapping
- 여러 개의 model 있을 때 하나의 입력에 대해 model들이 예측하는 값의 일치성 보고 uncertainty 예측
Bagging vs Boosting
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F85d114b6-9533-445a-8386-62546dea00a3%2Fimage.png)
- Bagging (Bootstrapping aggregating)
- multiple model들은 주로 bootstrapping 사용
- 기본 classifier들이 random subset들로 맞춰져있음
- Boosting
- 분류하기 어려운 특정 training sample들에 초점
- weak learner들을 합쳐 하나의 strong model을 만듦
Gradient Descent Methods
Batch gradient descent
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F7992657b-1c47-4694-b194-b7a5d948f0b0%2Fimage.png)
- batch methods가 large할 경우 sharp minimizer에 도달, small할 경우 flat minimizer에 도달하게 됨. sharp보단 flat이 더 좋음.
- flat minimum이 generalization performance가 더 높음
- 따라서, batch size를 줄이면 generalization performance가 더 좋아짐
Momentum (관성)
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F9931121c-1c4a-4732-a1ef-333eb6d5f66f%2Fimage.png)
- a라는 momentum을 이루고 있는 term이 계속 그 값을 가지고 있음
- 한 번 흘러간 값을 계속 가지고 있기 때문에, gradient가 크게 변동되어도 최종적으로는 잘 학습됨
Nesterov Accelerated Gradient
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F5a6c1f65-6100-4662-b42c-e98bf036383f%2Fimage.png)
- a의 방향으로 한 번 가보고, 간 곳에서 계산한 gradient 가지고 accumulate 수행
- 제일 오른쪽 그림의 빨간색 화살표는 momentum으로 간다고 쳤을 때의 gradient 방향
- 실제 momentum만을 이용했을 때의 가중치 값을 이용하여 조정된 momentum을 구함
- 새로 구한 momentum에 step 값을 곱해 새로운 가중치를 구함
- conversion 빠르게 수행 가능
Adagrad
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2Fd500938c-0b4b-41d9-aa91-e4c80331506b%2Fimage.png)
- neural network의 parameter가 지금까지 얼마나 변해왔는지 / 안 변해왔는지 확인
- 많이 변화했을 경우 Gt이 크므로 최종적으로 W(t+1)의 값을 적게 변화시킴
- 뒤로 갈수록 Gt의 값이 커져서 W(t+1)의 값이 0이 될 수 있음
Adadelta
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2Fab4a30c7-6f31-46f1-9016-4c16fac1df6a%2Fimage.png)
- Adagrad의 G_t가 계속해서 커지는 현상을 막기 위한 방법
- EMA : Exponentail Moving Average
- 정해진 time window만큼의 값 저장하고, 평균값을 가짐
- 이 방법엔 학습률 개념 적용하지 않음
Adam
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F26012c94-1602-4aec-88d8-c8058da4c34c%2Fimage.png)
- Adam은 이전의 gradient와 gradient들의 평균에 영향을 받음
- gradient의 크기 변함에 따라서 adaptive하게 learning해서 gradient를 update 시킴
- 이전의 gradient 정보에 해당하는 momentum을 이용
Regularization
- test data에서도 잘 동작할 수 있도록 학습을 방해하는 것이 목적
Early Stopping
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F3667c62f-1727-49da-88c8-45c632bc8a3e%2Fimage.png)
- loss가 어느 정도 커지기 시작할 때 training을 멈춤
Parameter Norm Penalty
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F8b7ac188-9ebf-439c-ac03-16985417e90c%2Fimage.png)
- 부드러운 함수일수록 generalization performance가 높음
Data Augmentation
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F10fad4f5-17f1-4826-aeaa-5b50e2377a36%2Fimage.png)
- 데이터가 많은 게 짱이야~
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F219c1acb-5cbc-44e2-8eee-24a8a271106d%2Fimage.png)
- 데이터가 적을 경우, 이런 식으로 변화를 줘서 데이터에 추가함
Noise Robustness
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F21774858-acef-4b43-9aac-8d235ce9476e%2Fimage.png)
- 강사님? 마스터님?이 말씀하셨던 건,,, 이렇게 noise를 넣으면 성능이 잘 나온다고 하시더라,,, 증명은 머,, 따로,,,~
Label Smoothing
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2Fef022111-6d1b-4678-b0fa-13d80ef5d8e6%2Fimage.png)
- Mix-up은 random하게 선택된 2개의 training data의 input과 output을 모두 섞어줌
- CutMix는 입력을 cut and paste로 mix하고, random하게 선택한 두 개의 training data의 soft label로 만듦
Dropout
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F60f467ef-562c-4642-9658-67c63df66537%2Fimage.png)
Batch Normalization
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F61188992-4bd6-4119-abf1-fddb174361c5%2Fimage.png)
- 이거,,, 강의할 땐 스르륵 지나가서 그냥 나도 같이 스르륵 넘어갔는데 피어세션 때 다른 캠퍼분이 질문하셔서 다시 한 번 볼 수 있는 기회가 됐다,,, 그리고 이 페이지를 추천해주셨당.
내 걸 보는 것보다,,, 이걸 보는 것도 나쁘지 않을 것 같은,,,^^
- 우선 오른쪽의 그림은,,, 원래 4차원 형탠데 3차원으로 표현하려고 한 것 같다
- 그리고 하나의 box?는 각각 convolution 과정 중에 channel이 여러 개 뽑힌 상황을 표현하고 있는 것 같았다
- N은 batch의 개수, C는 channel의 개수, H와 W는 각각 높이와 너비
- Batch Normalization
- N, H, W에 대해서만 연산을 수행
- 같은 feature의 애들끼리 연산 진행하고, layer 전체를 줄임
- Layer Normalization
- 특정 pixel에서 channel끼리 연산을 진행
- Instance Normalization
- 각 데이터에 대해서 연산 수행
- Group Normaliztaion
- channel을 그룹으로 묶어 normalization을 진행
- group 수 G에 대해 G==1일 때 layer normalization과 동일
- G == C이면 instance normalization과 동일