[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(임의로 정한거)를 받아서 하나의 값으로 나타냄
  • 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일때)
  • 패딩을 이용하면 입력과 출력의 이미지가 같아지게 되는 방법임

  • W를 달리해서 여러 필터를 만듬
  • 28은 stride가 1이고 패딩을 안했다는가정하에 만들어진것
  • 처음에는 6개의필터 적용 후에 10개의 필터를 적용하는 모습
    • 필터도 학습하게 됨
    • 이렇게 CNN의 결과로 만드는 것을 Activation Map(Feature Map)이라고 부름
    • 처음6개의 필터를 적용하므로 28x28x6이 됨(weight개수 : 5x5x3x6=450)
    • 다음번에는 10개의 필터를 적용하므로 24x24x10이 됨(weight개수 : 5x5x6x10=1500)
  • W는 처음에는 랜덤하게 초기화하고 계속해서 학습해서 달라짐



출처

댓글

이 블로그의 인기 게시물

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[운영체제] 파일의 구조(순차 파일, 직접 파일, 색인 순차 파일)

[운영체제] MLQ & MFQ