본문 바로가기
Drawing (AI)/DeepLearning

딥러닝 직접 구현하기 - (퍼셉트론)

by 생각하는 이상훈 2023. 6. 21.
728x90

Intro

이 공부 시리즈는 다양한 딥러닝 기술들을 직접 구현해보는 능력을 키우기 위한 공부이다. 밑바닥부터 시작하는 딥러닝이라는 책과 다양한 웹사이트를 참고하여 해보려한다. 이미 아는 내용도 있지만 직접 구현해본 내용은 많지 않아서 책을 한번 따라가 보려고 한다. 따라서 구현해보는 것이 의미가 있어 보이는 내용들을 위주로 블로그에 정리해 보고자 한다.


신경망

신경망에서의 행렬곱은 아래와 같이 연산된다.

이러한 행렬곱에 해당하는 간단한 예시를 코드로 표현해보면 numpy를 활용하여 아래와 같이된다.

import numpy as np

X = np.array([1,2])
print(X.shape)

W = np.array([[1,3,5], [2,4,6]])
print(W)
print(W.shape)

Y = np.dot(X, W)
print(Y)


(2,)
[[1 3 5]
 [2 4 6]]
(2, 3)
[ 5 11 17]

이번에는 3층 짜리 신경망을 구현해 보고자 한다.

이 3층 신경망은 입력층(0층)은 2개, 첫번째 은닉층은 3개, 두번째 은닉층은 2개, 출력층은 2개의 뉴런으로 구성된다.

import numpy as np

def init_network():
    network = {}
    network['W1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]])
    network['b1'] = np.array([0.1, 0.2, 0.3])
    network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]])
    network['b2'] = np.array([0.1, 0.2])
    network['W3'] = np.array([[0.1, 0.3], [0.2, 0.4]])
    network['b3'] = np.array([0.1, 0.2])
    
    return network

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def identity_function(x):
    return x

def forward(network, x):
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']
    
    a1 = np.dot(x, W1) + b1
    z1 = sigmoid(a1)
    a2 = np.dot(z1, W2) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2, W3) + b3
    y = identity_function(a3)
    
    return y

network = init_network()
x = np.array([1.0, 0.5])
y = forward(network, x)
print(y)

#[0.31682708 0.69627909]

위의 경우 활성화함수를 sigmoid함수로 설정하였다. 이번에는 softmax함수를 구현해 보자. softmax함수는 아래와 같이 생긴 함수이지만 overflow 문제가 발생할 가능성이 있기 때문에 개선한 수식을 구현하고자 한다.

softmax함수
개선된 수식

def softmax(a):
    c = np.max(a)
    exp_a = np.exp(a-c) # 오버플로 대책
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a
    
    return y
a = np.array([0.3, 2.9, 4.0])
y = softmax(a)
print(y)
np.sum(y)

#[ 0.01821127  0.24519181  0.73659691]
#1.0

위의 결과에서 알 수 있듯 출력을 확률로 해석할 수 있고 그 총합은 1이 된다.


 

728x90

'Drawing (AI) > DeepLearning' 카테고리의 다른 글

딥러닝 직접 구현하기 - (신경망 학습)  (0) 2023.07.06
딥러닝 직접 구현하기 - (신경망)  (0) 2023.07.01
Word Embedding(2)  (0) 2023.05.14
Word Embedding(1)  (2) 2023.05.11
Long Short-Term Memory (LSTM)  (0) 2023.05.05