딥러닝(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 (워드 임베딩)
워드 임베딩은 단어를 벡터로 표현하는 방법이다.
즉, 기계가 사람의 언어를 이해할 수 있도록 변환해 준다고 이해하면 된다.
대표적인 방법들은 다음과 같다.
One-hot Encoding (원-핫 인코딩) 원-핫 인코딩은 N개의 단어를 각각 N차원의 벡터로 표현하는 방식이다.
단어가 포함되는 자리에는 1을 넣고 나머지 자리에는 0을 넣는 방식이다.
[Note] 원-핫 인코딩의 의미
원(One): 변환된 벡터에서, 해당 범주에 해당하는 위치는 1로 표시.
핫(Hot): 그 위치의 값이 1일 때, 그 값이 "활발히 활성화(Hot)"됨.
나머지 위치들: 0으로 채워지므로, 해당 클래스가 "비활성화"됨.
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)이다.
순방향 신경망
출처: 나무위키
2) RNN (순환 신경망; Recurrent Neural Network)
RNN: 기억을 갖는 신경망 모델
RNN는 (forward NN이나 CNN과 달리)
데이터의 순차구조로 인식하기 위해 데이터를 시간 순서대로 하나씩 입력 받는다.
출처: https://prod.velog.io/@cosmicdev/RNN
a) RNN (순환 신경망; Recurrent Neural Network)
딥러닝의 알고리즘 중에는 연속된 값을 예측할 수 있는 알고리즘이 순환 신경망
(Recursive Neural Network, RNN)이다.
순환 신경망은 재귀 신경망이라고도 한다.
재귀(recursive)란 반복된다(또는 되풀이된다)라는 의미이다.
일반적인 인공 신경망(ANN)에서는 신경망 구성에 따라 가중치가 한 방향으로 이동하며 변한다.
하지만 순환 신경망에서는 가중치 변화가 한 방향으로 이동하는 것이 아니라,
다시 자기 자신에게 돌아오는 형태를 띤다.
즉, 같은 자리에서 계속 반복적으로 가중치가 수정된다.
일반신경망 vs 순환신경망
출처: https://hyun-tori.tistory.com/81
그러면 이러한 순환 신경망은 어디에 사용될까?
연속 데이터 결과를 예측하거나 분류할 때 사용된다.
순환 신경망이 기존의 일반적인 인공 신경망보다 뛰어난 점은
바로 전후 관계를 학습한다는 것이다.
일반적인 데이터 패턴을 학습하는 인공 신경망에서 한 단계 더 나아간 학습 방식이다.
순환 신경망은 전후 관계에 대한 패턴을 학습하기 때문에 다양한 곳에서 사용된다.
언어 번역에 사용된다. 전 세계에는 수많은 언어가 있다.
그리고 언어를 번역해 주는 다양한 앱과 서비스가 있다.
이러한 서비스는 순환 신경망을 이용해서 한 단계 더 발전하고 있다.
Hot Dog의 뜻은?
물론 ‘뜨거운 개’라는 뜻일 수도 있지만
우리가 먹는 음식인 ‘핫도그’를 뜻할 수도 있다.
그럼 어떻게 Hot Dog가 뜨거운 개인지, 음식인 핫도그인지를 구별할 수 있을까?
이럴 때는 문맥(Context, 글의 흐름)을 살펴보아야 한다.
사람들은 문맥을 살펴보며 이것이 뜨거운 개인지 핫도그인지를 쉽게 구별한다.
하지만 형태만 알고 있는 인공지능이라면 그 의미를 잘 구별해 내기가 어렵다.
또 ‘이’, ‘그’, ‘저’ 같은 대명사가 무엇을 의미하는지 문맥을 보지 않고서는 쉽사리 파악할 수 없다.
문맥을 학습할 수 있는 인공지능을 만드는 데 바로 이 순환 신경망을 사용한다.
실제로 구글의 번역 기술에 순환 신경망 기술을 사용하여 기존 방식보다
훨씬 뛰어난 번역 성능을 보여 주었다.
우리 주변에는 시간의 흐름 또는 연속된 관계를 가진 데이터가 많다.
이러한 데이터를 사용하여 인공지능 모델을 만들 때 바로 순환 신경망을 사용한다.
RNN은 시계열 데이터와 같이 시간적으로 연속성이
있는 데이터를 처리하기 위해 고안된 인공신경망이다.
그렇다면 어떤 데이터를 시계열 데이터라고 하는가?
시계열 데이터는 일정한 시간 동안 관측되고 수집된 데이터를 의미한다.
시계열 데이터가 딥러닝 신경망의 입력값으로 사용될 때는
데이터의 특성상 앞에 입력된 데이터(이전 시간의 데이터)가
뒤에 입력된 데이터에 영향을 미친다.
그래서 입력된 데이터를 단순히 입력층, 은닉층, 출력층의 순서로 전파하기만 하는
DFN으로는 시계열 데이터를 정확히 예측할 수 없다.
그렇다면 RNN 구조는 DFN과 어떻게 다른가?
RNN은 은닉층의 각 뉴런에 순환(recurrent) 구조를 추가하여
이전에 입력된 데이터가 현재 데이터를 예측할 때 다시 사용될 수 있도록 하였다.
따라서 현재 데이터를 분석할 때 과거 데이터를 함께 고려하여 정확한 데이터 예측이 가능하다.
하지만 RNN 역시 신경망 층이 깊어질수록(은닉층 수가 많을수록)
먼 과거의 데이터가 현재에 영향을 미치지 못하는 문제가 발생한다.
이를 ‘장기 의존성(Long-Term Dependency)’ 문제라고 하며,
이를 해결하기 위해 제안된 것이 LSTM이다.
연속된 데이터 관계를 파악할 수 있는 순환 신경망을 체험해 보자.
스케치 RNN은 이름에서도 알 수 있듯이 순환 신경망을 사용한다.
스케치 RNN에서 사용하는 데이터는 퀵 드로우(Quick Draw)의 데이터셋이다.
퀵 드로우는 사용자가 그린 그림이 무엇인지 인공지능이 맞히는 게임이다. 퀵 드로우 데이터셋은 퀵 드로우를 체험하는 수많은 사람이 그린 그림 데이터로 구성되어 있으며, 어떤 순서로 그림을 그렸는지 포함되어 있다. 예를 들어 고양이를 그린다면 사람들은 대부분 얼굴을 그리고 귀를 그린 후 눈, 코, 입, 수염을 그리는 등 모두 같지는 않겠지만 일정한 순서에 따라서 그린 것이다.
이러한 순서 또한 연속된 데이터이다. 스케치 RNN은 이러한 순서 데이터를 학습했다. 사람들이 그린 순서대로 그림들을 학습했기 때문에 그림을 그리는 과정을 예측할 수 있다.
그래서 고양이를 그릴 때 누군가 얼굴을 그리면 자동으로 귀를 그려 준다. 또 귀를 그리면 자동으로 눈을 그려 준다. 물론 꼭 이 순서대로 하지는 않으므로 귀를 그리면 얼굴을 그리고, 눈과 코, 입을 그려 준다.
b) LSTM(장단기 메모리 순환 신경망; Long Short-Term Memory)
LSTM는 RNN과는 다르게 신경망 내에 메모리를 두어 먼 과거의 데이터도 저장할 수 있도록 하였다.
RNN vs LSTM
a: RNN은 내부 상태(메모리)를 사용하여 입력 시퀀스를 처리한다.
b: 장단기 메모리(LSTM) 네트워크는 RNN의 변형으로,
과거 데이터를 기억하기 위해 장기 메모리가 추가된다.
출처: DOI:10.1101/2020.05.03.075184
또한 입출력을 제어하기 위한 소자(논리적인 장치; device; 素子)인 게이트(Gate)를 두었다.
LSTM에서 각 게이트의 역할은 다음과 같다.
입력 게이트(Input Gate) 현재의 정보를 기억하기 위한 소자이다.
과거와 현재 데이터가 시그모이드 함수와 하이퍼볼릭 탄젠트 함수를 거치면서
현재 정보에 대한 보존량을 결정한다.
망각 게이트(Forget Gate) 과거의 정보를 어느 정도까지 기억할지 결정하는 소자이다.
과거와 현재 데이터가 시그모이드 함수를 거쳐 나온 값을 과거의 정보와 곱한다.
따라서 시그모이드 함수의 출력이 0일 경우 과거의 정보는 완전히 잊혀지고,
1일 경우에는 과거의 정보가 온전히 보존된다.
출력 게이트(Input Gate) 출력층으로 출력할 정보의 양을 결정하는 소자이다.
현재까지 제안된 RNN 기반의 응용 서비스들은 대부분 LSTM을 이용하여 구현되었다.
게이트는 입력 게이트, 출력 게이트, 망각 게이트가 있다.
출처: https://ljyong.tistory.com/47
c) GRU (Gated Recurrent Unit)
RNN, LSTM, GRU
출처: 10.17977/um018v6i22023p215-250
LSTM이 RNN보다 훨씬 강력한 모델이기는 하지만, 단점도 있다.
계산량이 많아 속도가 느리고, 복잡한 구조 때문에 구현이 어렵다는 것이다.
그래서 등장한 모델이 바로 GRU(Gated Recurrent Unit)이다.
GRU는 LSTM과 비슷한 기능을 하지만 구조가 더 단순해 빠르게 동작한다.
LSTM과 GRU는 비슷한 시기에 등장했지만 서로 스타일이 다른 모델이다.
마치 필기할 때 다른 사람처럼 말이다.
LSTM이 ‘꼼꼼한 필기형’이라면, GRU는 ‘빠른 요약형’이다.
LSTM은 모든 중요한 내용을 필기장에서 정리하고 필요한 때 꺼내 본다.
하지만 필기가 많아 시간이 오래 걸린다.
그에 비해 GRU는 중요한 정보만 간략하게 요약해서 기록한다.
그래서 복잡한 정보를 짧고 빠르게 기억하고 활용할 수 있다.
GRU는 LSTM보다 단순하기 때문에 암기 구조와 원리가 짧고 빠르다.
즉, 중요한 부분만 간단하게 정리해서 보관하는 방식이다.
GRU는 LSTM보다 계산량이 적기 때문에 빠른 속도가 중요한 경우에 많이 사용된다.
GRU는 LSTM보다 더 가볍고 빠르게 정보를 기억하는 방식으로 발전했다.
여전히 RNN 기반의 구조적 한계를 벗어나진 못했다.
GRU와 LSTM은 입력된 정보를 효과적으로 기억하는 데 집중한 모델이기에,
번역처럼 새로운 문장을 만들어야 하는 작업에는 최적화되지 않았다.
‘잘 기억하는 것’과 ‘잘 생성하는 것’은 다르다.
3) CNN (합성곱 신경망; Convolutional Neural Network)
실제 이미지 인식 인공지능을 딥러닝 방법으로 만들 때는 합성곱 신경망(Convolutional Neural Network, CNN)을 사용한다. 인공신경망이 사람의 뇌가 작동하는 원리를 보고 만들었듯이, 합성곱 신경망 또한 시각 세포의 작동 원리를 본떠서 만들었다.
앞서 만들던 숫자 인식 인공신경망을 사용하여 똑바로 선 숫자 3을 학습시킨 인공지능은 기울어진 3을 보고 3으로 인식하지 못할 가능성이 있다. 하지만 우리 눈은 그것이 기울어졌든 아니든 그것이 3이라는 것을 안다.
우리 눈은 전체에 대한 패턴을 인식하는 계층과 부분에 대한 패턴을 인식하는 계층이 서로 얽혀 있기 때문이다. 합성곱 신경망은 바로 이러한 원리에 착안하여 개발되었다. 앞에서 다양한 이미지의 픽셀값을 한 줄로 세워서 학습시켰다면, 합성곱 신경망은 이미지를 특정한 영역별로 추출하여 학습시킨다는 특징이 있다.
예를 들어, 다음 그림에서 살펴본 픽셀로 된 숫자 0을 2×2, 즉, 4칸씩 뽑아낸다. 이러한 과정을 거쳐 부분의 특징을 찾아낼 수 있다.
그런 다음 추출한 데이터를 인공신경망에 넣는다. 그리고 마지막 결괏값이 0이라고 알려 주면 인공신경망은 스스로 가중치와 편향을 바꾸어 가며 이 이미지가 숫자 0이라는 것을 학습한다.
전체와 부분을 함께 학습하는 CNN
출처: 길벗
실제로는 좀 더 복잡한 과정을 거쳐야 정확한 합성곱 신경망을 완성할 수 있지만, 이 그림은 합성곱 신경망이 데이터 각 부분의 특징을 잘 나타내는 신경망이라는 것을 나타내고자 단순하게 표현했을 뿐이다.
합성곱 신경망은 이미지의 특징을 파악하는 데 특화된 딥러닝 방법입니다. 예를 들어 필기체 인식이나 차량 번호판 인식, 의료용 인공지능 개발, 물체 인식 등 이미지를 인식하는 다양한 분야에서 사용합니다.
[Note] 합성곱(Convolution) 연산
합성곱 신경망을 정확하게 구현하려면 부분 데이터를 추출하는 과정에 좀 더 복잡한 단계가 필요하다. 더 자세히 설명하면 2×2 형태로 추출한 데이터를 어떤 값(필터, filter)으로 곱하고 특징적인 값을 찾아내는 과정이 필요하다.
이때 추출한 데이터를 필터와 곱할 때 합성곱 연산을 한다. 그래서 이 신경망 이름이 합성곱 신경망이다. 이러한 합성곱 연산을 사용하면 이미지의 어떤 (국소) 영역에 어떤 특징과 패턴이 있는지 알아낼 수 있다.
CNN은 인간의 시각 처리 방식을 모방한 신경망이다.
이미지 처리가 가능하도록 합성곱(Convolution) 연산을 도입하였다.
2016년에 공개된 알파고에도 CNN 기반의 딥러닝 모델이 이용되었을 정도로
CNN은 인공신경망 중에서도 가장 발전된 형태이다.
CNN의 가장 큰 장점은 필터를 학습을 통해 스스로 만든다는 것이다.
출처: https://aidev.co.kr/deeplearning/782
그렇다면 CNN에서 이미지 처리는 어떤 방식으로 진행될까?
CNN은 다음과 같이 합성곱층, 풀링층, 완전연결층으로 구성되어 있다.
합성곱 신경망 구조
출처: https://doi.org/10.3390/electronics12112402
합성곱층(Convolutional Layer) 합성곱층의 역할은 이미지를 분류하는 데 필요한 특징(Feature) 정보를 추출하는 것이다.
그렇다면 특징 정보는 어떻게 추출할 수 있을까? 바로 필터를 이용하면 된다.
필터(Filter)란 이미지의 특징을 찾아내기 위한 파라미터이며,
커널(Kernel)이라고도 한다.
필터는 하나 이상 사용할 수 있으며, 필터를 여러 개 사용하면 한 번에 여러 특징을 추출할 수 있다.
합성곱층에 필터가 적용되면 다음 그림과 같이 이미지의 특징들이 추출된 ‘특성 맵(Feature Map)’이라는 결과를 얻을 수 있다.
필터가 적용된 합성곱층
출처: https://mouryasashank.medium.com/convolutional-neural-networks-4a211e97c96f
풀링층(Pooling Layer) 풀링층은 합성곱층의 출력 데이터(특성 맵)를 입력으로 받아서
출력 데이터인 활성화 맵(Activation Map)의 크기를 줄이거나
특정 데이터를 강조하는 용도로 사용된다.
풀링층을 처리하는 방법으로는 최대 풀링(Max Pooling)과 평균 풀링(Average Pooling), 최소 풀링(Min Pooling)이 있다. 다음 그림과 같이 정사각 행렬의 특정 영역에서 최댓값을 찾거나 평균값을 구하는 방식으로 동작합니다.
풀링층 처리 방법
출처: https://doi.org/10.1016/j.jestch.2020.01.006
완전연결층(Fully-connected Layer) 완전연결층은 합성곱층과 풀링층으로 추출한 특징을 분류하는 역할을 한다.
CNN은 합성곱층에서 특징만 학습하기 때문에 DFN이나 RNN에 비해 학습해야 하는 가중치의 수가 적어
학습 및 예측이 빠르다는 장점이 있다.
최근에는 CNN의 강력한 예측 성능과 계산상의 효율성을 바탕으로 이미지뿐만 아니라
시계열 데이터에도 적용해 보는 연구가 활발히 진행되고 있다.
지금까지 배운 CNN을 정리하면 다음과 같다.
일반적인 인공신경망 모델은 완전연결층으로 이루어져 있다.
문제는 완전연결층 특성상 1차원 데이터만 입력으로 받는다는 것이다.
컬러 사진 데이터는 3차원 데이터이므로, 3차원 데이터를 완전연결층으로 구성된 신경망으로
학습시키려면 3차원의 데이터를 1차원으로 평면화시켜야 한다.
이때 이미지에 대한 공간 정보가 유실되어 특징을 잘 추출하지 못하면 학습에 비효율적일 수 있는데,
CNN은 이러한 문제를 해결할 수 있는 모델이다.
4) Generative NN (생성 신경망)
지난 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) 중 선택한다. 본 장에서는 주로 분류를 다룬다.