참고 자료: 모두의 연구소(https://www.youtube.com/watch?v=mmqkH2IK8to)
인공 신경망이 순전파 과정을 진행하여 예측값과 실제값의 오차를 계산하였을 때 어떻게 역전파 과정에서 경사 하강법을 사용하여 가중치를 업데이트를 한다. 이 과정을 직접 그려보고 이해해보자.
L번째 Layer의 K번째 데이터
L번째 Layer의 K번째 weight
G: non-linear activation function
마지막 weight(w11, w12, w21, w22) 업데이트 하기
첫번째 weight(w11)를 업데이트 하기
즉, weight를 업데이트 시키는 식은 기존 weight에 오차값(non-linear function이 고려된 보정된 오차 값)*초기 데이터를 빼는 식으로 학습이 된다.
w = w - learning_rate * delta(보정된 오차) * a(초기 데이터)
코드로 구현해서 chain rule 이해해보기
만약에 아래와 같은 코드가 있을때, chain rule이 어떻게 이루어질까
결과는 아래와 같을 것이다.
requires_grad: 이 변수를 미분할 것이다. (이 옵션을 지정해주지 않으면, 미분을 할 수 없다.)
중간 변수(y, z, k)를 미분하기 위해서는 y.retain_grad()의 메소드를 활용한다.
- with torch.no_grad(): 이안에서는 미분을 해주지 않는다.(모델 테스트 시에는 불필요하게 메모리 쓸 필요 없기 때문!)
backward(): 미분진행, backpropagation
x.grad: dk/dx에 5.을 입력한 결과를 출력
'인공지능 > Deep Learning' 카테고리의 다른 글
분류경계선이 선형으로 나오는 모델은 선형분류만 가능 (0) | 2023.03.02 |
---|---|
BinaryClassification 직접 구현 (0) | 2023.03.01 |
Pytorch의 weight는 왜 T(transpose)할까? (0) | 2023.03.01 |
Batch Normalization (0) | 2023.02.25 |
최적화 개념과 경사 하강법(Gradient Descent) (0) | 2023.02.21 |