input layer - hidden layer - output layer
입력층은 층의 갯수에서 제외하고, 2 layer의 neuron network (입력층은 공식 레이어에서 제외)
a^[1] -superscript : layer층을 나타냄
1 -subscript : layer 내에서 몇 번째 노드인지 순서를 나타냄
로지스틱 회귀 = 시그모이드 함수를 활용한 출력층 하나만 있는 것과 유사
a[1] <- 영향을 주는 파라미터 w[1] = (4, 3) / b[1] = (4, 1)
<Vectorized Implementation>
Z[1] = W[1] X + b[1]
A[1] = g[1](Z[1])
Z[2] = W[2]A[1] + b[2]
A[2] = g[2](Z[2])
<Activation Function>
(1) sigmoid 함수
a = 1 / 1 + exp(-z)
: 이진 분류 문제 제외하곤 잘 사용하지 않는다.
(2) tanh 함수 (탄젠트 함수, 쌍곡선 탄젠트 함수)
a = tanh / (z)
exp(z) - exp(-z) / exp(z) + exp(-z)
: 데이터의 평균을 0에 가깝게 함으로써 계산을 더 간단하게 해준다.
(3) relu 함수
a = max(0, Z)
: 기울기가 0과 매우 다름 -> 빠르게 학습 가능
(4) Leaky Relu
a = max(0.012, Z)
: Relu에서 음수일때 기울기가 0인 단점을 보완해주지만 Relu를 압도적으로 많이 사용한다.
신경망 - 비선형 활성화 함수를 필요로 한다.
왜냐하면, 비선형 활성화 함수를 넣지 않으면 많은 계산을 잘 해낼 수 없다 => 은니층에서는 선형활성화 함수를 거의 사용X
<Gradient Descent for neural network>
parameters : W[1], b[1], W[2], b[2]
cost functions : J(W[1], b[1], W[2], b[2]) - (1/m) * np.sum(L(y_hat, y))
Gradient descent :
-> Repeat {
compute predicts (y_hat)
dW[1] = dJ / dW[1], db[1] = dJ / db[1]
W[1] -= alpha * dW[1]
b[1] -= alpha * db[1] }
<Forward propatgation>
Z[1] = W[1] X + b[1]
A[1] = g[1](Z[1])
Z[2] = W[2] A[1] + b[2]
A[2] = g[2](Z[2])
<Backward propagation>
dZ[2] = A[2] - Y
dW[2] = (1/m) dZ[2] A[1].T
db[2] = (1/m) np.sum(dZ[2], axis =1, keepdims = True) # 차원의 배열 유지
dZ[1] = np.dot(W[2].T dZ[2] * g[1]'(Z[1])
dW[1] = (1/m) dZ[1] X.T
db[1] = (1/m) np.sum(dZ[1], axis=1, keepdims = True)
<Random Initializaion>
: 0이 아닌 아주 작은 값으로 초기화하기
W[1] = np.random.randn((2, 2)) * 0.01
'AI 머신러닝, 딥러닝' 카테고리의 다른 글
[딥러닝] Activation function, Vectorized implementation, notation (0) | 2023.09.03 |
---|---|
[Coursera] Logistic Regression으로 고양이 사진 분류하기 (0) | 2023.09.02 |
[딥러닝] Logistic Regression as Neural Network (0) | 2023.08.27 |
[딥러닝 프로젝트 1일차] 내 얼굴 사진 찍어서 웜톤, 쿨톤 선형회귀 해보기 (0) | 2023.08.27 |
[머신러닝] 지도 학습 / 와인 데이터로 로지스틱 회귀하기 (1) | 2022.09.04 |