이번 강의에서는 지난 시간에 이어 Neural network를 학습시키는 구체적인 방법을 배웠다.

그 중 지난 시간에 배웠던 데이터 전처리에 대한 복습에 대해 좋은 예시가 있다.

Untitled

위의 슬라이드와 같이 예시로 binary classification을 생각해보면 왼쪽의 경우는 not-normalized, not- centerd인 경우다. 이 경우에도 classification이 가능은 하지만 선이 조그만 움직여도 calssification이 잘 되지 않는다. 즉 손실 함수가 아주 약간의 가중치 변화에도 예민하다는 뜻이다. Loss값이 파라미터에 대해 너무 민감하기 때문에 학습이 어렵다는 뜻이다. 이때 오른쪽의 경우는 zero-centerd, unit variance로 전처리가 된 경우다. 이럴 때는 보이다시피 선이 조금 흔들려도, 즉 가중치 변동에 대해 손실 함수가 덜 민감(robust)하다는 뜻이다. 이러한 특성은 최종 output뿐만이 아니라 한 layer의 output에 대해서도 성립한다. NN은 다수의 linear classifier(conv layer, 가중치 layer)가 활성 함수와 붙어있는 형태이므로 각 layer에서의 output에 대한 처리는 학습 전체에 대해서 긍정적인 효과를 갖갖는다.

Untitled

이러한 특징을 layer의 output마다 적용하는 것이 batch normalization이라 할 수 있다. 이전 layer의 activation(output)을 batch단위로 zero-mean, unit variance가 될 수 있도록 layer를 추가하는 것이다.

오늘 배울 것은 가중치 행렬의 optimizer, regularization, transfer learning이다.

Untitled

optimization은 가중치에 대해 loss function을 정의해두면 가중치를 평가하여 그에 따라 계속해서 가중치를 최적화 해나가는 것이다. 이전에 우리가 배웠던 것은 SGD이다.

  1. 미니 배치안의 데이터에서 loss를 계산하여 전체 batch의 loss에 대한 추정값을 구한다.
  2. 이 loss에 대한 -gradient를 이용해 파라미터 벡터를 없데이트한다.

위의 슬라이드에서 우측의 그래프는 가중치 행렬이 2차원인 경우다. 색을 loss라 하면 빨간색이 가장 깊은 위치, 즉, loss가 최소인 장소를 향해 이동하는 과정이다.

그런데 SGD도 당연히 문제점이 있다.

Untitled

만약 2차원의 가중치 행렬을 갖는다고 할 때 변수 축의 한쪽 방향으로는 loss가 빠르게 변하고 다른 방향으로는 loss가 천천히 변한다면 문제가 발생한다. 즉 이럴 때를 loss function이 높은 condition number를 갖는 상황이라고 한다. Condition number는 주로 선형 대수학에서 행렬의 특성을 나타내는 값으로, 특정 행렬이 문제의 민감도나 안정성을 측정하는 데 사용된다. 일반적으로 손실 함수의 경우, 이 개념은 Hessian 행렬 또는 자코비안 행렬의 condition number와 관련이 있다.

  1. Hessian 행렬의 Condition Number

손실 함수 f(x)의 두 번째 도함수인 Hessian 행렬은 함수의 곡률 정보를 제공합니다. Hessian 행렬의 condition number는 다음과 같이 정의됩니다:

$\text{Condition Number} = \frac{\lambda_{\text{max}}}{\lambda_{\text{min}}}$

여기서:

2. 자코비안 행렬의 Condition Number