저번 시간엔 각 신경망에 따라 코드로 딥러닝 구현을 해보았다.
이번 시간엔 컨볼루션 신경망(CNN)에 대해 알아보자.
CNN에서는 컨볼루션층, 풀링층, 전결합층이 등장한다. 또한 이미지를 유연하고 정밀하게 인식하기 위해 CNN은 일반적인 신경망과는 구조가 조금 다르다.
일반적으로 이미지는 각 픽셀이 인접한 픽셀과 강한 연관성이 있어, 컨볼루션층에서는 출력값이 입력값의 일부로부터만 영향을 받는 국소성(local connectivity, locality)이 강한 처리가 수행된다. 또한 풀링층에서는 인식하는 대상의 위치를 유연하게 처리할 수 있는 구조로 구성되어있다.
이제 CNN의 원리와 구조를 배워보자.
시각 처리 세계
CNN은 생물체의 시각 구조를 모델링한 것으로 우선은 CNN의 구조부터 살펴보겠다. 아래 그림은 인간의 시각정보 전달의 주요 경로를 나타낸다.
CNN 구조
CNN의 특징은 여러 층으로 구성되었다는 신경망과 같다.
CNN에는 컨볼루션층, 풀링층, 전경합층의 3개 층이 있다.
컨볼루션(합성곱)은 이미지 처리 분야에서 매우 일반적인 연산이다. 적용하면 이미지의 특징을 강화하거나 약화시킬 수 있다. 또한 이미지는 국소성(locality)라는 성질이 있다. 각 픽셀이 인접하는 픽셀과 강한 관련성을 갖고 있는 성질이다.
다음은 컨볼루션층의 전체 모습이다.
다음으로 풀링층을 살펴보겠다. 풀링층은 보통 컨볼루션층 바로 뒤에 배치된다. 이미지를 여러 영역을 구획하고 각 영역을 대표하는 값을 추출해 새로운 이미지를 만단다. 이를 풀링(pooling)이라고 한다.
전결합층은 일반적인 신경망에서 이용되는 층이다. 전결합층은 일반적으로 컨볼루션층과 풀링층이 몇 번 반복된 후 배치된다. 풀링층의 출력을 전결합층으로 입력할 경우 이미지를 벡터로 변환한다.
예를 들면, 이미지의 높이가 H, 너비가 W, 채널수가 F이면 전결합층의 입력은 크기가 H*W*F인 벡터가 된다. 역전파의 경우 반대로 크기가 H*F*W인 벡터가 높이, 너비, 채널 수인 배열로 변환된다.
컨볼루션층과 풀링층에서 입력 이미지를 둘러싸는 것처럼 픽셀을 배치하는 기법을 패딩(padding)이라고 한다.
위 그림은 제로 패딩(zero padding)을 한것이다. 다른 방법도 있지만 CNN에선 제로 패딩이 폭넓게 사용된다.
패딩을 사용하는 이유는 컨볼루션층이나 풀링층을 거치면 이미지가 축소되므로 패딩을 사용해 이미지 크기가 변하지 않게 하기 위함이다.
스트라이드(stride)는 컨볼루션에서 필터가 이동하는 간격을 뜻한다
스트라이드가 커질수록 데이터 크기가 줄어든다.
그렇기 때문에, 매우 큰 이미지를 축소시키기 위해 스트라이드를 사용할 때가 있지만, 특징을 포착하지 못할 우려가 있어 보통은 스트라이드를 1로 설정하는 것이 바람직하다.
패딩을 하면 할수록 데이터가 커지고,
스트라이드 크기가 커지면 데이터가 작아진다.
CNN 학습
CNN은 일반적인 신경망과 마찬가지로 역전파를 통해 학습된다.
풀링층은 학습이 진행되지 않지만 오차는 이 층을 통과시켜 앞 층으로 전파시킬 수 있다. 이 전파 알고리즘은 다소 이해하기 까다롭다.
다음 시간에 자세히 알아보자.
'Machine Learning' 카테고리의 다른 글
[인공지능] CNN 구현, 코드 및 아키텍처 구조 설명 (2) | 2024.11.11 |
---|---|
컨볼루션 신경망(CNN)(2) (0) | 2024.02.23 |
딥러닝 구현 및 시각화 해보기 (1) | 2024.02.14 |
딥러닝 다층화에 의한 문제점 및 구현에 필요한 과정 (1) | 2024.02.11 |
역전파 구현 및 시각화 해보기 (0) | 2024.02.11 |