출처: http://m.blog.naver.com/msnayana/220776380373
컨벌루션 신경망 ( Convolutional Neural Networks, CNN ) ~ 개요
딥러닝 알고리즘중에서
영상과 음성에서 좋은 성능을 보이는 알고리즘으로 CNN이 있다.
이 합성곱신경망(컨벌루션 신경망,CNN)은 전처리를 추가한 다층퍼셉트론의 한종류이지만
2차원 데이타의 입력이 용이하고 훈련이 용이하고 적은 매개변수라는 장점이 있어 많이 사용된다.
또한
최근엔 CNN과 거의 비슷한 합성곱 심층 신뢰신경망(Convolutional Deep Belief Network, CDBN)
이 개발되어 이 알고리즘의 활용성이 많이 높아 진상태이다.
단순하게 표현하면
CNN은 신경망에 기존의 필터기술을 병합하여
신경망이 2차원 영상을 잘 습득할수 있도록 최적화시킨 방법(알고리즘)이다.
용어에서 보듯이 먼저 컨벌류션(합성곱)의 의미를 이해해야 한다.
CNN은 용어처름
컨벌류션(기존 영상처리의 필터)기능과 신경망을 결합시켜 성능을 발휘토록 만든 구조이다.
간단히 표현하면
컨벌류션(합성곱) + 신경망 = CNN 이다.
좀 더 세분화하면
컨벌류션과 sub-sampling 을 반복하여 데이타량을 줄이고 왜곡시켜 신경망에서 분류케 만든다.
일반적으로 모델은
특징추출 + 분류행위 = 부류결과 라는 형식으로 동작하는데
특징추출은 컨벌류션으로 하고, 분류행위는 신경망으로 한 것이다.
그래서 먼저 컨벌류션을 이해해야 한다.
이 기법은 기존의 영상처리에서 잘 사용하는 기능으로 영상필터로 사용된 기술이다.
영상처리에서 컨벌루션이란 가중치를 갖는 마스크를 이용해서 영상처리를 하는 것을 의미하는데
입력 영상에 마스크를 씌운다음, 입력 영상의 픽셀값과 마스크의 가중치를
각각 곱한 후 그 합을 출력영상의 픽셀값으로 정하는 것을 말한다.
영상처리에 사용되는 마스크를 필터, 윈도 또는 커널이라고 한다.
위 과정을 세분화 시켜 아래에서 살펴보면
입력영상에 윈도우를 이동하면서 계산하는데
계산은 위처름 해당영역에 윈도우값을 곱하여 합한결과를 적어 나간다.
이것이 컨벌루션으로 이렇게 하면 아래같은 결과를 만들수 있다.
이것은 기존의 필터 기술로서 원하는 영상을 추출하고자 할때 사용하는데 특징추출이 주 목적이다.
기존의 영상필터는 커널(윈도우)이 고정값을 사용했는데
여기서는 필터값도 학습에의해 바뀌도록 설계되어 있다.
그리고
추출할때는 다양한 여러장을 추출하여 강인한 특징(왜곡,변형같은 환경변화에 잘 적응하는)을
유도하는데 이것을 feature maps이라 한다. 아래 처름..
아래 그림은
컨벌류션과 subsampling을 반복하면서 영상을 줄여나가는 기본기능을 도식했다.
이렇게 계속 줄여나가면 특징이 남게되고
신경망의 각 입력단자에 바로 접속이 가능한 일차원의 fully connected가 나오고
이것을 신경망 입력단자에 연결시켜 학습시킨다.
subsampling은 화면의 크기를 줄이는 과정인데
아래의 방법인 max pool 을 사용한다(해당영역의 최대치를 선택기법)
위 그림처름 4개중 가장 큰수를 선택하는데 이것은 뉴런이 가장큰신호에 반응하는 것과 유사하다.
이렇게 하면 노이즈가 감소하고 속도도 빠라지고 영상의 분별력이 좋아진다고 한다
Fully Connected는
2차원 영상을 컨벌류션과 서브샘플링없이 바로 신경망의 입력에 붙인 다면
학습시간증가, 망의 크기, 변수의 개수가 많아지는 문제가 발생한다.
이렇게 되면 오버피팅과 지역해수렴등의 다양한 문제에 봉착하여 사용이 어렵다.
줄이고 줄여 1차원 행렬이 되도록 하여 신경망의 입력단에 각각 하나씩 하여 모두를 매핑한다.
이렇게 하여 구성한 방법은 아래와 같이 된다.
위 그림은
컨벌류션과 서브샘플링으로 2차원영상이 특징만 남기고 줄여 1차원 행렬로 바뀌는 과정이다.
그 과정은
1) 특징추출
2) topology변화에 영향이 적도록 처리
3) 분류
라는 순서로 처리 됨을 알수 있다.
아래 그림 처름..
CNN은 layer를 많이 하면 계산량은 늘어나지만 성능은 좋아 진다고 알려져 있다.
microsoft는 152개의 layer를 적용한 CNN을 만들었다고 한다.
이 CNN으로 아래 그림에서 개와 고양이를 골라 낸다.
그것도 아주 잘...
다음엔 CNN을 세부적으로 살펴 볼까 한다.
마지막 수정일
2016. 9. 12. (본문 내용 업데이트)
'프로젝트 관련 조사 > 알고리즘' 카테고리의 다른 글
선형 함수(linea function)와 비선형 함수(non-linear function)의 차이! (0) | 2017.03.13 |
---|---|
Gradient Descent 탐색 방법 (0) | 2017.03.06 |
[경로탐색 알고리즘] 큐를 이용한 너비우선탐색 알고리즘(BFS - Breath First Search) [출처] [경로탐색 알고리즘] 큐를 이용한 너비우선탐색 알고리즘(BFS - Breath First Search)|작성자 Android Kang (0) | 2016.10.15 |
[C++] [STL] vector 벡터 정리 및 예제 (0) | 2016.10.15 |
[C++] [STL] deque 정리 및 예제 (0) | 2016.10.15 |