Convolution
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F23ee489b-1e5b-467d-949d-ab4fdacb652e%2Fimage.png)
- convolution filter를 적용하고자 하는 img에 찍고 그것을 output에 기록
Continuous Convolution
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F66ed9704-6639-4c37-afa7-9dfcd121d11e%2Fimage.png)
- 두 개 함수 f랑 g를 mix해주는 operator 함수
Discrete Convolution
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2Ff8fa67e8-de6a-4104-8f27-b1c05080dc94%2Fimage.png)
2D image Convolution
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2Fa63a9979-3cca-4ed5-a08e-d6be78b4d1b0%2Fimage.png)
- 적용하고자 하는 filter의 image에 대해서 convolution output이 다르게 나올 수 있음
- 강조하거나 외곽선 따기 가능
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F81eebcd9-7f7b-45ff-a249-71440a55c7a8%2Fimage.png)
- I는 전체 이미지 공간
- K는 적용하고자 하는 convolution filter
RGB Image Convolution
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F402ebd14-a191-4f98-b865-f7a6c8f19766%2Fimage.png)
- 이 때 3은 RGB의 이유 때문
- filter의 크기는 항상 같음
- input channel과 output convolution feature map의 channel 알면 여기에 적용되는 convolution feature의 크기 계산 가능
- convolution filter의 개수도 알 수 있음
Stack of Convolutions
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F6453fdb3-50be-4cf8-97ab-3a7172a22d7e%2Fimage.png)
- 연산을 정의하는 데에 필요한 parameter 숫자 잘 생각해야
- convolution의 feature size 5x5
convolution이 적용되는 channel의 숫자 3
output의 숫자 4 이용해서 parameter 수 구할 수 있음
- 이때 ReLU는 활성함수의 type. 활성함수와 함께 convolution 진행
Convolutional Neural Networks
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2Fc8610914-53c1-4a16-975f-614095ee1a48%2Fimage.png)
- Model은 deep하게, Parameter 숫자는 줄이는 데에 집중
- Convolution Layer, Pooling Layer, Fully Connected Layer로 구성
- Convolution Layer : Convolution feature를 통해 도장 찍고 값 얻어내는 역할
- Pooing Layer : 2x2, average, max, ...
- Fully Connected Layer : 다 합쳐서 최종적으로 원하는 결과로 만들어줌. Parameter 숫자에 dependent
- Convolution과 Pooling layer는 img에서 유용한 정보 뽑아냄
- Fully Connected Layer는 decision making. 회귀 문제에서 원하는 출력값 얻어낼 수 있도록 도와줌. 분류 문제에서 사용
- Parameter 숫자 늘어날수록 학습 어렵고, generalization performance가 떨어지게 됨
- Generalization Performance : 학습에서 얻어진 data가 실제 test data에서 얼마나 잘 동작할지
Stride
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2Fed0b9992-81ee-4f85-9982-95377bd5c4a3%2Fimage.png)
- Stride는 convolution filter를 얼마나 자주, dense, sparse하게 찍을지에 대한 기준
- Stride = 1 : kernel의 convolution filter를 매 pixel마다 적용
- Stride = 2 : 한 번 찍고 두 칸 옮겨서 찍고...
- 2D일 경우, stride가 width / height 방향으로 두 개 나옴
Padding
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2Fdd835d0b-0348-49e4-8f31-b752db603ab9%2Fimage.png)
- 쉽게 말해서, padding을 통해 값을 덧대준다고 생각하면 됨!
- padding으로 input과 output의 공간적 차원이 같아지게 됨
Stride? Padding?
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F720fa6bf-8b93-4f8f-bd11-229dbf5be953%2Fimage.png)
1) 한 칸씩 옮기면서 진행
2) 적절한 크기의 zero-padding 사용함으로써 입력과 출력의 feature map의 spatial dimension이 항상 같아지게 됨
3) stride가 2이므로 한 칸 건너서 가게 됨
4) 한 칸 건너서 가나, spatial dimension을 맞춰주고자 함
Convolution Arithmetic
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F96db0712-4dad-4bb6-bfce-53855e87c210%2Fimage.png)
- 빨간색은 Convolution Layer, 파란색은 Dense Layer(Multi-Level Perceptron)
- Params # = kernel size kernel size channel size(== input dimension) * output channel size
1) 11 x 11 x 3 x 48 x 2 ≒ 35k
- 이 때 x 2는 GPU 사양에 맞추기 위함
2) 5 x 5 x 48 x 128 x 2 ≒ 307k
3) 3 x 3 x 128 x 2 x 192 x 2 ≒ 884k
4) 3 x 3 x 192 x 192 x 2 ≒ 663k
5) 3 x 3 x 192 x 128 x 2 ≒ 442k
6) 13 x 13 x 128 x 2 x 2048 2 ≒ 177M
- channel 값 channel 값 channel 숫자 ( 2) 마지막 출력값 ( 2)
7) 2048 2 x 2048 2 ≒ 16M
8) 2048 * 2 x 1000 ≒ 4M
1x1 Convolution
![](https://velog.velcdn.com/images%2Fpseeej%2Fpost%2F2df40230-132b-4eee-8deb-9fbdf806ac21%2Fimage.png)
- 차원을 줄이기 위해 사용
- convolution layer 깊게 쌓으면서 parameter 숫자 줄이기 위해
- image를 1x1 pixel로 보고 channel 방향을 줄이기 위해 사용
- bottleneck architecture에서 자주 사용