juuuding
[Advanced Learning Algorithms] Neural Networks - Neural network implementation in Python 본문
인공지능/코세라 머신러닝 특화과정
[Advanced Learning Algorithms] Neural Networks - Neural network implementation in Python
jiuuu 2023. 11. 22. 17:45Forward prop in a single layer
앞서 본 coffee roasting 예제로 forward propagation 과정은 아래와 같은 그림으로 표현된다.
# inupt data
x = np.array([200,17])
우선 layer1의 unit 1 처리 과정이다.
w1_1 = np.array([1,2])
b1_1 = np.array([-1])
z1_1 = np.dot(w1_1,x)+b1_1
a1_1 = sigmoid(z1_1)
위와 마찬가지로 layer1의 unit 2, unit 3 처리 과정이다.
# layer1 unit2
w1_2 = np.array([-3,4])
b1_2 = np.array([1])
z1_2 = np.dot(w1_2,x)+b1_2
a1_2 = sigmoid(z1_2)
# layer1 unit3
w1_3 = np.array([5,-6])
b1_3 = np.array([2])
z1_3 = np.dot(w1_3,x)+b1_3
a1_3 = sigmoid(z1_3)
위의 a1_1, a1_2, a1_3을 배열 처리하여 a1를 구성하게 한다.
a1 = np.array([a1_1, a1_2, a1_3])
이렇게 생성된 a1은 layer2의 input 값으로 들어간다.
layer2에서도 layer1과 똑같은 처리 과정이 발생하지만, unit의 개수가 1개기 때문에 한 번만 계산하면 된다.
# layer2 unit1
w2_1 = np.array([-7,8])
b2_1 = np.array([3])
z2_1 = np.dot(w2_1,a1)+b2_1 #입력이 a1
a2_1 = sigmoid(z2_1)
여기서 생성된 a2_1의 값으로 prediction을 수행한다.
General implementation of forward propagation
layer1의 parameter w가 각각 위의 값이라고 했을 때 numpy에서는 이것을 다음과 같은 행렬로 작성한다.
W = np.array([[1,-3,5],
[2,4,-6]])
각 열을 기준으로 unit이 구분되며, 여기서는 2행 3열인 행렬이기 때문에 3개의 unit을 가진 layer라고 볼 수 있다.
비슷하게 layer1의 parameter b가 위의 값이라면, 이것은 다음과 같은 행렬로 작성한다.
b= np.array([-1,1,2])
이 표현식을 가지고 앞서 사용해왔던 dense 함수가 어떻게 구성되어 있고 작동되는 것인지 알아보자.
def dense(a_in,W,b,g):
units = W.shape[1] #열의 개수로 unit의 개수 계산
a_out = np.zeros(units) #unit의 개수만큼 결과 값이 나오므로 해당 값을 가진 결과 배열 생성해주기
for j in range(units):
w = W[:,j] # 열 단위로 계산하기
z= np.dot(w,a_in) + b[j]
a_out[j] = g(z) # sigmoid와 같은 함수 적용
return a_out
def sequential(x):
a1 = dense(x,W1,b1,g) #layer1 계산
a2 = dense(x,W2,b2,g) #layer2 계산
a3 = dense(x,W3,b3,g) #layer3 계산
a4 = dense(x,W4,b4,g) #layer4 계산
f_x = a4
return f_x
※ 대문자는 행렬(matrix)을 나타내고 소문자는 vector 혹은 scalar 값을 나타낸다.