SF영화가 현실로 바뀌었습니다.
2016년에는 인공지능이 바둑에서 이세돌 9단에게 승리해 전 세계적으로 큰 화제가 되었고, 2024년에는 노벨 물리학상과 화학상이 인공지능 선구자들에게 돌아갔습니다. 스마트폰은 사람의 말을 이해하고 통화 중 실시간 ‘기계 통역’도 하며, 카메라와 센서를 탑재한 ‘무인 자동차’와 같이 사람의 생명을 지키는 자율 주행 자동차도 빠르게 발전하고 있습니다.
이처럼 인공지능은 다양한 분야의 일을 실수 없이 처리하고, 어떤 경우엔 사람보다 더 잘 수행하기도 합니다. 우리의 세계는 인공지능의 발전으로 새로운 세계로 거듭나고 있습니다. 이런 발전과 눈부신 세계의 이면에 ‘딥러닝’이라는 기술이 있습니다.
‘딥러닝’은 인공 신경망(ANN)을 기반으로 한 기계 학습 기술로, 다층 구조를 활용해 데이터에서 패턴을 학습하고 복잡한 문제를 해결하는 방식입니다. 이미지, 음성, 자연어 등 수많은 분야에서 뛰어난 성능을 발휘하고 있죠. 딥러닝이 할 수 있는 일을 몇 가지 소개해 보겠습니다.
사물 검출은 이미지 속에 담긴 사물의 위치와 종류(클래스)를 알아내는 기술입니다. 위 그림에서 보듯 사물 검출은 사물 인식보다 어려운 문제입니다. 지금까지 본 사물 인식은 이미지 전체를 대상으로 했는데, 사물 검출에서는 이미지 어딘가에 있을 사물의 위치까지 알아내야 합니다. 게다가 한 이미지에 여러 사물이 존재할 수도 있습니다.
이런 사물 검출 문제는 CNN을 기반으로 한 기법이 몇 가지 제안되었습니다. 이 기법들이 발군의 성능을 보여 사물 검출에도 딥러닝이 효과적임을 시사하고 있습니다.
CNN을 이용하여 사물 검출을 수행하는 방식은 몇 가지가 있는데, 그중에서도 R-CNN Regions with Convolutional Neural Network이 유명합니다.
R-CNN 그림에서 주목할 곳은 2.후보 영역 추출과 3.CNN 특징 계산입니다. 먼저 사물이 위치한 영역을 (어떤 방법으로) 찾아내고, 추출한 각 영역에 CNN을 적용하여 클래스를 분류하는 것이죠.
여기서 이미지를 사각형으로 변형하거나 분류할 때 서포트 벡터 머신 SVM 을 사용하는 등 실제 처리 흐름은 다소 복잡하지만, 큰 틀에서는 이 두 가지 처리(후보 영역 추출과 CNN 특징 계산)로 구성됩니다.
후보 영역 추출(사물처럼 보이는 물체를 찾아 처리)에는 컴퓨터 비전 분야에서 발전해온 다양한 기법을 사용할 수 있고, R-CNN 논문에서는 Selective Search 기법을 사용했습니다. 최근에는 이 후보 영역 추출까지 CNN으로 처리하는 Faster R-CNN 기법도 등장했습니다. Faster R-CNN은 모든 일을 하나의 CNN에서 처리하기 때문에 아주 빠릅니다.
분할 segmentation 이란 이미지를 픽셀 수준에서 분류하는 문제입니다. 위와 같이 픽셀 단위로 객체마다 채색된 지도 supervised 데이터를 사용해 학습합니다. 그리고 추론할 때 입력 이미 지의 모든 픽셀을 분류합니다.
지금까지 구현한 신경망은 분류를 이미지 전체를 대상으로 해왔습니다. 이를 픽셀 수준에 적용 하려면 어떻게 하면 될까요?
신경망을 이용해 분할하는 가장 단순한 방법은 모든 픽셀 각각을 추론하는 것입니다. 예를 들어 어떤 직사각형 영역의 중심 픽셀의 클래스를 분류하는 신경망을 만들어서, 모든 픽셀을 대상으로 하나씩 추론 작업을 실행합니다. 짐작한 대로 이런 식으로는 픽셀의 수만큼 순전파 처리를 해야 하여 긴 시간이 걸립니다(정확히는 합성곱 연산에서 많은 영역을 쓸데없이 다시 계산하는 문제가 생깁니다).
이러한 낭비를 줄여주는 기법으로 FCN Fully Convolutional Network이 고안되었습니다. 이는 단 한 번의 순전파 처리로 모든 픽셀의 클래스를 분류해주는 놀라운 기법입니다.
Fully Convolutional Network는 직역하면 ‘합성곱 계층만으로 구성된 신경망’이라는 말입니다. 일반적인 CNN이 완전연결 계층을 이용하는 반면, FCN은 이 완전연결 계층을 ‘같은 기능을 하는 합성곱 계층’으로 바꿉니다. 사물 인식에서 사용한 신경망의 완전연결 계층에서는 중간 데이터의 공간 볼륨(다차원 형태)을 1차원으로 변환하여 한 줄로 늘어선 노드들이 처리 했으나, FCN에서는 공간 볼륨을 유지한 채 마지막 출력까지 처리할 수 있습니다.
FCN은 그림에서 보듯 마지막에 공간 크기를 확대하는 처리를 도입했다는 것도 특징입니다. 이 확대 처리로 인해 줄어든 중간 데이터를 입력 이미지와 같은 크기까지 단번에 확대할 수 있습니다. FCN의 마지막에 수행하는 확대는 이중 선형 보간 bilinear interpolation 에 의한 선형 확대입니다. FCN에서는 이 선형 확대를 역합성곱 deconvolution 연산으로 구현해내고 있습니다.
사진을 주면 그 사진을 설명하는 글(사진 캡션)을 자동으로 생성하는 위의 예시같이 컴퓨터 비전과 자연어를 융합한 재미있는 서비스도 있습니다. 그림의 첫 번째 사진에서는 사진을 보고 ‘비포장도로에서 오토바이를 타는 사람(A person riding a motorcycle on a dirt road)’이라는 문장을 자동으로 생성했습니다. 설명과 사진이 정확히 일치합니다. 오토바이를 타고 있음은 물론 거친 비포장도로라는 것까지 ‘이해’하고 있다니 놀랍지 않습니까?
딥러닝으로 사진 캡션을 생성하는 방법으로는 NIC Neural Image Caption 모델이 유명합니다. NIC는 심층 CNN과 자연어를 다루는 순환 신경망 Recurrent Neural Network (RNN)으로 구성됩니다. RNN은 순환적 관계를 갖는 신경망으로 자연어나 시계열 데이터 등의 연속된 데이터를 다룰 때 많이 활용합니다.
NIC는 CNN으로 사진에서 특징을 추출하고 그 특징을 RNN에 넘깁니다. RNN은 CNN이 추출한 특징을 초깃값으로 해서 텍스트를 ‘순환적’으로 생성합니다. 여기에서는 더 이상의 상세 기술은 설명하지 않지만 기본적으로 NIC는 2개의 신경망(CNN과 RNN)을 조합한 간단한 구성입니다. 그래서 놀라울 정도로 정확한 사진 캡션을 만들어내는 것입니다. 또한 사진이나 자연어와 같은 여러 종류의 정보를 조합하고 처리하는 일을 멀티모달 처리 multimodal processing 라고 합니다.
RNN의 R은 Recurrent (순환적)를 뜻합니다. 여기에서 순환은 신경망의 순환적 구조를 말합니다.
이 순환적인 구조로 인해 이전에 생성한 정보에 영향을 받는(바꾸어 말하면, 과거의 정보를 기억하는) 점이 RNN의 특징입니다.예를 들어 ‘나’라는 단어를 생성한 뒤 ‘잤다’라는 단어를 생성하면 먼저 만든 ‘나’의 영향을 받아 ‘는’이라는 조사가 자동으로 생성되어, 최종적으로 ‘나는 잤다’라는 문장이 완성되는 식입니다.
이처럼 자연어와 시계열 데이터 등 연속성 있는 데이터를 다룰 때 RNN은 과거의 정보를 기억하면서 동작합니다.
순환 신경망을 자연어와 시게열 데이터 처리에 이용하는 방법은 <밑바닥부터 시작하는 딥러닝2>에서 다루고 있습니다.
딥러닝을 활용해 화가처럼 ‘그림을 그리는’ 서비스도 많습니다. 위 그림은 두 이미지를 입력해서 새로운 그림을 생성하는 논문에서 발췌한 예입니다. 하나는 ‘콘텐츠 이미지’, 다른 하나는 ‘스타일 이미지’라 부르는데, 이 둘을 조합해 새로운 그림을 그려주죠.
[위과 같이 고흐의 화풍을 콘텐츠 이미지에 적용하도록 지정하면 이를 기초로 딥러닝이 새로운 그림을 그립니다. 이 기법을 담은 [A Neural Algorithm of Artistic Style] 논문은 발표되자마자 전 세계에서 많은 이목을 끌었습니다.
여기에서는 이 연구를 자세히 설명하지는 않겠습니다. 큰 틀만 이야기하면, 이 기술은 네트워크의 중간 데이터가 콘텐츠 이미지의 중간 데이터와 비슷해지도록 학습합니다. 이렇게 하면 입력 이미지를 콘텐츠 이미지의 형태를 흉내 낼 수 있습니다. 또, 스타일 이미지의 화풍을 흡수하기 위해 ‘스타일 행렬’이라는 개념을 도입합니다. 그 스타일 행렬의 오차를 줄이도록 학습하여 입력 이미지를 고흐의 화풍과 비슷해지게 만들 수 있는 것입니다.
앞의 이미지 스타일 변환 예는 새로운 그림을 생성하려면 이미지 두 장이 필요했습니다. 하지만 아무런 입력 이미지 없이도 새로운 이미지를 그려내는 서비스도 이미 많습니다. 물론 먼저 대량의 이미지를 사용하여 학습하지만, 학습이 끝난 후에는 아무런 입력 이미지 없이도 새로운 그림을 그려냅니다. 가령 딥러닝으로 ‘침실’ 이미지를 무 無 로부터 생성하는 게 가능합 니다. 아래의 이미지는 DCGAN Deep Convolutional Generative Adversarial Network 기법으로 생성한 침실 이미지들입니다.
이 침실 이미지들은 진짜 사진처럼 보일지 모르지만 모두 DCGAN을 사용해 새롭게 생성한 이미지입니다. 즉, DCGAN이 그린 아직 아무도 본 적 없는 이미지(학습 데이터에는 존재하지 않는 이미지)이며 처음부터 새로 생성한 이미지입니다.
진짜와 구분할 수 없는 수준의 이미지를 그리는 DCGAN은 이미지를 생성하는 과정을 모델화 합니다. 그 모델을 대량의 이미지(가령 침실이 찍힌 대량의 이미지)를 사용해 학습하고, 학습이 끝나면 그 모델을 이용하여 새로운 그림을 생성할 수 있습니다.
DCGAN도 딥러닝을 사용합니다. DCGAN 기술의 핵심은 생성자 Generator 와 판별자 Discriminator로 불리는 2개의 신경망을 이용한다는 점입니다. 생성자가 진짜와 똑같은 이미지를 생성하고 판별자는 그것이 진짜인지(생성자가 생성한 이미지인지 아니면 실제로 촬영된 이미지인지)를 판단합니다. 그렇게 해서 둘을 겨루도록 학습시켜, 생성자는 더 정교한 가짜 이미지 생성 기술을 학습하고 판별자는 더 정확하게 간파할 수 있는 감별사로 성장하는 것이죠. 이렇게 둘의 능력을 부지런히 갈고닦게 한다는 개념이 GAN Generative Adversarial Network 기술의 재미난 점입니다.
그렇게 절차탁마해서 성장한 생성자는 최종적으로는 진짜와 착각할 정도의 이미지를 그려내는 능력을 갖추게 됩니다.
이전까지 살펴본 머신러닝 문제는 지도 학습이라는 유형의 문제였습니다. 지도 학습은 손글씨 숫자 인식처럼 이미지 데이터와 정답 레이블을 짝지은 데이터셋을 이용합니다. 그러나 이번 절에서 거론한 문제는 지도용 데이터는 주어지지 않고, 단지 대량의 이미지(이미지의 집합)만 주어집니다. 즉, 지도 없이 스스로 학습하는 자율 학습 문제입니다. 자율 학습은 비교적 오래전부터 연구된 분야 지만(Deep Belief Network와 Deep Boltzmann Machine이 대표적입니다) 최근에는 그다지 활발 하게 연구되지는 않는다는 느낌입니다. 하지만 딥러닝을 사용한 DCGAN 등과 같은 기법이 시선을 끌면서, 앞으로 자율 학습도 새로운 도약을 기대할 수 있을지도 모릅니다.
*스테이블 디퓨전으로 대표되는 확산 모델은 데이터에 점진적으로 노이즈를 추가하여 변형한 후, 반대 방향으로 복원하며 새로운 데이터를 생성합니다. 이미지나 텍스트 생성 등의 분야에서 매우 높은 품질의 결과물을 만들어내어 예술 등 창의적인 작업에서 많이 활용됩니다. <밑바닥부터 시작하는 딥러닝 5>에서 다루는 주제입니다.
사람 대신 컴퓨터가 자동차를 운전하는 자율 주행 기술이 빠르게 발전하고 있습니다. 자동차 제조업체뿐 아니라 IT기업과 대학, 연구소 등도 자율 주행 고도화 경쟁에 뛰어들었습니다. 자율 주행은 다양한 기술(주행 경로를 정하는 경로 계획 path plan 기술과 카메라나 레이저 등의 탐사 기술 등)을 모아 구현하고 있지만, 그중에서도 주위 환경을 올바르게 인식하는 기술이 가장 중요한 문제라고 합니다. 시시각각 변하는 환경과 종횡무진 오가는 다른 차와 사람들을 올바르게 인식하기가 매우 까다롭기 때문이죠.
다양한 환경에서도 안전한 주행 영역을 올바로 인식하게 되면 완벽한 자율 주행이 실현될 날이 멀지 않을지도 모릅니다. 주위 환경을 인식하는 기술에서 딥러닝은 큰 역할을 하고 있습니다. 예를 들어 SegNet이라는 CNN 기반 신경망은 주변 환경을 정확하게 인식해냅니다.
결과를 보면 도로와 건물, 보도와 나무, 차량과 오토바이 등을 어느 정도 정확히 판별하고 있습니다. 이런 인식 기술이 딥러닝에 힘입어 향후 한층 정확해지고 빨라지면 자율 주행이 일상에 파고든 영화속 모습이 현실이 되겠죠.
자전거를 배울 때처럼, 사람이 시행착오를 겪으며 배우듯 컴퓨터도 시행착오 과정에서 스스로 학습하게 하려는 분야가 있습니다. 이는 ‘가르침’에 의존하는 ‘지도 학습’과는 다른 분야로, 강화학습 reinforcement learning 이라 합니다.
강화학습에서는 에이전트가 환경에 맞게 행동을 선택하고, 그 행동에 의해서 환경이 변한다는 게 기본적인 틀입니다. 환경이 변화하면 에이전트는 어떠한 보상을 얻습니다. 강화학습의 목적은 더 나은 보상을 받는 쪽으로 에이전트의 행동 지침을 바로잡는 것입니다.
위의 그림은 강화학습의 기본 틀입니다. 여기에서 주의점은 보상은 확정된 것이 아니라 ‘예상 보상’이라는 점입니다. 예를 들면 <슈퍼 마리오 브라더스>에서 마리오를 오른쪽으로 이동했을 때 얻는 보상이 일정하지 않습니다. 어떤 상황에서 이동했느냐에 따라 보상은 천차만별이될 수 있겠죠. 이런 불명확한 상황에서는 게임 점수(동전을 먹거나 적을 쓰러뜨리는 등)나 게임 종료 등의 명확한 지표로부터 역산해서 ‘예상 보상’을 정해야 합니다. 만약 지도 학습이었다면 행동에 대한 ‘지도’를 통해 올바른 평가를 받을 수 있었을 겁니다.
딥러닝을 사용한 강화학습 중 Deep Q-Network (DQN)라는 방법이 있습니다. DQN은 Q학습이라는 강화학습 알고리즘을 기초로 합니다. Q학습에서는 최적 행동 가치 함수로 최적인 행동을 정합니다. 이 함수를 딥러닝(CNN)으로 비슷하게 흉내 내어 시켜 사람을 뛰어넘는 수준의 조작을 실현한 사례가 보고되고 있습니다. 위의 그림과 같이 DQN에서 사용하는 CNN은 게임 영상 프레임(4개의 연속한 프레임)을 입력하여 최종적으로는 게임을 제어하는 움직임(조이스틱 이동량이나 버튼 조작 여부)에 대하여 각 동작의 ‘가치’를 출력합니다.
그동안의 비디오 게임 학습에서는 게임의 상태(캐릭터 위치 등)는 미리 추출하는 것이 보통이었습니다. 그러나 DQN에서는 위 그림과 같이 입력 데이터는 비디오 게임의 영상뿐입니다. 이는 DQN의 주목할 점으로, DQN의 응용 가능성을 현격히 높였다고 할 수 있습니다.
게임마다 설정을 바꿀 필요없이 단순히 DQN에 게임 영상을 보여주기만 하면 되기 때문이죠. 실제 DQN은 구성을 변경하지 않고도 팩맨과 아타리 Atari 같은 많은 게임을 학습할 수 있으며, 수많은 게임에서 사람보다 뛰어난 성적을 거두고 있습니다.
2016년에는 인공지능인 알파고 AlphaGo가 바둑 챔피언 이세돌을 꺾었다는 소식이 화제였습니다.
이 알파고에도 딥러닝과 강화학습이 이용되었습니다. 알파고는 3,000만 개의 프로 기보를 보며 학습한 후, 알파고 스스로 자신과 맞붙는 대결을 반복하면서 수련했습니다. 나아가 알파고를 단백질 구조 예측에 특화 발전시킨 알파폴드는 연구자들에게 2024년 노벨 화학상을 안겨주었습니다.알파고, 알파폴드, DQN은 모두 구글이 인수한 딥마인드 DeepMind 가 진행한 연구입니다. 앞으로도 딥마인드의 활약을 기대해봅니다.
*강화학습은 <밑바닥부터 시작하는 딥러닝 4>에서 확인하실 수 있습니다.
위 콘텐츠는 『밑바닥부터 시작하는 딥러닝1 (리마스터판)』의 내용을 발췌하여 작성하였습니다.
이전 글 : [편집 후기] 양자 컴퓨터, 어렵다고 해서 포기하기엔 너무 아까운 주제입니다.
다음 글 : 다음 글이 없습니다.
최신 콘텐츠