[딥러닝] 핵심 개념&핵심 용어 쉽게 알아보자! (가능한)
안녕하세요, 오늘 주제는 [딥러닝]입니다.
2016년 구글 딥마인드에서 만든 딥러닝 컴퓨터 알파고와 이세돌의 바둑 대결은 많은 대중들에게 딥러닝이라는 기술이 얼마나 발전되었는지 체감적으로 느끼게 해준 다소 충격적인 사건이었을 것 같습니다. 이후로 딥러닝이라는 기술이 일상생활에 어떻게 활용될 수 있는지 대중들의 관심이 높아진 것 같습니다. 그래서 오늘은 딥러닝이라는 어려운 기술 개념을 처음 보는 일반인에게 설명한다는 가정하에 최대한 쉬운 용어로 설명해보려 합니다.
앞서 언급한 알파고vs이세돌 바둑대결의 사례가 딥러닝이 대중적 유명세를 얻게된 계기로 인용된다면, 딥러닝과 머신러닝이 어떤 차이가 있는지 설명할 때 언급되는 대표적인 사례가 ‘고양이와 개 분류하기’입니다. 고양이와 개 이미지 데이터를 분류할 때, 머신러닝에는 고양이와 개를 분류할 특성(feature)을 인간이 분류작업을 해줘야 한다면 딥러닝은 특성을 분류하지 않아도 중요 특성을 학습해서 결과값을 도출합니다. 인간은 쉽게 고양이와 개를 분류할 수 있지만, 막상 어떤 특성 때문에 고양이와 개로 분류할 수 있는지 그 특성들을 분석하고 자동적으로 분류할 수 있는 시스템을 만드는 일은 인간에게 결코 쉬운 일이 아닙니다. 그러나 딥러닝은 이러한 문제를 인간보다 훨씬 수월하게 수행할 수 있습니다.
현재 데이터사이언스 학습을 하며 알게된 선에서 나름대로 정리한 딥러닝 관련 핵심개념/용어 맵입니다. 번호를 붙인 용어 위주로 설명하겠습니다.
(1) 신경망(Neural Network) 기초 — 퍼셉트론(Perceptron)
인공지능 딥러닝을 구성하는 기본 요소는 ‘퍼셉트론(Perceptron)’이라고 하는 ‘인공신경망’입니다. 퍼셉트론은 우리 뇌의 신경망 구조를 본뜬 구조를 갖는데, (입력노드)에서 여러개의 입력 데이터를 받아서 (은닉노드)에서 어떤 계산을 한 다음 (출력노드)으로 하나의 출력값을 내보냅니다. 1개의 출력값을 가지면 ‘단층 퍼셉트론’, 2개 이상의 출력값을 가질 수 있는 것을 ‘다층 퍼셉트론(Multi Layer Perceptron)’으로 부릅니다. 이러한 인공신경망에서 은닉노드로 이뤄진 층을 은닉층으로 부르며 은닉층이 2개이상일때부터 딥러닝이라고 부릅니다.
(2) 신경망(NN: Neural Network) 학습원리
딥러닝에서는 데이터 학습 과정에서 2가지 방향성을 가지는데, 바로 순전파(Forward Propagation)와 역전파(Back Propagation)입니다.
- 입력층->은닉층->출력층으로 이어지는 방향이 ‘순전파’이고 이때 출력층을 거쳐 나온 출력값(예측값)과 실제 값의 차이를 ‘손실(에러)’로 계산합니다. 한번에 예측값과 실제값이 완전히 일치하는 경우는 딥러닝을 사용할 필요가 없는 경우이기 때문에, 처음 손실값은 실제값보다 큰 경우가 대부분입니다.
- 따라서 손실을 최소화하는 학습이 필요하고, 이때 출력층->은닉층->입력층으로 역방향으로 계산하여 손실을 최소화할 수 있도록 가중치를 업데이트하는데 이러한 학습방법을 ‘역전파(Back Propagation)’라고 부릅니다. 역전파 계산과정은 편미분 계산식을 활용해 복잡하게 이뤄지기 때문에 아래 간략한 계산과정 요약 이미지 및 참고영상(3Blue1Brown-역전파 미적분, 딥러닝) 첨부하고 설명은 생략하겠습니다.
- 가중치 감쇠(Weight Decay) : 딥러닝 학습과정에서 여러번의 학습을 시킬 때 과적합(overfitting)이라는 문제가 발생할 수 있습니다. 과적합은 학습에서는 결과가 좋지만, 실제 테스트 데이터를 넣었을 때 결과가 좋지 않은 상황을 일컫습니다. 이러한 과적합 문제를 줄이기 위해 학습 시 계산에 사용되는 가중치에 penalty를 부여하여 가중치를 감쇠시키는데 이 방법을 가중치 감쇠(Weight Decay)라고 부릅니다.
- 학습률(Learning Rate) : 학습률도 가중치 감쇠처럼 학습과정의 과적합 문제를 줄이기 위해 활용되는 하이퍼파라미터의 일종입니다. 학습률을 줄여서 과적합을 피하는 방식으로 사용합니다.
- 경사하강법(Gradient Descent): 역전파 학습에서 손실함수 최소화를 나타내는 용어로 손실함수의 ‘기울기(Gradient)’를 ‘최소화(Decsent)’한다는 의미입니다.
(3) CNN(Convolutional Neural Network)
CNN은 ‘합성곱 신경망’으로 불리는데, 계산과정에서 합성곱(Convolution)을 사용하기 때문입니다. 이미지 데이터 분석을 예시로 합성곱 층(Convolution Layer)의 계산과정을 도식화해보면 아래와 같습니다.
- 원본 데이터에서 필터(filter: 가중치 집합으로 이루어져 가장 작은 특징을 잡아내는 창)가 순차적으로 합성곱을 진행하며 출력값을 계산하게 되는데, 이때 출력값은 필터의 크기만큼 압축됩니다.
- 이렇게 압축되는 과정을 pooling이라고도 하는데, 기본적으로 convolution layer를 통과하면 pooling이 되지만 별도로 poolilng 계산방식을 지정할 수 있습니다. max(최대값) / mean(평균값) / min(최소값) pooling 등이 있습니다.
- 기본적으로 필터는 1칸씩 움직이지만 얼만큼 움직일 수 있는지 결정하는 하이퍼파라미터를 stride라고 합니다. stride=2를 주면 2칸씩 띄어서 계산하게 되고, 그만큼 계산값의 크기는 줄어듭니다. 그런데 이렇게 합성곱을 계산할 때마다 출력값이 줄어든다면, 딥러닝의 장점인 ‘여러 개의 은닉층 계산을 통한 정확도 상승’을 활용하기가 어렵게 됩니다. 쓸 수 있는 데이터가 매우 작아져서 유의미한 분석이 어렵기 때문입니다. 그럴 때 활용할 수 있는 것이 Padding(패딩)이라는 개념입니다.
- Padding은 데이터의 외각에 특정 값(0혹은 다른 값)을 줘서 Convolution Layer를 통과하더라도 데이터의 크기가 동일하게 유지되도록 도와줍니다.
(4) RNN (Recurrent Neural Network)
순환신경망으로도 불리는 RNN은 시계열 데이터처럼 시간에 따라 변화하는 데이터를 학습시키기 위한 딥러닝입니다.
- RNN: 과거의 출력데이터를 다시 참조하는 학습모델이라고 하여 ‘순환’신경망으로 불립니다.
- LSTM: RNN모델에 GATE를 추가한 것이 LSTM(Long Short Term Memory)모델입니다. Forget Gate — Input Gate — Output Gate 로 이뤄져있는데 각각 Forget Gate에서는 과거의 정보를 얼마나 유지할 지, Input Gate에서는 새로운 입력 데이터를 얼만큼 사용할 지, Output Gate에서는 얼만큼 출력할 지를 결정합니다.
- GRU(Gated Recurrnet Unit)은 LSTM의 3가지 게이트 중 Forget Gate와 Input Gate만 사용하는 좀 더 간소화된 모델입니다.
- 활용예시: 앞서 RNN은 시계열 데이터 활용에 용이하다고 말씀드렸듯이, 아파트 가격 예측, 주가예측 등과 같은 분석에 활용될 수 있습니다.
추가로, 자연어처리(NLP)분야에서 Attention 이라는 개념을 활용해 나오는 여러 딥러닝 플랫폼들이 있습니다.
- 기계신경망 번역(Transformer) 모델: 자연어 문장 데이터를 한번에 입력하되 순서정보를 입력해 번역하는 모델입니다. 음성을 텍스트로 혹은 텍스트를 음성으로 변환시키는 모델과 텍스트 데이터를 다른 언어로 번역하는 모델 등이 있습니다.
- 구글의 양방향 언어모델 버트(Bert): 사전훈련 언어모델. 기존 자연어처리에 사용되어왔던 앙상블 모델보다 더 좋은 성능을 내고 있어 관심을 받고 있는 언어모델이라고 합니다.
- Open AI 의 단방향 언어모델 GPT-2/3: 범용 AI 선두주자로 불리며 인간의 음성을 듣고 인간과 매우 유사하게 대화할 수 있는 AI 컴퓨터로 매우 큰 이슈가 되었습니다. 거짓말도 지어낼 수 있는 수준의 인공지능을 갖췄다고 합니다.
(5) GAN(Generative Adversarial Networks)
마지막으로 설명드릴 개념은 GAN입니다.
GAN을 설명하기에 앞서, GAN 모델이 나오게 된 시작으로 볼 수 있는 Auto encoder의 개념 이해가 필요합니다.
- Auto encoder : 오토인코더는 원본 데이터의 수많은 특성(feature) 중 가장 중요한 특성(Latent Feature)을 찾아내기 위한 모델로, Encoder 부분에서 원본 이미지를 압축하여 특성을 추출하고, 다시 Decoder 부분에서 원본 크기만큼의 이미지로 재현한 다음, 그 재현된 이미지를 실제 원본과 비교하면서 학습하여 가장 중요한 특성을 Code layer 층에서 추출합니다.
- GAN: GAN은 오토인코더의 개념을 역발상으로 활용한 모델입니다. Decoder 에서 이미지를 재현하는 기능을 가져와 Generator(생성자)라고 이름을 붙여 이미지를 생성하는 역할을 만들고, 생성된 이미지를 Descriminator(감별자)라는 신경망에서 실제 이미지와 비교해 ‘진짜/가짜’ 여부를 감별합니다. 이 2개의 신경망이 서로 경쟁하며 학습을 하게 되고, 더이상 가짜와 진짜를 감별할 수 없을때까지 학습을 시키면 두 신경망의 성능이 평형상태에 이르며 학습이 완료됩니다. DCGAN(Deep Convolutional GAN)으로도 불립니다.
- styleGAN : 고화질의 이미지를 생성할 수 있는 GAN모델의 일종입니다. 아래는 styleGAN모델로 만든 가상 이미지인데, 실제 인물의 사진이라고 해도 충분히 믿을만큼 고화질의 이미지가 나오는 것 같습니다.
사실 딥러닝의 여러 개념들을 정확하게 이해하고 한번에 코드로 뚝딱! 해치운다는 것은 매우 어려운 것 같습니다. 다만, 인공지능 분야에서 가장 핫한 성과를 내고 있는 분야이기 때문에 주요 개념과 용어를 이해해보는 것으로도 학습 자체에 의미가 있는 시간이었던 것 같습니다.
이상으로 [딥러닝 핵심 개념/용어 쉽게 알아보기] 글을 마칩니다.
감사합니다.