딥러닝(Deep Learning)은 인공신경망(Artificial Neural Network, ANN)을
기반으로 한 머신러닝의 한 분야로 심층학습이라고도 한다.
다층 신경망(Deep Neural Network, DNN)을 활용하여 데이터를 학습하는 알고리즘의 집합이다.
(1) 딥러닝이란?
1) 개요
딥러닝은 머신러닝의 하위 분야로, 인공신경망을 기반으로 다층 구조의 신경망을 통해 데이터를 학습하는 방식이다.
그림 1. 머신러닝과 딥러닝의 학습 차이
출처: 서지영, 난생처음 인공지능 입문(2판), 한빛미디어, 2024
딥러닝 네트워크는 입력층(Input Layer), 은닉층(Hidden Layers), 출력층(Output Layer)으로 구성된다.
2) 개발 과정
인공신경망(ANN)의 은닉층을 여러 개로 해서 깊게 만든 것이 심층 신경망이며, 이 심층 신경망을 학습시키는 과정을 딥러닝이라고 한다.
숫자를 인식하는 인공지능 개발을 예로 들어 보자.
컴퓨터 관점에서 보면 다음 그림의 왼쪽처럼 숫자 0의 이미지도 픽셀로 되어 있다. 이 이미지에서 각 픽셀은 하나하나의 점으로 되어 있지만, 컴퓨터는 이 점을 (256컬러: 0 ~ 255의 숫자 중 하나의) 숫자로 인식한다. 검은색은 0, 흰색은 255를 나타낸다. 회색은 검은 정도에 따라 1 ~ 254개의 숫자 중 하나로 표현한다.
이 이미지를 인식하는 인공지능은 기본적인 인공신경망으로 만들 수 있다. 픽셀을 입력값으로 인공신경망에 넣으면 된다. 이때 가장 간단한 방법은 다음 그림과 같이 이미지의 픽셀을 한 줄로 세우는 것이다.
2차원 숫자 0(4x4 배열)을 1차원 숫자(1x16 배열)로 변경하기
출처: 길벗
[Note] 픽셀(pixel)
컴퓨터 이미지를 구성하는 하나하나의 점
그런 다음 이 16개의 숫자를 인공신경망에 넣는다. 마지막 결괏값이 0이라고 알려 주면 인공신경망은 스스로 가중치와 편향을 바꾸어 가며 이 이미지가 숫자 0이라는 것을 학습한다.
216개의 숫자를 인공신경망에 넣어 학습한 후 정답 결과 도출
출처: 길벗
머신러닝의 학습 방법에는 지도학습, 비지도학습, 강화학습이 있다. 그렇다면 딥러닝도 학습 방법이 있을까? 딥러닝은 인공신경망을 사용한 머신러닝의 알고리즘 중 하나이다. 이렇게 머신러닝의 다양한 영역 중 하나인 딥러닝에도 지도학습, 비지도학습, 강화학습처럼 다양한 학습 방법이 있다.
앞에서 예를 든 것은 정답이 있는 데이터를 학습했기 때문에 지도학습 방법의 딥러닝이다. 딥러닝에도 비지도학습 방법의 딥러닝과 강화학습 방법의 딥러닝이 있다. 비지도학습 방법의 딥러닝에는 오토인코더, 생성적 적대 신경망(GAN) 등이 있다. 강화학습 방법을 사용한 딥러닝은 Deep Q-Network 딥러닝 모델도 있다.
머신러닝 학습방법 vs 머신러닝 알고리즘
출처: 길벗
5) Word Embedding (워드 임베딩)
워드 임베딩은 단어를 벡터로 표현하는 방법이다.
즉, 기계가 사람의 언어를 이해할 수 있도록 변환해 준다고 이해하면 된다.
대표적인 방법들은 다음과 같다.
다음 그림은 팀 이름을 포함하는 3개의 범주형 변수를 0과 1 값만 가지는 새로운 3개의 변수들로 변환하기 위해
원-핫 인코딩을 수행하는 방법을 보여준다.
How to Perform One-Hot Encoding in Python
출처: https://www.statology.org/one-hot-encoding-in-python/
[Note] 원-핫 인코딩의 의미?
▪ 원(One): 변환된 벡터에서, 해당 범주에 해당하는 위치는 1로 표시.
▪ 핫(Hot): 그 위치의 값이 1일 때, 그 값이 "활발히 활성화(Hot)"됨.
▪ 나머지 위치들: 0으로 채워지므로, 해당 클래스가 "비활성화"됨.
[Note] AI에서 원-핫 인코딩을 사용하는 이유?
▪ 대부분의 AI 알고리즘은 숫자 입력만 처리할 수 있다.
▪ 1, 2, 3과 같은 범주의 순서에 따른 왜곡을 방지한다.
▪ 원-핫 인코딩은 서로 직교하므로, 모델 범주들을 독립적으로 학습시킬 수 있다.
Word2Vec (워드투벡터) 워드투벡터는 비슷한 문맥(context; 콘텍스트)에 등장하는 단어들은
유사한 의미를 지닌다는 이론에 기반하여
단어를 벡터로 표현해 주는 기법이다.
‘주변 단어를 알면 특정 단어를 유추할 수 있다’라는 원리를 기반으로 한 것으로,
대표적인 모델로는 CBOW(Continuous Bag-Of-Words)와 Skip-gram이 있다.
CBOW : 전체 콘텍스트로부터 특정 단어를 예측하는 것
예) 철수는 ◯◯◯를 구매했다.
Skip-gram : 특정 단어로부터 전체 콘텍스트의 분포(확률)를 예측하는 것
예) ◯◯◯ 도서 ◯◯◯
TF-IDF TF-IDF는 단어마다 가중치를 부여하여 단어를 벡터로 변환하는 방법이다.
여기서 사용되는 TF-IDF의 의미는 다음과 같다.
TF (Term Frequency) 특정 문서에서 특정 단어가 등장하는 횟수
예) ‘딥러닝’이라는 단어가 문서에서 3번 등장하면 TF는 3이 됨
DF (Document Frequency) 특정 단어가 등장한 문서의 수
예) ‘딥러닝’이라는 단어가 문서1과 문서2에서 언급되었다면 DF는 2가 됨
IDF (Inverse Document Frequency) DF에 반비례하는 수
TF-IDF의 경우, ‘은’, ‘는’, ‘이’, ‘가’와 같은 조사는 등장 빈도수가 높기 때문에
IDF는 작은 값을 갖게 된다.
따라서 조사의 가중치는 낮다. 즉, TF-IDF를 통해 단어에 대한 중요도를 알 수 있다.
Fasttext Fasttext는 페이스북에서 개발한 워드 임베딩 방법이다.
Fasttext는 단어를 벡터로 변환하기 위해 부분 단어(Sub Words)라는 개념을 도입한다.
부분 단어를 이해하기 위해서는 N-gram을 먼저 이해해야 한다.
N-gram은 문자열에서 N개의 연속된 요소를 추출하는 방법이다.
예를 들어, ‘Best books about AI’를 3-grams(트라이그램; Trigram)를 이용하여
부분 단어로 표현하면 다음과 같다.
"Best books about AI" → "Best books about", " books about AI"
부분 단어를 사용하면 워드투벡터에서 문제가 되는 ‘Out of Vocabulary (모르는 단어)’ 문제를
해결할 수 있기 때문에 임베딩에서 많이 사용되는 모델 중 하나이다.
여기서 Out of Vocabulary 문제란 입력 단어(혹은 문장)가 데이터베이스에 없어서 처리할 수 없는 문제를 뜻한다.
워드 임베딩 관련해서는 GloVe, Elmo 등 다양한 모델이 있으며
성능이 우수하기 때문에 많이 사용되고 있다.
(2) 딥러닝 vs 인공신경망
딥러닝 모델에서는 각 노드를 뉴런(Neuron)이라고 하며, 노드 간 연결을 에지(Edge)라고 한다.
각 뉴런은 입력 값을 받아들여 가중치(weight)를 적용하고, 편향(bias)을 더한 후 활성화 함수를 통과시켜 출력을 생성한다.
DFN은 심층신경망이라고도 부르며,
딥러닝에서 가장 기본으로 사용하는 인공신경망이다.
DFN은 입력층, 은닉층, 출력층으로 이루어져 있다.
이때 중요한 것은 은닉층이 2개 이상이어야 한다.
순방향(Feedforward)이라고 부르는 이유는 데이터가 입력층, 은닉층, 출력층의 순서로 전파되기 때문이다.
하지만 DFN은 가장 일반적인 딥러닝의 형태임에도 치명적인 단점을 가지고 있다.
DFN의 은닉층이 수십 개에서 수백 개라고 할 때,
입력 데이터가 시간 순서에 따른 종속성을 가질 경우 시계열 데이터 처리에 한계가 있다.
(즉, DFN은 데이터 간의 시간적 관계를 고려하지 못하기 때문에,
과거와 현재가 연결된 시계열 데이터 예측에는 적합하지 않다.)
그래서 이러한 문제점을 해결하기 위해 제안된 것이 순환신경망(RNN)이다.
지난 2017년 8월 미국 워싱턴대학교 연구진은 버락 오바마 전 미국 대통령의 가짜 영상을 만들어 화제가 됐다.
다음 그림의 주소(URL)로 접속하여 인공지능이 생성한 얼굴과 실제 얼굴을 구분해 보자.
이 웹 사이트에서는 styleGAN 기술을 적용하여 이미지를 생성한다. 생성 신경망이 개발되기 시작하면서 무엇인가를 새롭고 창의적으로 만들어 낼 수 있는 분야에도 인공지능이 들어오기 시작했다.
인공지능이 어떻게 새로운 것을 만들어 낼 수 있을까? 바로 "생성적 적대 신경망(Generative Adversarial Network, GAN)"과 "디퓨전 모델(diffusion model)기술" 덕분이다.
a) GAN (적대적 생성 신경망; Generative Adversarial Network)
GAN은 두 개의 신경망 모델이 서로 경쟁하면서 더 나은 결과를 만들어 내는 강화학습이다.
특히 이미지 생성 분야에서 뛰어난 성능을 보이고 있다.
화가 반 고흐의 화풍을 모방하여 새로운 그림을 그리는 등 놀라운 결과물들을 보여주고 있는데,
특히 2018년에는 GAN이 생성한 그림이 크리스티 미술품 경매에서 43만 달러에 낙찰되기도 했다.
그렇다면 GAN은 어떤 방식으로 학습할까?
GAN은 기존의 인공신경망과는 다르게 두 개의 인공신경망이 서로 경쟁하며 학습을 진행한다.
이를 생성 모델과 판별 모델이라고 하며,
각각은 서로 다른 목적을 가지고 학습한다.
생성 모델(Generator Model)은 주어진 데이터와 최대한 유사한 가짜 데이터를 생성하고,
판별 모델(Discriminator Model)은 진짜 데이터와 가짜 데이터 중
어떤 것이 진짜 데이터인지를 판별한다.
GAN의 동작 방식은 위조지폐범 판별 문제로 쉽게 이해할 수 있다.
위조지폐범은 판별 모델을 속이기 위한 진짜 같은 위조지폐를 만들고,
판별 모델은 위조지폐범이 만든 위조지폐를 찾아내기 위해 서로 경쟁적으로 학습을 한다.
이 과정을 통해 두 모델의 성능은 꾸준히 향상된다.
경찰과 위조지폐범의 예시
출처: 과학기술정보통신부 블로그
b) Diffusion Model (디퓨전 모델)
이미지 생성의 새로운 지평을 연 디퓨전 모델
디퓨전 모델은 GAN과는 전혀 다른 방식으로 이미지를 생성한다.
GAN이 2개의 인공지능이 서로 경쟁하면서 더 정교한 이미지를 만들어 내는 방식이라면,
디퓨전 모델은 처음부터 이미지를 흐릿하게 만들었다가 다시 원래의 형태로 복원하는 방식이다.
비유를 통해 이 방식을 살펴보자. 유리잔에 잉크 한 방울을 떨어뜨리면 어떻게 될까?
처음에는 잉크가 한곳에 모여 있어 색이 진하지만, 시간이 지나면서 점점 물에 퍼져 흐려진다.
결국 잉크는 물 전체로 확산되어 어디가 원래 잉크였는지 구별할 수 없게 된다.
디퓨전 모델도 이와 같은 방식으로 동작한다.
처음에는 분명한 형태를 가진 이미지가 있다.
그런데 이 이미지에 점차 노이즈(잡음)를 추가하면서 데이터를 흐릿하게 만든다.
마지막에는 온통 랜덤한 잡음만 남게 된다.
이제 이미지를 선명하게 만드는 과정, 즉 다시 원래의 잉크 방울을 복원하는 과정을 살펴보자.
실제 현실에서는 원래의 잉크 방울을 복원하기가 쉽지 않다.
하지만 디퓨전 모델은 이러한 과정을 논리적으로 수행하기 때문에 가능한다.
노이즈만 남은 상태에서 조금씩 잡음을 제거하면서
원래의 이미지를 복원하는 방법을 학습하는 것이다.
마치 덧칠된 그림을 지우개로 하나씩 지워 가면서 원래의 선을 찾아내는 것과 비슷하다.
이 과정을 수천수만 번 반복하다 보면 처음에는 무작위한 노이즈에서 시작했지만
점차 윤곽이 드러나고, 결국에는 완전히 새로운 이미지를 생성할 수 있다.
웹 브라우저에서 TensorFlow Playground에 접속한다.
초기 화면에는 데이터(DATA), 특성(FEATURES), 은닉층(HIDDEN LAYERS), 출력(OUTPUT) 영역이 배치되어 있으며,
분류(classification)를 기본 문제로 제공한다.
텐서플로 플레이그라운드로 딥러닝 이해하기
출처: https://medium.com/
2) 시작 버튼 클릭하기
▶ 버튼을 누르면 학습이 진행되며 에포크(epoch) 카운터가 증가한다. 학습 중에는 손실값의 변화를 통해
모델 수렴 여부를 확인할 수 있다. 손실이 일정 수준에서 더 이상 줄어들지 않으면 과대적합 혹은 한계에 도달한 것이다.
[Note] 1 에포크(epoch) = 데이터셋 전체 1회 학습
3) 출력 부분 살펴보기
OUTPUT 패널에는 결정 경계와 데이터 분포가 실시간으로 갱신된다. 학습 데이터와 검증 데이터는 서로 다른 색으로 표기되며,
Training loss와 Test loss 곡선을 통해 과적합 여부를 가늠할 수 있다.
검증 손실이 학습 손실과 급격히 벌어지면 과적합 신호다.
4) 신경망의 구조 설계하기
은닉층의 개수와 각 층의 뉴런 수는 모델의 표현력을 좌우한다. 층과 뉴런을 늘리면 복잡한 경계를 학습할 수 있으나,
계산량 증가와 과적합 위험이 동반된다. 2‒3개 층, 층당 8‒12개 뉴런을 기준으로 시작한 뒤, 성능을 확인하며 조정한다.
5) 데이터 입력 형태 선택하기
기본 특성은 x₁, x₂이며, 필요에 따라 x₁·x₂, x₁², x₂²,
sin(x₁), sin(x₂) 등 파생 특성을 추가할 수 있다.
Ratio of training to test data(훈련/검증 비율), Noise(노이즈), Batch size, Epoch을 조절한 뒤
REGENERATE를 눌러 새 데이터를 생성한다.
6) 복잡한 형태의 데이터 구분하기
비선형 경계가 필요한 데이터의 대표 예로 나선형(spiral)이 있다. 데이터셋에서 Spiral을 선택하고
적절한 은닉층 구성과 파생 특성을 더하면 나선형에 가까운 결정 경계를 학습할 수 있다.
핵심: 입력 특성 선택이 성능을 크게 좌우한다. 무작정 층과 뉴런을 늘리는 것보다, 문제 구조에 맞는 파생 특성 설계가
더 큰 개선을 제공한다.
7) 텐서플로 플레이그라운드 2배로 즐기기
화면 상단의 하이퍼파라미터를 적절히 조정하면 탐구 효율이 높아진다.
Learning rate — 가중치 갱신 폭을 결정한다. 너무 크면 발산, 너무 작으면 수렴 지연이 발생한다.
Activation — 비선형성을 도입하는 함수다. ReLU, Tanh, 시그모이드 등으로 경계의 매끈함과 수렴 특성이 달라진다.
Regularization — 과적합을 줄이기 위한 항이다. L2 정규화를 사용하면 가중치가 과도하게 커지는 것을 억제한다.
Regularization rate — 정규화 강도(λ). 값을 키우면 경계가 과도하게 매끈해질 수 있으므로 손실 곡선을 보며 조정한다.
Problem type — 분류(classification)와 회귀(regression) 중 선택한다. 본 장에서는 주로 분류를 다룬다.