신경망의 업그레이드(?) 순서 : NN -> MLP -> DNN ->CNN,RNN
NN (Neural network) (ANN)
NN은 인공 신경망의 의미를 가지고 있다.
이는 사람의 뉴런을 묘사하여 만든 알고리즘으로 딥러닝의 기초가 된다.
이론적으로는 일정 임계값을 넘으면 값을 전달하는 구조로 되어있다.
기본 모양은 다음과 같다.

input 과 output 사이에 은닉층(hidden layer, 히든레이어)의 구조를 가지고 있다.
히든 레이어를 통과하며 활성화 함수를 통해 weight와 bias값을 찾아 예측을 하는 방법이다.
Perceptron (퍼셉트론)
NN에서 히든 레이어가 하나인 신경망 구조이다.
이 구조는 AND와 OR의 문제만 풀 수 있고 XOR의 문제를 해결할 수 없다.
MLP (Multiple Layer Percentron)
퍼셉트론을 여러개 쌓아 히든 레이어를 2개 이상 가지는 신경망이다.
역전파(Backpropagation)을 이용해 학습을 하기 때문에 XOR 문제를 해결할 수 있다.
신경망에서 발생할 수 있는 주 문제점은 Overfitting과 Gradient vanishing이 있다.
역전파
역박향으로 오차를 전파시키며 각 레이어의 가중치를 업데이트 하며 최적의 학습 결과를 찾아가는 방법.
쉽게 얘기하면 레이어를 지나며 학습할 때 계산한 오차를 가지고 계산값을 업데이트한다.
Overfitting
학습 데이터에만 과도하게 학습되어 테스트 데이터에서 좋지 못한 성능을 보이는 현상이다.
Gradient vanishing
레이어를 깊게 쌒아 학습이 되지 않고 gradient가 0으로 수렴하며 소실되는 현상을 뜻한다.
이는 좋은 초기화를 하거나 dropout을 하는 등으로 어느정도 해결이 가능하다.
DNN (Deep Neural Network)
보통 여러 히든 레이어를 쌓으면 DNN으로 부른다.
기울기에 따라 답이 있는 곳을 찾아 내려가는 gradient descent (경사 하강법) 을 사용하여 답을 찾아나가는 방식이다.
위에서 얘기했듯이 여러 레이어를 지나며 활성화 함수(Activation Function)를 이용하여 학습한다.
활성화 함수란 일정 기준을 기반으로 최종 출력 신호를 다음 뉴런으로 보낼지 말지 결정하는 것이다.
DNN에서는 Overfitting을 주의하여 모델을 생성해야 한다. 모델을 생성할 땐 train데이터를 학습한 모델을 test데이터에 적용하여 결과를 확인하는데, train데이터에 완벽하게 학습될 경우 데이터가 조금씩 다른 test데이터에서는 오히려 안좋은 성능을 보이기 때문이다. (이것이 오버피팅)
Overfitting을 줄이는 대표적인 방법중 하나는 Dropout이다.
Dropout
학습시 신경망에서 일부 유닛을 제거함으로써 Overfitting을 줄이는 방법이다.
유닛은 위 그림에서 선들로 보면 된다.
테스트시에는 모든 유닛을 사용한다. 이는 한가지의 알고리즘이 아닌 다양한 알고리즘을 사용하는 Model Ensemble과 같은 효과를 낸다.
DNN은 보통 [Fully Connected -> 활성함수 -> Dropout] 를 반복하여 뉴럴 네트워크가 이루어진다. ( [ ] 가 하나의 레이어)
또한 의미상 DNN = Multi-layer Perceptron = Feedforward NN = FC (Fully Connected Layer) 를 가진다.
Activation Function (활성 함수) 의 종류
1. sigmoid
값이 0~1로 정규화 되어있다.
하지만 레이어를 거칠수록 작은 미분값이 곱해지기 때문에 Gradient Vanishing을 야기한다.
2. tanh
값이 -1~1로 정규화 되어있다.
sigmoid와 다르게 함수의 중심값이 0으로 옮겨져 sigmoid보다 Gradiet vanishing이 적지만 그래도 발생한다는 문제를 가진다.
3. ReLU (Rectified Linear Unit)
양수에서 Linear Function, 음수에서 0의 값을 가진다.
미분값이 0 또는 1이기에 Gradient Vanishing이 발생하지 않고, non-linear 구조기에 레이어를 깊게 쌓을 수 있다. 지수 함수가 없기에 학습 속도가 빠르다는 장점도 가진다.
하지만 음수값을 입력받을 경우 역전파시 0이 가중치에 곱해짐에 의해 노드가 손실되는 dying ReLU가 발생한다는 문제를 가진다.
그래도 ReLU는 뉴럴 네트워크에서 가장 주로 사용되는 활성 함수이다.
4. Leaky ReLU
dying ReLU 현상을 해결하기 위해 음수의 경우 작은 기울기를 부여한다.
기타. ELU, Maxout... 가 있다.
활성화 함수 중 보편적으로 사용되는 것은 ReLU지만 이것이 항상 제일 좋은 결과값은 내는 것은 아니다.
CNN (Convolution Neural Network)
시각적 이미지 분석에 주로 사용되는 인공 신경망으로 DNN의 한 종류이다.
DNN의 위치에 대한 한계점을 극복한 모델이다. DNN은 위치와 관계없이 모두 동일한 중요도를 가지며 픽셀 이동, 크기 변형, 회전 등에 있어서 모두 새로운 학습 데이터로 처리해 버린다. 이는 학습 시간이 오래걸리고 모델의 크기가 커지는 등의 단점을 가진다.
이에 비해 CNN은 공간 정보를 유지하기 때문에 변환 불변성 특성을 가지고, 전처리를 거의 사용하지 않는다는 장점이 있다.
DNN과 다른 CNN의 학습 방법은 필터를 사용하는 것이다. 이미지보다 작은 크기의 필터를 이미지 위에서 위치를 조금씩 옮겨가며 결과를 뽑아낸다. 이 결과를 토대로 계속 학습을 진행한다.
CNN은 보통 [convolution -> 활성함수 -> pooling] -> FC 를 거친다. ( [ ] 가 레이어 )
conv에서 필터를 적용한다.
maxpooling으로 이미지의 최댓값만을 뽑아 작은 이미지로 변형한다. (= downsampling) 이때 피처의 개수는 동일하며 이미지의 크기는 줄어든다.
결과값 출력을 위해 dense를 사용하며 dense에는 1차원의 값만 적용이 가능하다.
사용 용어는 다음과 같다.
1. convolution
filter 연산에서 영상의 특정 feature(피처)를 추출하는데 사용된다.
2. Activation Map (피처맵)
입력 영상에 컨볼루션 레이어를 통과시킨 뒤의 결과물이다. feature의 모음으로도 볼 수 있다.
3. pooling layer
피처맵을 리사이징 한다. 오버피팅을 방지한다.
4. FC layer
모두 연결된 NN 레이어이다. Dense 레이어로도 불린다. 1차원으로만 수행이 가능하다. (공간 정보를 잃는다.)
5. Receptive Field (수용 영역)
출력 레이어의 뉴런 하나에 영향을 미치는 입력 뉴런들의 공간 크기이다.
RNN (Recurrent Neural Network)
RNN (순환 신경망) 또한 DNN의 한 종류로 볼 수 있으며, 차이점은 시퀀스(순서) 데이터를 모델링 할 수 있다는 점이다.
RNN은 지금까지의 입력 데이터를 요약한 'hidden state'를 가진다. 이 hidden state가 이전 데이터를 기억하여 시퀀스 데이터의 처리를 가능하게 한다.
따라서 파라미터로는
입력(X)에서 히든레이어(H)로 보내는 Wxh,
전 단계 히든레이어(Hn-1)에서 다음 히든레이어(Hn)로 보내는 Whh,
히든레이어(H)에서 출력(Y)로 보내는 Why가 있다.
수식은 다음과 같다.
은닉층의 수식 : Ht = tanh(Wx*Xt + Wh*Ht-1 + b)
출력층의 수식 : Yt = f(Wy*Ht + b) (f는 비선형 활성화 함수)
RNN은 backpropagation(역전파)으로 loss값을 구한다. 역전파 설명 링크 : ratsgo.github.io/deep%20learning/2017/05/14/backprop/
metamath1.github.io/cnn/index.html
하지만 RNN이 가지는 단점은 관련 정보간 거리가 멀면 역전파시 gradient가 줄어 학습 결과가 크게 저하되는 vanishing gradient 문제를 가진다는 것이다.
이를 해결하기 위해 고안된 방법이 hidden state를 조절할 수 있도록 cell을 추가한 LSTM이다.
RNN을 주로 사용하는 분야는 자연어 처리를 예로 들 수 있다. 입력과 출력을 변형하여 원하는 모델을 생성할 수 있다.
예를 들어 ①문장에 담긴 감정 분석(긍.부정)은 many-to-one으로 여러 단어 입력을 감정 분석 결과인 하나의 출력으로 변환한다.
②번역 은 many-to-many 모델이다. 여러 단어 입력을 다른 언어로 번역하여 여러 단어 출력으로 결과를 생성한다.
③이미지 설명 은 one-to-many 모델이다. 하나의 이미지를 입력으로 받아 여러 단어로 구성된 문장을 출력한다.
여기서 문장은 여러 단어로 구성된 하나의 문장이므로 many로 취급된다.
Embedding -> RNN(LSTM) -> Dense
'AI > Model (Study)' 카테고리의 다른 글
[Openpose] 오픈소스 사용 (0) | 2022.05.05 |
---|---|
[GAN] 다양한 GAN의 이론 설명 (0) | 2022.01.31 |