|
MNIST Data |
반변 CNN은 다릅니다. 28*28 형태를 그대로 이용하죠. 그리고 어떻게 하냐면 (예를 들어) 3*3 짜리 커널 형렬로 한번 훑어서(sweep) 이 데이터를 다른 형태로 변형시키는 것입니다. 이 과정을 convolution이라고 하는데, 사실 그렇게 어려운 연산 아닙니다. 그냥 윈도우에 해당하는 원소들끼리 각각 곱해서 더해주는 것이지요.
[1 0 1; 0 1 0; 1 0 1] 커널 행렬로 convolution을 하는 모습. 초록색이 원래 숫자고 분홍색이 convolution의 결과이다. |
이렇게 커널 윈도우로 이미지를 훑으면 어떻게 되느냐... 뭔가 변하겠지요? 원본에 이상한 짓을 해놨으니 말이죠 ㅎㅎ 바로 다음과 같이 변하게 된답니다.
Convolution의 결과. 왼쪽이 커널행렬의 모습이다. (From GIMP) |
대충 얘기하자면 CNN에서 convolution이란 주위값들을 반영해 중앙의 값을 변화시키는 것이라고 할 수 있죠. 어떤 쪽으로 변화시키냐고요? 여기서 바로 CNN의 핵심이 있는 것입니다. CNN은 목적하는 작업의 성공률이 높도록 이미지를 변형해 갑니다. 예를 들어 classification이라면 classification이 더욱 잘되도록 원본으로부터 2차 이미지들을 형성하는 것이지요.
용어설명을 하고 넘어가자면, 이렇게 만들어진 왜곡된 이미지들을 feature map이라고 합니다. 결국 CNN은 원본 입력을 받으면 다양한 커널행렬을 이용해 여러개의 feature map들을 만든 후, 이를 토대로 classification을 진행하는 것이지요. 그러니 원본 딱 하나만 가지고 학습을 했을 때보단, 다양한 feature map을 가지고 학습을 하는게 더 유리할 수 있겠죠?
또 중요한 점은 이 커널행렬이 학습 가능하다는 것입니다. MLP에서는 Wx+b에서 W가 학습 가능했자나요. 사실 convolution도 곱하기와 더하기로 이루어져 있으니 이 연산을 back propagation을 통해 학습하지 못할 이유가 없겠죠. 이 연산을 예를 들어 W*X 라고 표현한다면 (W는 커널 행렬, X는 적용되는 해당 이미지) 여기서의 W도 학습 가능하다는 이야기입니다. 짱이죠? ㅎㅎㅎ
5. 여기서 필터란 무엇이냐면 ?
필터는 그 특징이 데이타에 있는지 없는지를 검출해주는 함수이다.
예를 들어 아래와 같이 곡선을 검출해주는 필터가 있다고 하자.
결과 값이 0에 수렴하게 나온다.
즉 필터는 입력받은 데이타에서 그 특성을 가지고 있으면 결과 값이 큰값이 나오고, 특성을 가지고 있지 않으면 결과 값이 0에 가까운 값이 나오게 되서 데이타가 그 특성을 가지고 있는지 없는지 여부를 알 수 있게 해준다.
다중 필터의 적용
입력값에는 여러가지 특징이 있기 때문에 하나의 필터가 아닌 여러개의 다중 필터를 같이 적용하게 된다.
다음과 같이 |,+,- 모양을 가지고 있는 데이타가 있다고 하자
필터들
6. 패딩 이란 ?
" 합성곱 연산을 수행하기전, 입력 데이터 주변을 특정값으로 채워
늘리는것을 말한다."
- 패딩이 필요한 이유 ?
패딩을 하지 않을 경우 data 의 공간크기는 합성곱 계층을
지날때 마다 작아지게 되므로 가장 자리 정보들이 사라지게
되는 문제가 발생하기 때문에 패딩을 사용한다.
- 제로 패딩후 다시 합성곱 연산
7. 풀링(Pooling) 이란 ?
" 말그대로 출력 값에서 일부분만을 취하는 기능"
CNN은 pooling이라는 단계를 한번 더 거치죠. 이것은 단순히 사이즈를 줄이는 과정이라고 생각하면 좋을 것 같은데요, convolution이 이렇게저렇게 망쳐놓은(?) 그림들을 각각 부분에서 대표들을 뽑아 사이즈가 작은 이미지를 만드는 것이지요. 마치 사진을 축소하면 해상도가 좋아지는 듯한 효과와 비슷하달까요? ㅎㅎ
그런데 놀랍게도 단순한 '골라내기' 과정인 pooling은 성능향상에 매우 큰 기여를 합니다. 여기엔 여러가지 이유가 있지만 (미세한 translation에 대해 invariant한 feature를 제공한다, noise의 역할을 상쇄시킨다 등등) 하지만 제겐 아직도 이 부분이 매우 많은 발전 가능성이 있어 보이네요. 단순한게 이렇게 효과가 좋다면, 좀더 머리를 쓴다면 얼마나 더 나은 효과를 볼 수 있을까요? >.<
8. 그럼 총정리해서 Mnist 데이터가 CNN 신경망으로 들어온다면 ?
9. 뉴럴 네트워크만 사용했을때보다 CNN 을 사용했을때 더 큰 효과를 보는 이유는?
10. Mnist 말고 다른 이미지로 다시 총정리 해보면 ?
11. 흑백이 아니라 RGB 라면 ?
참고 사이트들
http://bcho.tistory.com/1149
https://laonple.blog.me/220587920012