딥러닝 1편

퍼셉트론에서 역전파까지 — 손실, 경사하강법, 활성화 함수

suhyun·2026년 9월 17일·읽는 데 약 24분
한 줄로: 신경망 학습은 계산하고, 틀린 정도를 재고, 거꾸로 기울기를 구하고, 가중치를 고치는 네 단계의 반복이다.

1. 인공지능, 머신러닝, 딥러닝

인공지능을 만드는 방법이 머신러닝이고, 지금 쓰이는 머신러닝의 대부분이 딥러닝입니다. 세 단어는 크기가 다른 상자 세 개가 겹쳐 있는 모양입니다. 가장 큰 상자가 인공지능, 그 안에 머신러닝, 그 안에 딥러닝입니다. 이 글은 가장 안쪽 상자인 딥러닝을 처음부터 봅니다. 딥러닝은 퍼셉트론이라는 아주 작은 부품 하나에서 시작합니다. 이 부품이 무엇인지, 어떻게 배우는지, 이 부품을 쌓으면 왜 딥러닝이 되는지를 차례대로 보겠습니다.

규칙을 사람이 적지 않는다

보통 프로그램은 사람이 규칙을 전부 적습니다. 알바 월급을 계산하는 프로그램이라면, 월급은 시급 곱하기 시간이고 시급은 만 원이라고 사람이 적습니다. 머신러닝은 순서가 반대입니다. 규칙의 숫자를 적지 않고 데이터를 줍니다. 3시간 일한 날 3만 원, 5시간 일한 날 5만 원, 이런 기록입니다. 그러면 컴퓨터가 기록을 보고 시급이 만 원이라는 것을 스스로 찾아냅니다. 이렇게 데이터를 보고 숫자를 스스로 찾아내는 것을 학습이라고 합니다.

시급 정도는 사람이 적으면 됩니다. 그런데 사진을 보고 고양이인지 맞히는 프로그램은 어떨까요. 컴퓨터가 보는 사진은 숫자입니다. 사진은 아주 작은 점, 픽셀이 모인 것이고 픽셀 하나가 밝기 숫자 하나입니다. 작은 사진도 픽셀이 수십만 개입니다. 숫자 수십만 개를 보고 고양이인지 판단하는 규칙을 사람이 적을 수는 없습니다. 그래서 고양이 사진 수만 장을 주고 컴퓨터가 규칙을 스스로 찾게 합니다. 그 규칙을 계산식으로 만든 것이 퍼셉트론입니다.

2. 뉴런을 흉내 낸 퍼셉트론

뇌에는 신경세포, 뉴런이 약 천억 개 있습니다. 뉴런은 여러 뉴런에게서 신호를 받아 합치고, 합친 신호가 어느 정도 이상이면 다음 뉴런으로 신호를 보냅니다. 이것을 발화한다고 합니다. 입력을 여러 개 받아 합치고, 기준을 넘으면 출력하는 아주 단순한 장치입니다.

이 뉴런을 계산식으로 옮긴 것이 퍼셉트론입니다. 퍼셉트론은 숫자를 여러 개 받습니다. 이 숫자들이 입력입니다. 신호마다 중요도가 다르니 입력마다 곱해 주는 숫자가 있고, 이것을 가중치(weight)라고 부릅니다. 퍼셉트론은 입력마다 가중치를 곱하고, 곱한 것을 전부 더하고, 더한 값이 기준을 넘으면 1을, 못 넘으면 0을 냅니다.

숫자로 해 보기

알바를 두 군데 하는 사람이 있습니다. 편의점은 시급 1000원, 과외는 시급 10000원입니다. 오늘 편의점에서 10시간, 과외를 2시간 했습니다. 입력은 일한 시간 10과 2, 가중치는 시급 1000과 10000입니다. 10 곱하기 1000은 10000원, 2 곱하기 10000은 20000원, 더하면 30000원입니다. 기준을 10만 원으로 정해 두었다면 30000원은 못 넘으니 출력은 0입니다. 같은 1시간이라도 과외가 열 배 무겁게 계산됩니다. 그것이 가중치가 하는 일입니다.

임계값과 편향

기준 10만 원을 임계값이라고 부릅니다. 계산할 때는 이 문턱을 식 안으로 넣는 편이 편합니다. 30000원이 10만 원을 넘느냐 대신, 30000에서 100000을 뺀 값이 0을 넘느냐로 바꾸는 것입니다. 마이너스 70000은 0보다 작으니 출력 0, 결과는 같습니다. 이렇게 더한 값에 함께 넣어 주는 숫자를 편향(bias)이라고 부릅니다. 여기서는 마이너스 100000입니다.

정리하면 퍼셉트론의 계산은 입력에 가중치를 곱해 더하고, 편향을 더하고, 그 값이 0보다 크면 1, 아니면 0입니다. 이 곱해서 더한 값을 앞으로 z라고 부르겠습니다.

3. 학습은 가중치를 고치는 일

퍼셉트론에 있는 숫자는 입력, 가중치, 편향 세 종류입니다. 입력은 데이터라서 바꿀 수 없습니다. 오늘 10시간, 2시간 일한 사실은 바꿀 수 없습니다. 그러면 어떻게 해야 퍼셉트론이 1을 내게 할 수 있을까요. 시급을 올리면 됩니다. 편의점 시급이 9000원이라면 90000원에 과외 20000원을 더해 110000원, 10만 원을 넘어 출력이 1이 됩니다.

이렇게 입력은 그대로 두고 가중치를 바꿔서 원하는 출력이 나오게 만드는 과정이 학습입니다. 바꿀 수 있는 것은 가중치와 편향뿐입니다. 퍼셉트론도, 딥러닝도, 요즘 쓰는 챗봇도 학습은 전부 이것, 출력이 정답과 다를 때 가중치를 조금씩 고치는 일입니다.

과외 시급을 모른다면

이번에는 컴퓨터가 시급을 모르는 상태에서 시작합니다. 과외 하나만 봅니다. 컴퓨터 손에 있는 것은 과외 명세서 세 장입니다. 2시간 일한 날 2만 원, 5시간 일한 날 5만 원, 3시간 일한 날 3만 원입니다.

컴퓨터는 먼저 시급을 아무 값이나 짐작합니다. 7000원이라고 해 봅시다. 이 짐작으로 계산한 월급은 1만 4천 원, 3만 5천 원, 2만 1천 원입니다. 이것이 예측입니다. 세 날 전부 적게 예측했으니 시급을 올려야 합니다. 그런데 컴퓨터에게는 이것을 숫자로 알려 줘야 합니다. 그래서 얼마나 틀렸는지를 숫자 하나로 재는 방법이 필요합니다. 이 숫자가 손실(loss)입니다.

4. 숫자를 맞히는 손실 — MSE, MAE, Huber

손실은 예측과 정답이 얼마나 다른지를 나타내는 숫자입니다. 잘 맞히면 작고, 많이 틀리면 큽니다. 가장 먼저 떠오르는 방법은 예측에서 정답을 빼는 것입니다. 이 뺀 값을 오차라고 합니다. 돈은 천 원 단위로 세면 오차는 마이너스 6, 마이너스 15, 마이너스 9입니다.

이것을 그대로 더해 손실로 쓰면 문제가 있습니다. 부호입니다. 명세서가 많아지면 어떤 날은 적게, 어떤 날은 많게 예측합니다. 마이너스 6과 플러스 6을 더하면 0입니다. 두 번 다 틀렸는데 합치면 하나도 안 틀린 것처럼 보입니다. 그래서 손실을 만들 때는 부호를 없애야 하고, 이 문제를 어떻게 푸느냐에 따라 손실의 종류가 갈립니다.

제곱해서 없앤다, MSE

음수든 양수든 제곱하면 양수가 됩니다. 세 날의 오차를 제곱하면 36, 225, 81이고, 더하면 342, 3으로 나눠 평균을 내면 114입니다. 이것이 시급 7000원일 때의 손실입니다. 이 방법이 평균제곱오차, Mean Squared Error, MSE입니다. 숫자를 맞히는 문제에서 가장 기본으로 쓰는 손실입니다. 제곱은 조금 틀리면 벌점이 작고, 많이 틀리면 훨씬 큽니다. 6 틀리면 36이지만 15 틀리면 225입니다. 두 배 반 틀렸는데 손실은 여섯 배가 넘습니다.

이상치 앞에서는 절댓값, MAE

그 성질이 오히려 문제가 될 때가 있습니다. 셋째 명세서에 3만 원이 실수로 300만 원이라고 적혀 있다고 합시다. 이 한 장의 오차는 마이너스 2979, 제곱하면 약 887만입니다. 잘못 적힌 한 장이 손실의 거의 전부이고, 컴퓨터는 그 한 장을 맞히려고 시급을 엉뚱하게 올립니다. 이렇게 혼자 튀는 데이터를 이상치라고 합니다. 이상치가 많은 데이터에서는 부호만 떼는 절댓값을 씁니다. 세 장의 절댓값은 6, 15, 2979, 평균은 1000입니다. 여전히 크지만 887만과는 비교가 안 됩니다. 이것이 평균절대오차, MAE입니다.

둘을 합친 Huber

절댓값은 정답에 거의 다 왔을 때 약합니다. 오차가 6에서 0.6이 되면 절댓값 손실은 10분의 1이 되지만, 제곱 손실은 36에서 0.36, 100분의 1이 됩니다. 손실이 작아지는 정도는 시급을 얼마나 고칠지 정하는 데 그대로 쓰이기 때문에, 절댓값을 쓰면 정답 바로 옆에서도 크게 고쳐서 정답을 지나쳐 버리곤 합니다. 그래서 오차가 작을 때는 제곱을, 클 때는 절댓값을 쓰는 손실이 나왔습니다. 이것이 Huber 손실입니다.

5. 맞고 틀리는 문제의 손실 — 교차 엔트로피

월급처럼 숫자를 맞히는 문제를 회귀, 목표를 넘겼는지 못 넘겼는지처럼 둘 중 하나를 고르는 문제를 분류라고 합니다. 분류에서는 출력을 확률로 냅니다. 오늘 목표를 넘길 확률 0.9, 이런 식입니다. 정답은 넘겼으면 1, 못 넘겼으면 0입니다.

넘길 확률이 10%라고 했는데 넘긴 날과, 40%라고 했는데 넘긴 날을 비교해 봅니다. 둘 다 틀렸지만 10%라고 한 날이 훨씬 심하게 틀렸습니다. 못 넘긴다고 거의 확신했기 때문입니다. 1%라고 했는데 넘겼다면 그 예측은 다시는 믿지 않을 정도입니다. 정답에 준 확률이 0에 가까워질수록 손실은 한없이 커져야 합니다. 제곱은 이것을 못 합니다. 확률 0.1이든 0.01이든 제곱 손실은 0.81과 0.98로 별 차이가 없습니다.

마이너스 로그

그런 모양을 가진 함수가 로그입니다. 정답에 준 확률에 마이너스 로그를 씌우면 확률 0.9는 0.105, 0.5는 0.693, 0.1은 2.303, 0.01은 4.605입니다. 확률 1이면 0이고, 0으로 갈수록 값이 끝없이 커집니다. 이 손실을 교차 엔트로피라고 합니다. 답이 둘 중 하나일 때 쓰는 것이 이진 교차 엔트로피, BCE입니다.

답이 여러 개일 수도 있습니다. 다음 달에 편의점, 과외, 배달 중 어디서 돈을 가장 많이 벌지 맞히는 문제라면 출력은 세 칸이고, 칸마다 그 답일 확률이 들어갑니다. 편의점 0.3, 과외 0.6, 배달 0.1이고 정답이 과외면 과외 칸만 봅니다. 0.6에 마이너스 로그를 씌운 0.511이 손실입니다. 이것이 범주형 교차 엔트로피, CCE입니다. 답이 0부터 9까지 열 개인 손글씨 숫자 읽기도 이 손실을 씁니다.

문제손실하는 일
회귀MSE오차를 제곱해 평균. 많이 틀린 것을 특히 크게 벌함
MAE오차의 절댓값 평균. 이상치에 덜 흔들림
Huber오차가 작으면 제곱, 크면 절댓값
분류BCE답이 둘. 정답 확률에 마이너스 로그
CCE답이 여럿. 정답 칸 하나의 확률에 마이너스 로그

종류는 다르지만 손실의 역할은 하나입니다. 지금 얼마나 틀렸는지를 숫자 하나로 알려 주는 것입니다. 이 숫자가 있어야 다음 질문을 할 수 있습니다. 시급을 어느 쪽으로 얼마나 고쳐야 이 숫자가 작아지는가.

6. 경사하강법

시급 7000원일 때 손실은 114였습니다. 컴퓨터가 쓰는 방법은 단순합니다. 살짝 움직여 보고 손실이 어떻게 변하는지 봅니다. 시급을 10원 올려 7010원으로 하면 오차는 마이너스 5.98, 마이너스 14.95, 마이너스 8.97이고, 손실은 113.24입니다. 0.76 줄었으니 올리는 것이 맞는 방향입니다. 6990원으로 내리면 손실은 114.76으로 늘어납니다.

기울기

천 원 단위로 쓰면 시급 변화 0.01당 손실 변화가 마이너스 0.76, 비율로 마이너스 76입니다. 이 비율을 기울기라고 합니다. 가로축이 시급, 세로축이 손실인 곡선에서 지금 서 있는 점이 얼마나 가파른지입니다. 기울기가 음수면 시급을 올려야, 양수면 내려야 손실이 줄어듭니다. 기울기의 크기가 클수록 아직 정답에서 멀다는 뜻입니다. 방향과 거리를 기울기 하나가 알려 줍니다.

기울기의 반대로, 조금씩

규칙은 기울기의 반대 방향으로, 기울기가 크면 많이 작으면 조금 움직이는 것입니다. 새 시급은 옛 시급 빼기 기울기입니다. 그런데 76을 그대로 빼면 시급이 8만 3천 원으로 뛰어 정답을 한참 지나칩니다. 그래서 기울기에 작은 숫자를 곱합니다. 이 숫자가 학습률입니다.

새 시급 = 옛 시급 − 학습률 × 기울기
        = 7 − 0.03 × (−76) = 9.28   → 손실 6.57

114에서 6.57로 확 줄었습니다. 9280원에서 기울기는 마이너스 18.24, 다시 고치면 9830원, 손실 0.37입니다. 한 번 더 하면 9960원, 손실 0.02입니다. 세 번 만에 시급 만 원에 거의 닿았습니다. 처음에는 크게, 정답에 가까워질수록 작게 움직였습니다. 기울기가 정답 근처에서 작아지기 때문입니다. 경사를 따라 내려간다고 해서 경사하강법이라고 부르고, 딥러닝 학습은 지금도 거의 전부 이 방법입니다.

학습률이 하는 일

학습률을 0.1로 하면 7 더하기 7.6으로 시급이 1만 4천 600원이 되고, 손실은 268로 처음보다 커집니다. 다음 번엔 반대로 2950원까지 내려가고, 왔다 갔다 하다가 영영 못 잡습니다. 0.001이면 한 번에 76원씩 움직여 방향은 맞지만 수백 번을 가야 합니다. 그래서 학습률은 사람이 적당한 값을 정해 줍니다. 컴퓨터가 데이터에서 찾는 값이 아닙니다.

7. 계단 함수에서 시그모이드로

이 방법을 퍼셉트론에 쓰면 하나 걸립니다. 퍼셉트론의 출력은 기준을 넘으면 1, 못 넘으면 0으로 뚝 끊어집니다. 그래프가 계단 모양이라 계단 함수라고 합니다. 가중치를 살짝 올려도 z가 기준을 못 넘는 한 출력도 손실도 그대로이니 기울기가 0입니다. 계산값이 0.001이든 0.499든 출력은 똑같이 0이라, 0.499가 더 잘한 것이 손실에 전혀 반영되지 않습니다. 계단 함수로는 학습을 할 수가 없습니다.

그래서 계단을 부드럽게 깎아 매끄럽게 올라가는 S자 곡선으로 바꿉니다. 이 곡선이 시그모이드입니다. z가 0이면 0.5, 2면 0.88, 마이너스 2면 0.12를 냅니다. 뚝 끊기는 곳이 없으니 가중치를 살짝 움직이면 출력도 살짝 움직이고, 기울기가 생깁니다. 계단 함수에서 똑같이 0이던 0.001과 0.499가 시그모이드에서는 0.5002와 0.6222로 다르게 나옵니다.

시그모이드의 기울기는 계산이 아주 쉽습니다. 출력에, 1에서 출력을 뺀 값을 곱하면 됩니다. 출력이 0.5면 0.25입니다. 이렇게 z 뒤에 붙어서 출력 모양을 정하는 함수를 활성화 함수라고 합니다.

8. 직선 하나의 한계와 다층 퍼셉트론

입력이 두 개인 퍼셉트론에서 가중치를 둘 다 1, 편향을 마이너스 1.5로 두면 z는 x1 + x2 − 1.5입니다. z가 딱 0이 되는 점들을 이으면 직선 하나가 되고, 직선 위쪽은 출력 1, 아래쪽은 0입니다. 1과 1을 넣으면 z는 0.5라 1이고, 나머지 세 점은 z가 음수라 0입니다. 가중치와 편향을 바꾸면 직선이 움직이고 기울어지지만, 어떻게 바꿔도 직선입니다. 퍼셉트론 하나는 평면을 직선 하나로 둘로 가르는 장치이고, 학습은 그 직선을 데이터에 맞게 옮기는 일입니다.

XOR

두 입력이 다르면 1, 같으면 0을 내야 하는 문제를 XOR이라고 합니다. 점 네 개를 찍으면 답이 0인 두 점이 대각선으로 마주 보고, 답이 1인 두 점이 다른 대각선으로 마주 봅니다. 가로로 긋든 세로로 긋든 비스듬히 긋든 어느 한쪽에 0과 1이 섞입니다. 1969년에 이 사실이 증명되면서 퍼셉트론 연구가 한동안 멈추기까지 했습니다.

직선 두 개를 쓴다

직선 하나로 안 되면 두 개를 씁니다. 퍼셉트론 두 개가 같은 입력을 받습니다. 첫째는 z = x1 + x2 − 1.5로 둘 다 1일 때만 1을, 둘째는 z = 0.5 − x1 − x2로 둘 다 0일 때만 1을 냅니다. XOR에서 답이 1인 점은 첫째도 0, 둘째도 0인 점입니다. 그래서 세 번째 퍼셉트론이 두 출력을 받아 z = 0.5 − 첫째 − 둘째로 계산합니다.

  • 1과 0 → 첫째 0, 둘째 0, z = 0.5 → 출력 1
  • 1과 1 → 첫째 1, z = −0.5 → 출력 0
  • 0과 0 → 둘째 1, z = −0.5 → 출력 0

XOR이 풀렸습니다. 이렇게 퍼셉트론을 층으로 쌓은 것을 다층 퍼셉트론이라고 합니다. 앞의 두 퍼셉트론이 있는 층은 밖에서 보이지 않아 은닉층이라고 부릅니다. 입력층, 은닉층, 출력층입니다. 층이 많아질수록 더 복잡하게 휘어진 경계를 만들 수 있고, 층이 많다는 것을 깊다고 표현해서 딥러닝입니다.

자르는 단계가 없으면 쌓아도 소용없다

은닉층에서 z를 자르지 않고 그대로 넘긴다고 합시다. 세 번째 퍼셉트론이 첫째에 1, 둘째에 마이너스 1을 곱해 더하면 (x1 + x2 − 1.5) − (0.5 − x1 − x2) = 2x1 + 2x2 − 2입니다. x1과 x2에 숫자를 곱해 더한 식, 즉 직선 하나입니다. 직선에 숫자를 곱해 더하면 또 직선이라 백 층을 쌓아도 같습니다. 그래서 층 사이에는 z를 휘게 만드는 활성화 함수가 반드시 있어야 합니다. 딥러닝은 활성화 함수를 끼운 퍼셉트론 층을 깊게 쌓은 것입니다.

9. 역전파

층을 쌓으니 학습에 새 문제가 생깁니다. 손글씨 숫자를 읽는 작은 신경망도 입력 784개, 은닉층 100개, 출력 10개면 가중치가 약 8만 개입니다. 8만 개를 하나씩 살짝 움직여 손실을 다시 계산하면, 손실 한 번 계산에 8만 번 곱셈이 드니 한 번 고치는 데 63억 번 계산입니다. 데이터 6만 장이면 그 6만 배입니다. 게다가 은닉층 가중치는 손실과 바로 붙어 있지 않습니다. 은닉층 출력, 출력층, 예측을 거쳐서야 손실이 변합니다. 이 여러 단계를 거친 기울기를 한 번에 빠르게 구하는 방법이 역전파입니다.

이어진 비율은 곱한다

1달러가 1300원이고 1유로가 1.1달러면, 유로와 원 사이 환율표가 없어도 1.1 곱하기 1300, 1430원이 바로 나옵니다. 기울기도 비율입니다. w1이 변할 때 z1이, z1이 변할 때 a1이 얼마나 변하는지가 이어져 있으니, w1이 변할 때 손실이 얼마나 변하는지는 중간 비율을 전부 곱하면 나옵니다. 각 비율은 바로 옆끼리라 계산이 쉽습니다.

예제 — 순전파

입력 하나, 퍼셉트론 둘을 일렬로 잇습니다. 입력 x는 1, 첫째 퍼셉트론은 가중치 w1 = 0.5, 편향 b1 = 0.1이고, 곱해서 더한 값을 z1, 시그모이드를 거친 출력을 a1이라고 합니다. 둘째는 a1을 받아 w2 = −0.3, b2 = 0.2로 z2를 만들고, 시그모이드를 거친 최종 출력이 예측 ŷ(와이햇)입니다. 정답 y는 1, 손실은 (ŷ − y)²입니다. 목표는 손실에서 가장 멀리 있는 w1의 기울기입니다.

z1 = 0.5 × 1 + 0.1          = 0.6      → a1 = 0.6457
z2 = −0.3 × 0.6457 + 0.2    = 0.0063   → ŷ  = 0.5016
손실 = (0.5016 − 1)²         = 0.2484

입력에서 출력 방향으로 계산하는 것을 순전파라고 합니다. 중간에 나온 0.6457과 0.5016은 역전파에서 다시 쓰니 저장해 둡니다.

거꾸로 비율 다섯 개

  1. 예측 → 손실: 제곱 손실의 기울기는 항상 오차의 두 배라 2 × (−0.4984) = −0.9969
  2. z2 → 예측: 시그모이드 기울기. 0.5016 × 0.4984 = 0.25
  3. a1 → z2: z2 = w2 × a1 + b2이니 w2 그대로, −0.3
  4. z1 → a1: 다시 시그모이드 기울기. 0.6457 × 0.3543 = 0.2288
  5. w1 → z1: z1 = w1 × x + b1이니 x 그대로, 1

다섯 개 모두 저장해 둔 값, 가중치, 입력값만으로 나왔습니다. 새로 계산한 것이 없습니다.

곱해서 w1의 기울기

환율 계산과 똑같이 전부 곱하면 −0.9969 × 0.25 × (−0.3) × 0.2288 × 1 = 0.0171입니다. 양수이니 w1을 내려야 합니다. 학습률 0.1로 고치면 0.5 − 0.1 × 0.0171 = 0.4983입니다. 손실에서 가장 먼 가중치의 기울기를, 살짝 움직여 다시 계산하는 일 없이 곱셈 네 번으로 구했습니다. 손실에서 출발해 거꾸로 비율을 곱해 나간다고 해서 역전파, backpropagation입니다.

다른 가중치는 거의 공짜

w2의 기울기는 비율 셋입니다. 앞의 둘 −0.9969와 0.25는 이미 구했고, 마지막은 a1 = 0.6457입니다. 곱하면 −0.1609이고, 새로 한 계산은 곱셈 하나뿐입니다. 뒤쪽에서 구한 비율을 앞쪽 가중치들이 그대로 물려받기 때문에, 가중치가 8만 개여도 순전파 한 번, 역전파 한 번이면 기울기가 전부 나옵니다. 63억 번과 비교하면 왜 역전파 없이 딥러닝이 불가능했는지 알 수 있습니다.

10. 갈라지면 더하고, 사라지는 기울기

실제 신경망은 갈라집니다. 은닉층 뉴런 h1의 출력이 다음 층 g1, g2, g3 세 곳으로 갔다면, h1이 변할 때 손실은 세 경로를 통해 변합니다. 경로마다 비율을 곱해서 구한 뒤 세 경로를 더합니다. g1 경로가 −0.0100, g2 경로가 −0.0083, g3 경로가 −0.0283이면 합쳐서 −0.0466입니다. 여기에 h1 자신의 시그모이드 기울기를 곱하면 h1 앞쪽 가중치들이 물려받을 비율이 됩니다. 규칙은 두 개뿐입니다. 이어지면 곱하고, 갈라지면 더한다.

기울기 소실

층이 깊을수록 곱하는 개수가 늘어납니다. 시그모이드의 기울기는 아무리 커도 0.25입니다. 층 하나 지날 때마다 0.25 이하를 한 번씩 곱하니, 열 층이면 약 백만분의 1입니다. 입력 쪽 층에 도착한 기울기가 사실상 0이라 앞쪽 층은 학습이 멈춥니다. 이것이 기울기 소실이고, 딥러닝 초기의 큰 벽이었습니다.

ReLU

곱하는 값을 키우려면 활성화 함수를 바꿉니다. tanh(하이퍼볼릭 탄젠트)는 시그모이드와 비슷한 S자인데 마이너스 1에서 1 사이를 내고 기울기가 최대 1입니다. 나아졌지만 양 끝에서는 여전히 기울기가 0에 가깝습니다. 그다음 나온 것이 ReLU입니다. z가 음수면 0, 양수면 z 그대로 내보냅니다. 양수 구간에서는 기울기가 항상 1이고, 1은 몇 번을 곱해도 1입니다. 이 단순한 변화가 깊은 신경망 학습을 가능하게 했고, 지금 대부분의 딥러닝이 ReLU를 씁니다.

죽은 뉴런

ReLU는 음수 구간에서 출력도 기울기도 0입니다. 어떤 뉴런의 z가 계속 음수가 되면 그 뉴런 앞쪽 가중치는 기울기가 0이라 영원히 안 고쳐지고, 뉴런은 계속 0만 냅니다. 이것이 죽은 뉴런입니다. 그래서 Leaky ReLU는 음수면 0 대신 0.01 × z를 내 기울기 0.01을 남기고, ELU는 음수 구간을 부드러운 곡선으로 만듭니다. 기울기 소실과 죽은 뉴런의 원인은 같습니다. 곱셈 사슬 어딘가에 0에 가까운 값이 끼면 그 앞은 전부 멈춥니다.

11. 학습을 잘 되게 하는 요령

데이터를 몇 개씩 보고 고치나

명세서가 6만 장이면 전부의 기울기를 평균 내서 한 번 고치는 배치 경사하강법은 방향이 정확하지만 느립니다. 한 장 보고 바로 고치는 확률적 경사하강법(SGD)은 빠르지만 방향이 흔들립니다. 그래서 32장이나 64장씩 묶어 평균 내고 고치는 미니배치 경사하강법을 씁니다. 둘의 중간이고, GPU가 한꺼번에 계산하기 좋은 크기라 거의 항상 이것을 씁니다.

시작은 랜덤으로

은닉층 뉴런 두 개의 가중치를 똑같은 값으로 시작하면 같은 출력을 내고, 같은 기울기를 받아 같은 양만큼 고쳐집니다. 몇 번을 고쳐도 둘은 계속 똑같습니다. 그래서 가중치는 서로 다른 작은 난수로 시작합니다. 크기도 활성화 함수에 맞춰 정하는 공식이 있습니다. 너무 크면 시그모이드가 양 끝으로 밀려 기울기가 사라지고, 너무 작으면 신호가 층을 지나며 사그라들기 때문입니다.

외운 것과 이해한 것

학습 데이터의 손실은 계속 내려가는데 처음 보는 데이터는 못 맞히는 경우가 있습니다. 기출문제 답만 외운 학생처럼, 데이터의 규칙 대신 잡음까지 외운 것입니다. 이것이 과적합입니다. 확인하려면 데이터를 셋으로 나눕니다.

  • 훈련 데이터 — 가중치를 고칩니다.
  • 검증 데이터 — 처음 보는 데이터에서도 잘 맞히는지 확인하고, 학습률 같은 값을 조정하는 데 씁니다.
  • 시험 데이터 — 모든 조정이 끝난 뒤 딱 한 번 봅니다. 결과를 보고 또 조정하면 사실상 훈련에 쓴 것이 됩니다.

검증 손실이 내려가다가 올라가기 시작하면 그 시점에 학습을 멈춥니다. 이것이 조기 종료입니다.

가중치가 커지는 것을 막는다

과적합한 모델은 가중치가 비정상적으로 큰 경우가 많습니다. 특정 입력 하나에 지나치게 기대는 것입니다. 그래서 손실에 가중치의 크기를 벌점으로 더합니다. 이것이 정규화입니다. 가중치의 제곱을 더하는 L2 정규화는 가중치를 고르게 작게 만들고, 절댓값을 더하는 L1 정규화는 쓸모없는 가중치를 아예 0으로 만들어 필요 없는 입력을 걸러 냅니다. 드롭아웃은 학습할 때마다 뉴런의 일부를 무작위로 꺼서 특정 뉴런 몇 개에만 기대지 못하게 합니다.

정리

컴퓨터가 명세서를 보고 과외 시급을 찾아냈습니다. 시급이 가중치였고, 명세서와 예측의 차이를 숫자로 잰 것이 손실이었습니다. 살짝 움직여 방향을 찾고 그 반대로 고친 것이 경사하강법이었습니다. 퍼셉트론 하나는 직선 하나라 XOR을 못 풀어서 층을 쌓았고, 쌓으니 안쪽 가중치의 기울기가 필요해서 비율을 곱하는 역전파가 나왔습니다. 곱하다 보니 기울기가 사라져서 활성화 함수를 ReLU로 바꿨습니다. 순전파로 계산하고, 손실을 재고, 역전파로 기울기를 구하고, 가중치를 고칩니다. 이 네 단계를 반복하는 것이 딥러닝의 학습이고, 가중치가 수십억 개인 요즘 모델도 똑같습니다. 다음 글에서는 사진을 다루는 합성곱 신경망을 봅니다.

dev-news학습 노트소개개인정보 처리