재형이의 성장통 일지
  • 컨볼루션, Padding, Stride, Pooling, CNN
    2024년 03월 01일 12시 48분 03초에 업로드 된 글입니다.
    작성자: 재형이
    반응형
     
     
    • 오늘은 삼일절이라 출근을 안했습니다ㅎㅎ
    • 그리고 제 생일입니다~
    • 그리고 오랜만에 집에 내려와서 노트북으로 쓰느라 그림판이 더 엉망이네요 ㅜㅜ (아침부터 바빴네유)

     

     

     

     

     


     

     

     

     

     

     

    1. 컬러 사진에 대한 컨볼루션

    • 그러면 컬러 사진에 대해서는 컨볼루션을 어떻게 적용할 수 있을까?
    • 일단 컬러니까 RGB로 3개 채널일 것이다

    • 입력값이 3개의 채널을 가지고 있으므로 3x3 필터또한 각각의 채널에 스캔을 해야하므로 3개의 채널을 가지고 있어야 한다
    • 그렇다면 필터를 꼭 하나만 써야할까?
    • 고양이의 코, 고양이의 다리, 고양이의 귀 이런식으로 여러가지 필터를 적용해볼 수 있을 것이다. 그렇다면 어떻게 될까?

    • 이렇게 입력 데이터의 채널과 동일한 채널을 가지는 필터를 그만큼 여러개로 늘리면 그만이다
    • 그러면 이 필터를 거치면 어떤 출력값이 나올까? 출력 데이터의 크기를 예상해보자
    • 3x3x3 필터로 스윽 스윽 전체를 스캔하고 하나의 특징값에 대한 출력값이 나올 것이고, 두번째 필터...세번째 필터...
      즉, 필터 갯수만큼의 채널을 가지는 출력 데이터가 생길 것이다.

    • 그리고 크기도 좀 줄어들 것이다. 왜냐하면 다음 그림(그림 실력 ㅈㅅ;)처럼 스윽 스윽 지나가면 줄어들 수 밖에 없다

    • 이런 식으로 여러개의 필터로 깊은 인공 신경망을 만들면 출력될 데이터의 크기를 예상해볼 수 있다!

    2. Convolution 옵션 : Padding & Stride & Pooling

    • 근데 위에서처럼 컨볼루션을 하면 항상 데이터가 줄어들 수 밖에 없는걸까?
    • 모델의 방향성과 의도에 따라서 다음과 같은 트릭을 사용하여 데이터가 줄지 않게 할 수 있다

    2-1. Padding

    • 입력 데이터에 패딩을 줘서 데이터 크기가 줄지 않게 해준다

    2-2. Stride

    • 크기를 줄이지 않게 하는 트릭 뿐만 아니라 스캔할 때 얼마나 건너뛰게 할 것인지도 정할 수 있다

    • 행으로 2만큼, 열로 2만큼

    2-3. Pooling

    • 아니면 다 보지말고 특히 중요한 부분만 고르게 하는 방법도 있다
    • 각 영역에서 대푯값을 가져오는 것이다

    • 위 그림에서 필터는 size=(2x2)를 가지고 stride=(2,2)를 가진다
    • Max Pooling은 가장 큰 값, Average Pooling은 평균값을 가져온다
    • 그리고 많은 논문들을 보면 단순히 컨볼루션을 하지 않고 Convolution과 Pooling을 반복하면서 사용한다

    • 이렇게 반복하면 얻을 수 있는 효과는 무엇일까?

    • 이런식으로 세번의 컨볼루션을 거치고 나온 작은 부분이 처음의 전체부분을 고려하고 있는게 아닌가 라는 것이다
    • 그럼으로써 전체를 고려하면 특정부분을 잘 학습할 수 있게 되는 것이다
    • 그렇다면 그냥 처음부터 큰 필터로 스캔하면 되는거 아니냐 싶을 수 있겠지만 구해야할 파라미터의 수도 차이가 많이 나고 비선형성과 집중도 측면에서 차이가 난다
      1. 파라미터 수
        : 5x5의 필터와 3x3 필터 두번을 하는 것을 비교해보자
        결국 둘다 최종적으로는 5x5의 면적을 스캔하는건 똑같아진다(위에서 본 것처럼)
        하지만 5x5는 25개의 파라미터 수를 가지고, 3x3은 9개 두번하면 18개로 더 적은 파라미터 수를 가지게 된다. 이는 스캔하려는 면적이 넓어질수록 차이가 많이 나게 된다. 예를 들어 7x7이면 49개인데 3x3은 3번하면 같은 것이므로 27개의 파라미터 수를 가지게 되므로 차이가 더욱 벌어진다
      2. 비선형성
        : 5x5는 한번의 non-linearity를 가지지만 3x3은 두번을 거치게 되므로 더 많은 non-linearity를 가지고 있다고 볼 수 있다
      3. 집중도
        : 5x5는 5x5의 면적에서 모두 같은 집중도를 보이지만, 3x3을 두번한 것은 가운데 특징, 즉 특정 지점에서 더욱 높은 집중도를 보여주게 된다. 이는 인간이 사물을 바라보는 모습과 비슷하다고 볼 수 있다. 인간은 사물을 구분할 때 전체를 보기보다는 특정부분을 보면서 판단하기 때문이다
        욕 아님;;;

    3. CNN의 feature map 분석

    • 3x32x32의 크기를 가지는 강아지 사진을 conv block1 (32개 채널) → conv block2 (64개 채널) → conv block3 (128개 채널)을 통과한 feature map의 모습을 보면 대략적으로 어떻게 훈련되는지 볼 수가 있다

    low-level features -> middle-level features -> high-level features

    • 먼가 처음에는 전체적인 맥락을 파악하고, 그 다음에는 점차 특징을 잡아가면서 학습해가는게 보이지 않나? 첨에는 가로 부분... 세로 부분... 그 담에는 다리 모양... 코 모양... 그 담에는 코의 위치... 귀의 위치... 이런 식으로
    • 물론 이렇게 훈련된다는 것은 아니고 이런식으로 훈련이 되는 것 같다라는 것이다. 항상 이런 식은 아닐 것이다
    • conv3을 통과한 feature map을 mlp하고 원래 사진이랑 비교해보면 이런 식이다

    • 이렇게 여러 conv를 거쳐서 학습이 잘 될수록 배경은 신경쓰지 않고 각 특징 부분만 찾아내서 강아지인지 분류해낸다

    4. CNN 논문

    • 손글씨 보고 숫자 몇을 쓴건지 알아내는 분류 문제 (다중 분류)

    • 이런 식으로 conv와 pooling을 거쳐가면서 마지막에는 쭉 펼쳐서 mlp로 특징을 나누었던 부분들을 다 합친 후에 softmax를 통해 다중 분류를 할 수 있다
    • VGGnet이라는 유명한 모델도 있는데 이것 또한 비슷하다

    VGG Net Configuration

    5. Beautiful Insights for CNN

    • why convolution? 아주 적은 수의 weight 로 위치별 특징 추출!
      • 사진 입력에는 반드시 특정 패턴(or 특징)이 있고 (픽셀 값들 위치 마구 섞으면 인식 불가)
      • convolution은 위치별 패턴(or 특징)을 찾는 연산이다. (신경망 잘 끊어서 선택과 집중)
      • CNN 통과하면서 그 패턴들이 곱하고(뭐가 더 중요한 특징?) 합해진다(조합된다)
        (low -> high level features)
      • 여러번 conv layer를 통과하는 이유? 파라미터 수, 비선형성, 집중도!
      • 잉크가 퍼지듯 주변 정보가 모인다!
        (담당 위치를 가장 찐하게, 멀수록 연하게 본다)
        (선택과 집중을 하되, 담당하는 위치를 가장 집중해서 봄)
      • 결국, CNN을 쭉 통과하면 중심을 가장 집중해서 보게 되고 이것은 인간의 인지 방식과 닮았다..!
    • CNN 통과 후 마지막 FC layers를 통과한다는 것은…
      • 처음엔 먼 것과의 연결을 끊었지만 나중엔 각 영역별 특징을 싹 다 보고 결정해야함!
        (정제된 특징)
        ex) 물 배경에 고양이처럼 생긴 동물? 고양이가 아닐 가능성이 크다
      • max-pooling 을 너무 많이 한다면? 공간적인 정보를 잃는다! 2x2 크기로 이게 뭔지 어떻게 알 수 있겠는가? 코인지 귀인지 알 수가 없다!
        (특정 행, 열 “위치”가 곧 공간적인 정보를 같이 가지고 있는 셈!)
        ex) 2행 3열에 10이라는 값
      • CNN 통과하면 가운데를 자연스레 가장 집중해서 보게 만들 수 있으므로 이러한 특징을 이용하여 connection을 어떻게 할지 고민해 볼 수 있다 (사전 정보를 신경망에 심는 방법 중 하나, 가운데가 중요해! 라는 사전정보)
      • 위치적으로 가까운 노드 먼저 조합하고 그 다음 layer 에서는 조합된 정보를 조합하면?
        - 멀리 있는 정보는 뭉뚱그려서(정제해서) 조합하게 됨

     

     

     

     

     

     


     

     

     

     

     

     

     

    반응형
    댓글