Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

코딩로그

신경망과 딥러닝 - 얕은 신경망 네트워크 본문

코딩로그/Andrew Ng's ML class

신경망과 딥러닝 - 얕은 신경망 네트워크

hyeonnny 2019. 12. 24. 01:52

<신경망 네트워크의 구성 알아보기>

  • 입력 특성들의 층을 입력층이라하며  a[0]  으로 표기합니다.
  • 은닉층이랑 입력층과 출력층 사이에 있는 모든 층을 의미합니다. l번째 은닉층의 n번째 유닛은   an[l] 으로 표기합니다.
    • 예를 들어 첫 번째 은닉층은  a[1]  로 표현하며  첫 번째 은닉층에 있는 첫 번째 유닛은  a1[1] , 첫 번째 은닉층에 있는 두 번째 유닛은  a2[l]  로 표현할 수 있습니다.
  • 출력 특성들의 층을 출력층이라 합니다.
  • 신경망 층의 개수를 셀 때는 입력 층은 제외합니다.
    • 예를 들어 아래의 그림은 은닉층 1개, 출력층 1개 이기에 2층 신경망이라합니다.
    •  

<신경망 네트워크 출력의 계산>

  • 입력값이 노드를 통과할 때, 두가지 과정을 거치게 됩니다.
  1.  z=wT+b 
  2.  a=σ(z) 
  • 표기법은 아래와 같습니다.
    •  ai[l] 
    • l : 몇 번째 층인지 의미합니다.
    • i: 해당 층에서 몇 번째 노드인지 의미합니다.

<많은 샘플에 대한 벡터화>

  • 표기법은 아래와 같습니다.
    •  a[i][j] 
    • i : 몇 번째 층인지 의미합니다.
    • j : 몇 번째 훈련 샘플인지 의미합니다.

<활성화 함수>

  • Sigmoid
    •  a=1+ez1 
  • Tanh
    •  a=ez+ezezez 
  • 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+ez1 
    •  g(z)=dzdg(z)=g(z)(1g(z)) 
  • Tanh
    •  g(z)=ez+ezezez 
    •  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+1a1y 
    •  dz=ay 
    •  dw=dx 
    •  db=dz 
    •  x 는 고정값이기에  dx  계산하지 않습니다.

<랜덤 초기화>

  • 신경망에서  w 의 초기값을 0으로 설정한 후 경사 하강법을 적용할 경우 올바르게 작동하지 않습니다.
    •  dw 를 계산했을 때 모든 층이 같은 값을 가지게 되기 때문입니다.
  • 따라서 np.random.rand()를 이용해 0이 아닌 랜덤한 값을 부여해줘야 합니다.