강의 목차
- 얕은 신경망
신경망 개요
앞서 우리는 로지스틱 회귀에서 w, b값을 안다면 z값을 구할 수 있었고 z값을 sigmoid 함수에 넣으면 a값을 구할 수 있었습니다.
이 a는 ŷ이라고도 볼 수 있습니다. 따라서 최종 loss값도 구할 수 있습니다.
신경망에서는 레이어층이 여러개이므로 레이어 순서대로 a값을 구합니다.
단일 신경망 표현
신경망의 레이어는 입력층, 은닉층, 출력층으로 나뉩니다.
$ a_{2}^{[1]}$에서 [1]은 두번째 레이어를 칭하고, 2값은 해당 레이어의 노드를 나타냅니다.
레이어의 순서는 index와 같이 0부터 시작합니다.
여러 예제에서 백터화하기
X에 대한 최종 ŷ값을 구하려면 순차적으로 구해나가야 합니다.
위 그림에서는 $a^{[2]}$값이 최종 ŷ값이 됩니다.
따라서 마지막 레이어 직전인 m까지의 값들을 벡터화시켜 모두 구해주어야 합니다.
위 그림에서의 a 표기법은
$a^{[2](i)}$
[2]: 레이어 2
(i): 훈련 예제 i
벡터화를 시킬 위 레이어 그림의 최종 연산 입니다.
1부터 m까지의 소문자 x값이 모여 대문자 X로 표현할 수 있습니다.
A행렬에서 가로는 훈련예제수이고 세로는 은닉층의 개수 입니다.
벡터화 구현에 대한 설명
b값을 0이라치고 은닉층 깊이만큼 $w^{[1}x^{(i)}$ 값들을 벡터화시켜 연산한다면 각각의 열벡터가 생성됩니다.
파이썬의 브로드캐스팅 기능을 통해 각 열마다 개별적인 $b^{[i]}$가 생깁니다.
$z^{[1]}$ = $W^{[1]}*X$ + $b^{[1]}$ =$W^{[1]}$* $A^{[0]}$+$b^{[1]}$
활성화 함수
a값을 구할 때 전 예시로는 sigmoid를 사용했지만 꼭 sigmoid만 사용하지 않아도 됩니다.
tanh함수는 항상 sigmoid함수보다 더 잘 작동합니다. 왜냐하면 +1과 -1 사이의 값으로 은닉층에서 나오는 활성화함수의 평균은 0에 더 가깝기 때문입니다. 데이터의 평균이 0.5가 아닌 0 중심에 가깝도록 하는 효과가 있습니다. 이렇게 하면 다음 레이어에 대한 학습이 조금 더 쉬워진다고 합니다.
sigmoid가 완전히 안쓰이는 것은 아니고, 이진분류할 때 예외적으로 쓰입니다.
최근에는 ReLU함수를 많은 사람들이 쓴다고 합니다.(leaky ReLU도 있지만 많이 쓰이진 않음)
신경망에 대한 경사하강법
가중치 초기화(weight initialization)
가중치 초기화은 신경망 또는 머신러닝 모델에서 가중치 파라미터를 처음에 어떻게 설정할 것인지를 나타냅니다.
초기값 설정은 모델의 성능과 학습 속도에 큰 영향을 미칠 수 있습니다.
가중치를 0으로 초기화한 경우
(로지스틱 회귀의 경우 0으로 초기화해도 무방)
다음과 같이 은닉층이 두 레이어로 구성된 신경망이 있다고 가정합니다.
0으로 초기화한다면 가중치와 편향의 행렬은 다음과 같습니다.
$W^{(1)}\begin{bmatrix}
0 & 0 \\
0 & 0 \\
\end{bmatrix}
b^{(1)}\begin{bmatrix}
0 \\ 0
\end{bmatrix} $
여기서, $a_{1}^{[1]}$ 와 $a_{2}^{[1]}$는 같은 값을 가지게 됩니다.
$dz = a - y$ 이므로 $dz_{1}^{[1]}$ 와 $dz_{2}^{[1]}$도 같게 됩니다.
이는 가중치의 대칭성(symmetry) 문제와 관련이 있습니다. 대칭성 문제는 모든 가중치가 동일한 값을 가지면서 같은 방향으로 갱신되는 상황을 의미합니다.
두 은닉층은 출력 유닛에 똑같은 값을 주기 때문에 한 번의 반복 후에도 동일한 값이고 두 은닉층은 여전히 대칭입니다. 따라서 신경망을 얼마나 오랫동안 훈련시키든 두 은닉층은 여전히 똑같은 함수를 계산하게 되므로 0으로 가중치를 초기화한다는 것은 의미가 없어집니다. 그래서 가중치를 랜덤으로 초기화 해야합니다.
가중치를 랜덤으로 초기화한 경우
가중치를 아주 작은 값으로 랜덤으로 초기화하였을 때 대칭성이 깨지고 각 뉴런이 서로 다른 값을 갖게 됩니다. 이렇게 초기화하면 학습 중에 각 뉴런이 다른 특성을 학습할 수 있습니다.
신경망 구현시 참고사항
(keepdims = True)를 사용하여 A.shape가 (4, )가 아닌 (4,1)인지 확인합니다.
레이어 표기법
$n_x$(=$n^{[0]}$) : feature 수
$n^{[i]}$ : layer node 수
$n_{3}^{[1](5)}$ : 다섯 번째 입력 데이터에 대한 layer 1의 세 번째 노드 출력 값
'Coursera > Neural Networks & Deep Learning' 카테고리의 다른 글
Neural Networks and Deep Learning [4주차] (0) | 2024.01.18 |
---|---|
Neural Networks and Deep Learning [2주차] (2) | 2024.01.04 |
Neural Networks and Deep Learning [1주차] (0) | 2023.12.30 |