반응형

Convolution은 작은 필터를 입력 위로 움직이며 지역적인 특징을 뽑아내는 연산이다. CNN은 이 연산을 여러 층으로 쌓아 이미지나 문장 같은 입력에서 점점 더 높은 수준의 특징을 학습한다.

이 글은 filter, kernel, feature detector, padding, stride, pooling, channel처럼 CNN을 처음 볼 때 자주 헷갈리는 용어를 개인 학습 메모 형태로 정리한 내용이다.

 

핵심 정리

CNN에서 Convolution은 필터를 입력의 작은 영역에 적용해 특징을 추출하는 과정이다. 이미지에서는 필터가 가로와 세로 방향으로 이동하며 엣지나 패턴 같은 지역 특징을 감지하고, NLP에서는 단어 표현의 국소 패턴을 잡아내는 방식으로 응용할 수 있다. Padding은 가장자리 정보를 어떻게 다룰지에 대한 설정이고, Stride는 필터가 몇 칸씩 이동할지를 정하는 값이다. Pooling은 특징 맵을 줄이면서 중요한 값만 남기는 과정으로, 흔히 Max Pooling이 예시로 쓰인다. Channel은 RGB처럼 같은 대상을 여러 관점의 값으로 표현하는 축이며, 깊은 층으로 갈수록 낮은 수준의 특징이 더 높은 수준의 표현으로 조합된다고 볼 수 있다.

  • Filter, Kernel, Feature Detector는 문맥에 따라 비슷한 의미로 쓰인다.
  • Convolution은 입력의 작은 영역에 필터를 적용해 특징 값을 만든다.
  • Narrow convolution은 가장자리 보강 없이 유효한 위치 중심으로 계산한다.
  • Wide convolution은 zero padding 등을 사용해 가장자리까지 더 넓게 다룬다.
  • Stride는 필터가 한 번에 이동하는 칸 수를 뜻한다.
  • Pooling은 특징 맵의 크기를 줄이고 중요한 반응을 남기는 과정이다.
  • Channel은 이미지의 RGB나 임베딩 표현처럼 같은 대상의 여러 표현 축을 뜻한다.
  • CNN은 낮은 수준의 지역 특징을 조합해 더 높은 수준의 특징 표현을 만든다.

원문은 여러 CNN 설명 자료를 읽으며 이해한 부분과 아직 헷갈리는 부분을 함께 남긴 학습 기록입니다. 보강문에서는 용어 사이의 관계를 먼저 정리했습니다. CNN을 처음 볼 때는 수식보다 필터가 입력 위를 움직이고, 그 결과가 다음 층으로 전달되며, Pooling과 Channel이 표현을 조정한다는 흐름을 잡는 것이 이해에 도움이 됩니다.

이어서 볼 글

 

여기에 알기 쉽게 설명된듯

NLP를 위한 CNN설명이긴 한데 나는 여기 설명이 매우 쉽고 마음에 들었다.

이미지 CNN은 여기설명이 자세하고 좋아보임(아직 읽기 전)

convolution

수학적 개념은 여기가 좋아보임(아직 읽기 전)

수학적으론 어떨지 몰라도 아래 설명이 매우 쉽고 이해하기 쉽다 ㅎㅎ

위의 주황색 3x3 부분을 filter 또는 kernel 또는 feature detector라고 한댄다.

필터에 따른 컨볼루션 결과는 여기 참조

Narrow vs. Wide convolution

꼬다리 부분을 어떻게 처리하느냐에 따른것 제로패팅을 할 경우 Wide convolution, 안할 경우 Narrow convolution이라함

wide convolution의 경우 원본보다 커질 수 있음

역시나 여기가 이해하기 좋았음

Location Invariance and Compositionality

CNN이 왜 이미지 인식에 효과적인가 하는 부분인데..

내가 부족하게 나마 이해한 바로는

Location Invariance

컨볼루션이 전체 이미지 영역에 대해서 수행되기 때문에 인식하려는 이미지가 어디에 있던지 파악이 된다는 거야

Pooling 역시 회전, 크기변화등에 대해서 안정적인 인식을 하게 해줌(약간 회전하거나 해도 max 값은 동일하므로)

이거도 대충만 이해했지 정확히 이해한건 아님

Compositionality

요거는 아직 잘 이해하진 못한건데

> Each filter composes a local patch of lower-level features into higher-level representation.

뭔가 다음단계로 전달이 된다는거 같은데.. 그리고 갈수록 하이레벨이 된다는거 같은데.. 왜그런지 정확히는 모르겠음

처음에 컨볼루션한번 하면 예를 들어서 외곽선이 따지고..

그담에 다시한번 컨볼루션을 때리면 하이레벨 피쳐가 디텍팅 되는건지.. 대충 그런 느낌?

Stride Size

이건 필터 운전을 한칸씩하냐 몇칸씩하냐 그차이

한 칸씩 하면 1

Pooling

이건 뭐 너무 쉬움.. 보통 max pooing을 한다고 하고.. 아래처럼 그냥 max값 뽑아제끼면 댐

Pooling의 장점

* 회전, 크기변화등에 강하다(Location Invariance, max를 취하므로 왼만하면 max로 동일하게 캐치 됨)

* 인풋이나 필터사이즈등에 상관없이 결과크기 동일하게 할때 편하댄다.

Channels

이미지에서는 RGB같은거고.. NLP에서는 word2vec이냐 GloVe냐 하는식으로 같은 대상의 다른 표현이 여러개일때 쓰는 개념인듯

채널간 묶어서 컨볼루션을 하기도 하나본데.. 나중에 직접해보고 보강내용 적자

> You can apply convolutions across channels, either with different or equal weights.

CNN for NLP

이해하기 어렵지 않다. classfication의 경우 성능 잘나온댄다.

반응형

+ Recent posts