Programmer Application Note

2017년 8월 10일 목요일

2017년 8월 2일 수요일

합성곱 신경망(convolutional neural network)

오후 5:55 Posted by PAN.SPOT , , No comments
1. CNN 신경망이란
   - 합성곱계층 과 폴링계층이 추가된 신경망 구조를 가지며, 3차원 데이터 같이 입체적인 데이터가 흐른다.  이미지를 예로 들면 가로,세로,채널(색상)으로 구성된 3차원 데이터 인데 이전까지의 완전연결 계층에서는 3차원 데이터를 평평한 1차원 데이터로 바꾸어 입력 하였지만 CNN에서는 3차원 형상정보를 그대로 입력하여 3차원에 담겨있는 정보를 같이 비교 하게 된다. CNN에서는 입출력 데이터를 입력,출력 특징맵 (feature map)이라고 한다.



2. 합성곱(Convolutional)
   - 합성곱 연산은 입력데이터에 필터(커널)를 적용하는데 필터는 (높이,너비) 형태로 표현되며 아래와 같이 세로,가로 (4,4)의 입력 데이터가 입력 될 때 필터(3,3)의 합성곱은 (2,2) 가된다. 필터의 윈도우를 일정간격(stride) 만큼 이동 시켜  단일 곱셈-누산(FMA) 방식으로 계산한다. 각 원소를 곱하고 그값들을 모두 더한다. 이때도 바이어스(편항)도 존재한다.


3. 패딩(padding)
   - 입력 데이터 주변에 특정값(if 0)을 채우는것을 패딩이라 하며 이렇게 하였을 때 출력값의 크기를 조정 할 수 있다. 즉 (4,4)크기의 입력 데이터에 패딩을 1 추가 하면 (6,6) 데이터가 되고 이때 출력은 (4,4)로 바뀐다.


4. 스트라이드(stride)
   - 필터의 윈도우의 이동 하는 값을 나타낸다.


5. 입력 크기 (H,W),필터크기(FH,FW),패딩(P), 스트라이드(S)에 따른 출력크기(OH,OW)계산


6. 합성곱 연산의 형상
   - 채널을 추가한 실제 입력 데이터 처리 관계 즉 채널(색상)이 여러개인 있는 이미지를 합성곱 연산에 넣으면 1개의 채널을 가진 데이터가 출력 데이터가 된다.

  - 이때 필터를 여러개 적용 한다면 출력데이터도 여러개의 채널로 출력 될 수 있기 때문에 CNN에서는 필터가 4차원 데이터 이며 (출력 채널 수 , 입력 채널 수 ,높이 ,너비)로 적용 한다.



   - 배치 처리된 입력 데이터가 들어 왔을 때는 아래와 같이 계산된다. 입력데이터는 (데이터 갯수,채널,높이,너비) 순으로 형상이 이루어 진다.



7. 풀링(Pooling)
   - 풀링은 세로 가로 방향의 공간을 줄이는 연산으로 최대 풀링(max pooling)을 많이 사용하며, 예를 들어 2x2 최대 풀링이라면 2x2 영역에서 최대값의 원소 하나로 집약 하여 출력 한다. 이때 스트라이트 또한 2로 한다. 3x3 이면 스트라이트도 3이다.

8. im2col
   합성곱 연산 시 im2col 함수를 사용하여 4차원 데이터를 2차원 행렬로 반환해주는데 이렇게 하면 합성곱 연산이 보다 간결 해진다.

밑바닥부터 시작하는 딥러닝 - 파이썬으로 익히는 딥러닝 이론과구현 / 사이토고키 | 한빛미디어


신경망 학습 개선 방법

오전 1:17 Posted by PAN.SPOT , , No comments
1. 에폭 (epoch)
   1에폭은 학습에서 훈련데이터를 모두 소진 했을 때의 횟수에 해당 한다. 훈련데이터가 6만개 있다면 미니배치로 100개씩 배치 하였을 때 경사하강법으로 600회 반복하면 100 * 600 = 6만개 가되어 1에폭이 된다.

2. Affine(어파인) 계층
   신경망의 순전파 때 수행하는 행렬의 내적을 어파인 변환이라 한다. 행렬의 내적을 수행하는 계층을 이르는말

2. 최적화 방법(매개변수 갱신법)
   - SGD(확률적 경사 하강법) : 일반적으로 사용되나 비등방성함수(방향에 따라 기울기가 달라지는 함수)에서는 비효율 적이다.
   - 모멘텀(Momentum) : SGD에서 움직임에 대한 변수까지 추가하여 개선한 방법
   - AdaGrad : 학습률을 처음엔 크게 했다가 점차 줄여나가는 방법  (과거의 기울기를 제곱하여 계속 더해 나가는 기법으로 학습강도가 점차 줄어들다가 0이 되는 문제가 있다 이를 개선한 RMSProp 라는 방법도 있다)
   - Adam : 모멘텀과 AdaGrad 방법을 융합 한다는 생각을 기초로 만든 기법 - 최근들어 많이 사용 하는방법

3. 가중치 초기화
   - xavier(재비어) : n = 입력 노드의 수 1 / sqrt(n) 의 표준편차를 가지는 정규화 분포
   - he : ReLU 활성화 함수를 사용 할때 초기화 값으로 많이 사용된다.

4. 배치정규화
   - 각 층의 활성화 값의 분포를 적당히 분포 되도록 조정하는 기법으로 아래와 같은 장점이 있다.
    1. 학습 속도 개선 2. 초깃값에 의존하지 않는다. 3. 오버피팅을 억제한다.
 









5.오버피팅 억제 방법
  - 가중치감소 : L2법칙 에 따라 가중치가 커지는 것을 억제하여 오버피팅이 발생하는 것을 억제한다.
  - 드롭아웃(Dropout) : 신경망 모델이 복잡해싲면서 가중치 감소 만으로 대응이 어려워질때 사용하는 기법으로 훈련 때 은닉층의 노드를 무작위로 골라 삭제 하는 방법이다.

6. 하이퍼 파라미터 최적화
   하이퍼 파라미터란 노드의 수 , 배치의 크기 , 학습률 등 초기에 설장하는 값들을 말한다.
   - 데이터를 훈련데이터,검증데이터,시험데이터로 나눈다.
   - 훈련데이터에서 20% 비율로 검증데이터를 분리한다.
   - 검증테이터는 하이퍼파라미터 성능 평가용으로 사용한다. 이를 분리한 이유는 시험데이터로 하이퍼파라미터를 조정 하면 하이퍼파라미터 값이 시험데이터에 오버피팅 될 수 있기 때문이다.


참고:
딥러닝첫걸음 - 머신러닝에서 컨벌루션 신경망까지 / 김성필 | 한빛미디어
밑바닥부터 시작하는 딥러닝 - 파이썬으로 익히는 딥러닝 이론과구현 / 사이토고키 | 한빛미디어
신경망첫걸음 - 수포자도 이해하는 신경망 동작 원리와 딥러닝 기초 / 타리크라시드 | 한빛 미디어