[Machine Learning] CNN이란?
[Machine Learning] CNN이란?
Deep Learning과 Machine Learning의 차이점을 공부하다가 CNN이 궁금해짐- 초창기에 CNN을 개발한 분들이 고양이가 보는것마다 자극 받는 뇌의 위치가 다른것을 보고 아이디를 얻어 CNN을 만듬
- 즉, image전체를 보는 것이 아니라 부분을 보는 것이 핵심 아이디어
- 이 '부분'에 해당하는 것을 filter라고 함
- 자동차의 한 부분 한 부분을 특정 크기로 잘라서 이미지를 넘기게 됨
- Convolution은 한번만 하는게 아니라 여러분 할 수도 있음
- 중간에 RELU 및 POOLING을 넣음(POOL을 몇번 넣는건 자유)
- 마지막으로 fully connection neural network를 구성할수 있음
- 레이블링을 하는 클래스를 붙일수있음
(위의 예에서는 자동차일 가능성을 가장 높게 봄)
- 32x32x3이미지의 필터의 사이즈를 5x5로 지정함(5로 임의로 지정한것, 바꿀수 있음)
- 3은 RGB라서(뒤에 나오는 부분[(ex)6,10]들은 RGB랑은 관련이 없음)
- 만약 흑백사진이라면 3이아니고 1임
- 여기서 말하는 3,1과 같은것을 채널(Channel)이라 함
- CNN에서 필터와 채널은 같은 뜻
- x가 5개 있다고 가정하면, x1, x2, x3, x4, x5값에 대한 w1, w2, w3, w4, w5를 각각 정하고 b도 정하면 y(하나의 결과값)이 나옴
- 즉, W(weight)가 굉장히 중요
- 혹은, RELU를 사용해도 됨
이해를 조금 돕기 위해 이미지 사이와 필터 사이즈를 줄여봄
- 7x7 이미지에서 3x3필터를 적용하면 5x5=25개의 결과가 나옴(필터 1일때)
- 7x7 이미지에서 3x3필터를 적용하면 3x3=9개의 결과가 나옴(필터 2일때)
- stride : 한번에 몇칸씩 움직이는지
- 위와 같이 아웃풋 사이즈 구하는 공식이 있음
- 그러나 계속 필터를 적용하면 이미지의 사이즈가 작아지는 어려움이 발생
- 패딩이라는 개념이 생김
- 패딩 : 테두리의 값을 모두0으로 가상적으로 만듬
- 첫번째 이유 : 그림이 작아지는것을 방지
- 두번째 이유 : 0부분이 모서리인것을 네트워크에 알려주기 위해서
- 패딩을 사용하면 원래 7x7이미지가 convolution layer를 거쳐도 7x7로 남아있음(stride 1일때)
- 패딩을 이용하면 입력과 출력의 이미지가 같아지게 되는 방법임
출처
댓글
댓글 쓰기