본문 바로가기
기계학습/[밑바닥부터 시작하는 딥러닝]

7장 정리 - CNN

by tryotto 2019. 8. 6.

응용분야 : 이미지 인식, 음성 인식


전체 구조//

- 신경망의 종류

      1) (Affine 계층 + ReLU계층) * N + (Affine + SoftMax)

-> 완전 연결 계층 (인접하는 계층의 모든 뉴런들과 결합되어 있음)

      2) (Conv + ReLU + Pooling) * N + (Affine+ReLU) * M + (Affine+SoftMax)

-> 합성곱 계층



합성곱 계층//


- 완전연결 계층의 문제점 : 데이터의 형상이 무시됨 (모두 1차원으로 평탄화 해줘야됨)

        -> 합성곱 계층은 입출력 모두 원래의 차원으로 유지함


- 특징맵 : 합성곱 계층의 입출력 데이터

     1) 입력 특징 맵 : 입력 데이터

     2) 출력 특징 맵 : 출력 데이터


- 합성곱 연산 : 필터(커널) 연산

      - 필터의 윈도우를 일정 간격 이동 -> 입력 데이터에 적용 (단일 곱셈 누산)

      - 맨 마지막에 편향도 더해줘야 함



패딩//


- 정의 : 합성곱 연산 이전에, 입력데이터 주변을 특정 값으로 채움


- 목적 : 출력 크기를 조정하기 위함

     why? 출력 크기가 계속해서 작아진다면, 학습을 할 수 없음 (반복 연산이 불가능함)




스트라이드//


- 정의 : 필터를 적용하는 위치 간격

      -> 필터의 윈도우를 얼만큼의 위치를 이동할 것인가?



3차원 데이터의 합성곱 연산//


- 주의점 : 입력 데이터와 필터 데이터의 차원 수는 일치해야 한다




블록으로 생각하기//


- 여러 개의 출력을 내보내고 싶으면? 

-> 열 개의 필터를 적용하면 됨


- 편향의 경우, 길게 늘여서 출력데이터에 더함.




풀링 계층//


- 정의 : 세로/가로 방향의 공간을 줄이는 연산


- 특징 : 

    1) 학습해야 할 매개변수 없음 : 대상 영역에서만 관찰하면 되므로

    2) 채널 수가 변하지 않음 : 입력 데이터의 채널 수 그대로 출력데이터로 내보냄(블록이랑 다름)

    3) 입력의 변화에 영향을 적게 받는다 



합성곱, 풀링계층 구현하기//    CNN 방식에 있는 구현 단계임


- 사용하는 방식 : im2col 함수의 활용 

       - 원리 : 4차원 배열의 값들을 2차원의 모습으로 펼쳐서 계산함

     (2차원 배열간의 계산이 훨씬 빠름. 4차원 계산은 시간이 오래 걸림)


- 합성곱 구현 방식 

     1) 입력데이터의 정보를 저장해둠 (나중에 결괏값을 원래 차원으로 돌려놓기 위해)

     2) 입력데이터를 im2Col을 이용해서 2차원 변환시킴

     3) 필터 데이터(가중치 데이터)를 im2col 이용해서 2차원으로 변형시킴

     4) 변환시킨 두 행렬을 곱합

     5) 결괏값을 1)에서 저장해둔 정보를 기준으로, 원래 배열 차원으로 변형


- 풀링 구현방식 : 채널이 여러 개인 경우, im2col 함수를 이용해서 2차원 배열로 변형 후 계산

           (채널이 한 개일 경우에는 변형 안 해도 됨)


     1) 입력 데이터를 전개 (im2col)

     2) 행별 최댓값 구하기

     3) 적절한 모양으로 바꾸기




CNN 시각화하기//


- 필터 설정 : 어떤 필터를 택하는지에 따라, 합성곱의 결과가 다르게 처리됨 -> 시각화가 가능

-> 이 과정을 통해, 원시적 정보 추출 가능 (에지, 블롭 등)


- 층 깊이에 따른 추출 정보 변화 : 층이 거듭될수록, 추상화된 정보가 생겨남

-> 처음엔 사물의 일부에만 반응하나, 겹겹이 통과하면서 '고급'정보가 된다.



대표적인 CNN//


- 종류 : LeNet, AlexNet


- LeNet 

      - 구성 방식 : (합성곱 + 풀링) * N + ([마지막] 완전연결 계층)

    -> 과거엔 활성화함수를 시그모이드 함수 사용. 지금은 ReLU 함수 사용함


- AlexNet

      - 구성방식 : LeNet과 거의 유사. 옃 가지 변화 있음

      

      - LeNet과의 차이점 :

      1) 활성화 함수로 ReLU 사용

2) LRN 이라는 국소적 정규화 실시 계층 이용

3) 드롭 아웃 사용


- 딥러닝 방식의 발전 원동력 

1) GPU :  대량의 병렬 연산을 고속 수행 가능

2) 빅데이터 : 학습이 훨씬 좋아짐