본문 바로가기
Google Machine Learning Bootcamp 2022/Convolutional Neural Networks

1. Foundations of Convolutional Neural Networks

by 사향낭 2022. 7. 28.

Convolutional Neural Networks

 

 

Computer Vision

 

Image classification, object detection, neural style transfer, ...

 

 

Edge Detection Example

 

 

이런 방식으로 vertical, horizontal edge를 탐지할 수 있다고 한다.

 

 

More Edge Detection

 

 

 

 

이렇게 filter로 convolution을 함으로써 edge를 탐지할 수 있다는 것을 알았다.

 

그렇다면 filter의 weight를 neural network로 학습시키면 어떨까.

 

low-level feature인 edge를 magic filter로 잘 탐지하지 않을까.

 

 

Padding

 

그냥 convolution을 계속하다 보면 당연하게도 output의 사이즈가 계속해서 줄어든다.

 

이는 feature의 손실로도 이어질 수 있다.

 

그래서 input을 감싸는 padding을 해주어 convolution 후에도 사이즈가 줄어들지 않게 만들어준다.

 

Valid convolution: no padding

 

Same convolution: Pad, so that output size is the same as the input size

 

computer vision에서 filter size는 보통 홀수인데 same convolution의 padding size를 정수로 만들어줄 수 있고, central position을 가지는 게 좋을 때가 있기 때문이라고 한다.

 

 

Strided Convolutions

 

보폭을 크게 잡는 convolution이다.

 

 

엄밀하게 ML에서 convolution이라 부르는 것은 cross-correlation이고 convolution은 filter를 위아래, 좌우를 바꾸어 계산을 하는 것이다.

 

하지만 관습상 ML에서는 cross-correlation을 convolution이라 부른다.

 

 

Convolutions Over Volume

 

3d에서도 convolution 과정은 똑같다.

 

다만 관습으로 channel size는 input과 filter를 맞춘다고 한다. (output으로 2d)

 

여러 filter를 사용하여 나온 값을 쌓아 다시 3d로 만들 수 있다.

 

 

One Layer of Convolutional Network

 

Convolutional network의 input, output, weight, bias 등등의 shape를 생각해볼 것.

 

padding, stride, number of filters, number of training data 등등을 다 고려해야 해서 복잡하긴 하다.

 

 

Simple Convolutional Network Example

 

한 training data에 대한 ConvNet의 예시

 

Types of layer in a convolutional network: convolution, pooling, fully connected

 

일반적으로 layer를 거치면서 height, width가 줄어들고 channel이 늘어나는 것을 확인할 수 있다.

 

 

Pooling Layers

 

Max pooling: filter에 걸리는 수들 중 maximum 값을 가진다.

 

Average pooling: filter에 걸리는 수들의 average 값을 가진다.

 

filter size, stride size와 같은 hyperparameter만을 가지고 parameter는 없다.

 

 

 

Convolutional Neural Network Example

 

 

관습적으로 convolutional layer과 pooling layer를 묶어 하나의 layer로 센다.

 

 

Why Convolutions?

 

이전에 배운 것처럼 input과 output을 모두 연결시켜 계산하는 것은 너무나 많은 parameter가 필요하다.

 

Parameter sharing: A feature detector (such as a vertical edge detector) that's useful in one part of the image is probably useful in another part of the image

 

Sparsity of connections: In each layer, each output value depends only on a small number of inputs

 

하지만 이러한 특성으로 인해 convolution으로 적은 수의 parameter만으로 feature를 잘 뽑아낼 수 있다.

댓글