[케라스 창시자에게 배우는 딥러닝] 참고
신경망의 각 층은 입력 데이터를 다음과 같이 변환한다.
예)
keras.layers.Dense(512, activation='relu')
⬇
output = relu(dot(W, input) + b
이 식에서 텐서 W와 b는 층의 속성처럼 볼 수 있다.
이들은 가중치(weight) 또는 훈련되는 파라미터(trainable parameter)라고 부를 수 있으며, 각각 커널(kernel)과 편향(bias)라고 부르기도 한다.
*커널은 여러가지 의미로 사용된다. SVM의 커널 함수, 합성곱 신경망의 필터를 지칭하기도 함.
이런 가중치에는 훈련 데이터를 신경망에 노출시켜서 학습된 정보가 담겨 있다.
초기에는 가중치 행렬이 작은 난수로 채워져 있다. 이것을 무작위 초기화(random initialization) 단계라고 한다.
물론 W와 b가 난수일 때는 의미 없는 표현이 만들어진다.
하지만 이건 그냥 시작 단계일 뿐 그 다음에는 피드백 신호에 기초해 가중치가 점진적으로 조정(업그레이드) 될 것이다.
이런 점진적인 조정 또는 훈련(training)이 머신러닝 학습의 핵심이다.
훈련은 아래와 같은 훈련 반복 루프(training loop) 안에서 일어난다. (필요한 만큼 반복 루프 안에서 학습이 반복된다.
🔄 훈련 반복 루프(training loop) |
1. 훈련 샘플 x와 이에 상응하는 타깃 y의 배치를 추출한다. |
2. x를 사용해 네트워크를 실행하고(forward pass단계), 예측 y_pred를 구한다. |
3. y_pred와 y의 차이를 측정해 이 배치에 대한 네트워크 손실을 계산한다. |
4. 배치에 대한 손실이 조금 감소되도록 네트워크의 모든 가중치를 업데이트한다. |
이런 훈련을 반복하다보면 결국 훈련 데이터에서 네트워크의 손실(y_pred와 타깃y의 오차)가 매우 작아질 것이다.
이 네트워크는 입력에 정확한 타깃을 매핑하는 것을 학습했다. 전체적으로 보면 마술처럼 보이지만 개별적인 단계로 쪼개어 보면 단순하다.
루프의 1단계는 그냥 입출력 코드를 말한다. ✅
2단계와 3단계는 몇 개의 텐서 연산을 적용하는 것이다. ✅
조금 복잡한 부분은 4단계 네트워크의 가중치를 업데이트 하는 것인데, 개별적인 가중치 값이 있을 때 값이 증가해야 할지 감소해야 할지, 또 얼만큼 업데이트해야 할지 어떻게 알 수 있을까? ❓❗
방법1)
한가지 간단한 방법은 네트워크 가중치 행렬의 원소를 모두 고정하고 관심 있는 하나만 다른 값을 적용해 보는 것이다.
1. 가중치 초깃값 0.3이라 가정
2. 배치 데이터를 정방향 패스에 통과시킨 후 네트워크 손실 결과가 0.5가 나옴
3. 가중치 값을 0.35로 변경하고 다시 실행했더니 손실이 0.6으로 증가함
4. 가중치를 다시 반대로 0.25로 줄이니 손실이 0.4로 감소함.
▶이 경우에 가중치를 -0.05만큼 업데이트한 것이 손실을 줄이는 데 기여한 것으로 보인다. 이런 식으로 네트워크의 모든 가중치에 반복한다.
사실 이런 접근 방식은 모든 가중치 행렬의 원소마다 여러 번의 (비용이 큰) 정방향 패스를 계산해야 하므로 엄청나게 비효율적이다. (보통 수천, 수백만 개의 가중치가 있다.)
방법2)
신경망에 사용된 모든 연산이 미분 가능(differentiable)하다는 장점을 사용해 네트워크 가중치에 대한 손실의 그래디언트(gradient)를 계산하는 것이 훨씬 더 좋은 방법이다. 그래디언트(미분결과)의 반대 방향으로 가중치를 이동하면 손실이 감소하게 된다.
*미분가능하다 : 변화율을 유도할 수 있다는 의미로 연속적이고 매끄러운 함수.
그래디언트(미분)에 대한 자세한 설명은 다 다음 포스트에..
'딥러닝 (Deep Learning) > 딥러닝 기초' 카테고리의 다른 글
신경망에서 미분이 필요한 이유 2 : gradient descent (경사하강법), learning rate(학습률) (0) | 2021.04.26 |
---|---|
신경망에서 미분이 필요한 이유 1 : 미분, 순간 변화율, 기울기 (0) | 2021.04.25 |
텐서 연산 기초 공부하기 (0) | 2021.04.24 |
신경망의 데이터 표현 3 - tensor & data 종류와 예시 (0) | 2021.04.24 |
신경망의 데이터 표현 2 - data 다루기 (0) | 2021.04.24 |