전체 글(327)
-
34. Forward Propagation in a Deep Network
layer마다 for문을 통해 Z,A 전파를 수행. - 이때는 for문을 없앨 수 있는 방법이 보이지 않으므로 for문을 사용. - 왜 그럴 수 밖에 없는가는 진지하게 고민해볼 것. - 단순히 차원을 늘리는걸로는 작동하지 않으려나?
2023.09.09 -
33. Deep L-layer Neural Network
Notation L = number of layers n[l] : l번째 layer의 node(=units)수
2023.09.09 -
32. Random Initialization
매개변수를 0으로 초기화하는 것이 아니라 랜덤으로 초기화하는 것이 중요하다. - W[1] = [w1, w2, ... , wnx] - 이때 w1,w2,wnx가 모두 0으로 초기화 된다면 같은 값을 띄고, 결국 update도 같게되며 여러번 반복하더라도 같은 내용의 함수를 계산하고 있음. - 그럼 결국 unit이 많을 필요가 없음. 동일한걸 계산하는데. - 따라서 랜덤으로 초기화하는 것이 중요함. import numpy as np W[1] = np.random.rand((2,2)) * 0.01 # 초기화를 하더라도 0에 근접하는 아주 작은 수로 랜덤 초기화할 것 - 왜? 활성화 함수는 0 근처에서 가장 크게 값이 변하므로 input이 너무 크거나 너무 작다면 unit간 차이가 없는거나 마찬가지. - 따라서 ..
2023.09.09 -
31. Backpropagation Intuition (Optional)
**시간이 된다면 Logistic Regression : sigmoid 함수를 예시로 dz를 직접 구해보기** L : Logisitic Regression 라고 가정. da 란 dL/da , da/dz = g'(z) dz = dL / dz = dL/da * da/dz - da/dz = g'(z), dL/da = da - 따라서 dz = da * g'(z) - 수식을 정리하면 dz = a-y. (증명은 생략) 수식 정리한것일뿐. dw = 1/m * np.dot(dz, x) db = 1/m * np.sum(dz) 다음과 같은 두 개의 layer가 있을때는? dz[2] = a[2]-y (미분 연쇄법칙에 의해. 증명은 생략) dw[2] = 1/m * np.dot(dz[2], a[1].T) - 단일 layer에 ..
2023.09.09 -
30. Gradient Descent for Neural Networks
Gradient Descent -input : x.shape (nx,1) = n[0], n[1], n[2] -> input layer, hidden layer, output layer존재. -params : w[1], b[1], w[2], b[2] -cost function : J(w[1], b[1], w[2], b[2]) = 1/m * np.sum(y-y*) 1. y* 계산 2. dw, db 계산. 3. w[1], b[1], w[2], b[2] update 4. 1-3 과정 반복. dw[2]의 경우 input이 A[1]이므로 1/m * np.dot(dz[2], A[1].T) - 도함수이므로 의미? 해당 변수 dw[2]가 변했을 때 y*(A[2])에 영향을 미치는 정도 at A[1] = A[1]에서의 기울기
2023.09.09 -
29. Derivatives of Activation Functions
도함수 표현 방식. dg(z) / dz도 있지만 g'(z)라고도 표기한다. 1. sigmoid g(z) : 1 / (1+e**(-x)) - 도함수 g'(z) = g(z) * (1-g(z)) 2. tan h g(z) : e**z - e**(-z) / e**z + e**(-z) - 도함수 : 1 - (tan h)**2 -> 1 - a**2 3. ReLU g(z) : max(0,z) - 도함수 : {0 if z = 0.}
2023.09.09