-
패스트캠퍼스 환급챌린지 18일차 미션 (2월 18일) : 딥러닝·인공지능 Signature 초격차 패키지 Online. 강의 후기패스트캠퍼스 챌린지 2024. 2. 18. 21:11
자, 오늘은
Part3. 인공지능의 이해 Lv.2: 숲을 보는 인공지능
CH05-03. CNN 주요 연산 - Pooling
&
CH05-04. 입출력 크기 및 메모리 사용량 계산
CH05-03. CNN 주요 연산 - Pooling
이번 시간엔 풀링과 풀리커넥티드 레이어에 대해 알아보자.
풀링 레이어란?
"풀링이란 필터를 거친 여러 특징 중 가장 중요한 특징 하나를 선택하여 피쳐 수를 줄이는 것을 말한다"
이 피쳐수를 줄일 때 평균값이냐? 최대값이냐? 에서 선택하는데 선택에 따라 각각
어버리지 풀링인지, 맥스풀링인지 이렇게 부른다 한다.

이미지에서 보이는 것처럼 피쳐맵이 있으면 필터를 한번 더 돌린다.
(이거는 피쳐를 뽑아내기 위한 필터가 아니라 피쳐맵에서 필터를 돌리는 것이지 음...
Stride는 2이다.)이렇게 구역이 나눠지면 해당 구역 안에서 맥스풀링이였다면 최대 숫자를 뽑아준다.
그러면 그다음 맥스풀링은 2X2로 나오게 되겠지. 굉장히 많은 양의 데이터를 차원을 축소해서 연산을 관리한다.
Fully Connected layer
앞서 콘블류전과 풀링을 알아 봤으니 이번에는 풀리 커넥티드 레이어를 알아보자.
우선 콘불루젼 연산과 풀링은 피쳐맵을 뽑아내는 레이어에서 사용됐고,
(컨볼류젼 : 피쳐를 추출하는 연산 / 풀링 : 피쳐맵에서 또 특징을 추출하는 연산, 피쳐수 줄임)

그 다음엔 무슨 작업을 해주나?!
마지막 작업인 클래시파이어에 넣어 풀리커넥티드로 자료들을 나갈 준비를 한다.
(이전의 레이어의 모든 처리 결과를 하나로 연결)
(Feature Extraction 결과를 바탕으로 이미지를 분류 / 이 아웃풋 레이어는 분류 되는 갯수만큼 노드를 만들어 준다)
이미지에서 보이는 것처럼 피쳐맵 디텍션 과정을 다 거치면 이제 분류를 해야 하는데,
2D 이미지로는 풀리커넥티드를 만들 수 없으니 플래튼 하는 작업이 필요하다.
(플래튼 : 차원 변경)
그래서 우리가 여태까지 CNN에 대해 알아봤는데, 하이퍼파라미터!
즉, 우리가 설정해야 할 것이 무엇인지 정리해주는 페이지다.
(규칙이 없다... trial & erreor 를 찾아나가야함...)
CH05-04. 입출력크기 및 메모리 사용량 계산
오.... 뭔가 이제부터 어려워 지는 것 같다 잘 따라가보자.
피쳐맵의 사이즈에 영향을 주는 요소들이 많다.
커널 사이즈를 몇으로 할껀지,,, 들어가는 데이터의 규격은 얼마인지,,,
패딩은 몇인지, 스트라이드는 또 몇인지... 엄청 복잡하다. 그래서 이러한 것들을 수식으로 표현한 것이 잇는데,
위에 있는 수식을 같이 한번 보자.
i : 인풋이다. 입력되는 피쳐의 수, 입력되는 사이즈가 되겠다. ( 28 이 되겠지 오른쪽 기준)
O: 아웃풋, 출력되는 피쳐수
K: 커널 수
P: 패딩을 얼만큼 적용하였는가. (적용을 안했을 땐 0 적용)
S: Stride(커널이 몇칸씩 건너 뛰었는가?...)
여기서 우리가 S라는 스트라이드의 값을 키우게 된다면 어떻게 될까? 아웃풋의 사이즈가 줄어들게 될 것이다.
그래서 스트라이드의 크기를 크게 설정했을 떄 특징은
촘촘히 읽는게 아니라 듬성듬성 읽기 때문에 아웃풋 숫자도 줄게 된다.(설렁설렁 본다는 말)
→ 정보 손실 발생 가능성이 큼.
다만! 빠르게 연산하는게 중요하다(메모리 사용량을 조절하고 싶다.) 라고 할땐 S를 늘려보자.
2. 패딩의 값이 커진다?
분수에서 분자의 값이 커진다는 말이고, 출력되는 아웃풋의 값도 커진다는 결과이다.
그래서 우리가 일반적으로 콘볼루션 연산을 수행하게 되면 자연스럽게 피쳐맵일 줄어드는게
당연한데, 이 패딩을 이용하면 똑같은 사이즈의 피쳐맵을 뽑아 낼 수 있는 것이다.
즉, 최종적으로 피쳐의 수가 줄어드는걸 막을 수 있다.
어떤경우에 아웃풋 사이즈를 줄이고 싶지 않을까?
주어진 이미지에 대해서 단순히 화질을 계산하거나 어떤 효과를 준다거나 등...
원본 이미지와 출력되는 결과값이 동일한 사이즈여야 하니 패딩의 옵션을 주어서 원본 이미지 사이즈가
줄어드는 걸 막아야 한다.
이번엔 메모리 관점에서 이 CNN을 살펴보자
자 그래서 우리는 또 w값을 찾아야 하는데, 이 w에 대해서는 우리도 알게 모르게 지금 구하고 있었다.
layer i의 가중치(weight) 수 = 학습을 통해 업데이트 되는 파라미터수 = (k*k*ci-1)*ci
여기서 ci-1은 이전 레이어의 채널수고, ci는 현재 레이어의 채널 수다.

위의 예시를 보면 3*3*3*4의 웨이트 수가 되고, 이 웨이트는 신경망 학습 이후 메모리에 저장된다.
이걸 Storage complexity라 하는데 저장소의 복잡도가 얼만큼 된다라고 판단하는데에 사용되는 지표이다.앞에서는 스토리의 관점이었고, 이번엔 메모리의 관점에서 봐보자!
18일차 끝.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
'패스트캠퍼스 챌린지' 카테고리의 다른 글