Untitled

[머신 러닝/딥 러닝] 인공신경망 (Artificial Neural Network, ANN)의 종류와 구조 및 개념 본문

지능형시스템/머신 러닝

[머신 러닝/딥 러닝] 인공신경망 (Artificial Neural Network, ANN)의 종류와 구조 및 개념

CHML 2019. 12. 23. 19:47
그림으로 보는 인공신경망의 종류 및 구조

그림 1은 다양한 인공신경망 (Artificial Neural Network, ANN)의 종류와 개념을 시각적으로 보여주며, 원본 그림은 The Asimov Institute에서 확인할 수 있다. 이 글에서는 그림 1의 구조를 바탕으로 머신 러닝 분야에서 활발히 이용되고 있는 몇 가지 인공신경망들의 기본적인 개념을 소개한다.

 

그림 1. Neural network zoo (출처: https://www.asimovinstitute.org/neural-network-zoo).

 

1. Deep Feedforward Network (DFN)

DFN은 딥 러닝에서 가장 기본적으로 이용되는 인공신경망이다. 그림에서도 볼 수 있듯이 DFN은 입력층, 은닉층, 출력층으로 이루어져 있으며, 보통은 2개 이상의 은닉층을 이용한다. DFN에서 입력 데이터는 입력층, 은닉층, 출력층의 순서로 전파된다.

 

그림 2. DFN의 구조.

구조에서 알 수 있듯이 DFN은 현재 입력된 데이터가 단순히 입력층, 은닉층, 출력층을 거치면서 예측값으로 변환된 뒤에 현재 데이터에 대한 정보는 완전히 사라진다. 즉, 입력되었던 데이터들의 정보가 저장되지 않기 때문에 입력 순서에 따라 데이터 간의 종속성이 존재하는 시계열 데이터를 처리는 데는 한계점이 존재한다. 이러한 문제점을 해결하기 위해 제안된 것이 아래에서 소개할 Recurrent Neural Network (RNN)이다.

 

2. Recurrent Neural Network (RNN)

Elman, Jeffrey L. “Finding structure in time.” Cognitive science 14.2 (1990): 179-211, [link].

RNN은 시계열 데이터 (예를 들어, 문자열 및 센서 데이터)와 같이 시간적으로 연속성이 있는 데이터를 처리하기 위해 고안된 인공신경망이다. 시계열 데이터나 문자열은 일반적으로 앞에 입력된 데이터 (이전 시간의 데이터)에 의해 뒤에 입력된 데이터에 대한 예측이 영향을 받는다. 따라서, 단순히 현재 입력된 데이터를 입력층, 은닉층, 출력층의 순서로 전파하기만 하는 DFN으로는 시계열 데이터에 대한 정확한 예측이 어렵다.

 

그림 3. RNN의 구조.

RNN은 그림 3과 같이 은닉층의 각 뉴런에 순환 (recurrent) 연결을 추가하여 이전 시간에 입력된 데이터에 대한 은닉층의 출력을 현재 시간의 데이터를 예측할 때 다시 은닉층 뉴런에 입력한다. 이러한 방식으로 RNN은 이전 시간에 입력된 데이터를 같이 고려하여 현재 시간에 입력된 데이터에 대한 예측을 수행한다. 그러나 그림 3과 같이 단순한 형태의 RNN은 역전파 (backpropagation) 알고리즘을 기반으로 오랜 시간에 걸쳐 경향성이 나타나는 데이터를 학습할 때 gradient가 비정상적으로 감소하거나 증가하는 vanishing/exploding gradient problem이 발생한다는 문제점이 있다. 이를 해결하기 위해 제안된 것이 다음에 설명할 Long Short-Term Memory (LSTM)이다.

 

3. Long Short-Term Memory (LSTM)

Hochreiter, Sepp, and Jürgen Schmidhuber. “Long short-term memory.” Neural computation 9.8 (1997): 1735-1780, [link].

LSTM은 RNN에서 발생하는 vanishing/exploding gradient problem을 해결하기 위해 제안되었으며, 현재까지 제안된 RNN 기반의 응용들은 대부분 이 LSTM을 이용하여 구현되었다.

 

그림 4. LSTM의 구조.

LSTM은 gradient 관련 문제를 해결하기 위해 forget gate, input gate, output gate라는 새로운 요소를 은닉층의 각 뉴런에 추가했다. 그림 4를 보면 기본적인 RNN의 구조에 memory cell이 은닉층 뉴런에 추가된 것을 볼 수 있으며, memory cell은 추가된 3개의 gate를 의미한다. LSTM에서 각 gate의 역할은 아래와 같다.

 

  • Forget gate: 과거의 정보를 어느정도 기억할지 결정한다. 과거의 정보와 현재 데이터를 입력 받아 sigmoid를 취한 뒤에 그 값을 과거의 정보에 곱한다. 따라서, sigmoid의 출력이 0일 경우에는 과거의 정보를 완전히 잊고, 1일 경우에는 과거의 정보를 온전히 보존한다.
  • Input gate: 현재의 정보를 기억하기 위해 만들어졌다. 과거의 정보와 현재 데이터를 입력 받아 sigmoid와 tanh 함수를 기반으로 현재 정보에 대한 보존량을 결정한다.
  • output gate: 과거의 정보와 현재 데이터를 이용하여 뉴런의 출력을 결정한다.

 

4. Autoencoder

Bourlard, Hervé, and Yves Kamp. “Auto-association by multilayer perceptrons and singular value decomposition.” Biological cybernetics 59.4-5 (1988): 291-294 [link].

데이터와 그에 대한 예측값 모두를 이용하여 입력 데이터에 대한 예측을 수행하도록 하는 것을 지도 학습 (supervised learning)이라고 한다. 앞에서 소개한 DFN, RNN, LSTM을 비롯하여 대부분의 인공신경망은 지도학습 방식을 이용한다. 그러나 autoencoder는 이와 다르게 비지도 학습 (unsupervised learning)을 기반으로 학습된다. 따라서, autoencoder의 학습에서는 예측값이 필요하지 않다.

 

그림 5. Autoencoder의 구조.

Autoencoder는 입력층, 은닉층, 출력층을 거쳐 입력 데이터가 그대로 다시 출력되도록 동작한다. 왜 입력을 그대로 다시 출력하는 인공신경망을 이용하는지에 대해 의문을 가질 수 있다. 그러나 autoencoder는 출력층의 출력이 아니라, 은닉층의 출력을 이용하는 것에 목적이 있다. Autoencoder에서 은닉층의 출력은 다음과 같은 의미와 활용을 갖는다.

 

  • Data compression: 일반적으로 autoencoder에서는 은닉층 뉴런의 수를 입력층이나 출력층 뉴런의 수보다 작게 설정하기 때문에 은닉층의 출력은 입력 데이터에 대한 압축 데이터로 볼 수 있다.
  • Latent representation: 은닉층은 그 자체로 입력 데이터를 잘 표현하기 위한 새로운 공간을 형성하기 때문에 은닉층의 출력은 입력 데이터에 대한 latent representation으로 활용될 수 있다.

딥 러닝에서는 autoencoder를 주로 입력 데이터에 대한 latent representation을 생성하기 위해 이용되고 있으며, 다양한 연구에서 autoencoder의 latent representation을 이용한 예측 성능 향상을 실험적으로 보여주었다.

 

5. Variational Autoencoder (VAE)

Kingma, Diederik P., and Max Welling. “Auto-encoding variational bayes.” arXiv preprint arXiv:1312.6114 (2013), [link].

VAE는 기존 autoencoder에 확률 개념을 추가한 모델이다. Autoencoder에서는 입력 데이터를 그대로 복원하기 위해 학습이 진행되었다면, VAE에서는 입력 데이터의 확률 분포를 근사하기 위해 학습이 진행된다. 간단하게 이해하자면, autoencoder는 입력 데이터를 사상하기 위한 함수를, VAE는 입력 데이터를 생성하는 확률 분포의 확률밀도함수를 학습한다고 생각할 수 있다. 이 과정에서 VAE는 계산 및 학습의 편의성, 범용성 등을 위해 입력 데이터의 확률 분포를 Gaussian이라고 가정한다. VAE는 입력 데이터가 생성되는 확률 분포 자체를 학습하기 때문에 generative model로도 활용할 수 있다.

그림 6. VAE의 구조.

 

6. Convolutional Neural Network (CNN)

LeCun, Yann, et al. “Gradient-based learning applied to document recognition.” Proceedings of the IEEE 86.11 (1998): 2278-2324, [link].

CNN은 아마도 가장 유명한 인공신경망 중 하나일 것이다. CNN은 생명체의 시각 처리 방식을 모방하기 위해 convolution이라는 연산을 인공신경망에 도입함으로써 이미지 처리 분야에서 기존의 머신 러닝 알고리즘들을 압도하였다. 2016년에 공개된 알파고에서도 CNN 기반의 딥 러닝 알고리즘이 이용되었다. CNN의 자세한 구조와 학습 방법은 이 글에서 볼 수 있다.

 

그림 7. CNN의 구조.

또한, 그림 7에서 볼 수 있듯이 CNN에서는 입력 및 출력 부분에서 뉴런들이 느슨하게 연결되어 있다. 이러한 구조적 특징에 의해 CNN은 DFN이나 RNN에 비해 학습해야하는 가중치의 수가 적으며, 이 덕분에 학습 및 예측이 빠르다는 장점이 있다. 최근에는 CNN의 강력한 예측 성능과 계산상의 효율성을 바탕으로 이미지뿐만 아니라 시계열 데이터에도 CNN을 적용하는 연구가 활발히 진행되고 있다.

 

7. Deep Residual Network (DRN)

He, Kaiming, et al. “Deep residual learning for image recognition.” Computer Vision and Pattern Recognition (CVPR), 2016 IEEE Conference on. IEEE, 2016, [link].

DRN은 "인공신경망에서 계층이 많아질 수록 성능이 증가하는가?"라는 딥 러닝의 근본적인 질문에서부터 시작한다. DRN 논문의 실험에서는 계층이 많아질 수록 성능이 향상되지 않았으며, 오히려 성능이 하락하는 문제까지 발생했었다. 인공신경망이 깊어질 수록 성능이 하락하는 문제는 계층이 많아질 수록 학습이 어려워진다는 점 때문에 발생하는데, 이를 해결하기 위해 DRN 논문의 저자들은 skip connection이라는 것을 제안했다. 일반적인 인공신경망에서는 데이터가 계층의 순서에 따라 순차적으로 전파되는 것에 비해 DRN에서는 데이터가 그림 8과 같이 다음 계층뿐만 아니라, 더 이후의 계층까지 직접 전달된다.

 

그림 8. DRN의 구조.

DRN은 주로 CNN과 결합하여 CNN에 skip connection이 추가된 형태로 이용되며, 이러한 인공신경망을 ResNet이라고 한다. ResNet은 다양한 이미지 처리 분야에서 뛰어난 성능을 보여주었다.

 

8. Generative Adversarial Network (GAN)

Goodfellow, Ian, et al. “Generative adversarial nets.” Advances in Neural Information Processing Systems (2014), [link].

요즘 가장 인기 있는 인공신경망을 하나 선택하라면 아마도 대부분은 GAN을 말할 것이다. GAN은 VAE와 같은 generative model이며, 특히 이미지를 생성하는데 있어서 뛰어난 성능을 보여주고 있다. 이외에도 데이터셋에 없는 사람의 얼굴을 스스로 생성하거나, 고흐의 화풍을 모방하여 새로운 그림을 그리는 등 놀라운 결과물들을 보여주었다. 최근에는 GAN이 생성한 그림이 크리스티 경매에서 43만 달러에 낙찰되기도 했다.

 

그림 9. GAN의 구조.

기존의 인공신경망과는 다르게 GAN은 두 개의 인공신경망이 서로 경쟁하며 학습이 진행된다. 이러한 두 개의 인공신경망을 generator와 discriminator라고 하며, 각각은 서로 다른 목적을 가지고 학습된다. Generator는 주어진 데이터를 보고 최대한 데이터와 비슷한 가짜 데이터를 생성한다. Discriminator는 진짜 데이터와 generator가 만든 가짜 데이터가 입력되었을 때, 어떤 것이 진짜 데이터인지를 판별한다. 이러한 GAN의 동작은 그림 10과 같은 위조 지폐 판별에 관한 문제로 쉽게 생각해볼 수 있다.

 

그림 10. GAN의 개념과 동작.

Generator는 discriminator를 속이기 위한 위조 지폐를 만들고, discriminator는 진짜와 가짜 지폐를 구분한다. 이 과정을 계속하여 반복되면 discriminator는 점점 진짜와 가짜 지폐를 잘 구분하게 될 것이고, 이에 따라 generator는 더욱 진짜 같은 가짜를 만들게 될 것이다. 따라서, 이러한 generator와 discriminator의 경쟁을 통해 두 모델의 성능이 모두 향상되는 결과를 얻을 수 있다.

 

 

9. 그 외의 인공신경망

최근에는 그림 1에서 소개된 것 이외에도 다양한 인공신경망이 제안되었다. 가장 대표적인 것으로는 그래프 데이터 처리를 위한 Graph Neural Network (GNN)과 생물체를 더욱 정교하게 묘사한 Spiking Nueral Network (SNN)이 있다.

 

Graph Convolutional Netweork (GCN)

Kipf and Welling, Semi-Supervised Classification with Graph Convolutional Networks, International Conference on Learning Representations (2017), [link].

기존의 인공신경망은 기본적으로 입력 데이터가 Euclidean space에 존재함을 가정하고 있다. 즉, 입력 데이터는 반드시 벡터 또는 행렬의 형태로 표현될 수 있어야 했다. 그러나 소셜 네트워크, 관계형 데이터베이스, 분자 구조 등과 같은 데이터들은 Euclidean space에 표현이 불가능한 그래프의 형태로 나타나기 때문에 그래프 데이터 처리를 위한 새로운 인공신경망이 필요했다. 이러한 문제점을 해결하기 위해 제안된 개념이 graph neural network (GNN)이다.

 

그림 11. Graph coonvolution을 통한 그래프 데이터 분석.

GNN을 구현하는 것에는 다양한 방법이 존재할 수 있지만, 가장 많이 이용되는 것은 spectral graph theory를 기반으로 설계된 Graph Convolutional Network (GCN)이다. GCN은 그림 11과 같이 graph convolution을 이용하여 non-Euclidean space에 존재하는 그래프 데이터를 euclidean space에 존재하는 node embedding vector들로 변환한다. 그 다음, 생성된 node embedding vector들은 fully-connected layer에 입력되어 node나 그래프에 대한 예측이 이루어진다. GCN에 대한 자세한 내용은 이 글에 설명되어 있다.

 

Spiking Neural Network (SNN)

Maass, Wolfgang (1997). "Networks of spiking neurons: The third generation of neural network models". Neural Networks. 10 (9): 1659–1671, [link].

SNN은 기존 인공신경망보다 더욱 세밀하게 생물학적 뉴런을 묘사하기 위해 제안되었다. 그림 12와 같이 SNN에서의 각 뉴런은 완전 연결된 (fully-connected) 것이 아니라, 실제 생물의 뇌처럼 연관된 동작을 하는 뉴런들끼리만 연결되어 있다. 이에 더하여 기존의 인공 뉴런은 실수값을 출력했는데, SNN에서의 뉴런은 생물학적 뉴런의 전기 신호처럼 spike의 발생 여부를 나타내는 0 또는 1의 값을 출력한다. SNN 뉴런의 또 다른 특징은 뉴런 자체에서 시간에 따라 출력값이 변한다는 것이다. 이는 신경망 자체의 복잡성 증가 없이도 시간에 종속적인 데이터에 대한 처리가 가능함을 의미한다.

 

그림 12. SNN의 구조 및 개념. Connection의 크기는 연결의 강도와 비례.

SNN은 여러 연구에서 기존 인공신경망보다 유용하다는 것이 입증되었지만, 아직 SNN을 효과적으로 학습시킬 수 있는 최적화 알고리즘이 개발되지 않았다. 또한, SNN에서는 뉴런마다 시간에 따른 출력값의 변화를 지속적으로 계산해줘야 하기 때문에 많은 계산량이 요구된다. 이러한 한계점들로 현재는 SNN보다 기존 인공신경망이 주로 이용되고 있다.

 

 

3 Comments
댓글쓰기 폼