지난 글에서 AI는 행렬의 연산이 주로 이루어지기 때문에 먼저 Matrix 객체를 만들었습니다. 이 글에서는 이를 활용하여 선형 레이어를 만들고 테스트해 보겠습니다. 👍
📈 선형 레이어
💡 레이어(Layer)
신경망에서 입력받아 어떤 연산을 하고, 그 결과를 다음 단계로 넘기는 구성 요소가 되고 이러한 레이어들이 여러 개로 구성되어 하나의 모델이 된다.
(ex: MLP, LeNet-5, ResNet-50, GPT…)
선형 레이어는 입력된 숫자들을 가중치와 편향으로 계산해 새로운 숫자들로 바꾸는 레이어 입니다.
$$\underset{\substack{\uparrow\\\text{출력}}}{y}=\underset{\substack{\uparrow\\\text{입력}}}{X}\underset{\substack{\uparrow\\\text{가중치}}}{W}^T+\underset{\substack{\uparrow\\\text{편향}}}{b}$$⚠️ 가중치는 입력과 출력 특성의 수를 어떤 순서로 받느냐에 따라 전치 연산이 필요할 수도 있고 아닐 수 있습니다!
이 글에서 가중치 \(W\)를 \([\text{Output}, \text{Input}]\)로 받기 때문에 전치 연산이 필요합니다.
입력에 가중치를 곱하고 편향을 더하는 간단한 레이어 입니다.
구현
입력이 들어오면 계산해 낼 forward 함수와 차후에 가중치 업데이트(학습)에 필요한 값을 얻기 위한 backward 함수를 만듭니다. 전체 코드는 이곳에서 보실 수 있습니다.
💡 순전파(Forward) / 역전파(Backward)
⬇️ Forward(순전파)는 입력을 레이어들에 차례로 넣어 출력을 계산하는 과정
⤴️ Backward(역전파)는 출력의 오차가 각 가중치와 편향에 얼마나 영향을 받았는지 계산해, 학습에 필요한 기울기를 구하는 과정
생성자에서 input과 output의 순서를 정의했습니다.
| |
Linear 레이어에서 backward시 구해야 할 값은 아래 세 가지 입니다.
- 이전 레이어에서 역전파로 받은 기울기를 \(G=\frac{\partial L}{\partial Y}\)라고 한다면
- \(\frac{\partial L}{\partial W}=G^TX\) (가중치에 대한 기울기)
- \(\frac{\partial L}{\partial b}=\sum^N_\text{i=1}{G_i}\) (편향에 대한 기울기)
- \(\frac{\partial L}{\partial X}=GW\) (입력에 대한 기울기)

💡
backward할 때forward에서 사용했던input값과weight,bias값이 모두 필요합니다!
| |
맨 마지막에 있는 레이어의
gradOutput값은 예측값과 실제 정답과 비교한 오차의 미분값을 사용하는데 이때 오차를 구하는 방법은 추후 포스팅하겠습니다. 😎
테스트
| |
| |
| |

AI가 샘플로 만들어준 데이터와 결과를 비교했을 때 잘 작동하는 것을 볼 수 있었습니다. 👍