DNN (Deep Neural Network)
- DNN은 딥러닝을 위해 사용되는 인공신경망
- 입력층과 출력층 사이에 여러가지의 은닉층으로 이루어진 인공신경망을 일컬음
DNN 구성 요소
유닛/노드/뉴런 (Unit, Node, Neuron)
- Tensor를 입력받아 tensor를 출력하는 데이터 처리 모듈
- Input -> Output
- 입력 값에 Weight(가중치)를 곱하고 bias(편향)을 더한 뒤 활성화 함수를 거쳐 출력한다.
레이어/층(Layer)
- Input Layer: 입력값들을 받아 Hidden Layer에 전달하는 노드들로 구성된 Layer.
- Output Layer: 예측결과를 출력하는 노드들로 구성된 Layer
- Hidden Layer
- Input Layer와 Output Layer사이에 존재하는 Layer.
- 데이터의 패턴을 찾는 역할을 한다.
- 대부분 Layer들은 가중치(weight)를 가짐 (dropout, pooling과 같이 가중치가 없는 layer도 있음)
- weight가 모델이 데이터를 이용해 학습할 대상이다.
- 많이 사용되는 Layer의 예
- Fully connected layer (Dense layer)
- Convolution layer
- Recurrent layer
- Embedding layer
- https://www.tensorflow.org/api_docs/python/tf/keras/layers
모델 (Network)
- Layer를 쌓아(연결하여) 만드는 네트워크
- 이전 레이어의 출력을 input으로 받아 output을 주는 층을 순서대로 쌓음
- 적절한 network 구조(architecture)를 찾는 것은 과학 보다는 예술의 경지! 많은 경험이 필요
- 기존의 잘 작동한 구조를 기반으로 구현하는 방식으로 접근
- Layer를 깊게 쌓으면 딥러닝이라고 한다.
DNN의 모델 학습
손실함수(Loss function, 비용함수)
- Model을 통해 나온 예측값(prediction)와 실제 데이터(output)의 차이를 수량화하는 함수
- 훈련하는 동안 최소화될 값으로 이 값을 바탕으로 파라미터(가중치와 편향)을 업데이트한다.
해결하려는 문제의 종류에 따라 표준적인 Loss function이 존재함
- Binary classification (이진 분류)
- 두 개의 클래스를 분류
- 예) 문장을 입력하여 긍정/부정 구분
- binary_crossentropy를 loss function으로 사용
- Multi-class classification (다중 클래스 분류)
- 두 개 이상의 클래스를 분류
- 예) 이미지를 0,1,2,...,9로 구분
- categorical_crossentropy를 loss function으로 사용
- Regression (회귀)
- 연속형 값을 에측
- 예) 주가 예측
- Mean squared error를 loss function으로 사용
활성 함수 (Activation Function)
- 입력을 받아 활성, 비활성을 결정하는데 사용
- 각 유닛이 입력결과를 처리한 후 출력하기 위해 거치는 함수
- 같은 층(layer)의 모든 유닛들은 같은 활성 함수를 가진다.
- 최종 출력 레이어의 경우 문제유형에 따른 표준 활성화 함수가 존재함
- 은닉층 (Hidden Layer)의 경우 Relu 함수 계열을 많이 사용한다.
- 문제의 결과가 직선을 따르는 경향이 있다면 선형함수를 주로 이용한다.
- 2개를 분류하는 경우는 Vanishing Gradient Problem때문에 sigmoid는 잘 사용하지 않고 ReLU와 그 변형된 활성화함수를 주로 사용한다.
- 3개 이상을 분류하는 경우는 주로 Softmax와 그 변형된 활성화함수를 주로 사용한다.
주요 활성함수(Activation Function)
- Sigmoid (logistic function)
- 0<sigmoid(z)<1
- 비용함수에서 최소지점을 Global minimum이라고 하고 그 외 지점을 Local minimum이라고 한다
- Local minimum을 벗어나기 위한 방법은 다음과 같다.
- Start 지점을 변경해서 여러 번 트레이닝을 한다.
- Momentum을 크게 해서 local minimum을 넘어가게 한다.
- Noise를 줘서 local minimum을 넘어가게 한다.
- 초기 딥러닝 모델에서 활성함수로 사용되었으나 Gradient vanishing(소실) 문제 때문에 사용되지 않는다.
- binary classification 문제의 output layer에서 사용
- Hypterbolic tangent
- -1<tanh(z)<1
- Sigmoid의 이동한 형태
- Output이 0을 중심으로 분포하므로 sigmoid보다 학습에 효율적
- ReLU(Rectified Linear Unit)
- 최적화 과정에서 gradient가 0과 가까워져 수렴이 느려지는 문제를 해결
- Sigmoid의 경우에는 입력값이 아무리 커도 신경망 노드의 출력은 1을 넘지 못했지만, ReLU 함수는 이런 제한이 없음
- 음수를 모두 0으로 처리하는 문제가 있다. (Dead ReLU)
- Leaky ReLU, ELU 등 변화된 형태도 있음
- Softmax
- 각 class의 score를 정규화 하여 각 class에 대한 확률값으로 변환(sum=1)
- 소프트맥스 출력의 각 원소는 0.0 이상 1.0 이하의 실수이며, 노드의 출력을 모두 합한 값이 항상 1이 된다.
- 소프트맥스 함수는 모든 출력 값의 상대적인 크기를 고려한 값을 출력하기 때문에, Multi-class classification (다중 클래스 분류)에 적합
- 소프트맥스 함수는 이미지가 어떤 레이블에 속하는지 근거(evidence)를 계산하고, 근거들을 각 레이블에 대한 확률로 변환하는 것
- 벡터의 각 원소를 정규화하기 위해 소프트맥스 함수는 입력 값을 모두 지수 값으로 바꿈(지수 함수 가중치를 더 커지게 하는 효과)
- 소프트맥스는 가중치의 합이 1이 되도록 정규화하여 확률분포를 만들어 준다.
- 예측이 잘 이루어지면 1에 가까운 출력은 하나만 있고 다른 출력은 0에 가까워짐
Model Optimizer (최적화 방법)
- Loss function을 기반으로 최적의 weight를 어떻게 업데이트 할지 결정하는 알고리즘
- 경사하강법과 오차역전파 알고리즘을 이용해 weight를 최적화한다.
Gradient Decent (경사하강법)
- Loss Function의 미분(Gradient)를 이용하여 weight를 update하는 방법
- Batch Gradient Decent (배치 경사하강법)
- 경사하강법을 이용해 weight들을 업데이트 한다.
- 한번 반복시 전체 학습데이터의 오차를 다 계산해 그 평균값을 기반으로 weight를 최적화한다.
- 속도가 느리다. 데이터가 클 경우 메모리가 부족할 수 있다.
- Mini Batch Stochastic Gradient Decent (미니배치 확률적 경사하강법)
- 한번 반복 시 전체 데이터를 다 사용하지 않고 지정한 데이터 수 (batch size) 만큼 마다 오차를 계산해 weight를 업데이트 한다.
- 계산은 빠른 장점이 있지만 최적값을 찾아 가는 방향이 불안정하다.
오차 역전파(Back Propagation)
오차역전파란?
- Loss 부터 꺼꾸로 한계단씩 미분해 gradient 값을 구하고 이를 Chain rule(연쇄법칙)에 의해 곱해가면서 Weight에 대한 gradient를 구하는 방법
SGD를 기반으로 한 주요 옵티마이저
- 학습식을 보면 수정할 수 있는 부분이 Learning Rate 와 Gradient 부분이라는 것을 알 수 있습니다. 그래서 Optimizer 의 발전 과정은 어떤 부분을 수정하느냐에 따라 나누어집니다.
- 방향성을 개선한 최적화 방법
- Momentum
- Nag
- 학습률을 개선한 최적화 방법
- Adagrad
- RMSProp
- AdaDelta
- 방향성 + 학습률 개선 최적화 방법
- Adam
- Nadam
- 방향성을 개선한 최적화 방법
728x90
반응형
'Data Analysis & ML > Deep Learning' 카테고리의 다른 글
[Deep Learning][딥러닝] DNN 성능개선 (0) | 2020.11.09 |
---|---|
[Deep Learning] DNN 분류 (DNN Classification) (0) | 2020.09.23 |
[Deep Learning] DNN 회귀분석 (Tensorflow Dataset) (0) | 2020.09.23 |
[Deep Learning][딥러닝] 딥러닝 구현 (0) | 2020.09.22 |
[Deep Learning][딥러닝] 딥러닝 개요 (0) | 2020.09.22 |