python을 이용한 단일 신경망 구현 (1)

skjh314108·2026년 8월 17일

AI 스터디

목록 보기
1/13

딥러닝을 배우기 위해서 최소 단위인 단일 신경망 구현에 대해서 배워보겠습니다.

1. 회귀와 분류

1) 회귀

회귀는 실수 값을 예측하는 것을 의미합니다.

가장 간단한 회귀로는 선형 회귀가 있습니다.

다음 그림처럼 주어진 데이터에 대해서 적절한 실수 값을 내놓는 모델 즉, w(weight), b(bias)를 찾는 것이 머신러닝의 목표입니다.

다음 그림처럼 입력값이 하나(x)인 경우도 있지만
실제로는 더 많은 입력값을 가지는 모델도 있습니다.

그런 경우 w와 x는 단일한 값이 아닌 벡터로 나타내어 집니다.

그런데 w와 x의 연산과 b로 회귀를 수행하였을때 적절한 모델을 만들었는지 어떻게 확인할 수 있을까요.

회귀에서는 실제값과 예측값 사이의 오차가 작은 모델을 좋은 모델이라고 볼 수 있습니다.

실제값을 yy, 모델의 예측값을 y^\hat{y}라고 하면 두 값의 차이를 오차라고 합니다.

오차=y−y^\text{오차}=y-\hat{y}

하지만 여러 데이터의 오차를 그대로 더하면 양수와 음수가 서로 상쇄되어 전체 오차가 작게 나타날 수 있습니다.

따라서 선형 회귀에서는 일반적으로 각각의 오차를 제곱한 뒤 평균을 구하는 평균제곱오차(MSE, Mean Squared Error)를 사용합니다.


MSE=1n∑i=1n(yi−y^i)2\mathrm{MSE}=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2

여기서 nn은 전체 데이터의 개수, yiy_i는 ii번째 데이터의 실제값, y^i\hat{y}_i는 모델이 예측한 값입니다.

오차를 제곱하면 음수와 양수 오차가 서로 상쇄되지 않으며, 오차가 클수록 더 큰 값을 부여할 수 있습니다.

따라서 평균제곱오차가 작을수록 모델의 예측값이 실제값에 가깝다고 볼 수 있습니다. 단일 신경망은 이 오차가 작아지도록 가중치 ww와 편향 bb를 반복해서 수정하며 학습합니다.


이제는 이 w와 b를 어떻게 수정할 건지 알아봅시다.

이를 위해 경사하강법(Gradient Descent)을 사용합니다.

경사하강법은 오차 함수의 기울기를 구하고, 오차가 감소하는 반대 방향으로 ww와 bb를 수정하는 방법입니다.

w←w−η∂L∂ww \leftarrow w-\eta\frac{\partial L}{\partial w}
b←b−η∂L∂bb \leftarrow b-\eta\frac{\partial L}{\partial b}

여기서 η\eta는 한 번에 값을 얼마나 수정할지 결정하는 학습률(learning rate)입니다.

한 개의 데이터에 대한 오차를 err=y^−y\mathrm{err}=\hat{y}-y라고 하면 기울기는 다음과 같습니다.

wgrad=x⋅errw_{\mathrm{grad}}=x\cdot\mathrm{err}
bgrad=errb_{\mathrm{grad}}=\mathrm{err}

따라서 이 기울기를 기존의 ww와 bb에서 빼는 과정을 반복하면 오차가 점차 감소합니다.

2) 분류

회귀가 연속적인 실수 값을 예측하는 문제라면, 분류는 주어진 데이터가 어떤 범주에 속하는지 예측하는 문제입니다.

두 개의 범주 중 하나를 예측하는 문제를 이진 분류(Binary Classification)라고 하며, 일반적으로 두 범주를 00과 11로 표현합니다.

단일 신경망은 먼저 입력값과 가중치의 선형 결합을 계산합니다.


z=Xw+bz=Xw+b

하지만 zz는 범위가 정해져 있지 않기 때문에 그대로 확률로 해석하기 어렵습니다. 따라서 이진 분류에서는 zz를 시그모이드 함수에 통과시킵니다.


a=11+e−za=\frac{1}{1+e^{-z}}

시그모이드 함수는 입력값을 00과 11 사이의 값으로 변환합니다. 이 값을 범주 11에 속할 확률로 해석할 수 있습니다.

일반적으로 aa가 0.5보다 크거나 같으면 11, 작으면 00으로 분류합니다.

y^={1(a≥0.5) 0(a<0.5)\hat{y}= \begin{cases} 1 & (a \geq 0.5)\ 0 & (a < 0.5) \end{cases}

이진 분류에서는 실제값 yy와 시그모이드 함수의 출력 aa를 비교하기 위해 이진 크로스엔트로피(Binary Cross Entropy)를 사용합니다.

하나의 데이터에 대한 오차 함수는 다음과 같습니다.


L=−[ylog⁡(a)+(1−y)log⁡(1−a)]L=-\left[y\log(a)+(1-y)\log(1-a)\right]

실제값이 11이면 −log⁡(a)-\log(a)를 계산하고, 실제값이 00이면 −log⁡(1−a)-\log(1-a)를 계산합니다. 따라서 모델이 정답에 가까운 확률을 출력하면 오차가 작아지고, 잘못된 예측을 하면 오차가 커집니다.

전체 데이터에 대한 평균 오차는 다음과 같습니다.


L=−1m∑i=1m[yilog⁡(ai)+(1−yi)log⁡(1−ai)]L=-\frac{1}{m}\sum_{i=1}^{m}\left[y_i\log(a_i)+(1-y_i)\log(1-a_i)\right]

여기서 mm은 전체 데이터의 개수입니다.


시그모이드 함수와 이진 크로스 엔트로피를 함께 사용하면 손실 함수 L을 선형 출력 z에 대해 미분한 결과가 다음과 같이 간단해집니다.


err=a−y\mathrm{err}=a-y

이를 이용하여 ww와 bb의 기울기를 계산합니다.

wgrad=1mXT(a−y)w_{\mathrm{grad}}=\frac{1}{m}X^T(a-y)
bgrad=1m∑i=1m(ai−yi)b_{\mathrm{grad}}=\frac{1}{m}\sum_{i=1}^{m}(a_i-y_i)

계산한 기울기와 학습률 η\eta를 이용하여 ww와 bb를 수정합니다.


w←w−ηwgradw \leftarrow w-\eta w_{\mathrm{grad}}
b←b−ηbgradb \leftarrow b-\eta b_{\mathrm{grad}}

이 과정을 여러 번 반복하면 이진 크로스엔트로피가 감소하면서 모델이 데이터를 올바르게 분류하도록 학습됩니다.


이처럼 출력에서 발생한 오차를 이용하여 가중치와 편향의 기울기를 계산하는 과정을 역전파(Backpropagation)라고 합니다.

계산된 기울기는 경사하강법을 통해 모델의 가중치와 편향을 수정하는 데 사용됩니다.

profile
인공지능, 알고리즘, ps 등을 다룹니다

0개의 댓글