[CS182] Lecture 1: Introduction (Representation과 Deep Learning이란)
인공지능/CS182 스터디

[CS182] Lecture 1: Introduction (Representation과 Deep Learning이란)

해당 글은 CS182: Deep Learning의 강의를 정리한 글입니다. 여기서 사용된 모든 이미지의 권리는 강의 원작자에게 있습니다.

Representation이란

기계 번역의 발전

기존에는 번역기를 만들고자 한다면 먼저 원본 언어와 목적 언어를 정하고 그 두 언어로 작성된 문장쌍을 모은다. 영어를 프랑스어로 번역하는 번역기를 만들고자 한다면 같은 뜻을 지닌 영어 문장과 프랑스어 문장쌍을 최대한 많이 모은다. 이렇게 모인 문장쌍으로 번역기를 학습시키면 번역기는 영어를 어떻게 프랑스어로 번역하는지 배우게 된다.

  하지만 이런 방식에 문제점이 있다. 먼저 희소 언어는 이런 방식으로는 불리하다. 최대한 많은 데이터를 모아야 번역 품질이 높아지는데, 화자나 문헌이 적은 희소 언어는 영어나 중국어처럼 데이터를 모으기 힘들다. 또한 문장쌍으로 모은 데이터가 없다면 번역기를 만들 수 없다. 만약 영어-한국어 번역기를 만드러고 하는데 영어-한국어 문장쌍 데이터가 없다면 학습시키는게 불가능하다.

  구글에서는 이러한 문제를 해결하기 위해 새로운 방식의 번역기를 제안했다. 구글은 언어쌍마다 번역기를 만들지 말고 어떤 언어든 받아드리고 번역할 수 있는 다국어(multilingual 번역기를 만들었다. 구글이 제안한 다국어 번역기는 입력 문장과 목적 언어를 받으면 입력 문장이 어떤 언어로 쓰여져있든 목적 언어로 번역할 수 있다.

  구글의 다국어 번역기는 기존 번역기의 두가지 문제를 해결했다. 먼저 소수 언어의 경우, 번역 성능이 기존 번역기보다 더 뛰어났다. 데이터가 부족한 언어여도 번역기가 내용을 더 잘 이해했다. 또한 학습하지 않았던 언어쌍의 번역도 잘 수행했다. 번역기가 영어-스페인어 번역을 학습한 적이 없더라도 영어-독일어 문장쌍과 독일어-스페인어 문장쌍을 학습했다면 번역기는 문제없이 영어를 스페인어로 번역할 수 있었다.

  심지어 구글의 번역기는 기존에 없던 신기한 기능을 가지고 있다. 바로 어순이 비슷한 일본어와 한국어가 섞인 문장도 번역기가 문제없이 이해했다. 또한 문장을 번역할 때 '스페인어 0.6 : 포르투갈어 0.4' 처럼 두 언어의 비율대로 섞인 형태로 번역할 수 있다. 

  새로운 번역기는 어떻게 기존 번역기에는 없던 새로운 능력을 가지게 된걸까? 이는 기존 번역기와 사람이 어떻게 번역하는지 생각해보면 쉽게 이해해볼 수 있다. 기존 번역기는 영어 문장이 들어오면 규칙에 따라 프랑스어 문장으로 번역한다. 하지만 사람은 영어 문장을 보는 순간 어떤 의미를 담고 있는지 먼저 파악한다. 그 다음 같은 의미를 지니도록 프랑스어 문장을 작성한다.

  구글의 다국어 번역기도 사람과 비슷한 방식을 따른다. 어떤 문장이 들어오면 그 문장의 의미를 내포하는 어떤 representation(표현)으로 변환한다. 그 다음 그 표현을 가지고 목적 언어로 문장을 생성한다. 다국어 번역기는 어떤 언어로든 representation으로 변환하고 다시 원하는 언어로 문장을 생성하는 방법을 학습하기 때문에 representation은 언어에 종속되지 않고(language-agnostic), 그 문장의 의미(sementic-content)만을 담고있다. 이 덕분에 소수 언어의 번역이든, 학습한 적이 없던 언어쌍 번역이든, 심지어 두 언어를 혼합해 번역하는 작업도 수행할 수 있다.

Representation Learning

  이처럼 representation learning은 고전 머신러닝과는 다른 방식으로 복잡한 데이터를 처리한다. 고전 머신러닝 방식은 위에서 본 기존 번역기처럼 입력 데이터와 출력 데이터간의 관계를 학습하고 예측한다. 하지만 다양한 언어가 담긴 텍스트, 이미지, 음성과 같은 복잡한 데이터의 경우 고전 머신러닝으로 그 규칙성을 찾기 어렵다. 하지만 딥러닝은 representation learning을 적용해 입력 데이터를 어떻게 단순한 representation으로 변환할지 스스로 학습합니다. 이 덕분에 딥러닝은 복잡한 데이터를 학습할 수 있습니다.

머신러닝과 딥러닝이란

머신러닝 이전

  머신러닝이 없던 시절에도 프로그램이 입력 데이터를 통해 예측을 하거나 분류할 수 있습니다. 다만 어떻게 예측할지나 분류할지는 사람이 직접 정해주어야 했습니다. 사람이 먼저 데이터를 분석하여 데이터를 처리하는 규칙을 정하고 이를 프로그램으로 만들었습니다.

하지만 이 방식에는 두가지 한계점이 존재했습니다. 첫번째로 규칙을 알 수 없다면 프로그램으로 만들 수 없다는 점입니다. 데이터를 분류하는 규칙을 명확히 설명할 수 없다면 이를 컴퓨터에게 시킬 수 없습니다. 두번째로는 규칙이 복잡하거나 예외 상황이 많다면 이를 처리하기 위해 프로그램이 복잡해지고 커진다는 점입니다. 복잡한 방법을 그대로 따르거나 모든 예외상황을 처리하면 프로그램의 처리 속도는 느려지고 크기는 거대해집니다.

머신러닝

  하지만 머신러닝은 입력 데이터와 출력 데이터를 통해 분류 기준을 스스로 찾아낼 수 있습니다. 이 덕분에 사람들은 데이터 처리 방법을 모르거나 복잡해도 데이터를 처리하는 프로그램을 만들 수 있습니다. 데이터만 모델에게 주면 스스로 적절한 분류 기준이나 처리 방법을 찾아냅니다.

  다만 컴퓨터는 사람이 정해준 방법대로 데이터를 처리합니다. 컴퓨터가 자신이 할 일을 바꾸기 위해 스스로 프로그램을 수정할 수 없습니다. 이를 위해 데이터를 통해 기준을 학습하는 방법 (이후 강의에 나올 학습 알고리즘) 과 정해준 기준에 따라 데이터를 분류하는 부분(위 슬라이드에서 적힌 분류 규칙)은 프로그램으로 작성하고 처리할 데이터(x)와 그 기준을 정하는 파라미터(theta)를 입력으로 전달합니다. 이렇게 되면 프로그램 자체는 변하지 않아도 주어진 데이터에 적응해 높은 정확도로 데이터를 분류하는 프로그램을 만들 수 있습니다.

  이를 수학으로 표기하면 아래 슬라이드처럼 쓸 수 있습니다.

  여기서 x가 입력 데이터, y는 출력 데이터 또는 라벨 데이터, theta가 예측 규칙이나 분류 기준을 정하는 파라미터를 나타냅니다. 함수 f는 theta로 결정된 규칙에 따라 x를 처리해 y처럼 만듭니다. 어떤 표기법에서는 theta를 함수 f의 아래 첨자로 집어넣어 입력 인자로 x만 남기는 경우도 있습니다. 이때는 함수 f가 theta에 의해 결정되는 함수라는 것을 강조했다고 볼 수 있습니다.

  머신러닝만 있다면 어떤 데이터든지 스스로 규칙을 학습할 것처럼 보입니다. 하지만 실제로는 모든 데이터에 사용하기는 어렵습니다. 몇몇개의 숫자 데이터를 받아 처리하는 작업은 머신러닝이 학습할 수 있지만, 그림을 받고 그 속에 있는 동물이 개인지 고양이인지를 판별하는 과제는 버겁습니다. 이미지에는 픽셀 수 만큼의 숫자 데이터가 들어있기에 이들을 처리해야 하기 때문입니다.

  하지만 머신러닝 모델과는 달리 사람은 이미지 처리에 능숙합니다. 왜냐하면 사람은 이미지를 픽셀 개별마다 보고 판단하지 않기 때문입니다. 대신 이미지에서 눈, 코, 입과 같은 특징(feature)을 찾아내고 이들을 종합해 어떤 동물인지 판별합니다. 그렇다면 머신러닝 모델도 사람처럼 먼저 필요한 특징을 찾아내면 되지 않을까요?

  그래서 고전적 머신러닝에서는 복잡한 데이터의 경우 특징 추출(feature extraction)을 먼저 수행합니다. 이미지를 모델에게 그대로 전달하지 않고 엣지를 추출한 다음 이 정보를 모델에게 전달해주면 모델은 좀 더 쉽게 데이터를 학습할 수 있습니다. 특징 추출은 머신러닝 모델이 볼 필요가 없는 정보를 버리고 중요한 특징만 남기기 때문에 특징 추출을 얼마나 잘하냐가 머신러닝 모델의 예측 성능을 결정합니다.

  하지만 특징 추출 방식에도 한계가 있습니다. 바로 특징 추출 방식을 사람이 정해줘야한다는 점입니다. 하지만 어떤 특징이 모델 예측에 도움이 될지는 직접 해보지 않고서는 모릅니다. 그렇기에 머신러닝 모델을 설계할 때도 가장 노력을 많이 쏟는 작업이 이 특징 추출을 어떻게 할지 결정하는 feature engineering이였습니다.

딥러닝

  그런데 이러한 문제는 이전에 분류 규칙을 찾을 때와 비슷한 양상을 보입니다. 머신러닝 이전에도 분류 규칙을 사람이 직접 정해야했고 이를 파라미터로 빼내어 어떤 값을 집어넣을지 학습을 통해 결정했습니다. 그렇다면 특징을 추출할 때도 같은 방식을 쓸 수 있지 않을까요? 이것이 바로 딥러닝입니다. 딥러닝은 특징 추출 방식도 파라미터화하여 어떤 특징을 추출할지도 학습을 통해 결정합니다. 그리고 이렇게 학습된 특성을 뽑아낸 결과물을 representation이라고 부릅니다.

  보통 딥러닝 모델의 경우 여러 층을 가지고 있습니다. 각 층은 이전 층에서 가져온 representation에서 자신이 학습한 feature를 찾아 또다른 representation으로 변환합니다. 보통 각 층에서 representation을 변환하는 함수는 보통 뉴럴 네트워크를 사용하고 있습니다. 그리고 모든 층이 전체적으로 하나의 목표를 향해 학습하기 때문에 이를 end-to-end learning이라고 부르기도 합니다.

딥러닝에 필요한 세가지

  딥러닝에 필요한 요소들은 크게 3가지가 있습니다. 수많은 층으로 구성된 모델, 다양하고 많은 예시들이 담긴 데이터셋, 이들을 모두 처리할 수 있는 컴퓨팅 파워, 이 세가지가 현재 딥러닝이 강력한 힘을 낼 수 있는 원동력이라 할 수 있습니다.

커다란 모델

  모델의 경우 모델의 성능을 높이기 위해 점점 레이어가 많아지고 있습니다. 처음으로 딥러닝을 통해 오류율 16.4%를 낸 AlexNet은 8층밖에 안되지만, 3년 후에 나온 ResNet은 152층으로 3.57%까지 줄였습니다. 모델의 층이 많아질수록 모델의 성능이 높아지다보니 딥러닝 모델은 크기가 점점 커지고 있습니다.

커다란 데이터셋

  데이터셋 또한 모델의 정확하게 처리할 수 있는 능력을 주기 위해 커지고 있습니다. 90년대에 숫자 손글씨를 인식하기 위해 미국 정부가 거금을 들여 수집한 데이터는 6만개입니다. 하지만 2009년에 이미지 분류 대회인 ILSVRC에서 이미지 분류 모델의 능력을 평가하기 위해 공개한 이미지는 총 15만장입니다.

큰 컴퓨팅 파워

  모델과 데이터가 커짐에 따라 이들을 학습하고 예측하기 위해서는 컴퓨터의 성능이 매우 중요합니다. 슬라이드에 나온 예시로 NLP 분야의 경우 BERT 모델을 TPU 16개로 학습하는데는 54시간이 필요합니다. 커다란 모델을 수많은 데이터를 처리하기 위해서 더 높은 FLOPS나 더 많은 메모리 크기가 필요해지고 있습니다.

 

딥러닝 모델 성능에 대한 쟁점들

딥러닝을 사용하기 위해 필요한 비용

  큰 모델, 큰 데이터셋, 큰 컴퓨팅 파워를 필요하기에 딥러닝이 비효율적으로 보일 수 있다. 하지만 모델을 키울수록, 데이터를 더 많이 모을수록, 컴퓨팅 파워가 더 좋아질수록 딥러닝 모델의 성능을 계속 향상시킬 수 있기에 오히려 선호할 수 있다. ILSVRC에서도 딥러닝 모델이 등장한 이후 모델의 크기가 증가할수록 모델의 오류율이 급격하게 줄었고, 마지막에는 인간 오류율인 5%보다 낮은 모델의 등장으로 더이상 ILSVRC 대회가 열리지 않게 되었다. 

Representation Learning의 관점

  모델과 데이터셋이 커질수록 representation learning에서 두가지 이점이 발생한다. 먼저 모델이 스스로 feature engineering을 수행할 수 있다. 사람이 어떤 feature를 추출해야하는지 알려주지 않아도 모델이 데이터를 학습하면서 스스로 알아낼 수 있다. 또한 학습하는 representation이 학습하고 있는 task에 맞춰지기 때문에 모델의 성능이 계속 상승한다.

Nature vs. Nurture

  모델 성능을 향상시킬려면 모델 구조를 변경해야할까 데이터를 더 모아야할까? 이 논쟁은 아직도 계속되고있다. 한쪽에서는 모델의 Inductive Bias, 즉 모델이 가진 능력이 중요하다고 주장한다. 그래서 성능을 높이고 싶다면 모델이 데이터의 특성을 잘 파악할 수 있도록 구조를 연구해야한다고 말한다. 하지만 다른 쪽에서는 모델 자체의 능력보다 학습하면서 얻게되는 능력이 더 크다고 주장한다. 모델을 바꿔서 높아지는 성능폭보다 더 다양한 데이터를 모아 학습시킬 때의 상승폭이 더 크기 때문에 이 주장대로라면 성능 향상을 위해서는 데이터를 더 모아야한다.

Algorithm that scale

  딥러닝은 모델 규모와 데이터셋 크기가 커질수록 성능이 향상된다 그래서 확장 가능한 알고리즘(algorithm that scale)이라 부르기도 한다. 

뉴럴 네트워크

  '뉴럴 네트워크(Neural Network)'라는 이름은 뇌와 신경을 구성하는 세포인 '뉴런(Neuron)'에서 왔다. 뉴럴 네트워크는 뉴런의 동작구조를 따라했지만 그외에는 실제 뉴런과 다르기 때문에 뉴런에 대해 크게 신경쓰지 않아도 된다.