728x90
1. Various Neural Network Architectures
- Fully connected Neural Network
- 입력 노드와 출력 노드가 모두 특정한 가중치의 형태로 연결된 Network
- Convolution Neural Network (CNN)
- CV, 영상처리에서 많이 사용
- Recurrent Neural Network
- Sequence data, Time-series data에 적용
- Classification: Image recognition (이미지 분류 task)
- Retrieval: 자연어로 된 query문을 주었을 때 query에 부합하는 관련성이 높은 image들을 검색
- 사람의 신체를 대상으로 하여 자세를 추정
- 의료 영상이나 문자 인식, 알파고
- Challenges in CV Tasks
- Image Classification task
- 2012년도에 AlexNet 모델이 나온 이후로 성능이 급격하게 좋아짐
- 2015년도에는 사람의 물체 인식 성능을 뛰어넘음
2. How CNN Works
[요약]
- 선형 결합의 가중치를 적용해서 가중합을 구하게 되는 convolutional operation 을 먼저 적용
- Output Activation Map을 구한다
- RELU Layer를 그 다음 적용
- Image를 조금 더 축약된 형태로 바꿔주는 Max Pooling Layer를 적용
- Convolution - RELU - Max Pooling을 여러 번 반복하면서 Stacking
- Fully Connected Layer를 이용
- output activation map를 일자로 핀 column vector를 Input으로 설정
- model parameter와 linear combination후 sigmoid 함수 통과하여 확률비교
- 최종적으로 두 개의 Class 중 하나로 구분
- binary cross-entropy loss
- mean square loss
- 위의 loss function으로 설계한 후 optimizer로 최적화
- Fully connected Layer에서 model parameter 존재
- Pooling, RELU는 model parameter 존재 X
- Convolution Layer에서는 이미지의 특정 위치들에 적용한 convolution filter들의 coefficient or 패턴 자체가 model parameter로 작용: GD를 통해 filter의 coefficient를 최적의 값으로 도출하게 됨
- sample image에 존재하는 X, O를 분류하는 task
- 주어진 이미지는 ML/DL Algorithm의 input으로 넣을 때 하나의 숫자들로 이루어진 2차원 배열로 나타남
- 하얀색 pixel에 해당하는 값 = 1, 검은색 pixel에 해당하는 값 = 0
- 부분적인 patch로 집중한다면 일관적인 pattern을 찾을 수 있음
- Convolution Neural Network는
- 특정 class에 존재할 수 있는 작은 특정 pattern을 정의
- 그 pattern들이 주어진 image 상에 있는지 판단
- 주어진 Image 상에서 3 by 3 image patch를 특정한 위치에 overlap 시켰을 때 특정 pattern과의 매칭되는 정도 확인
- Convolution Filter coefficient X Image pixel
- 3 by 3 patch에서 matching이 됐는지 되지 않았는지를 확인할 수 있음
- 총 Matching된 정도 = $\frac {\sum(Box 안의 값)} {patch의 \: 총 \: pixel의 \: 개수} $
- Matching의 정도를 주어진 Image에 3 X 3 patch를 가능한 모든 위치들에 위치키기
- 해당 Matching되는 정도를 또 다른 Image 형태로 반환
- Activation Map: 활성화 지도
- Matching의 정도를 나타내는 또 다른 Image 반환
- 특정한 convolution filter를 주어진 입력 Image의 가능한 모든 위치에 overlap 시켜 Matching되는 정도를 나타내는 결과 Image
- 해당 연산을 Convolution 연산 or Operation이라 한다
- 각 Convolution Filter별로 Activation Map을 얻을 수 있다
- Activation Map 구하는 방법
3. Convolution Layer
- Convolution Filter의 집합
- 각 filter는 Input channel의 개수만큼 channel을 지님
- 주어진 Image 한 장을 가지고 filter 개수만큼의 Image를 생성
- 3개의 채널로 구성된 Input Image가 있을 때:
- convolution filter가 3 X 3 size Image Patch 3개로 구성됨
- 최종 Matching value
- $\sum_{i=1}^{3} (convolution \: filter \: coefficient \times each\: image\: pixel)$
- Image의 depth = Convolution filter의 depth
- $\sum {(convolution \: filter \: coefficient \times each\: image\: pixel)}$ : Activation Map의 Scalar value
- Input Channel 개수 = Activation Map 개수 = convolution filter channel 개수
- One Input Channel 당 Multiple Convolution Filter 존재
- Input Image: 3-channel image
- Convolution Filter: 3-channel filter
4. Pooling Layer
- 특정 size의 image patch 준비
- 기존 Input image와 overlap하여 Input image pixel value 중 최댓값을 골라내는 과정 수행
- Max Pooling
- 원래 이미지가 특정한 size를 가질 때
- 2 X 2 영역에서 특정한 하나의 값을 뽑기 때문에 가로, 세로 영역을 반으로 줄여주는 효과가 있음
- 정보 축약 (대략적으로)
- Activation map에서 해석할 때 해석하고자 하는 패턴이 원래 위치를 특정할 수는 없지만 2 X 2 영역 내에서 Max 값만큼의 세기로 나타났다라고 하는 의미
- Input Image의 각 채널별로 따로따로 적용하게 됨
5. RELU Layer
- 기본적인 convolution 연산: 선형결합을 통해 일어나는 연산
- 선형 연산 이후에는 활성함수를 통과시킴으로써 유연하게 다양한 패턴을 표현할 수 있게 해줌
- Convolution 과정을 통해 선형 결합을 한 후 RELU라는 Activation function을 적용
- 이전의 convolution layer에서 나온 output activation map을 입력으로 받아 RELU 함수를 적용
- 양수는 그대로, 음수는 0으로 처리하는 clipping된 변형된 output activation map을 형성
- 선형 결합의 가중치를 적용해서 가중합을 구하게 되는 convolutional operation 을 먼저 적용
- Output Activation Map을 구한다
- RELU Layer를 그 다음 적용
- Image를 조금 더 축약된 형태로 바꿔주는 Max Pooling Layer를 적용
- Convolution - RELU - Max Pooling을 여러 번 반복하면서 Stacking
- 뒷쪽의 convolution layer는 앞쪽에서 추출된 특정한 패턴을 또 입력으로 받기 때문에 해당 이미지상에서 정의할 수 있는 더 복잡한 패턴을 정의할 수 있음
6. Fully Connected Layer
- Convolution - RELU - convolution - RELU - Max Pooling ... 등의 과정이 모두 끝난 후
- 특정 convolution layer에서 max pooling이 여러 번에 걸쳐서 일어났기 때문에 최종 image size는 2 X 2
- Activation Map을 column vector로 한 줄로 쭉 핀다
- 해당 Column Vector를 이용하여 Fully Connected Layer를 구성
[요약]
- 선형 결합의 가중치를 적용해서 가중합을 구하게 되는 convolutional operation 을 먼저 적용
- Output Activation Map을 구한다
- RELU Layer를 그 다음 적용
- Image를 조금 더 축약된 형태로 바꿔주는 Max Pooling Layer를 적용
- Convolution - RELU - Max Pooling을 여러 번 반복하면서 Stacking
- Fully Connected Layer를 이용
- output activation map를 일자로 핀 column vector를 Input으로 설정
- model parameter와 linear combination후 sigmoid 함수 통과하여 확률비교
- 최종적으로 두 개의 Class 중 하나로 구분
- binary cross-entropy loss
- mean square loss
- 위의 loss function으로 설계한 후 optimizer로 최적화
- Fully connected Layer에서 model parameter 존재
- Pooling, RELU는 model parameter 존재 X
- Convolution Layer에서는 이미지의 특정 위치들에 적용한 convolution filter들의 coefficient or 패턴 자체가 model parameter로 작용: GD를 통해 filter의 coefficient를 최적의 값으로 도출하게 됨
7. Hyperparameters
- Convolution Layer
- Convolution Filter 개수
- Convolution Filter 사이즈
- Max Pooling Layer
- Window(filter) Size
- Window(filter) Stride (window를 다음 칸으로 옮겨갈 때 움직이는 pixel 간격)
- Fully Connected
- Number of Layers
- Number of Neurons
8. CNN Architectures
- AlexNet
- VGGNet
- GoogLeNet
- ResNet
- VGGNet
- 각각의 convolution layer에서 사용하는 convolution filter의 size를 3 X 3으로 Always 고정
- 특정 Size로 정의할 수 있는 특정한 pattern이 존재
- 작은 filter로 나타날 수 있는 단점은 layer를 굉장히 깊게 쌓음으로써 커버할 수 있다
- ResNet (Residual Network)
- Layer를 추가하여 깊게 쌓았을 때 task를 위해 도움이 되는 순기능을 할 수 있다
- 다만 초반에는 random initialization에서 시작하는 수많은 parameter들이 순기능을 내기까지 많은 시간이 걸릴 수 있다
- Layer를 필요할 때 건너뛸 수 있는 skip connection
- 이전에 Deep Learning Layer들이 만들어낸 중간 결과물을 Input $x$으로 넣었을 때 Layer들의 Output $F(x)$이 나옴
- 해당 Output $F(x)$에다 입력을 $x$를 같이 더하는 식으로 최종 Output $F(x)+x$ 을 구성
- Skip을 하고 싶다면 $F$ 라는 layer 내의 parameter들을 거의 다 0으로 학습을 하면 됨
- 만들고 싶은 출력물은 입력 $x$ 대비 얼마만큼을 $F(x)$ 더할지 빼줄지 해당 차이 값만을 추가적인 Layer에서 만들어 주면 된다
- 즉, Layer의 역할은 입력 대비 해당 입력이 추가 혹은 제거할 값 $F(x)$만을 만들어주면 된다는 의미에서 Residual (나머지 값)
728x90