📌 Optimization
- 최적화에서는 사용하는 용어를 제대로 알고 있지 않으면 나중에 가서 잘못된 이해를 할 수 있으므로 용어의 정의를 명확하게 알아야 한다.
Generalization
- Generalization(일반화) : 학습된 모델이 test data에 대해 얼마나 잘 맞추는가

Under-fitting vs Over-fitting
-
underfitting(과소적합)
- 모델의 용량이 작아 오차가 클 수 밖에 없는 현상
- 훈련집합과 테스트집합 모두 낮은 성능
-
overfitting(과대적합)
- 모델의 용량이 크기 때문에 학습 과정에서 잡은까지 수용 => 훈련집합에 대해 너무 완벽하게 근사화함.
- 훈련집합에 높은 성능을 보이나 테스트집합에서는 낮은 성능.


Cross-validation
- 교차검증이란?
- 데이터 편중을 막기 위해 별도의 여러 세트로 구성된 학습 데이터 세트와 검증 데이터 세트에서 학습과 평가를 수행하는 것.
- 예를 들면 수능(테스트 데이터)을 보기 전에 모의고사(교차 검증)을 보며 시험준비를 한다.
- 훈련집합을 등분하여, 학습과 평가 과정을 여러 번 반복한다. 아래 사진은 10겹 교차 검증의 예시이다.

Bias-variance tradeoff
Bootstrapping
- 임의의 복원 추출 샘플링 (sampling with replacement) 반복.
Bagging and Boosting
- Bagging(Bootstrapping aggregating)
- 훈련집합을 여러 번 샘플링 하여 서로 다른 훈련집합을 구성
- 동시다발적(Parallel)
- Boosting
- i 번째 예측기가 틀린 샘플을 i+1번째 예측기가 잘 인식하도록 연계성을 고려
- 순차적(Sequential)
서로 다른 여러 개의 모델을 결합하여 일반화 오류를 줄이는 기법인 앙상블 기법이라 볼 수도 있다.

Batch-size Matters
- 큰 배치사이즈는 sharp minimizers로 수렴하는 경향이 있다.
- 작은 배치사이즈는 flat minimizers로 수렴하는 경향이 있다.
- 아래 그림을 보면 Training Function에서의 sharp minimum 지점은 Testing Function에서와 큰 차이 를 보이는 반면, flat minimum 지점은 큰 차이가 없다.

Gradient Descent Methods
Stochastic gradient descent
- Update with the gradient computed from a single sample.
Mini-batch gradient descent
- Update with the gradient computed from a subset of data.
Batch gradient descent
- Update with the gradient computed from the whole data.
Momentum
- 모멘텀(탄력, 가속도, 관성)
- 경사도의 잡음 현상
- 기계 학습은 훈련집합을 이용하여 매개변수의 경사도를 추정하므로 잡음 가능성 높음
- 모멘텀은 경사도에 부드러움(smoothing)을 가하여 잡음 효과 줄임
- 관성(가속도) : 과거에 이동했던 방식을 기억하면서 기존 방향으로 일정 이상 추가 이동함
- 수렴 속도 향상(지역 최저, 안장점에 빠지는 문제 해소)

- 속도 벡터 v는 이전 경사도를 누적한 것에 해당
- a의 효과 (관성의 정도)
- a = 0 이면 관성이 적용 안된 이전 경사도 갱신 공식과 동일
- a가 1에 가까울수록 이전 경사도 정보에 큰 가중치를 주는 셈 -> theta가 그리는 궤적이 매끄러움
Nesterov accelerated gradient

- 현재 v 값으로 다음 이동할 곳 theta' 을 예견한 후, 예견한 곳의 경사도를 사용.


Adagrad
- 기존 경사도 갱신은 모든 매개변수에 같은 크기의 학습률을 사용하는 셈이다.
- 적응적 학습률은 매개변수마다 자신의 상황에 따라 학습률을 조절해 사용한다.

- Gt는 이전 경사도를 누적한 벡터
- ϵ은 분모가 0이 됨을 방지하는 작은 값.
RMSprop

- γ가 작을수록 최근 것에 비중을 둠.
Adam
- RMSProp에 관성(momentum)을 추가로 적용한 알고리즘.

Regularization
- 학습 모델이 훈련집합의 예측을 너무 잘 수행하지 못하도록 방지
Early stopping
- 일정 시간이 지나면 과잉적합 현상이 나타나고(일반화 능력 저하), 훈련 데이터를 단순히 암기하기 시작.
- Early stopping 규제 기법은 검증집합의 오류가 최저인 접에서 학습을 멈춘다.

Parameter norm penalty
- 가중치 벌칙
- 학습 모델을 단순화 시킴으로서 일반화 성능을 향상 시킴
- 함수공간을 매끄럽게 하여 최적화 개선

- L2 놈을 규제항으로 사용하는 규제 기법을 weight decay라 부른다.
- 이는 최종해를 원점 가까이 당기는 효과(즉, 가중치를 작게 유지) 를 가진다.
Data augmentation
- 데이터 확대
- 과잉적합을 방지하는 가장 확실한 방법은 큰 훈련집합 사용
- 하지만 데이터 수집은 비용이 많이 드는 작업이다.
- Data augmentation은 인위적으로 변형하여 데이터를 확대한다.
- 이동,회전,반전 등을 적용하는데, 숫자 4와 같이 위아래 뒤집기를 하면 원래의 데이터와 아예 달리지기 때문에, 이러한 점은 주의를 할 필요가 있다.
Noise robustness
- 입력데이터 혹은 가중치에 임의의 노이즈를 추가하는 기법.
Dropout
- 완전연결층의 노드 중 일정 비율을 임의 서낵하여 제거하는 기법.
Batch normalization
- 공변량 시프트 현상을 누그러뜨리기 위해 아래 식의 정규화를 층 단위로 적용하는 기법.

- 정규화를 적용하는 곳이 중요하다.
- 일반적으로 완전연결층 or conv층 이후 또는 활성함수 이전에 적용한다.
- 적용 단위는 미니배치에 적용하는 것이 유리하다.

📌 Convolution은 무엇인가?


RGB Image Convolution
- 현재의 일반적인 이미지는 rgb의 3채널 이미지이다. 그렇다면 이러한 3채널 이미지는 어떻게 convolution 연산을 수행할까? 다음 그림을 참고하자.

- 위 그림과 같이 커널의 채널수는 이미지의 채널수와 동일하다는 것을 외우자!! 그렇다면 커널의 각 채널별 각 요소들이 이미지에 대응되는 채널의 각 요소들과 곱해져서 모두 더하는 연산을 수행하게 된다.

- 그렇다면 위 그림과 같이 여러개의 커널을 가지고 conv연산을 수행하면 어떻게 될까?
그림을 보면 알 수 있듯이 각 커널로 생성된 결과가 커널의 개수만큼 쌓이게 된다.

- 즉 cnn에서 conv 연산은 위 그림과 같이 커널을 적용하고, 활성화 함수를 적용한 모듈이 여러 layer로 쌓리게 된다.
Pooling
- 풀링연산은 요약 혹은 평균등의 통계적 대표성을 추출한다.
- 매개변수가 없다.
- 특징 맵의 수를 그대로 유지한다.(크기x)
- 최대 풀링, 평균 풀링 등이 있다.
Padding과 Stride
Conv층의 출력 크기와 매개변수 수
- 입력 : W1 x H1 x D1
- K개 F x F 커널, 보폭 S, 덧대기 P
- 출력의 크기 : W2 x H2 x D2
- W2 = ((W1-F+2P) / S ) + 1
- H2 = ((H1-F+2P) / S ) + 1
- D2 = K
- 매개변수의 수 : 커널마다 (F x F x D1)개의 가중치와 1개의 bias를 가진다. 따라서 전체 매개벼수 수는 (F x F x D1) x K + K
📌Modern CNN
AlexNet

- 구조
- 컨볼루션층 5개와 완전연결fully connected (FC) 층 3개
- 8개 층에 290400-186624-64896-43264-4096-4096-1000개의 노드 배치
- 컨볼루션층은 200만개, FC층은 6500만개 가량의 매개변수
- FC층에 30배 많은 매개변수 → 향후 CNN은 FC층의 매개변수를 줄이는 방향으로 발전
- 당시 GPU의 메모리 크기 제한으로 인해 GPU#1, GPU#2으로 분할하여 학습 수행
- 3번째 컨볼루션 층은 GPU#1과 GPU#2의 결과를 함께 사용 (inter-GPU connections)
- 컨볼루션 층 큰 보폭으로 다운샘플링
- AlexNet이 학습에 성공한 요인
- 외적 요인
- ImageNet이라는 대규모 사진 데이터
- GPU를 사용한 병렬처리
- 내적 요인
- 활성함수로 ReLU 사용
- 지역 반응 정규화local response normalization 기법 적용
- ReLU 활성화 규제
- 1번째, 3번째 최대 풀링 전 적용
- 과잉적합 방지하는 여러 규제 기법 적용
- 데이터 확대 (잘라내기cropping와 반전mirroring으로 2048배로 확대)
- 드롭아웃dropout (완전연결층에서 사용)
- 테스트 단계에서 앙상블 적용
- 입력된 영상을 잘라내기와 반전을 통해 증가하고, 증가된 영상들의 예측 평균으로 최종 인식
- 2~3%만큼 오류율 감소 효과
VGGNet


GoogLeNet

ResNet
- 잔류(잔차) 학습(residual learning)이라는 개념을 이용하여 성능 저하를 피하면서 층 수를 대폭 늘림.

📌Computer Vision Applications
Semantic Segmentation

전체 이미지를 하나의 레이블로 분류하는 Classification,
한 단계 나아가 이미지 속 여러 물체의 위치를 찾아 Boxing 하는 Dectection,
그리고 한 단계 더 나아가 이미지를 의미 있는 부분끼리 묶어 분할하는 Segmentation.
즉, Segmentation은 이미지를 픽셀 단위로 구분해 각 픽셀이 어떤 물체의 class인지 분류한다.
Fully Convolutional Network

-
위 그림과 같이 classifiacation 작업에서는 물체의 위치 정보는 없고, 단지 확률 값만 가지게 된다.
-
이렇게 이미지 내에 존재하는 물체에 대한 공간 정보는 FC layer에서 사라진다.
- 왜냐하면 FC layer은 모든 노드들이 연결되어 버리기 때문이다.
-
이를 해결할 수 있는 방법은 FC Layer를 Convolutional Layer로 변환하는 Convolutionalization이다. 정확하게는 1×1 Convolutional Layer로 변환하는데 이를 통해 Input 이미지의 위치 정보를 끝까지 유지할 수 있다.
-
Convolutionalization의 문제점 : Convolutional Layer를 거치면서 Downsampling됨에 따라 feature map의 크기가 줄고 두께는 점점 두꺼워진다는 것.
- 원본 이미지에 대해 Segmentation을 수행해야 하는데 이처럼 Output 이미지의 크기가 줄어들어 정보가 소실되면 이는 불가능하다.
- 따라서 해상도를 원본 이미지에 가깝게 올려주고, 원본 이미지 크기에 가까운 Dense Map으로 바꿔주는 작업이 필요 ---> Upsampling
Deconvolution

- Deconvolution은 아래와 같은 방식으로 동작한다.
- 각각의 픽셀 주위에 zero-padding을 추가한다.
- 이렇게 padding이된 것에 convolution 연산을 한다.
위 그림에서 아래쪽의 파란색 픽셀이 input 초록색이 output이다. 이 파란색 픽셀 주위로 흰색 zero-padding을 수행하고, 회색 filter를 통해 convolution 연산을 수행하여 초록색 output을 만들어낸다.
출처: https://3months.tistory.com/209 [Deep Play]
R-CNN
- Selective search라는 고전적인 비젼 방법을 사용하여 입력 영상으로 부터 Region proposals이라고 불리는 물체가 있을 만한 영역을 찾음 (약 2000개 정도의 Region proposals을 제시)
- 각 영역은 같은 사이즈로 변형하여 AlexNet에 입력
- AlexNet의 중간 특징값에 SVM (Support vector machine)을 적용하여 각각의 region
proposal의 클래스를 구분

- RCNN의 한계점
- 계산의 비효율성: 2000개의 region proposals을 모두 CNN에 통과시켜야 함 -> 연산시간이 높음
- End to end로 트레이닝이 불가: Region proposals을 뽑는 부분을 뉴럴넷이 아닌 고전적인 Selective search 알고리즘을 사용하기 때문에 AlexNet 부분만 뉴럴넷으로 구현
Faster R-CNN
- RCNN의 단점을 극복
- CNN 백본 네트워크는 전체 영상에 대해서 한 번만 적용 -> 이 후 물체 검출을 위해 백본 네트워크의 출력 특징지도를 재사용
- Region proposals을 찾아내는 부분을 뉴럴넷으로 구현 -> 2단계의 검출 네트워크를 한번에 end to end로 학습

- 검출단계
- Conv layers 백본 네트워크 : 전체 카메라 영상으로 부터 특징지도 추출 (VGG16, VGG19, ResNet-18, ResNet-34, ResNet-50, ResNet-101, ResNet-152)
- RPN (Region Proposal Network) : Region proposals (물체 위치)을 찾는 역할, 기존의 Selective search 방법을 대체
- RoI pooling : Region proposals에 해당하는 영역을 CNN특징지도로부터 Crop해 옴
- RefineNet : RoI pooling으로부터 얻은 특징값을 다시 Refine하여 물체의 종류와 정밀한 박스위치를 알아냄
- RPN (Region Proposal Network)
- 백본네트워크에서 출력된 CNN의 특징지도의 각 픽셀에 대해 3x3 커널을 적용
- 3x3 커널 적용 후 Objectness score 2개, 바운딩 박스의 좌표값 4개 (x축 중심, y축 중심, 높이, 너비)를 출력함
- 바운딩 박스의 좌표값은 어떻게 추정하나? 답) 앵커박스를 기준으로 변화량을 추정

- 앵커박스가 필요한 이유: 절대적인 값을 추정하는 것 보다 앵커박스를 기준으로 상대적인 변화량을 추정하는 것이 더 쉬움
- 다양한 크기의 물체를 검출하기 위해 다른 크기와 aspect ratio를 갖는 하나 이상의 앵커박스를 사용
- 각 픽셀에서 모든 𝑘개의 앵커박스마다 objectness score와 bounding box의 상대좌표를 추정

- RoI (Region of interest) pooling
- CNN 특징지도에서 region proposal의 영역에 해당하는 특징값을 가져옴
- Region proposal에 해당하는 바운딩박스를 특징지도에 투영 (RoI)
- 투영된 박스 안의 영역을 정해진 크기 HxW로 분할
- 분할된 영역의 특징값에 Max pooling을 적용하여 HxW의 정해진 사이즈의 특징값을 만들어냄
📌피어세션
- 사이드프로젝트 논의
- React, Fast API, 협업 스케쥴러 결정.