Bunny Code

[1] perceptron 이란? + tensorflow 로 구현해보기 본문

Deep Learning Basic

[1] perceptron 이란? + tensorflow 로 구현해보기

버즈밴드 2020. 8. 23. 13:36

1. Perceptron 이란?

퍼센트론(perceptron) = 인공 신경망을 구성하는 하나의 작은 단위? 라고 보는 것이 이해하기 쉬울 것 같습니다. 

생물을 전공하지 않으신 분들도 '뉴런' 이라는 것을 아실겁니다. 

여러 신호를 입력받아 그 신호들을 전달해주는 신경계의 '뉴런' 과 역할이 비슷합니다. 

인공 신경망의 '퍼셉트론'도 여러 신호를 입력받고 신호의 중요도에 따라

가중치를 곱해주어 나온 값으로 여러 activation function 을 만들어 그 값을 가지고 다음 단계에 전달해줍니다.

그림으로 표현하면 아래와 같은데,

출처 : https://deepai.org/machine-learning-glossary-and-terms/perceptron

파란 원안의 값들이 inputs 이고, 오른쪽에 보이는 step function이 activation function 의 한 종류입니다! 

입력 값에 가중치 w 를 각각 곱해주어 더한 값으로 step function 에 넣어준다고 생각하면 됩니다.

(activation function 의 종류들은 다른 포스팅에서 한번에 다룰게요!)

 

이러한 perceptron 들이 다층으로 이루어져있는걸 deap learning 이라고 부르는 건데, 

이번 포스팅은 단일 퍼셉트론을 구현해보는 것이 목적이기 때문에 이것도 지금 간단히 다루고 나중에 자세하게 한번에 다룰게요.

출처 : https://medium.com/@aungkyawmyint_26195/multi-layer-perceptron-mnist-pytorch-463f795b897a

위의 그림이 다층 퍼셉트론 이라는 건데 input layer 와 output layer 사이의 hidden layers 들의 층 수에 따라 

deep neural network 인지 아닌지가 결정됩니다. 

hidden layers >= 2 이면 deep neural network, hidden layers <= 1 이면 shallow neural network 라고 합니다. 

 

아!! 이렇게 퍼셉트론이 인공 신경망을 구성하는 작은 단위이구나~ 라는 개념 정도만 일단 익힐게요!

 

 

2. tensorflow 로 구현해보기

1) pycharm interpreter 를 사용할 것이기 때문에 먼저 pycharm 을 다운받아줍니다. 

https://www.jetbrains.com/ko-kr/pycharm/download/#section=mac

 

다운로드 PyCharm: JetBrains가 만든 전문 개발자용 Python IDE

최신 버전 다운로드: PyCharm (Windows, macOS, Linux)

www.jetbrains.com

 

2) pycharm 을 실행하고 tensorflow 를 설치해줘야합니다. 

설치를 다 하시고 실행하셨으면, 위의 상태창 가장 맨 왼쪽에 존재하는 

Pycharm 클릭 -> preferences 클릭 -> Python Interpreter 클릭

pycharm 에서 preferences 선택하는 화면

그러면 package 목록들이 뜨고, 목록 아래 + 버튼이 있을 것입니다. 

+ 버튼을 누르고 tensorflow 입력 후, 버전 선택하고 다운받아주면 설치는 끝납니다. 

(저는 1.13 버전 다운받았습니다.)

python interpreter 에서 + 버튼 누른 화면

 

3) tensorflow 가 제대로 설치되었는지 확인해봅시다.

import tensorflow as tf
hello = tf.constant("Hello, Tensorflow!")
sess = tf.Session()
print(sess.run(hello))

위의 코드 입력하고 실행하면 'Hello, Tensorflow!' 가 제대로 출력되시나요?

코드 입력 화면
코드 출력 화면

(이 때, 위의 코드가 출력되기 전 빨간색 줄로 경고문구가 나타날 수도 있는데, 이는 그냥 무시하고 사용하셔도 됩니다!)

 

4) 이제는 입력 데이터가 x1, x2 이고 가중치가 w1, w2 인 퍼셉트론을 구현해볼것인데요. 

(파이썬을 어느정도 아셔야 이해가 가능합니다!)

import tensorflow as tf

x_data = [[10, 23]]
X = tf.placeholder(tf.float32, shape=[None, 2])
W = tf.Variable(tf.random_normal([2, 1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
hypothesis = tf.sigmoid(tf.matmul(X, W) + b)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    prediction = sess.run(hypothesis, feed_dict={X: x_data})
    print(prediction)

위의 코드가 바로 10, 23 데이터에 임의로 생성한 가중치와 bias(편향) 를 가진 퍼셉트론인데요. 

코드 하나하나 뜻을 한번 다시 써볼게요. 

import tensorflow as tf

-> tensorflow 실행

x_data = [[10, 23]]

-> x1= 10, x2 = 23
X = tf.placeholder(tf.float32, shape=[None, 2])

-> X 라는 x1, x2 값들을 담을 수 있는 변수(placeholder), 1 X 2 형태  생성
W = tf.Variable(tf.random_normal([2, 1]), name='weight')

-> 2 X 1 형태의 임의의 가중치 w 값들 생성하고 W 에 저장하는 함수(아직 실행 X, global_variables_initializer()로 나중에 실행해줌)
b = tf.Variable(tf.random_normal([1]), name='bias')

-> 1 X 1 형태의 임의의 bias 값 생성(아직 실행 X, global_variables_initializer()로 나중에 실행해줌)
hypothesis = tf.sigmoid(tf.matmul(X, W) + b)

-> sigmoid activation function 활용하는데,

X와 W 의 행렬 곱 후 bias 값을 더한 결과로 sigmoid function 만드는 것을 hypothesis 에 지정
with tf.Session() as sess: -> with 구문으로 session run 할 수 있게끔 열어주고
    sess.run(tf.global_variables_initializer()) -> 임의의 값들 생성하는 함수 실행시켜주고
    prediction = sess.run(hypothesis, feed_dict={X: x_data}) 

    -> 설정한 값들을 대입해주고 정의한 hypothesis 를 실행시켜주는 prediction 지정
    print(prediction) -> prediction 출력

코드 입력 화면

 

코드 실행 화면

위의 결과 값을 보면, sigmoid 함수의 결과값이 1로 등장한 것을 확인할 수가 있습니다.

 

Comments