시리즈 | Deep Learning - 3. 인공신경망의 동작
딥러닝 시리즈 2편에서 딥러닝의 기반이 되는 퍼셉트론과 인공신경망에 대해 다루었다. AND 게이트, OR 게이트, XOR 게이트 등 몇몇 예시를 통해 이러한 구조가 특정 작업들을 수행할 수 있음은 확인했지만, 구체적으로 어떻게 동작하는지, 이러한 구조가 일반화될 수 있는지에 대해서는 아직 다루지 않았다.
특히 중요한 것은, 앞선 2편에서 다룬 신경망 구조에서는 특정 작업을 수행하기 위한 신경망을 설계하는 과정에서 가중치를 사람이 직접 설정했다는 것이다. 만약 사람이 신경망의 구조와 가중치를 매번 일일이 설정해야 한다면 이를 인공지능 기법이라고 부르기는 어려울 것이다. 본 포스트에서는 구체적인 신경망의 동작 원리와, 신경망이 스스로 학습하는 방법에 대해 간단히 다룬다.
신경망의 학습 - 패러다임의 전환
잠시 1편에서 다룬 머신러닝의 정의로 돌아가보자. 머신러닝 관점에서의 접근의 가장 중요한 요소는 데이터다. 구체적으로, 개와 고양이 사진이 주어졌을 때 이를 구분하는 문제를 생각해보자. 사람이 눈으로 개와 고양이를 구분하기는 그리 어렵지 않지만 컴퓨터에게 분류 작업을 맡기고자 한다면 말이 달라진다. 픽셀별 RGB값이 주어져 있는 데이터를 가지고 어떤 기준으로 개와 고양이를 구분할 수 있을까? 꼬리의 길이, 얼굴의 생김새 등 어떤 기준을 생각하더라도 조금만 고민해보면 개와 고양이를 구분하는 명확한 로직을 설계하기란 매우 어렵다는 것을 알 수 있다.
여기서 머신러닝이 택하는 방법은 알고리즘을 처음부터 설계하는 대신, 주어진 데이터를 잘 활용해 문제를 해결하는 것이다. 대표적으로 이미지에서 특징(feature)를 추출하는 방법이 있다. 보다 엄밀하게는, 이미지로 주어진 입력 데이터에서 핵심이 되는 데이터를 선택하고 조합하는 과정을 거친다고 설명할 수 있다. 이런 특징을 통해 벡터로 변환된 이후에는 지도학습 기법 등 기존의 머신러닝 방법론들을 통해 스스로 학습할 수 있다.
위의 사례에서 알 수 있듯이, 기계가 데이터로부터 규칙을 찾아내어 스스로 학습하는 것이 머신러닝의 본질이다. 그러나 앞서 말한 특징 추출의 경우 아직 인간이 개입해야 한다. 고양이와 개를 분류하는 문제의 사례에서 얼굴의 크기, 꼬리의 모양, 몸통의 길이 등 어떤 특징을 추출해야 하는지는 인간이 임의로 정해야 한다. 여기서 딥러닝과 다른 머신러닝 기법들의 큰 차이점이 발생한다.

딥러닝은 이 ‘특징을 정하는 일’을 모델 스스로가 맡는다. 합성곱 신경망(CNN)을 예로 들면, 초기 계층은 가장자리·모서리 같은 저수준 패턴을, 더 깊은 계층은 귀·눈·몸통처럼 고수준 패턴을 자동으로 조합해 낸다. 우리는 어떤 특징을 쓸지 미리 설계하지 않고, 데이터와 모델 구조 등만 정한 뒤 후술할 방법론을 통해 모델을 학습시킨다. 이 과정에서 “특징 설계 → 분류기 학습”의 두 단계를 “표현과 분류기를 함께 학습”하는 한 단계로 통합한다. 이를 end-to-end 학습이라고 하는데, 다시 말해 규칙을 사람이 짜던 패러다임에서 표현을 데이터로부터 스스로 찾아내도록 설계하는 패러다임으로 초점이 이동한다. 이것이 신경망 학습이 만든 가장 큰 전환점이다.
신경망의 학습 - 손실 함수
잠시 처음으로 돌아와, '좋은 모델'이란 무엇일지 고민해 보자. 특정 입력에 대한 실제 답이 존재하는 상황에서, 모든 입력에 대해 항상 답을 출력하는 모델이 있다면 가장 이상적일 것이다. 이러한 목표 달성을 위해서는 하나의 척도가 필요하다. 손실 함수란, 예측한 값과 실제 값 사이의 차이를 측정하는 함수로써 학습에 중추적인 역할을 한다. 다시 말해, 손실 함수는 현재 모델의 성능과 개선해 나가야 할 방향을 하나의 지표로 표현한다.
손실 함수에는 다양한 종류가 존재하는데, 대표적으로 오차제곱합(Sum of Squares for Error, SSE)와 교차 엔트로피 오차(Cross Entropy Error, CEE)가 있다.
오차제곱합(SSE)
\[E=\frac{1}{2}\sum_{k}{(y_{k}-t_{k})^2}\]
오차제곱합은 일반적으로 가장 많이 쓰이는 손실 함수이다. \( y_{k}\)는 신경망의 추정값, \( t_{k}\)는 정답 레이블을 의미한다. 식이 단순하여 직관적으로 의미를 알 수 있는데, 각각의 값에 대해 신경망의 추정값과 정답 레이블의 값의 오차(차의 제곱)을 모두 더한 형태로 식이 구성되어 있다. 또, 일반적인 오차제곱합과는 달리 손실 함수로 오차제곱합을 사용할 경우 \(\frac{1}{2}\)가 계수로 붙는 것을 알 수 있는데, 이는 미분을 보다 수월하게 해주기 위함일 뿐 수학적으로 큰 의미는 없다.
교차 엔트로피 오차(CEE)
\[E=-\sum_{k}{t_{k}\log{y_{k}}}\]
위와 마찬가지로, \( y_{k}\)는 신경망의 추정값, \( t_{k}\)는 정답 레이블을 의미한다. 이때 \( t_{k}\)는 정답이면 1, 아니면 0의 값을 가지는 원-핫 인코딩을 통해 표현된다. 수식의 형태가 복잡해 보이지만, 정답을 제외한 인덱스에서 \( t_{k}\)의 값이 모두 0이라는 것을 생각한다면 \( t_{k}\)값이 1인 정답 레이블에서 \(-\log{y_{k}}\)의 값이 곧 교차 엔트로피 오차라는 것을 알 수 있다. 이 경우 \( y_{k}\)가 1에 가까울수록 값이 작아지고, 0에 가까울수록 값이 커지므로 손실 함수의 기능을 수행함을 직관적으로 납득할 수 있다.
앞서 알아본 두 종류의 손실 함수 이외에도 학습 목적이나 방법론에 따라 다양한 종류의 손실 함수가 존재한다. 그러나 일반적으로 딥러닝에서 가장 자주 사용되는 형태의 손실 함수는 오차제곱합과 교차 엔트로피 오차이며, 앞으로도 두 손실함수를 위주로 다룰 것이다.
기울기와 경사하강법
앞선 논의의 내용을 요약한다면, 딥러닝에서 “학습한다”는 말은 손실 함수가 작아지도록 매 스텝마다 가중치를 적절히 조정한다는 뜻으로 받아들일 수 있다. 이때, 어디로 얼마나 움직일지를 결정하는 핵심 도구가 바로 경사하강법이다. 경사하강법의 이론적 토대가 되는 편미분의 개념과 그래디언트의 개념, 경사하강법의 작동 방식에 대해 소개한다.
편미분: 다변수 함수에서의 부분 기울기
어떤 일변수 함수 \(f(x)\)의 미분 \(f'(x)\)는 점에서의 접선 기울기를 의미한다. 한 점에서 \(f'(x)\)의 값은 \(f(x)\)가 가파르게 증가하는 정도를, 부호는 오르내림의 방향을 말한다.

다변수 함수 $f(x_{1},\dots,x_{d})$에서 한 변수만 바꾸고 나머지는 고정해 본 미세한 변화율을 그 변수에 대한 편미분이라 부른다. 예를 들어 $f(x,y)=x^{2}+xy$라면 $\frac{\partial f}{\partial x}=2x+y$, $\frac{\partial f}{\partial y}=x$가 된다. 일변수에서의 미분 $f'(a)$가 점 $x=a$에서의 접선 기울기(오르내림의 정도와 방향)를 뜻하듯, 편미분은 각각의 축 방향으로만 움직였을 때의 순간 변화율을 뜻한다. 이 편미분들을 한데 모은 벡터
\[\nabla f(\mathbf{x})=\left(\frac{\partial f}{\partial x_{1}},\dots,\frac{\partial f}{\partial x_{d}}\right)\] 를 그래디언트(기울기 벡터)라 한다. \(\nabla f(\mathbf{x})\)는 함수가 가장 빠르게 증가하는 방향을 가리키며, 그 크기 \(|\nabla f(\mathbf{x})|\)는 증가 속도의 세기를 나타낸다. 임의의 단위벡터 $\mathbf{u}$ 방향으로의 순간 변화율(방향미분)은 $D_{\mathbf{u}}f(\mathbf{x})=\nabla f(\mathbf{x})\cdot\mathbf{u}$로 주어지므로, 가장 빨리 내려가는 방향은 정의상 $-\nabla f(\mathbf{x})$가 된다.

이 사실은 1차 테일러 전개로도 확인된다. 작은 $\Delta$에 대해
\[f(\mathbf{x}+\Delta)\approx f(\mathbf{x})+\nabla f(\mathbf{x})^{\top}\Delta,\]
따라서 $\Delta=-\eta,\nabla f(\mathbf{x})$로 두면
\[f(\mathbf{x}+\Delta)\approx f(\mathbf{x})-\eta||\nabla f(\mathbf{x})||^{2}\]
즉 충분히 작은 스텝 $\eta>0$에서는 함수값이 1차 근사 수준에서 감소한다.
경사하강법
경사하강법은 이름에서 알 수 있듯이, 함수의 그래디언트를 이용하여 국소값(Local minimum)을 찾는 방법이다. 앞선 논의의 내용을 손실 함수 $\mathcal{L}(\boldsymbol{\theta})$의 최소화로 옮기면 경사하강법의 업데이트 규칙을 알 수 있다.
\[\boldsymbol{\theta}\leftarrow\boldsymbol{\theta}-\eta\nabla_{\boldsymbol{\theta}}\mathcal{L}(\boldsymbol{\theta}).\]
여기서 $\boldsymbol{\theta}$는 신경망의 모든 파라미터를 모은 벡터, $\eta>0$는 한 번에 얼마나 이동할지를 정하는 학습률이다. 규칙은 단순하다. 현재 파라미터에서 기울기 $\nabla\mathcal{L}$을 계산하고, 손실이 가장 빨리 줄어드는 방향 $-\nabla\mathcal{L}$으로 한 걸음 움직인다. 이를 반복하면 손실이 감소하는 쪽으로 점점 내려가게 된다. 일변수 예시로 $\mathcal{L}(w)=(w-3)^{2}$를 생각하면 $\nabla\mathcal{L}(w)=2(w-3)$, 업데이트는 $w\leftarrow w-2\eta(w-3)$가 되어 $w$가 $3$으로 수렴한다. 다변수에서도 등고선(동일 손실값 곡선)을 가로질러 최소점을 향해 내려가는 모습으로 해석할 수 있다.

경사하강법이 실제로 잘 작동하려면 $\eta$의 선택이 중요하다. $\eta$가 너무 크면 손실 계곡을 건너뛰며 발산(overshooting)할 수 있고, 너무 작으면 수렴은 가능하더라도 지나치게 느리다. 이는 아래의 시각화를 통해 직관적으로 이해할 수 있다.

경사하강법에 관한 몇 가지 이야기(optional)
딥러닝의 손실 지형은 일반적으로 비선형·비볼록이어서 지역 최소, 안장점(방향에 따라 극대/극소가 바뀌는 점), 축마다 곡률이 크게 다른 협곡이 흔하다. 이 때문에 단순한 경사하강법이 느려지거나 지체되는 구간이 생길 수 있고, 이를 완화하려 모멘텀이나 적응적 학습률(Adagrad, RMSProp, Adam 등)을 함께 쓴다. 모멘텀은 과거의 이동 방향을 누적해 작은 요철에 덜 민감하게 만들고, 적응적 방법은 좌표마다 스케일을 자동 조정해 학습률 선택의 부담을 줄인다. ReLU처럼 일부 층에서 비미분점이 존재하더라도, 실제 구현에서는 서브그래디언트나 자동미분의 관례적 처리로 업데이트가 진행되어 학습이 중단되지 않는다. 정지 기준은 기울기 노름의 감소, 검증 손실의 더 이상 개선 없음(얼리 스토핑), 혹은 사전에 정한 스텝/에폭 도달 등이 쓰인다.
요약하자면, 편미분은 각 축으로 본 미세 변화율이고, 그래디언트는 그것들을 모아 “가장 가파른 오르막”을 가리키는 벡터다. 손실을 줄이고자 한다면 항상 그 반대 방향인 $-\nabla\mathcal{L}$로 이동하면 되고, 이것이 경사하강법의 핵심이다. 학습률, 데이터 배치 방식, 손실 지형의 특성에 따라 수렴 과정이 크게 달라지므로, 미니배치와 적절한 스케줄·모멘텀/Adam·얼리 스토핑 같은 실전 기법을 결합해 안정적이면서도 효율적인 학습을 구현한다.
맺음말
지금까지 구체적인 신경망의 동작 원리와, 신경망이 스스로 학습하는 방법을 다뤘다. 인공지능의 학습에 있어 규칙을 사람이 짜던 패러다임에서 표현을 데이터로부터 스스로 찾아내도록 설계하는 패러다임으로 초점이 이동한 것은 굉장히 큰 전환점이다.
본 포스트에서는 신경망의 학습에 관한 기초 이론과 경사하강법에 대해 다뤘다. 다음 포스트에서는 딥러닝의 학습에서 가장 기본이 되는 오차역전파법에 대해 구체적으로 다루는 것을 목표로 한다.
참고문헌


