매직코드
article thumbnail

신경망

여러개의 독립변수들의 경우의 수를 모두 고려하여 최종값을 도출하는 방법이다.

간단하게 설명하자면 로지스틱 회귀를 두번 반복한것이 신경망이다.

 

 

아래는 각 값에 대한 함수식을 간단하게 표시한 것으로 특성인x, 변수인 w, b를 이용해 z를 계산하고 z를 통해 손실함수에 필요한 a값을 계산, 최종적으로는 손실함수 L을 계산한다.

신경망은 아래와같이 여러 단계에 걸쳐 나타날 수 있고, 각 단계마다 위의 식을 반복하여 z값과 a값을 구하고 마지막 단계에서 손실함수 L을 계산한다. 로지스틱회귀에서는 위 식을 한번만 계산했지만 신경망에서는 여러번 계산한다.

신경망에서 도함수를 구하려면 로지스틱회귀에서 역방향 계산을 한 것 처럼 신경망에서도 역방향 계산을 통해 도함수를 구할 수 있다.

 


신경망 네트워크의 구성

입력층

입력 특성들의 층

a[0]으로 표기 : 활성값, 신경망의 층들이 다음 층으로 전달해주는 값

신경망의 층수를 셀 대 입력층은 제외

 

은닉층

입력층과 출력층 사이에 있는 모든 층을 의미

은닉층의 값은들 훈련세트에 입력이 되지 않기 때문에 어떤 값인지 알 수 없고 그래서 은닉되었다는 의미의 은닉층이라고 부른다.

첫번째 은닉층은 a[1] 두번째 은닉층은 a[2]로 표시

각 은닉층의 유닛들은 아랫첨자로 표시 - 첫번째 은닉층의 첫번째 유닛 a1[1], 첫번째 은닉층의 두번째 유닛 a2[1]

유닛의 갯수에 따라 은닉층의 차원이 결정된다. 위 그림에서는 유닛이 3개 있기 때문에 3차원 은닉층이다.

 

은닉층은 매개변수와 연관이 있는데, 은닉층의 모양에 따라 w, b변수의 행렬과 벡터를 알 수 있다.

위 그램에서 은닉층을 보고 알 수 있는 w행렬은 (3, 3)이다.

첫번째 3은 이 은닉층에 유닛이 3개 있음을 의미하고 두번째 3은 앞선 층으로부터 3개의 특성을 받았다는 의미다.

 

변수b의 벡터는 (3,1)이다.

은닉층에 유닛이 3개 있기 때문이다.

 

출력층

출력 특성들의 층

a[마지막 은닉층+1]로 표기

위 그림에서는 은닉층이 a[1]뿐이었기 때문에 출력층은 a[2]로 표기한다.

위 그림에 있는 신경망은 2층 신경망이다.

 

출력층 역시 w, b변수의 행렬을 알 수 있는데

출력층에서 w의 행렬은 (1, 3) b의 벡터는 (1, 1)이다.

 

 


 

신경망 네트워크 출력 계산

입력값이 노드(유닛)를 한개를 통과할 때 아래와 같은 과정을 거치게 된다.

맨 위에 있는 수식과 동일하다. 

한 노드 안에서 위와 같이 z, a값을 계산하고 출력값을 가진다.

모든 노드에서 같은 계산이 이루어지고 각 노드는 서로 다른 출력값을 가지게 된다.


다중 샘플에 대한 벡터화

훈련샘플이 한개만 있는 경우에는 위와같이 계산하게 되는데 훈련샘플이 여러개인 경우 벡터화하는 방법을 확인해본다.

위 그림에서 나오는 것 처럼 하나의 훈련샘플에는 하나의 예측값y가 나온다.

첫번째 훈련샘을의 경우 예측값y를 a[층번호][훈련샘플번호]로 표기한다.

for문을 이용해 i가 m개의 훈련샘플 갯수만큼 반복하도록 하고, for문 내부에는 위에서 배운 출력 계산을 넣어 반복적으로 계산해주면 된다.

 

for문 없이 계산하기 위해 벡터화를 수행한다.

반복해서 얻게되는 x1, x2, x3, x4.....를 행렬로 변환해 행렬 X를 얻는다.

마찬가지로 z값에 대해서 z1, z2, z3, z4.....를 행렬로 변환해 행렬Z를 구하고

a1, a2, a3, a4....를 행렬로 변환해 행렬A를 얻는다.

각 행렬의 가로방향의 값들은 훈련샘플에 대응하는 값이 되고, 세로방향의 값들은 신경망이 노드가 된다.

출처 : 앤드류응 벡터화 구현에 대한 설명

위 예시의 경우 z = wx+b라는 공식에서 b가 0이라고 가정하고 계산한 행렬이다.

훈련샘플이 3개 있는 것으로, w값에 각 훈력샘플의 x값(x1, x2, x3)을 계산하면 z값에 대한 행렬이 나온다.

 


활성화 함수

신경망을 만들 때 은닉층과 출력층에서 어떤 활성화 함수를 사용할지 선택해야 한다.

은닉층에서 사용하는 이 함수들은 비선형 활성화 함수로, 신경망에 선형 활성화 함수를 사용하는 경우 출력값이 나오는 것이 아니라 함수식 그 자체가 반환되기 때문에 은닉층이 없는것과 다름없는 결과가 나온다.

(은닉층에서 선형 함수를 사용하는 경우 z = wx + b를 계산했을 때 wx + b라는 값이 나와 계산하는 의미가 없기 때문에 활성화함수에는 비선형 함수를 사용한다.)

출력층에서는 경우에 따라 비선형함수와 선형함수를 사용할 수 있다.

 

비선형함수의 종류

  • Sigmoid
  • Tanh
  • ReLU
  • leakyReLU

Sigmoid

시그모이드는 0에서 1사이의 값을 나타낸다.

이진분류를 하는 경우 이외에는 잘 사용하지 않는다.

 

Tanh

시그모이드보다 좋은함수는  쌍곡 탄젠트 함수인 tanh함수다.

tanh 함수는 값이 -1부터 1 사이에 있고, 평균이 0이기 때문에 데이터를 원점으로 이동하는 효과가 있다.

평균이 0.5인 시그모이드 함수보다 더 효율적이고 은닉층에서 tanh함수를 사용하면 대부분 값이 더 좋게 나온다.

하지만 위에서 언급한것처럼 이진분류를 하는 경우에는 시그모이드 함수가 더 좋은 편이다.

 

--> 시그모이드와 tanh함수의 단점은 z값이 굉장히 크거나 작으면 함수의 도함수가 굉장히 작아져(기울기가 0에 가까움) 경사하강법이 느려진다.

 

ReLU

머신러닝에서 인기있는 함수

z가 양수일 때 도함수(기울기)가 1이고, 음수이면 도함수(기울기)가 0이된다.

z가 0일때는 도함수를 0이나 1 둘 중 하나로 선택해서 가정하고 계산해도 잘 작동한다.

은닉층에 어떤 함수를 써야할지 모르겠다면 기본적으로 ReLU를 사용하면 된다.

 

leakyReLU

ReLU의 특이점은 z가 음수일 때 도함수가0이라는 점인데 도함수가 0이면 안되는 경우를 위해 약간의 기울기를 주는 leakyReLU함수가 있다. 실제로는 많이 쓰이진 않지만 ReLU보다 좋은 결과를 보여준다.

 

-->  기울기가 0에 가까우면 학습이 느려지는데, ReLU와 leakyReLU의 장점은 대부분의 z에 대해 기울기가 0과 매우 다르고, 0보다 큰 활성화 함수의 미분값이 다른 함수에 비해 많기때문에 다른 함수들보다 더 빠르게 신경망 학습이 가능하다.

 


활성화 함수의 미분

신경망의 역방향 전파(역전파)를 구현하기 위해 활성화함수의 도함수를 구해야한다.

활성화함수의 도함수를 구하려면 미분을 이용해야한다.

 

간단한 수식은 아래와 같고, 자세한 설명은 응교수님의 영상에서 확인할 수 있다.

 

 


앤드류응 교수님 머신러닝 / 딥러닝 한글자막 공부하기 지난글

01. Intro - 앤드류 응(Andrew Ng)교수님 머신러닝/딥러닝 한글자막 공부하기

02. 경사하강법 Gradient Descent - 앤드류 응(Andrew Ng)교수님 머신러닝/딥러닝 한글자막 공부하기

 

 

profile

매직코드

@개발법사

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!