Posts [프로그래머스 인공지능스쿨] Week8-1 Deep Learning: 신경망 기초 - MLP, CNN
Post
Cancel

[프로그래머스 인공지능스쿨] Week8-1 Deep Learning: 신경망 기초 - MLP, CNN

강의


Deep Leraning: 다층 퍼셉트론

\(\rhd\) 초기 핵심 아이디어

  • 은닉층

은닉층을 두어, 원래 특징 공간을 분류하는데 훨씬 유리한 새로운 특징 공간으로 변환

  • Sigmoid 활성 함수 도입

출력값을 연속값으로 만들어주어, 융툥성있는 의사결정을 가능하게 만듬

  • 오류 역전파 알고리즘(back propagation)

역방향으로 진행하며, 한 번에 한 층씩 그레디언트를 계산하고 가중치를 갱신한다.

CNN

영상 인식 분야에 특화되어 있는 모델
영상, 음성 등 격자(grid) 구조를 가지는 데이터에 적합하다.

\(\rhd\) 영상 인식분야의 어려운 점

  • 동일한 객체라도 영상을 촬영하는 카메라의 위치에 따라 모든 픽셀값들이 변화한다.
  • 동일한 객체라도 조명에 따라 변화가 발생한다.
  • 배경과 오브젝트의 경계 구분이 어려운 경우들이 있다.
  • 정상적인 영상이 아니고 기형적인 형태의 영상도 존재한다.(ex. 두 발로 서있는 고양이)
  • 같은 종류의 객체이더라도 객체들 사이에 차이가 있음. (ex. 같은 종의 강아지라도 강아지마다 생김새가 다름)

\(\rhd\) 구조

크게 Convolution 층과 Pooling 층으로 나뉜다.
Convolution 층은 기존의 MLP와 같은 완전 연결이었던 것을 부분 연결로 바꾼다.
그 후 ReLU와 같은 활성화 함수를 사용하는 부분은 동일하다.
Pooling 층은 Convolution을 통해 얻어진 특징을 통계적으로 압축하여 특징을 요약하고, 강화하는 과정이다.

  • Stride

컨볼루션 연산에서 커널을 움직이는 크기이다.
보통 1로 설정하여 1칸씩 움직이지만, 특수한 경우 n칸씩 이동하도록 설정할 수 있다.

  • Padding

컨볼루션 연산을 하면 입력 배열의 크기가 줄어들게 된다.
이 때 원본 크기를 유지할 필요가 있다면 패딩을 이용하여 둘레를 확장하여 크기를 유지해줄 수 있다.
일반적으로 0값으로 패딩을 해준다.

  • Pooling

Pooling은 일정 크기의 블록을 통합하여 하나의 값으로 대체하는 연산이다.
Max Pooling, Average Pooling이 있으며, 각 이름에서 알 수 있듯이 최대값으로 선택하거나 평균값을 사용할 수 있다.
Max Pooling 은 지정된 마스크에서 가장 큰값을 뽑아서 사용한다. Average Pooling은 지정된 마스크안의 값들의 평균을 구하여 사용한다.
그 외에 adaptive pooling 이 있다.
기존의 Pooling은 커널을 지정해서 연산을 수행하는 반면, adaptive pooling은 output size를 지정하여 연산을 수행한다.
결과는 지정한 output size에 알아서 맞춰준다.
그렇다면 adaptive pooling의 커널 사이즈는 어떤식으로 구성되는걸까?
찾아봤지만 정보가 많지는 않고, 그나마 몇 개 찾은 것들에서는 내부적으로 필요에 따라서 자동적으로 조정된다고 한다.

그 외에 최근에는 Global Average Pooling(GAP)를 이용하여 파라미터를 획기적으로 줄여주는 방법을 많이 채택한다.
기존 CNN 기법에서는 마지막에 Fully connected layer, 즉 MLP를 부분적으로 두어 최종적으로 결과를 분류했는데,
이 경우 MLP 부분에서 굉장히 많은 파라미터가 생성되게 된다.
이 부분을 GAP으로 대체하여 사용하면 파라미터를 0개 사용하게 된다.
예를 들어 1000개의 Class를 분류하는 문제에서는 최종적으로 1000개의 Feature Map을 생성하고 이게 GAP을 거치면서 바로 1000개의 Class에 매핑되는 형태이다.


This post is licensed under CC BY 4.0 by the author.