본문 바로가기

연구 노트/머신러닝

[TIL] 210420 - Deep LearniNg (~C1W4L03)

이 글은...

Andrew Ng 교수의 Deep Learning 강좌 C1W4L02까지의 내용을 정리한 것이다. 심층 신경망에서의 행렬 차원을 확인하는 방법을 설명한다.

내용 요약

행렬의 차원을 알맞게 만들기

각 층에서 만들어지는 행렬들의 차원을 혼돈하지 않기 위해서 확인하는 방법을 설명하였다. 아래와 같은 심층 신경망이 있을 때를 예시로 들었다.

각 층마다 계산하게되는 식은 $z^{[l]}=w^{[l]}a^{[l-1]}+b^{[l]}$ 이다.

$l=1$ 층에서 은닉층의 노드 수($n^{[1]}$)는 3이다. 따라서 $z^{[1]}$ 행렬의 크기는 (3, 1)이 되어야 한다. $a^{[0]}$의 크기는 입력 특성의 수 이므로 (2, 1)이다. 그러면 $w^{[1]}$의 크기는 (3, 2)가 되어야 하다는 것을 알 수 있다. 그리고 $b^{[1]}$은 $z^{[1]}$의 크기와 같은 (3, 1)이 되어야 한다. 마지막으로 활성값 $a^{[1]}$는 $z^{[1]}$의 크기와 같으므로 (3, 1)이다.

이런 방식으로 크기를 확인해보면 아래와 같이 정리될 수 있다.

행렬 차원의 크기
$z^{[l]}$ ($n^{[l]}$, 1)
$w^{[l]}$ ($n^{[l]}$, $n^{[l-1]}$)
$b^{[l]}$ ($n^{[l]}$, 1)
$a^{[l]}$ ($n^{[l]}$, 1)

다음은 벡터화한 계산식에서 행렬 차원의 크기이다.

행렬 차원의 크기
$z^{[l]}$ ($n^{[l]}$, $m$)
$w^{[l]}$ ($n^{[l]}$, $n^{[l-1]}$)
$b^{[l]}$ ($n^{[l]}$, 1)
$a^{[l]}$ ($n^{[l]}$, $m$)

여기서 $m$은 각 층의 입력 세트의 수를 의미한다. $b^{[l]}$의 크기가 이상하게 느껴질 수 있는데, 실제 계산에서는 NumPy의 브로드캐스팅에 의해서 크기가 ($n^{[l]}$, $m$)로 변환된다.

역전파로 계산될 때에도 행렬 크기는 위에 정리한 표와 같다.