출처: AI 엔지니어 기초 다지기 : 네이버 부스트캠프 AI Tech 준비과정
Convolution의 수학적 정의: f와 g 두 개의 함수를 잘 섞어주는 operator
가장 기본적인 convolution 예제: 3x3 filter를 7x7 image에 convolution하면 5x5 output이 나온다.
K: convolution filter
이런식으로 하나하나 output이 계산되면 5x5 output으로 convolution operation이 수행된다.
이런 방식을 통해 실제 2d convolution이 진행된 예제는 다음과 같다.
일반적으로 다루는 RGB Image Convolution을 사용한다.
tensor: RGB image를 수학적으로 표현하는 것
보통 임의의 image를 convolution한다는 의미에는 filter와 image의 depth(예제에서는 3이 해당됨) 크기가 같음을 전제함
다른 RGB convolution 예제
Image와 filter 크기를 알면 output의 크기를 알 수 있다. (규칙적임)
이러한 convolutions(CONV)들은 stack이 될 수 있다.
한 번 CONV할 때, 각 filters의 적절한 개수와 size 그리고 non-linear activation function 적용
사실 이게 CNN의 전부임
Convolutional Neural Networks(CNN): convolution layer, pooling layer, fully connected layer 3개 구성됨
Convolution, pooling layers: feature extraction 이미지 유용한 정보 추출
Fully connected layer: decision making(ex> classification, regression) <- 점점 최소화하거나 없어지는 추세임
왜?: 이 layer는 파라미터 개수에 dependent
파라미터 개수 많으면 -> 학습이 어려움 -> generalization performance 저하(학습잘해도 실질 deploy 성능 별로임)
-> 요즘 CNN 발전 방향: convolution layers은 깊고 많아지지만 파라미터 숫자는 가능한 줄이고자 함
모델 살피기: neural network(layer)별로 몇 개의 파라미터로 구성되고, 전체 파라미터 개수가 몇 개인지 중점을 두며 본다.
point: 모델을 보고 파라미터 개수에 단위가 어느 정도일지 감각이 있어야함!
Kernel: convolution filter
Stride: convolution filter(Kernel)를 얼마나 자주 찍을 지에 대한 것.
padding: Boundary 정보로 인해 convolution operation이 완전하지 못할 때 가장자리에 덧대주는 역할
예제문제 1: What is the number of parameters of this model?
정답 원리: 커널 크기 * 기존 C 크기 * 변환된 output C 크기
padding, stride는 파라미터 숫자 계산과 무관!
point: 모델을 보고 파라미터 개수에 단위가 어느 정도일지 감각이 있어야함!
예제문제 2: What is the number of parameters of this model?
빨간 숫자: convolution layers
35k = 11 * 11(kernel 크기) * 3 (input depth, or channel) * 48 (output depth) * 2 (이러한 구조를 2개 만들기 때문)
307k = 5 * 5 (kernel 크기) * 48 (input depth, or channel) * 128 (output depth) * 2 (이러한 구조를 2개 만들기 때문)
884k = 3 * 3 * 128 * 2 (두개의 interchange) * 192 * 2
이런식으로 계산되는데...
파란 숫자: dense layers (크기가 매우 커짐), fully connected layer에 해당됨 (차원값 = input 개수 * output 개수)
177M = 13 * 13(채널 값) * 128(채널 숫자) * 2(2개 있음) * 2048(출력값) * 2(2개 있음)
확실히 숫자가 큼 <- why? ) convolution operator가 각각의 하나의 커널 모든 위치에 동일하게 적용되기 때문
즉, convolution operator가 모두에게 shared parameter가 되었기 때문
파라미터 숫자가 많으면 안좋음 -> 줄이는게 트랜드 -> 이 dense layer에 대한 대응책은? ->
1x1 Convolution ( 굉장히 자주사용되는 필수 테크닉! )
Reduce the number of parameters and its dimension while increasing the depth
ex) bottleneck architecture
* convolution의 Output size 구하는 수식: (width - filter) / Stride + 1
2012~2018 CNN model 살펴보기
모델 살피기: neural network(layer)별로 몇 개의 파라미터로 구성되고, 전체 파라미터 개수가 몇 개인지 중점 둔다!
결과적으로 Dense는 깊어지고 파라미터 개수가 줄어드는 테크닉에 집중!
ILSVRC: ImageNet Larget-Scale Visual Recognition Challenge 이미지 분류 챌린지
Classification, Detection, Localization, Segmentation을 다룸, 1000개의 다른 카테고리, 100M 이상의 이미지
Training set: 456567개의 이미지
cf) human 계산?: Tesla 사람이 샘플로 스스로 동료직원과 테스트해서 평균 error가 5.1%가 나왔다고 함.
2015년은 human보다 성능이 잘 나온 기념비적인 해
Key Idea: ReLU(Rectified Linear Unit) non linear 활성함수 사용, 2개의 GPU 사용(GPI implementations), Overlapping pooling, Local response normalization(요즘 잘 안씀), Data augmentation, Dropout 기법 적용
지금 보면 당연한 기법들처럼 보이지만 2012년 당시에는 당연하지 않았던 기법들이다.
Key idea: 3x3 convolution filters with stride 1만 사용했다는 점!
파라미터 개수가 작은거 2개쓰는게 큰거 1개쓰는것 보다 적어짐
이를 기점으로 많아야 5x5, 7x7이지 옛날처럼 11x11은 거의 없어짐
그외 기법: 1x1 convolution for fully connected layers(이걸로 파라미터 줄이려한 건 아님), Dropout(p=0.5), VGG16(레이어 16개), VGG19(레이어 19개)
3x3 filter도 포함하면서 1x1 conv로 파라미터를 더 줄이고 싶은 시도이다.
NiN(Network-In-Network): 비슷한 network구조 안에 network가 있다. 비슷한 network구조가 반복되고있다.
Inception blocks: input을 여러개로 나눠졌다가 다시 합치는 것. 이 과정에 1x1 Conv(파라미터 개수 줄어듦)가 point!
-> 1x1Conv로 인해 channel-wise dimenstion reduction 可
기존 것(왼쪽): 3x3 filter 사용
새로운 것(오른쪽): 3x3 filer 사용 전에 1x1 conv로 채널방향 dimention reduction 수행 후 3x3 적용
-> 기존 147456에서 파라미터 개수가 40960로 줄어듦.
파라미터가 많아지면서 학습이 어려운 overfitting 문제해결 추구 -> an Identity map(skip connection) 추가하는 방법
f(x)가 학습하는 것은 x(residual)만 학습하도록 유도함
Simple Shortcut: 보통 많이 사용하는 형태
Projectecd Shortcut: 차원이 안맞을 때 1x1 Conv로 맞춰주는 경우
특이점: Batch Normalization 과정이 Convolution 다음에 이뤄진다는 것. (원본 논문)
그러나 ReLu뒤에 Batch Norm넣어야된다는 주장도 있어서 순서는 약간 interchngable한듯
3x3 conv 하기 전, 1x1 conv로 input채널 줄이고, 다시 나올 때 1x1 conv로 늘리는 작업 (앞의 inception structure와 같음)
Key Idea: ResNet은 더해주지만 이 대신해 Concatenate를 하자.
문제점: concatenate하면 기하급수적으로 채널(파라미터) 커짐 -> Transition Block 사용 필요
-> Dense Block(늘리기; concatenate) 와 Transition block(늘린 것을 1x1 conv로 다시 줄이기)를 같이 사용한다.
ResNet이나 DenseNet 구조 둘 중 하나 선택하면 왠만큼 성능이 잘 나온다.
'Programming > Python' 카테고리의 다른 글
Recurrent Neural Networks(RNN), Transformer (1) | 2024.02.27 |
---|---|
[CNN] Computer Vision Applications (Semantic Segmentation and Detection) (1) | 2024.02.27 |
인공지능 기본 수학 (베이즈 통계학, 인과관계 추론) (2) | 2024.02.18 |
인공지능 기본 수학 (확률론, 통계) (2) | 2024.02.18 |
인공지능(AI) 기초 (0) | 2024.02.07 |