딥러닝(Deep Learning)이란 무엇일까?
딥러닝은 데이터 속에 숨겨진 규칙이나 패턴을 기계가 스스로 찾아내게 하는 기계학습(machine learning)의 한 갈래입니다. 인공지능 안에 기계학습이 있고 그 안에 딥러닝이 있습니다. 딥러닝은 그 가장 안쪽, 여러 층(layer)으로 쌓아 올린 계산 구조를 써서 학습하는 방식을 가리킵니다. 여기서 「층」이 무엇이고 왜 쌓는지는 이 강의노트 전체에서 하나씩 풀어 갑니다.
먼저 풀고 갈 오해: 「인공지능이 뇌를 그대로 따라 한 건가요?」
아닙니다. 인공신경망은 뇌의 신경 세포가 신호를 주고받는 모습에서 착상을 얻은 수학적 계산 구조일 뿐이고, 실제 뇌가 어떻게 작동하는지를 재현한 것이 아닙니다. 뇌는 아직 그 원리가 다 밝혀지지도 않았습니다. 신경망 안에서 실제로 벌어지는 일은 수를 곱하고 더한 뒤, 그 값을 정해진 규칙으로 바꾸어 넘기는 것이 전부입니다. 그러니 「층」, 「신경망」 같은 이름은 구조를 부르기 위한 비유로 받아들이세요.
같은 기계학습인데, 딥러닝은 무엇이 다를까?
구분되는 지점은 딱 하나, 「무엇을 볼지를 누가 정하는가」입니다. 딥러닝이 아닌 기계학습에서는 데이터를 정리하고 어떤 속성을 쓸지 사람이 골라서 모델에 넣습니다. 딥러닝은 그 고르는 일까지 층을 지나가며 기계가 하도록 맡깁니다.
그래서 딥러닝은 사람이 무엇을 봐야 할지 미리 말해 주기 어려운 데이터, 곧 사진·소리·글처럼 값이 표로 정리되어 있지 않은 데이터에서 특히 힘을 냅니다. 반대로 표로 잘 정리된 데이터라면 의사결정트리나 회귀 같은 다른 알고리즘이 더 간단하고 빠를 때가 많습니다.
딥러닝이 잘하는 것
- 사람이 특징을 정해 주기 어려운 사진·음성·글 같은 데이터를 다룰 수 있습니다.
- 데이터가 충분히 많고 문제가 복잡할수록 다른 방법으로는 잡기 어려운 규칙까지 찾아냅니다.
- 어떤 속성을 만들지 사람이 하나하나 준비하던 과정을 덜어 줍니다.
함께 따라오는 대가
- 정할 값이 워낙 많아 데이터가 적으면 오히려 성능이 떨어집니다.
- 수많은 계산을 반복해야 하므로 연산 성능이 좋은 장비(GPU 등)와 시간이 듭니다.
- 왜 그런 결과가 나왔는지 사람이 따라가 설명하기 어렵습니다(「블랙박스」 문제).
그러니 「딥러닝이 가장 좋은 방법」이라고 말할 수는 없습니다. 데이터가 적거나, 표로 잘 정리되어 있거나, 왜 그렇게 판단했는지를 설명해야 하는 문제라면 의사결정트리나 회귀 같은 방법이 더 알맞습니다. 어떤 방법을 쓸지는 풀려는 문제와 가진 데이터가 정합니다.
사과가 잘 익었는지 판정하는 모델을 만든다고 합시다. 한 모델에는 사람이 고른 「껍질 색」과 「무게」 두 값을 넣고, 다른 모델에는 사과 사진을 그대로 넣습니다. 어느 쪽이 딥러닝에 가깝고, 볼 것을 고르는 일은 각각 누가 맡았나요?
딥러닝의 세포, 「퍼셉트론」
인공신경망의 가장 작은 단위는 어떤 방식으로 판단을 내릴까?
신경망을 이루는 가장 작은 단위를 퍼셉트론(perceptron)이라고 합니다. 1957년에 프랭크 로젠블랫이 고안한, 여러 값을 받아 하나의 값을 내보내는 계산 장치입니다. 신경망 전체가 이 부품으로 짜이므로, 안에서 무슨 일이 벌어지는지 하나씩 살펴봅시다.
퍼셉트론은 세 가지 일을 차례로 합니다. 먼저 들어온 값마다 가중치를 곱해 모두 더하고, 거기에 편향(bias)이라는 숫자 하나를 더한 뒤, 그 결과를 활성화 함수에 넘겨 무엇을 내보낼지 정합니다. 셋 다 이 절에서 하나씩 살펴봅니다. 여기서 말하는 편향은 계산에 더하는 숫자로, 데이터가 한쪽으로 치우친 「데이터 편향」의 편향과는 이름만 같습니다.
뉴런에서 착상을 얻은 계산 구조
퍼셉트론이라는 이름은 우리 뇌를 이루는 신경 세포 뉴런(neuron)에서 왔습니다. 뉴런은 다른 뉴런들에게서 자극을 받아 모으고, 그 세기가 일정 기준을 넘을 때만 다음 뉴런으로 신호를 보냅니다. 「여럿에게서 받아 모은 뒤, 기준을 넘는지 보고 내보낸다」는 이 짜임새만 빌려 와 수로 옮긴 것이 퍼셉트론입니다. 아래 두 칸은 같은 것이 아니라 서로 대응하는 부분을 짝지어 본 것입니다.
생물학적 뉴런
- 수상돌기: 다른 뉴런들로부터 신호를 받아들임
- 시냅스: 신호의 연결 강도(중요도)를 결정함
- 세포체: 들어온 신호들을 모아 판단함
- 축삭돌기: 다음 뉴런으로 신호를 전달함
인공 퍼셉트론
- 입력값: 외부 데이터나 이전 층의 값을 받아들임
- 가중치: 각 데이터의 중요도를 곱함
- 편향: 더해진 값에 숫자 하나를 보태 판단 기준을 옮김
- 활성화: 그 값을 보고 무엇을 내보낼지 정함
- 출력값: 다음 퍼셉트론으로 결과를 전달함
퍼셉트론의 내부 정보 처리 과정
판단
퍼셉트론은 입력을 받아 답을 내놓기까지 어떤 순서로 계산하나요?
가중치와 편향은 무엇을 정할까
같은 입력인데 답이 달라지는 까닭을 봅시다.
가중치는 왜 필요할까?
고양이인지 아닌지를 귀 모양 점수와 수염 점수 두 가지로 판단한다고 해 봅시다. 두 점수를 그냥 더하면 어떻게 될까요? 그것은 둘을 똑같이 중요하게 보겠다고 정한 것과 같습니다. 하지만 귀 모양이 훨씬 결정적인 단서라면, 귀 점수는 크게 반영하고 수염 점수는 작게 반영해야 합니다.
그래서 값마다 곱해 주는 숫자를 따로 두는데, 이것이 가중치(weight)입니다. 가중치가 크다는 것은 그 값을 더 중히 본다는 뜻입니다. 선형 회귀는 직선 하나를 Y = wX + b로 적습니다. 거기서 X가 1만큼 달라질 때 Y가 얼마나 달라지는지를 정하는 기울기 w가 이 가중치에 해당하고, 선의 높이를 맞춰 주는 b가 편향에 해당합니다. 이름만 다를 뿐 같은 역할을 하는 숫자입니다.
편향은 「판단하는 기준선」을 옮긴다
가중합이 70점을 넘으면 고양이라고 하겠다면, 굳이 70이라는 기준을 따로 들고 다닐 필요 없이 가중합에 −70을 더해 두고 「0보다 큰가?」만 보면 됩니다. 이때의 −70이 편향입니다. 편향이 커지면 쉽게 반응하고, 작아지면 좀처럼 반응하지 않게 됩니다.
| 단계 | 계산 | 결과 |
|---|---|---|
| 들어온 값 | 귀 모양 80점, 수염 60점 | — |
| 가중치를 곱해 더함 | 0.6 × 80 + 0.4 × 60 | 72 |
| 편향을 더함 | 72 + (−70) | 2 |
| 활성화 함수 | 0보다 큰가? | 그렇다 → 1을 내보냄 |
여기서 0.6, 0.4, −70이라는 숫자는 사람이 정해 준 것이 아닙니다. 학습이란 이 숫자들을 데이터를 보며 조금씩 고쳐 나가는 일입니다. 그 방법은 「인공지능은 어떻게 스스로 정답을 찾을까?」 절에서 봅니다.
코드 예제로 보는 퍼셉트론 원리
더 알아보기: 퍼셉트론을 코드로 표현하면
개념 이해를 돕기 위해 입력값에 가중치를 곱해 결과를 판단하는 과정을 표현한 C 언어 코드입니다. 아래 코드는 기준 점수 70을 따로 두고 비교하지만, 실제 신경망에서는 앞의 표처럼 −70을 편향으로 더해 두고 「0보다 큰가」만 확인합니다. 두 방식은 같은 계산입니다.
// 고양이 귀 모양(입력1)과 수염 모양(입력2) 데이터
int input_ear = 80;
int input_whisker = 60;
// 각 특징에 대한 중요도(가중치) 설정
float weight_ear = 0.6; // 귀 모양이 더 중요함
float weight_whisker = 0.4;
// 1. 입력값에 가중치를 곱하여 모두 합산합니다.
float total_score = (input_ear * weight_ear) + (input_whisker * weight_whisker);
// 계산: (80 * 0.6) + (60 * 0.4) = 48 + 24 = 72
float threshold = 70.0; // 고양이라고 판단하는 기준 점수
// 2. 기준 점수를 넘는지 판단합니다. (활성화 함수 역할)
if (total_score > threshold) {
printf("고양이라고 판단합니다.\n");
} else {
printf("고양이가 아니라고 판단합니다.\n");
}귀 모양 50점, 수염 90점인 사진이 들어왔습니다. 가중치 0.6, 0.4와 편향 −70으로 계산하면 퍼셉트론은 무엇을 내보내나요? 수염을 더 중히 보도록 두 가중치를 서로 바꾸면 답이 달라지나요?
퍼셉트론 하나로는 안 되는 문제
한계에 부딪힌 퍼셉트론은 어떻게 층을 쌓게 되었을까?
퍼셉트론의 첫 번째 위기: XOR 문제
초기 퍼셉트론은 AND나 OR 같은 단순한 논리 회로를 완벽하게 해결하며 기대를 모았습니다. 하지만 XOR(배타적 논리합) 문제라는 벽에 부딪히게 됩니다. XOR는 입력된 두 값이 서로 다를 때만 1(참)이 되는 문제인데, 직선 하나로는 정답과 오답을 나눌 수 없었기 때문입니다.
01 OR (또는) 문제
성공
직선 하나로 0과 1을 완벽하게
가로지를 수 있습니다.
02 XOR (배타적) 문제
불가능
어떤 직선을 그어도 대각선으로
놓인 데이터를 분리할 수 없습니다.
03 다층 퍼셉트론 (MLP)
해결
직선을 여러 개 긋고
그 결과를 다시 판단합니다.
XOR가 어떤 문제인지 값으로 보기
두 입력이 서로 다를 때만 1이 되는 규칙입니다. 네 경우를 적어 보면 이렇습니다.
| 입력 1 | 입력 2 | OR | XOR |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 0 |
OR는 1이 되는 세 경우가 한쪽에 몰려 있어 직선 하나로 나뉩니다. 그런데 XOR는 1이 되는 두 경우가 서로 마주 보는 대각선 자리에 놓입니다. 직선을 어떻게 그어도 이 둘만 같은 편으로 묶을 수 없습니다. 퍼셉트론 하나는 결국 직선 하나를 긋는 장치이기 때문에, 여기서 막힙니다.
해법: 퍼셉트론을 층으로 쌓는다 — 다층 퍼셉트론(MLP)
직선 하나로 안 된다면, 직선을 여러 개 긋고 그 결과를 다시 판단하면 됩니다. 퍼셉트론 하나가 그은 직선의 출력값을, 다른 퍼셉트론의 입력으로 넣는 것입니다. 이렇게 입력과 출력 사이에 중간에서 한 번 더 계산하는 층을 끼워 넣은 구조를 다층 퍼셉트론(MLP, Multi Layer Perceptron)이라 하고, 그 중간 층을 은닉층(hidden layer)이라고 부릅니다. 바깥에서 값을 넣지도 읽지도 않고 안에서만 쓰이기 때문에 「숨어 있다」는 이름이 붙었습니다.
은닉층의 두 퍼셉트론이 각각 다른 직선을 긋고, 출력층의 퍼셉트론이 그 두 결과를 다시 비교해 답을 냅니다. 직선 하나로 나뉘지 않던 문제가, 직선 둘과 그것을 합치는 판단 하나로 나뉘게 된 것입니다. 층을 쌓는다는 것은 이렇게 앞 층이 만들어 낸 판단을 재료로 삼아 다시 판단한다는 뜻입니다.
다층 퍼셉트론(MLP)은 인공신경망(ANN)과 다른 별개의 기술이 아닙니다. 「인공신경망에서 심층 신경망까지」 절에서 볼 인공신경망을 층 구조에 초점을 맞춰 부르는 이름입니다.
AND는 두 입력이 모두 1일 때만 1이 되는 규칙입니다. 네 경우를 점으로 찍어 보면, AND는 퍼셉트론 하나로 풀 수 있을까요, 은닉층이 있어야 할까요?
기대와 침체가 오간 시간
한 번 막힌 문제가 연구 전체를 멈춰 세우기도 합니다.
한계가 드러난 뒤에 온 것 — 「인공지능의 겨울」
퍼셉트론 하나로는 XOR조차 풀 수 없다는 사실이 알려지자, 사람들은 신경망이 할 수 있는 일이 생각보다 훨씬 좁다고 판단했습니다. 여기에 기대만큼 성과가 나오지 않은 다른 까닭들까지 겹쳐 연구비가 끊기고 연구가 오래 움츠러들었습니다. 이런 시기를 인공지능의 겨울이라고 부릅니다.
층을 쌓으면 된다는 생각은 이미 있었지만, 그 시절에는 여러 층의 가중치를 한꺼번에 고쳐 나갈 학습 방법이 자리 잡지 못했고, 층이 늘어날 때 폭발적으로 늘어나는 계산을 감당할 컴퓨터도 없었습니다. 학습 방법은 그 뒤에 자리를 잡았지만, 층을 깊이 쌓은 신경망이 널리 쓰이게 된 것은 한참 뒤, 많은 계산을 한꺼번에 처리하는 장치(GPU 등)와 많은 데이터가 갖춰지면서였습니다. 좋은 아이디어 하나만으로는 부족했고, 데이터와 계산 자원이 함께 갖춰져야 했습니다.
어떤 방법이 좋은 결과를 낼 것 같은데, 지금 컴퓨터로는 한 번 학습시키는 데 1년이 걸린다고 합시다. 인공지능의 겨울이 끝난 과정에 비추어 보면, 이 방법이 널리 쓰이려면 무엇이 더 갖춰져야 할까요?
인공신경망에서 심층 신경망까지
이름이 하나씩 늘어날 때마다 무엇이 더해진 걸까?
인공신경망(ANN)의 구조 살펴보기
외부 데이터를
받아들이는 곳
데이터의 특징을 파악하고 복잡한 계산을 수행하는 곳
최종 예측 결과를
내보내는 곳
퍼셉트론이 모이면? 「인공신경망」에서 「심층 신경망」까지
퍼셉트론 하나는 직선 하나를 긋는 정도의 판단밖에 못 합니다. 하지만 여럿을 연결하고 층을 쌓아 올리면서 부를 이름이 하나씩 늘어났습니다. 아래 네 이름은 서로 다른 기술이 아니라, 같은 줄기에서 무엇이 더해졌는지를 가리키는 이름입니다. 카드마다 바로 앞 단계에 무엇이 더해졌는지를 확인하며 읽어 보세요.
기본 단위. 가중치를 곱해 더하고 편향을 보탠 뒤 활성화 함수로 내보낼 값을 정한다
더해진 것: 층. 퍼셉트론을 입력층·은닉층·출력층으로 이어 붙였다. 다층 퍼셉트론이라고도 부른다
더해진 것: 깊이. 은닉층이 2개 이상으로 깊어진 인공신경망
더해진 것: 학습. 깊은 신경망으로 데이터를 학습시키는 방법, 또 그 방법을 다루는 기계학습의 한 분야
「깊다(deep)」는 무엇이 깊다는 뜻일까요? 은닉층이 여러 겹으로 쌓여 있다는 뜻입니다. 층이 깊어질수록 신경망은 선이나 색 같은 단순한 특징에서 시작해, 앞 층이 찾아 놓은 것을 재료 삼아 점점 더 큰 덩어리의 특징을 만들어 갑니다.
DNN과 딥러닝은 같은 말이 아닙니다. 심층 신경망(DNN)은 「구조」의 이름이고, 딥러닝은 그런 깊은 신경망으로 데이터를 학습시키는 「방법」이자 그 방법을 다루는 분야의 이름입니다. 「심층 신경망을 만들었다」와 「딥러닝으로 학습시켰다」는 서로 다른 말입니다.
입력층·은닉층·출력층은 각각 어떤 일을 맡나요? 은닉층이 하나일 때와 여럿일 때의 이름은 어떻게 달라지나요?
층을 깊게 쌓으면 무엇이 달라질까
은닉층이 여러 겹일 때 무슨 일이 일어나는지 봅시다.
층이 깊어지면 무엇이 달라질까 — 고양이 사진 알아보기
심층 신경망은 사진을 한 번에 보고 「고양이네!」라고 아는 것이 아닙니다. 층을 지날 때마다 앞 층이 찾아 놓은 것을 재료로 삼아 조금씩 더 큰 특징을 만들어 갑니다. 아래는 그 흐름을 이해하기 쉽게 정리한 것이고, 실제로 각 층이 무엇을 찾을지는 사람이 정해 주는 것이 아니라 학습 중에 정해집니다.
- 입력층: 사진을 이루는 수많은 픽셀(점)의 밝기 값을 그대로 받아들입니다.
- 은닉층 1: 이웃한 점들의 값을 비교해 선, 모서리, 색의 경계 같은 단순한 특징을 잡아냅니다.
- 은닉층 2: 그 선들을 조합해 눈, 코, 뾰족한 귀 같은 부분 모양을 만듭니다.
- 은닉층 3: 부분들이 어떤 자리에 어떻게 놓였는지를 묶어 얼굴 전체의 짜임새를 만듭니다.
- 출력층: 지금까지 모인 값으로 고양이일 가능성이 얼마나 되는지를 계산해 내놓습니다.
딥러닝이 아닌 기계학습에서는 「무엇을 볼지」를 사람이 골라 넣어야 하지만, 여기서는 선을 볼지 귀를 볼지까지 층이 스스로 정해 갑니다.
그럼 은닉층을 많이 쌓을수록 좋을까?
그렇지 않습니다. 층과 동그라미를 늘릴 때마다 정해야 할 가중치와 편향의 개수가 크게 불어납니다. 정할 숫자가 많아지면 그만큼 더 많은 데이터와 더 긴 계산 시간이 필요하고, 데이터가 그만큼 따라 주지 않으면 훈련 데이터를 통째로 외워 버려 새 데이터에서는 오히려 못 맞히는 과적합에 빠지기 쉽습니다.
그래서 은닉층의 수와 한 층의 동그라미 수는 문제와 데이터의 크기에 맞게 알맞은 선을 찾아 정해야 합니다. 「한눈에 보는 딥러닝」 절의 실습에서 이 값을 직접 바꿔 가며 무엇이 달라지는지 확인해 봅시다.
사진 100장으로 은닉층 열 개짜리 신경망을 학습시켰더니, 학습에 쓴 사진은 모두 맞히는데 새 사진은 절반만 맞혔습니다. 무슨 일이 일어난 것이고, 은닉층 수나 데이터를 어떻게 바꿔 보면 좋을까요?
층을 쌓으려면 값을 한 번 꺾어야 한다
퍼셉트론의 마지막 단계, 활성화 함수를 다시 본다
활성화 함수는 왜 꼭 필요할까
퍼셉트론의 마지막 단계였던 활성화 함수로 돌아와 봅시다. 앞의 예에서는 「0보다 큰가?」만 보고 1이나 0을 내보냈습니다. 그런데 이 단계는 없으면 안 되는 걸까요? 그냥 더한 값을 그대로 다음 층에 넘기면 안 될까요?
활성화 함수를 빼면, 층을 아무리 쌓아도 소용이 없다
가중합과 편향은 곱하고 더하는 계산뿐입니다. 그런 층을 두 번 지나면 어떻게 될까요? 곱하고 더한 것을 다시 곱하고 더한 것이니, 정리하면 결국 또 하나의 곱하고 더하기가 됩니다. 층을 열 개, 백 개 쌓아도 마찬가지입니다. 결과는 직선 하나를 긋는 퍼셉트론 한 개와 똑같아집니다. 그러면 XOR 문제도 여전히 풀 수 없습니다.
그래서 층과 층 사이마다 곱셈·덧셈이 아닌 다른 방식으로 값을 한 번 꺾어 주는 단계를 넣습니다. 이 단계가 활성화 함수(activation function)입니다. 활성화 함수가 있어야 층을 쌓는 일이 의미를 가집니다.
어떤 방식으로 꺾을지는 여러 가지가 있습니다. 아래 셋이 자주 쓰이는 예입니다. 가로축은 들어온 값(가중합에 편향을 더한 값), 세로축은 내보내는 값입니다.
계단 함수
기준을 넘으면 1, 아니면 0. 단호하지만 얼마나 넘었는지는 알려 주지 않습니다.
시그모이드 함수
0과 1 사이를 부드럽게 오갑니다. 얼마나 그럴듯한지를 함께 담아 넘길 수 있습니다.
ReLU(렐루) 함수
음수는 0으로 잘라 내고, 양수는 있는 그대로 넘깁니다. 0에서 한 번 꺾이는 것만으로도 층을 쌓는 의미가 생깁니다.
어느 하나가 정답인 것은 아닙니다. 은닉층에는 계산이 간단하고 층이 깊어져도 학습이 잘 되는 편인 ReLU가 많이 쓰이고, 확률처럼 0과 1 사이 값으로 답해야 하는 출력층에는 시그모이드를 쓰기도 합니다. 함수의 이름과 식을 외울 필요는 없습니다. 「값을 한 번 꺾어 주어야 층을 쌓는 의미가 생긴다」는 점만 남기면 됩니다.
활성화 함수를 모두 빼 버린 신경망은, 층을 아무리 많이 쌓아도 결국 무엇과 같아질까요? 그리고 그 신경망은 XOR 문제를 풀 수 있을까요?
인공지능은 어떻게 스스로 정답을 찾을까?
수많은 가중치와 편향을 스스로 고쳐 나가는 「학습」의 원리
1. 산길을 더듬어 내려오기 (경사하강법)
학습을 시작할 때 가중치와 편향에는 아무렇게나 정한 값이 들어 있습니다. 그 상태로 데이터를 하나 넣어 보면 답이 엉뚱하게 나올 것입니다. 이때 정답과 예측이 얼마나 어긋났는지를 하나의 숫자로 측정한 것을 손실(loss)이라고 부릅니다. 학습의 목표는 이 손실을 될 수 있는 대로 작게 만드는 것입니다.
경사하강법 (Gradient Descent)
안대를 쓰고 산꼭대기에서 가장 낮은 골짜기(손실이 가장 작은 곳)를 찾아간다고 상상해 보세요. 발바닥의 감각으로 「경사가 아래로 향하는 쪽」을 찾아 한 걸음씩 내려가는 방법입니다.
- 손실 함수(Loss Function): 현재 내 위치(오차)가 얼마나 높은지 알려 주는 고도계
- 학습률(Learning Rate): 한 번에 얼마나 큰 보폭으로 걸어갈지 결정하는 발걸음 크기
보폭, 곧 학습률을 너무 크게 잡으면 골짜기를 훌쩍 건너뛰어 반대편 비탈로 올라가 버립니다. 반대로 너무 작게 잡으면 좀처럼 내려가지 못해 학습이 한없이 길어집니다. 학습률은 모델이 스스로 정하지 않고 사람이 정해 주는 값이라, 여러 값을 시험해 보며 맞춰 갑니다.
2. 앞으로 갔다가 거꾸로 온다 — 순전파와 역전파
그런데 문제가 하나 있습니다. 심층 신경망에는 가중치와 편향이 적어도 수천 개, 큰 것은 그보다 훨씬 많이 들어 있습니다. 손실이 크다는 것은 알겠는데, 그 많은 숫자 중 어느 것을 얼마나 고쳐야 할까요? 이 물음에 답하는 방법이 역전파(backpropagation)입니다.
순전파(forward propagation)
데이터를 입력층에 넣으면 값이 층을 차례로 지나 출력층까지 앞으로 흘러갑니다. 각 층에서 가중치를 곱하고 편향을 더하고 활성화 함수를 지나는, 앞에서 본 그 계산입니다. 끝에서 예측이 나오고, 정답과 비교해 손실을 측정합니다.
역전파(backpropagation)
이번에는 출력층에서 입력층 쪽으로 거슬러 가며, 「이 오차에 너는 얼마나 책임이 있는가」를 가중치마다 몫으로 나누어 매깁니다. 그 몫이 큰 가중치는 많이, 작은 가중치는 조금 고칩니다. 얼마나 고칠지는 경사하강법이 정합니다.
학습이란 결국 이 두 가지를 수없이 반복하는 일입니다. 앞으로 흘려 예측하고(순전파), 얼마나 틀렸는지 측정하고(손실), 거꾸로 책임을 나눠 매겨(역전파), 조금씩 고친다(경사하강법). 전체 데이터를 이렇게 한 번 다 거치는 것을 에포크(epoch)라 하고, 에포크를 몇 번 반복할지도 사람이 정해 줍니다.
층이 깊어질 때 생기는 어려움
역전파는 층을 하나 지날 때마다 값을 거듭 곱해 가며 거슬러 옵니다. 그러다 보니 층이 아주 깊으면 이 값이 점점 작아져 입력층 근처에는 고칠 신호가 거의 남지 않는 일이 생깁니다. 이것을 기울기 소실이라고 합니다. 반대로 값이 자꾸 커져 가중치가 마구 튀는 기울기 폭주가 생기기도 합니다. 인공신경망 연구가 한동안 벽에 부딪혔던 이유 가운데 하나가 이것이었고, ReLU 같은 활성화 함수와 여러 학습 기법이 나오면서 사정이 나아졌습니다. 이름을 외울 필요는 없고, 깊게 쌓으면 그냥 좋아지는 것이 아니라 새로운 어려움이 생긴다는 점만 기억해 두세요.
코드로 보는 「가중치 업데이트(학습)」 원리
더 알아보기: 가중치 업데이트를 코드로 따라가기
인공지능 분야에서 가장 많이 쓰이는 파이썬(Python) 코드로 학습 과정을 살펴봅시다. 오차를 줄이는 방향으로 가중치를 스스로 수정합니다.
input_data = 2 # 예시 입력값
target_answer = 4 # 예시 정답: 가중치가 2가 되면 맞힌다
def train_ai():
weight = 0.5 # 처음에 아무렇게나 정해 둔 가중치
learning_rate = 0.1 # 학습률: 한 번에 얼마나 크게 고칠지 (너무 크면 골짜기를 건너뛴다)
for step in range(100): # 최대 100번까지 가중치를 고쳐 나간다
prediction = input_data * weight
error = target_answer - prediction # 오차: 정답과 예측이 얼마나 다른가?
if abs(error) < 1e-6: # 오차가 충분히 작아지면 멈춘다
print(f"{step}번 고친 뒤 학습 완료! 가중치 = {weight:.4f}")
return weight
# 핵심: 오차와 입력값에 비례해서, 손실이 줄어드는 쪽으로 가중치를 고친다 (경사하강법)
weight = weight + (error * input_data * learning_rate)
print(f"100번 고쳤지만 오차가 남았습니다. 가중치 = {weight:.4f}")
return weight
train_ai()입력이 2, 가중치가 0.5, 정답이 3인 퍼셉트론을 생각해 봅시다. 순전파로 나온 예측은 얼마이고, 손실을 줄이려면 가중치는 커져야 할까요, 작아져야 할까요?
딥러닝은 어디에 쓰이고 있을까?
사람이 특징을 정해 주기 어려운 문제마다 딥러닝이 들어간다
아래 분야에는 공통점이 하나 있습니다. 모두 사진, 소리, 글, 영상처럼 표로 정리하기 어려운 데이터를 다룬다는 점입니다. 「무엇을 봐야 하는지」를 사람이 말로 적어 주기 어려운 문제에서 딥러닝이 힘을 냅니다.
| 분야 | 무엇을 학습하나 | 특히 조심할 점 |
|---|---|---|
| 자율주행 | 카메라와 센서로 들어온 장면에서 차선, 신호등, 사람, 다른 차를 구별한다 | 학습 때 본 적 없는 상황(폭설, 공사 구간)에서 판단이 흔들릴 수 있다 |
| 의료 영상 판독 | 엑스선·CT 영상에서 병으로 의심되는 부분의 모양과 밝기 패턴을 찾는다 | 최종 판단은 사람이 한다. 왜 그렇게 봤는지 설명하기 어렵다는 점이 특히 문제가 된다 |
| 음성 인식·번역 | 소리의 파형과 글의 앞뒤 순서를 함께 학습해 말을 글로, 글을 다른 언어로 옮긴다 | 사투리나 배경 소음처럼 학습 데이터에 적게 들어 있던 경우에 성능이 떨어진다 |
| 게임·전략 판단 | 바둑판이나 게임 화면의 상태를 보고 다음 수의 값어치를 매긴다 | 규칙이 분명한 판 위에서 강하다. 규칙이 흐릿한 현실 문제에 그대로 옮기기는 어렵다 |
| 창작 도구 | 수많은 그림·음악·글에서 형태와 결을 학습해 새로운 것을 만들어 낸다 | 학습에 쓴 원작자의 권리, 만들어진 결과물의 책임을 누가 지는가 하는 문제가 따른다 |
오해하기 쉬운 딥러닝의 진실
「딥러닝 모델이 왜 이런 결과를 냈는지 만든 사람에게 물어보면 알 수 있나요?」
알기 어렵습니다. 수많은 가중치가 여러 층에 걸쳐 얽혀 있어서,
어느 숫자가 어떤 이유로 그 판단을 이끌었는지 사람이 따라가기가 매우 어렵습니다.
이를 모델 해석의 어려움(블랙박스 문제)이라고 합니다.
그래서 진단, 채용, 대출 심사처럼 사람의 삶에 큰 영향을 주는 판단에서는 성능이 조금 낮더라도 근거를 설명할 수 있는 모델을 고르는 편이 나을 때가 있습니다. 무엇을 쓸지는 성능만으로 정해지지 않습니다.
어느 학교가 학생 상담 기록을 딥러닝 모델에 넣어 도움이 필요한 학생을 골라내려 합니다. 이 판단에서 맞히는 비율만큼 검토해야 할 것은 무엇이고, 왜 그런가요?
한눈에 보는 딥러닝
딥러닝이 학습해 가는 모습을 직접 눈으로 확인해 볼까?
딥러닝이 학습하는 과정을 직접 조작해 보기
아래 두 페이지에서 값을 바꿔 가며, 가중치가 고쳐지고 손실이 줄어드는 과정과 층을 너무 많이 쌓았을 때 생기는 과적합을 화면으로 따라가 봅니다.
탐구 활동 — 신경망의 구조를 바꿔 가며 관찰하기
브라우저에서 신경망을 직접 조립해 학습 과정을 볼 수 있는 도구입니다. 주소는 playground.tensorflow.org 입니다. 아래 순서대로 조작하며 은닉층과 뉴런의 수를 바꾸면 무엇이 달라지는지 확인해 봅시다.
- 문제 유형을 「분류(Classification)」로 두고, 왼쪽 DATA에서 데이터 모양을 하나 고릅니다. 동그라미 두 개가 겹쳐진 모양부터 시작해 보세요.
- HIDDEN LAYERS의 +/− 로 은닉층 수를, 각 층 위의 +/− 로 그 층의 뉴런 수를 정합니다.
- 위쪽 줄 왼편의 재생 버튼을 누르면 학습이 시작되고, 오른쪽 그림의 색 구분이 점점 또렷해집니다.
- 퍼셉트론을 잇는 선에 마우스를 올리면 그 연결의 가중치가 보입니다. 가중치가 0에서 멀수록(음수든 양수든) 선이 굵게 그려집니다.
- 오른쪽 위 Training loss(훈련 데이터의 손실)와 Test loss(따로 떼어 둔 데이터의 손실)가 줄어드는 모습을 함께 지켜봅니다. Epoch는 전체 데이터를 몇 번 거쳤는지를 셉니다.
| 고른 데이터 모양 | 은닉층 수 | 뉴런 총수 | 멈춘 때의 Epoch | Test loss |
|---|---|---|---|---|
정리해 봅시다
- 데이터 모양이 복잡해질수록 은닉층과 뉴런은 더 필요했나요, 덜 필요했나요?
- 은닉층을 계속 늘리기만 하면 Test loss도 계속 줄었나요? 늘렸는데 오히려 나빠진 경우가 있었다면 그 까닭을 앞에서 배운 말로 설명해 보세요.
- Training loss는 줄어드는데 Test loss는 줄지 않던 순간이 있었나요? 그때 모델에는 무슨 일이 일어난 걸까요?
심층 신경망은 문제에 맞게 특화됩니다
지금까지 본 것은 앞 층의 모든 값을 다음 층에 그대로 다 이어 붙이는 가장 기본적인 구조였습니다. 그런데 다루는 데이터의 성질에 따라, 연결하는 방식을 달리하면 훨씬 잘 풀리는 경우가 있습니다. 사진은 이웃한 점끼리 뭉쳐 봐야 뜻이 살고, 말과 글은 앞에 나온 것을 기억해야 뜻이 이어지기 때문입니다. 그래서 나온 것이 합성곱 신경망(CNN)과 순환 신경망(RNN)입니다. CNN은 이미지에서 특징을 뽑는 데, RNN은 음성·문장처럼 순서가 있는 데이터를 다루는 데 알맞습니다. 지금은 둘의 이름과 각각이 잘하는 일까지만 잡아 둡니다.
확인 퀴즈
배운 내용을 확인해 봅시다.