카테고리 없음

딥러닝 개론 Lecture4.

bibidibabidiboop 2026. 4. 26. 21:16

다층 퍼셉트론(MLP: Multi-Layer Perceptron)

 

입력층과 출력층 사이에 은닉층을 가지고 있는 신경망 구조이다.

기존의 퍼셉트론이 한 개의 뉴런을 사용한 반면, MLP는 뉴런의 개수를 대폭 늘리고, 은닉층을 도입한 것이다.

 

퍼셉트론에서는 학습을 위한 활성화 함수로 계단 함수를 사용했지만, 여기에는 XOR 문제를 해결하지 못했던 이유가 있었다.

계단 함수는 기울기가 0이거나 정의할 수 없기 때문에 어느 방향으로 가중치를 움직여야 loss가 최소가 되는지 알 수 없고, 여러 개의 선형 함수는 layer를 늘려 거듭하더라도 선형 함수 한 개일 때와 같다.

이 문제를 해결하기 위해 MLP에서는 활성화함수로 비선형 함수를 사용한다.

비선형 함수는 Layer를 쌓을수록 복잡한 데이터 패턴을 학습할 수 있다.

비선형 활성화 함수의 종류는 다양하다.

1) Sigmoid

 

2) tanh

sigmoid 함수와 매우 비슷하지만 출력값이 -1과 1 사이이다.

 

 

순방향 패스

입력 신호가 입력층-은닉층-출력층을 거쳐 예측값을 계산하는 과정

 

직접 계산

1) 각각의 노드를 (가중치)*(입력값)+(바이어스)로 계산,

2) 그리고 그 값을 활성화함수에 넣어서 계산한 것이 다음 노드의 값

 

행렬로 표현

필기 참고

 

 

오차 계산

오차 = (예측값)과 (정답값)의 차이

오차는 작을수록 당연히 좋음;; 그래서 오차를 줄이는 방법으로 가중치를 변경하게 된다.

모델을 오차를 통해 자기가 잘하고 있는지, 어느 방향으로 가중치를 수정해야 할지 알게 된다.

이 오차를 계산하는 함수를 손실함수(Loss Function)이라고 한다.

Loss Function의 종류 중 하나에 MSE(평균 제곱 오차)가 있다.

Mean Squared Error = 정답값에서 예측값을 빼서 제곱한 값을 모든 출력 노드에 대하여 합한 값.

(미분의 편리성을 위해 시그마 전체 값을 절반으로 나눈다.)

 

* 학습 = 순방향 패스로 예측값 구하기 + 오차 계산 + 역전파 패스로 가중치 업데이트

* epoch = 학습할 때 데이터를 한 번 쭉 다 훑으며 '오차 계산 + 가중치 업데이트'를 마친 것

 

 

역전파 패스

순방향 패스로 구한 예측값과 실제 정답값의 차이로 오차를 계산한 뒤에 모든 노드들을 상대로

반대로 올라가면서 가중치 업데이트를 하는 과정이다.

역전파 패스는 Optimization 문제로 접근한다.

가중치 업데이트 과정 자체가 오차의 크기를 보고 가중치를 증가/감소시키는 과정이다.

이 과정에서 Gradient Descent(경사하강법)을 사용해서 가중치를 일일이 변경한다.

미분=기울기.를 이용하여 개별 가중치를 구할 수 있게 된다.

그러나 가중치를 변경할 때마다 출력을 다시 계산해야 해서 상당한 시간이 소요된다.

 

경사 하강법은 손실 함수의 값을 최소로 만드는 가중치를 찾는 알고리즘이다.

W* = argminE(W) ----> 3차원 그래프로 나타낼 수 있는데, 이 경우 음수이더라도 평면에서 가장 낮은 값을 찾으면 된다.

보통 다른 손실함수들은 보통 음수가 나오지 않게 설계 되어있다.

Loss function이 여러 개의 변수를 사용한 함수 형태일 때, 1차 미분값은 벡터가 되는데, 이를 Gradient라고 한다.

경사 하강법 = 함수의 1차 미분값(Gradient)를 사용하는 반복적인 최적화 알고리즘

손실 함수를 감소시키려면 미분값 부호와 반대 방향으로 가중치를 변경해야 한다.

(= 오차를 감소시키려면 미분값 부호의 반대 부호 방향으로 가중치를 업데이트 해야 한다.)

미분값이 음수이면 가중치는 증가시키고, 미분값이 양수이면 가중치는 감소시킨다.

 

역전파 학습 알고리즘

미분의 Chain Rule을 이용하여 유도 가능.

미분의 Chain Rule이란, 합성함수의 미분 규칙이다. (겉미분과 속미분을 곱해서 전체 미분값을 구하는 규칙)

MLP는 입력값이 여러 layer을 거치며 복잡하게 얽힌 합성함수 형태이다.

[입력층-->은닉층-->출력층-->오차]

이때, 가장 뒤에 있는 오차를 앞쪽에 있는 가중치로 직접 미분하는 것이 매우 어렵기 때문에 Chain Rule을 사용한다.

Chain Rule을 쓸 경우 단계를 쪼개서 곱하기만 하면 되기 때문이다.

 

Chain Rule을 통해 오차를 가중치로 미분해서 업데이트 하는 3단계 과정

1) 오차를 출력값으로 미분

: 출력값이 변할 때 오차가 얼마나 변하는지 구하는 과정

2) 출력값을 가중합으로 미분

: 활성화 함수가 출력에 미치는 과정 = 활성화 함수의 미분값

3) 가중합을 가중치로 미분

: 가중합----> z =wx +b, 이걸 w로 미분하면 그냥 입력값 x만 남음....

연쇄 법칙에 따라서, 1) 2) 3)을 모두 곱해주면 출력층의 오차 정보를 거꾸로 곱해 나가면서

입력 쪽 가중치의 수정 방향을 알아낼 수 있게 된다.

 

교안에 나온 내용

1번: 손실함수 미분값  --  유닛의 출력값 변환에 따른 오차의 변화율

2번: 활성화 함수의 미분값  --  입력합의 변화에 따른 유닛 j의 출력 변화율

3번: 입력값  --  가중치의 변화에 따른 net j의 변화율

*세부 의미

1번: 노드j의 출력값이 최종 오차(E)를 만드는 데 얼마나 기여를 했느냐

2번: 가중합(net j)가 들어왔을 때, 활성화 함수가 이걸 얼마나 증폭시키거나 감쇄시켜서 출력값(out j)를 내보냈느냐

3번: 업데이트 하려는 가중치(w ij)가 전체 가중합(net j)를 만드는 데 얼마나 기여했느냐