2018년 10월 25일 목요일

[요약] 밑바닥부터 시작하는 딥러닝 (Deep Learning from Scratch)

Deep-learning 기반의 face detection & recognition 개발을 위해 deep-learning 기술의 기본이 되는 용어 및 관련 내용을 우선 정리하도록 합니다.


1. Python 설치

Python을 설치하는 다양한 방법이 있지만, 일반적으로 Anaconda 배포판 이용을 권장한다. 본인은 가장 최신의 Anaconda 버전을 설치했다.



2. 퍼셉트론(Perceptron)

퍼셉트론은 다수의 신호를 입력받아 하나의 신호를 출력하는 것을 의미한다. 그림 2-1은 입력 2개의 신호를 받는 퍼셉트론의 예이다. 그림 2-1의 원을 뉴런 또는 노드라고 부른다.


x1, x2는 입력신호, y는 출력신호, 그리고 w1, w2는 가중치를 뜻한다. 퍼셉트론에서 가중치의 설정은 사람에 의해서 수동으로 설정해야 한다.


3. 신경망(Neural Network)

신경망은 그림 3-1과 같이 표현할 수 있다. 퍼셉트론과 비슷하지만, 가중치 매개변수의 값을 입력 데이터로부터 자동으로 학습하는 능력이 있다.


그림 3-1에서 가장 왼쪽 줄을 입력층, 맨 오른쪽 줄을 출력층, 중간 줄을 은닉칭(hidden layer)라고 한다.  은닉층의 뉴런은 사람의 눈에는 띄지 않는다.


3.1 활성화 함수(Activation Function)

입력신호의 총합을 출력신호로 변환해주는 함수를 의미한다. "활성화"라는 이름이 의미하듯 활성화 함수는 입력신호의 총합이 활성화를 일으키는지를 정하는 역할을 한다.




3.2 시그모이드(Sigmoid) 함수

신경망에서 가장 많이 사용하는 활성화 함수이다. 식과 그래프는 아래와 같다.




3.3 ReLU(Rectified Linear Unit) 함수

최근에는 ReLU 함수를 활성화 함수로 주로 이용한다. ReLU는 아래 그림과 같이 입력이 0을 넘으면 그 입력을 그대로 출력하고, 0 이하면 0을 출력하는 함수이다.



3.4 출력층 설계

3.4.1 항등(Identity) 함수

회귀에서 사용하는 함수로 입력과 출력이 항상 같다는 뜻의 항등이다. 그래서 아래 그림과 같이 출력층에서 항등 함수를 사용하면 입력신호가 그대로 출력신호가 된다.

3.4.2 소프트맥스(Softmax) 함수

분류에서 주로 사용하는 함수로 그림과 같이 출력층의 각 뉴런은 모든 입력신호에 영향을 받는다. 특히, 소프트맥스의 출력은 0에서 1사이 실수를 가지며 확률로 해석할 수 있다.



3.5 배치 처리(Batch Process)

다수의 입력을 하나로 묶은 데이터를 배치(batch)라고 합니다. 배치 처리는 큰 배열로 이뤄진 계산을 수행하는데, 컴퓨터에서는 큰 배열을 한번에 계산하는 것이 작은 배열을 여러번 계산하는 것보다 효율적입니다.



4. 신경망 학습

신경망의 특징은 데이터를 보고 학습할 수 있다는 것이다. 데이터에서 학습한다는 것은 가중치 매개변수의 값을 데이터를 보고 자동으로 결정한다는 것을 의미한다.

4.1 훈련 데이터와 시험 데이터

기계학습 문제는 데이터를 훈련 데이터시험 데이터로 나누어서 학습과 실험을 수행한다. 우선, 훈련 데이터만 사용하여 학습하면서 최적의 매개 변수를 찾고, 그 다음 시험 데이터를 사용하여 훈련된 모델의 성능을 평가한다.

*오버피팅(Overfitting) 하나의 데이터 셋에만 지나치게 최적화된 상태를 의미한다. 오버피팅 피하기는 기계학습의 중요한 과제이다.


4.2 손실함수(Loss Function)

신경망 학습에서는 현재 상태를 하나의 지표로 표현한다. 그리고 그 지표를 가장 좋게 만들어주는 가중치 매개변수의 값을 탐색하는 것이다. 신경망 학습에서는 손실함수를 사용하며, 일반적으로 평균 제곱 오차교차 엔트로피 오차를 사용한다.


*미니배치(mini-batch) 학습 신경망 학습 시, 데이터 전체가 아닌 일부를 추려 근사치로 이용하여 학습을 수행하는 것을 의미한다.


*매개변수 갱신 미니배치의 손실함수 크기를 줄이기 위해 각 가중치 매개변수의 기울기(즉, 수치미분)를 계산하고, 손실함수의 크기를 작게 하는 방향으로 가중치 매개 변수를 조금씩 갱신한다. (ex., SGD, 모멘텀, AdaGrad, Adam)


*오차역전법(back-propagation) 가중치 매개변수의 기울기를 효율적으로 계산하는 방법


*가중치 초기값 초기값을 무작위로 설정하는 것이 필요하다. Xavier, He(ReLU에 특화된 초기값) 등을 사용한다.


*배치 정규화(Batch Normalization) 신경망의 각 층이 활성화를 적당히 퍼뜨리도록 강제하는 방법으로, 학습 속도가 빠르고 초기값에 크게 의존하지 않으며 오버피팅을 억제하는 것이 특징이다.


*드롭아웃(Dropout) 오버피팅을 억제하기 위해 뉴런을 임의로 삭제하면서 학습하는 방식으로 앙상블 학습과 비슷한 효과를 나타낸다.




5. 합성곱 신경망(Convolutional Neural Network, CNN)

CNN은 이미지 인식과 음성 인식 등 다양한 곳에서 사용된다. 특히, 이미지 인식 분야에서는 딥러닝을 활용한 기법은 대부분 CNN을 기초로 한다.
CNN의 네트워크는 기존 신경망 구조와 비슷하지만, 합성곱 계층(convolutional layer)과 풀링 계층(pooling layer)이 새롭게 등장한다.


5.1 합성곱 연산

영상처리에서 말하는 필터 연산을 의미한다. 종종, 필터는 커널이라고도 한다.
합성곱 연산은 필터의 윈도우를 일정 간격으로 이동하면서 입력 데이터에 적용하여 입력과 필터에서 대응하는 원소끼리 곱한 후 그 총합을 계산한다. (그림 7-3 참조)




5.2 패딩(Padding)

합성곱 연산을 수행하기 전 입력 데이터 주변에 특정 값으로 채우는 것을 의미한다. 주로 출력의 크기를 조정할 목적으로 사용한다.




5.3 스트라이드(Stride)

필터를 적용하는 위치의 간격을 의미한다. 예를 들어, 스트라이드를 2로 하면 필터를 적용하는 윈도우가 두 칸씩 이동한다. (그림 참조)



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

일반적으로 영상은 [가로x세로x채널]의 3차원 데이터이다. 아래 그림과 같이 채널쪽으로 특징 맵이 여러 개 있다면 입력 데이터와 필터의 합성곱 연산을 채널마다 수행하고, 그 결과를 더해서 하나의 출력은 얻는다.




5.5 풀링 계층

풀링은 가로, 세로 방향의 공간을 줄이는 연산이다. 아래 그림과 같이 2x2영역을 원소 하나로 집약하여 공간 크기를 줄인다. 일반적으로 풀링의 윈도우 크기와 스트라이드는 같은 값으로 설정한다.




댓글 없음:

댓글 쓰기

[Scrap] Zero to Hero: Guide to Object Detection using Deep Learning: Faster R-CNN,YOLO,SSD

Zero to Hero: Guide to Object Detection using Deep Learning: Faster R-CNN,YOLO,SSD https://cv-tricks.com/object-detection/faster-r-cnn-yo...