코딩로그
신경망과 딥러닝 - 얕은 신경망 네트워크 본문
<신경망 네트워크의 구성 알아보기>
- 입력 특성들의 층을 입력층이라하며 a[0] 으로 표기합니다.
- 은닉층이랑 입력층과 출력층 사이에 있는 모든 층을 의미합니다. l번째 은닉층의 n번째 유닛은 an[l] 으로 표기합니다.
- 예를 들어 첫 번째 은닉층은 a[1] 로 표현하며 첫 번째 은닉층에 있는 첫 번째 유닛은 a1[1] , 첫 번째 은닉층에 있는 두 번째 유닛은 a2[l] 로 표현할 수 있습니다.
- 출력 특성들의 층을 출력층이라 합니다.
- 신경망 층의 개수를 셀 때는 입력 층은 제외합니다.
- 예를 들어 아래의 그림은 은닉층 1개, 출력층 1개 이기에 2층 신경망이라합니다.
<신경망 네트워크 출력의 계산>
- 입력값이 노드를 통과할 때, 두가지 과정을 거치게 됩니다.
- z=wT+b
- a=σ(z)
- 표기법은 아래와 같습니다.
- ai[l]
- l : 몇 번째 층인지 의미합니다.
- i: 해당 층에서 몇 번째 노드인지 의미합니다.
<많은 샘플에 대한 벡터화>
- 표기법은 아래와 같습니다.
- a[i][j]
- i : 몇 번째 층인지 의미합니다.
- j : 몇 번째 훈련 샘플인지 의미합니다.
<활성화 함수>
- Sigmoid
- a=1+e−z1
- Tanh
- a=ez+e−zez−e−z
- ReLU
- a=max(0,z)
- leaky ReLU
- a=max(0.01z,z)
- Tanh 장점:
- Tanh 의 값이 [-1, 1] 사이에 있고 평균이 0이기 때문에, 데이터를 원점으로 이동하는 효과가 있습니다. 이는 평균이 0.5인 Sigmoid 보다 더 효율 적입니다. 자세한 내용은 다음에 이야기 할 것입니다.
- ReLU 의 장점:
- 0보다 큰 활성화 함수의 미분값이 다른 함수에 비해 많아서 빠르게 학습 할 수 있습니다.
- 왜 비선형 활성화 함수가 필요한지는 다음 시간에 이야기 할 것입니다.
<왜 비선형함수를 써야할까요?>
- 선형 함수는 y=x , y=ax , y=ax+b 와 같은 함수를 의미합니다.
- 예를 들어 g(z)=z 라는 선형 활성화 함수를 사용한다고 가정했을 때, 3개의 은닉층을 쌓아도 g(g(g(z)))=z 로 아무런 혜택을 얻지 못했습니다. 따라서 은닉층에는 비선형 활성화 함수를 사용해야 합니다.
- 비선형 활성화 함수는 지난 강의에서 배운 ReLU, Sigmoid, Tanh 등의 함수가 있습니다.
<활성화 함수의 미분>
- 시그모이드
- g(z)=1+e−z1
- g′(z)=dzdg(z)=g(z)(1−g(z))
- Tanh
- g(z)=ez+e−zez−e−z
- g′(z)=1−(g(z))2
- ReLU
- g(z)=max(0,z)
- g′(z)=0 (z < 0인 경우)
- g′(z)=1 (z >= 0인 경우)
- Leaky ReLU
- g(z)=max(0.01z,z)
- g′(z)=0.01 (z < 0인 경우)
- g′(z)=1 (z >= 0인 경우)
<신경망 네트워크에서 경사하강법>
- 단일층 신경망에서 경사 하강법을 구현하기 위한 방법은 다음과 같습니다.
- dw[1]=∂w[1]dJ
- db[1]=∂b[1]∂J
- W[1]=W[1]−αdW[1]
- b[1]=b[1]−αdb[1]
- 단일층이 아닐 때는 1뿐만 아니라 1, 2, …,m 까지의 계산을 반복하면 됩니다.
<역전파에 대한 이해>
- 로지스틱 회귀의 역전파를 구하면 다음과 같습니다.
- da=−ay+1−a1−y
- dz=a−y
- dw=dz x
- db=dz
- x 는 고정값이기에 dx 계산하지 않습니다.
<랜덤 초기화>
- 신경망에서 w 의 초기값을 0으로 설정한 후 경사 하강법을 적용할 경우 올바르게 작동하지 않습니다.
- dw 를 계산했을 때 모든 층이 같은 값을 가지게 되기 때문입니다.
- 따라서 np.random.rand()를 이용해 0이 아닌 랜덤한 값을 부여해줘야 합니다.
'코딩로그 > Andrew Ng's ML class' 카테고리의 다른 글
신경망과 딥러닝 - 심층 신경망 네트워크 (0) | 2019.12.24 |
---|---|
신경망과 딥러닝 - 파이썬과 벡터화 (0) | 2019.12.24 |
신경망과 딥러닝 - 신경망과 로지스틱 회귀 (0) | 2019.12.24 |
Numpy 기초, 기본 정리 (0) | 2019.12.05 |