티스토리 뷰
[Course4 - Week1] Convolutional neural networks
제이gnoej 2020. 7. 28. 19:59"해당 포스팅은 Coursera 에서 수강한 Andew Ng 의 deep learning specialization 코스를 요약한 것입니다."
CNN 동작 원리
수업 Assignment 의 동영상. 이거 보면 한번에 CNN 이해 됨!!
https://wfteciveefdhloxbtbadax.coursera-apps.org/files/week1/images/conv_kiank.mp4
1. 왜 Image 에는 CNN 이 쓰이나?
이미지의 경우 Input 이 어마어마하게 많다. 고화질의 경우 1000 x 1000 x 3 (RGB) 정도 됨. 이 이미지에 Fully connected layer 을 쓴다고 가정해보자. Weight matrix 의 경우, (input_size, depth) 니까 인풋 크기에 따라 train 해야 될 weight matrix 도 어마어마하게 커지는 거임. 이 말은 모델이 엄청 커지고 overfitting 에 더 취약해진다는 의미도 됨.
그런데 CNN 를 쓰면 작은 weight matrix 를 쓸 수 있음.
CNN 에서는 weight matrix 역할을 하는 게 Filter 임. 이 필터가 Input Image 를 훑으면서 Output Image 를 return 한다. 해당 필터를 보면 왼쪽 수직선과 오른쪽 수직선의 값 차이가 큰 부위에서 큰 output 값을 갖는 다는 것을 알 수 있다. Input 에서 왼쪽과 오른쪽이 수직선을 기준으로 값 차이가 크다는 것은 그 부분이 모서리임을 보여줌.
그래서 이 filter 는 vertial edge detector 이고, 이 filter 를 90도를 기준으로 왼쪽으로 돌리면 horizontal edge detector 가 되겠지.
실제로 deep learning era 이전에 (?) 는 수동으로 코딩된 필터가 있음. Sobel filter, schors filter 등등...
2. Padding
CNN 을 쓸 때는 이미지에 padding 을 입히곤 함. 이미지 모서리로 0 값을 두르는 거임. 왜 이렇게 하냐고?
1) CNN 에서 input size (width, height) 이 계속 shrink 하는 것을 막기 위해서
Output Size = (Width - filter size + 1, Height - filter size + 1
2) 이미지 안쪽의 값들은 필터가 여러번 왔다갔다하며 output 에 영향을 많이 미치는데, 이미지 가장자리는 필터가 몇번 지나가지 않아 버려지는 정보가 많기 때문에 이것을 방지하기 위해서.
pad 값이 1 이면, 아래 위쪽으로 하나씩 둘러지는 것이기 때문에 output 크기는 original width + 2* pad 임.
Valid convolutions : (No padding) . Output_size = (w - f + 1, h - f + 1)
Same convolutions : Input size = Output size 를 위해 padding 더해줌. 이 값을 갖게 하는 pad size 는 (f - 1) / 2
참고로 관행상 f 는 거의 항상 홀수임.
3. Stride
Stirde 는 결국 Filter 로 이미지를 훑을 때, pixel 하나씩 다 훑을 거냐, n 개씩 뛰어넘을 거냐 하는 것임.
중요한 것 Filter, Pad, Stride 를 모두 거친 후 output 의 사이즈는 다음과 같다.
$$ \left \lfloor\frac{n+2p-f}{s} + 1 \right \rfloor \times \left \lfloor\frac{n+2p-f}{s} + 1\right \rfloor $$
여기에서 ㄴ 처럼 생긴 floor 는 round down 을 의미한다. 즉 이 안의 숫자가 정수가 아닐 경우 2.3 은 2가 된다.
4. RGB 컬러 이미지의 convolution 과 아웃풋
위의 Input 처럼 이미지가 RGB 인 경우 3개의 채널이 있는 건데, 그럼 filter 도 3개의 채널이 있어야 함. 하나의 필터를 거친 Output 은 2D 로 사이즈 구하는 방금 위에서 말한 수식과 같다.
Filter 는 2개 이상일 수 있는데, output 은 필터 개수에 따라 Output size 의 depth (= 채널) 도 커지는 거임.
이제 좀 더 자세하게 하나의 layer 가 어떻게 구성되는지 보자. 여기서 하나의 layer 라 함은, 하나의 input 에서 하나의 activation 을 return 하는 거임.
왼쪽부터 Input 을 받아, 1개의 Filter 를 거친 이후, 여기에 Real number 인 bias 를 더한후 활성함수를 씌워준다. 그러면 각 filter 마다 하나의 2D output 이 나오는데, 이걸 그대로 쌓아서 (stack) 에서 하나의 output 으로 만들어내는 것이 하나의 layer!
FFN 과 비교해보면 Filter 과 weight matrix 의 역할을 한다고 보면 됨.
$$z^{[1]} = w^{[1]} a^{[0]} $$
$$a^{[1]} = f( z^{[1]}) $$
가 그대로 적용되는 것을 볼 수 있음.
5. Pooling layers
Pooling layers 란 이미지 각 부분에서 최대값을 갖는 부분을 (밝은 pixel 값) 을 keep 하는 것.
Conv filter 처럼 filter size, stride 그대로 적용 가능하다. 차이가 있다면 learning parameters 가 없고, padding 도 pooling layers 에는 들어가지 않는다는 것. (learning parameter 가 없다고 back propagation 에서 완전히 빠지는 건 아니다. 이 부분도 최종 Z 나 activation (A) 값에 영향을 미치니까)
Output size 는 다음과 같다 :
$$ \left \lfloor\frac{N_{h}+-f}{s} + 1 \right \rfloor \times \left \lfloor\frac{N_{w}+-f}{s} + 1\right \rfloor \times N_{c} $$
$ N_{h} $ 는 filter 의 세로 사이즈, $N_{w}$ 는 filter 의 가로 사이즈.
6. 이제 각각의 Conv layer 를 합쳐 Nueral network 로!
주로 layer 가 깊어질 수록, W, H 는 줄어들고 channel 수 (depth) 는 증가한다.
Conv layer + Pooling layer => Layer 1 개
가장 마지막 layer 는 Fully connected layers 가 있고, 최종 layer 에는 Softmax activation 이 있음 (classifier 에 따라 달라질 수 있지만)
밑으로 내려갈수록 (layer가 깊어질 수록) 채널 수는 깊어지는 것을 볼 수 있다.
7. 그래서 마지막으로 왜 convolutional 이냐고?
1. Parameter Sharing
이미지의 왼쪽 구석에서 잘 작동하는 filter 는 이미지의 중간에서도 잘 작동한다. "Parameter sharing 이 가능하다" = "학습해야 할 parameter 수가 적다"
2. Sparcity of connection
Output image 의 왼쪽 구석에 해당하는 부분은 Input image 에서도 마찬가지로 왼쪽 구석에서 나왔음. 즉, Input image 의 나머지 부분은 해당 output에 영향을 미치지 않음. 마찬가지로 이 덕분에 작은 parameters 를 사용할 수 있는 거임.
그리고 "적은 양의 parameters 를 사용한다" = "model 의 overfitting risk 가 낮다."
왜 Convolutional 이 좋은지 알겠지?!
'Deep learning (일반) > deeplearning.ai' 카테고리의 다른 글
[Course4 - Week3] Object Detection (feat. YOLO) (0) | 2020.10.25 |
---|---|
[Course4 - Week2] State of computer vision (0) | 2020.08.10 |
[Course3 Week2] - Structuring Machine Learning Projects (0) | 2020.07.13 |
[Course2 - Week2] Improving Deep Neural Networks (0) | 2020.05.25 |
[Course1 - Week 3] Shallow Neural Network (0) | 2020.04.06 |
- Total
- Today
- Yesterday
- word embedding
- cs224n
- 워터마킹
- Attention Mechanism
- Pre-trained LM
- GPTZero
- 언어모델
- 벡터
- transformer
- Statistical Language Model
- Contextual Embedding
- Elmo
- LM
- weight vector
- Bert
- 뉴럴넷
- nlp
- language model
- Neural Language Model
- 뉴런
- neurone
- neural network
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |