AI: 효율적 구조 및 개선
ㅁ 효율적 구조 및 개선
1. Pruning
ㅇ 정의:
– 신경망에서 중요도가 낮은 가중치나 뉴런, 채널을 제거하여 모델의 크기와 연산량을 줄이는 기술.
ㅇ 특징:
– 불필요한 파라미터 제거로 메모리 사용량과 추론 속도 개선.
– 구조적(채널 단위) 또는 비구조적(개별 가중치 단위) 방식 존재.
– 성능 저하를 최소화하기 위해 재학습(fine-tuning) 과정 필요.
ㅇ 적합한 경우:
– 배포 환경에서 메모리 및 연산 자원이 제한된 경우.
– 대규모 모델을 경량화하여 모바일/엣지 디바이스에 적용할 때.
ㅇ 시험 함정:
– Pruning이 항상 정확도를 높인다고 오해하기 쉬움(OX: X).
– 비구조적 Pruning은 하드웨어 가속 효과가 제한적일 수 있음.
ㅇ 시험 대비 “패턴 보기” 예시:
– “Pruning은 모델의 파라미터 수를 줄이기 위해 중요도가 낮은 가중치를 제거하는 기법이다.” (O)
– “Pruning은 반드시 모델의 정확도를 향상시킨다.” (X)
2. Compound Scaling
ㅇ 정의:
– 모델의 깊이(depth), 너비(width), 입력 해상도(resolution)를 균형 있게 동시에 확장하는 방법.
ㅇ 특징:
– 단일 차원 확장 대비 효율적인 성능 향상 가능.
– EfficientNet에서 제안된 스케일링 방식.
ㅇ 적합한 경우:
– 동일한 연산 예산 내에서 정확도를 최대화하려는 경우.
– 다양한 하드웨어 환경에서 모델 크기와 성능을 조절할 때.
ㅇ 시험 함정:
– Compound Scaling이 단일 차원만 확장하는 방식이라고 착각(OX: X).
– 깊이만 늘리면 항상 성능이 좋아진다고 오해.
ㅇ 시험 대비 “패턴 보기” 예시:
– “Compound Scaling은 깊이, 너비, 해상도를 동시에 고려하여 확장한다.” (O)
– “Compound Scaling은 모델의 깊이만 조절하는 방법이다.” (X)
3. FLOPs
ㅇ 정의:
– 모델이 수행하는 부동소수점 연산(Floating Point Operations)의 총량.
ㅇ 특징:
– 모델의 연산 복잡도를 나타내는 지표.
– 낮을수록 일반적으로 추론 속도가 빠르지만, 하드웨어 최적화 여부에 따라 다를 수 있음.
ㅇ 적합한 경우:
– 모델 경량화의 성능 비교 지표로 활용.
– 하드웨어별 최적화 대상 선정 시 기준으로 사용.
ㅇ 시험 함정:
– FLOPs가 낮으면 무조건 실제 속도가 빠르다고 오해(OX: X).
– FLOPs와 파라미터 수가 동일한 개념이라고 착각.
ㅇ 시험 대비 “패턴 보기” 예시:
– “FLOPs는 모델의 연산량을 나타내는 지표이다.” (O)
– “FLOPs가 낮으면 반드시 추론 속도가 빨라진다.” (X)
4. EfficientNet
ㅇ 정의:
– Compound Scaling을 적용하여 효율적으로 성능을 확장한 CNN 모델 계열.
ㅇ 특징:
– 적은 파라미터와 연산량으로 높은 정확도 달성.
– B0~B7 등 다양한 크기의 모델 버전 제공.
ㅇ 적합한 경우:
– 제한된 연산 자원에서 높은 정확도가 필요한 경우.
– 모바일/엣지 디바이스에 CNN 모델 배포 시.
ㅇ 시험 함정:
– EfficientNet이 단일 구조 변경만으로 성능 향상했다고 오해(OX: X).
– EfficientNet이 RNN 계열 모델이라고 착각.
ㅇ 시험 대비 “패턴 보기” 예시:
– “EfficientNet은 Compound Scaling을 활용한 CNN 모델이다.” (O)
– “EfficientNet은 RNN 계열 모델이다.” (X)
5. Depthwise Separable Convolution
ㅇ 정의:
– 표준 합성곱 연산을 depthwise convolution과 pointwise convolution(1×1 conv)로 분리하여 연산량을 줄이는 기법.
ㅇ 특징:
– 연산량과 파라미터 수를 크게 절감.
– MobileNet 등 경량 모델에서 널리 사용.
ㅇ 적합한 경우:
– 모바일/임베디드 환경에서 CNN 모델 경량화.
– 실시간 추론이 필요한 비전 시스템.
ㅇ 시험 함정:
– Depthwise Separable Convolution이 항상 동일한 정확도를 보장한다고 오해(OX: X).
– Pointwise convolution이 3×3 커널이라고 착각.
ㅇ 시험 대비 “패턴 보기” 예시:
– “Depthwise Separable Convolution은 합성곱을 depthwise와 pointwise로 분리한다.” (O)
– “Pointwise convolution은 3×3 커널을 사용한다.” (X)
ㅁ 추가 학습 내용
추가 학습 정리
1. Pruning
– Magnitude-based Pruning: 가중치의 절대값 크기에 따라 중요도가 낮은 가중치를 제거하는 방법. 구현이 간단하고 직관적이지만, 구조적 최적화에는 한계가 있음.
– Structured Pruning: 채널, 필터, 레이어 단위로 구조적으로 제거하는 방법. 하드웨어 가속기에서 효율적이나 모델 성능 저하 위험이 있음.
– Lottery Ticket Hypothesis: 큰 네트워크 안에 초기화 상태가 좋은 소규모 서브네트워크가 존재하며, 이를 학습하면 원래 성능을 유지할 수 있다는 가설. 찾는 과정이 복잡할 수 있음.
2. Compound Scaling
– α, β, γ는 각각 네트워크의 깊이(depth), 너비(width), 해상도(resolution)를 조절하는 계수.
– 주어진 자원 제약 내에서 세 계수를 동시에 최적화하여 성능과 효율성을 균형 있게 향상.
3. FLOPs와 MACs
– FLOPs(Floating Point Operations)는 부동소수점 연산 횟수를 의미.
– MACs(Multiply-Accumulate Operations)는 곱셈과 덧셈 연산 쌍을 하나로 묶어 계산하는 횟수.
– FLOPs는 MACs보다 2배 정도 큰 수치로 표현되는 경우가 많음.
4. EfficientNet
– Swish 활성화 함수: ReLU보다 부드러운 비선형성을 제공하여 학습 성능 향상에 기여.
– Squeeze-and-Excitation(SE) 블록: 채널 간 관계를 학습하여 중요한 채널의 특성을 강화하고 불필요한 채널은 억제.
5. Depthwise Separable Convolution
– Depthwise Convolution과 Pointwise Convolution으로 분리하여 연산량을 크게 줄임.
– 연산량 절감 비율 계산법: 표준 합성곱 대비 (1/K^2 + 1/C_out) 비율로 연산량 감소(K: 커널 크기, C_out: 출력 채널 수).
– MobileNetV1: 기본 Depthwise Separable Convolution 적용.
– MobileNetV2: Inverted Residual 구조와 Linear Bottleneck 추가.
– MobileNetV3: NAS와 SE 블록 결합, Swish 변형 활성화 함수 사용.