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:45

 Forward 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 값을 나타낸다.