프로그램/딥러닝

[딥러닝]신경망

amanda_ai 2018. 3. 8. 10:52
반응형

신경망


AND, OR 게이트 함수 만들때 가중치에 여러개의 답이 있었는데, 적절한 값을 찍어서 정했었습니다.

신경망은 가중치를 데이터를 학습한 모델이 정해줍니다.

    신경망의 예

- 0층은 입력층, 1층은 은닉층, 2층은 출력층

- 신경망과 퍼셉트론의 차이는 '활성화' 함수 영어로 Activation Function의 존재

    활성화 함수의 등장

-활성화 함수는 입력 신호의 총합을 그대로 사용하지 않고, 출력 신호로 변환하는 함수입니다.

-'활성화' 라는 이름이 말해주듯 활성화 함수는 입력 신호의 총합이 활성화를 일으키는지 아닌지를 정하는 역할을 합니다

기존 입력 값의 합 (w1x1+w2x2+w3x3)을 활성화 함수 f(y)에 넣어 활성화 할지 말지(z) 를 결정합니다.

여기서 원을 뉴런 또는 노드라고 부르는데, 신경망에서는 뉴런이라고 합니다.


활성화 함수

- 퍼셉트론은 임계값을 경계로 출력이 바뀌는데, 이는 활성화 함수로 '계단 함수'를 사용하는 신경망 이라고 합니다

- 활성화 함수로 쓸 수 있는 여러 후보 중에서 퍼셉트론은 계단 함수를 채용하고 있습니다.

- 신경망은 계단함수가 아닌 다른 함수를 주로 사용


1) 시그모이드 함수

신경망에서 자주 이용하는 활성화 함수는 시그모이드 함수입니다.

실수 e=2.7812….

시그모이드 함수에 1.0 2.0을 입력하면 f(1.0) = 0.731, f(2.0) = 0.880 처럼 특정 값을 출력 합니다.


계단 함수 구현하기


import numpy as np

import matplotlib as mpl

 

mpl.use('Agg')

 

import matplotlib.pylab as plt

 

plt.switch_backend('Agg')

 

def step_function(x):

    y = x>0

    return y.astype(np.int)

 

 

x = np.arange(-5.0, 5.0, 0.1)

y = step_function(x)

plt.plot(x,y)

plt.ylim(-0.1,1.1) #y축의 범위 지정

plt.show()

        plt.savefig('/home/python/step.png')


계단 함수 결과 그래프

위 그래프를 보시면 0을 경계로 출력이 0에서 1로 바뀐 계단 형태의 그래프를 출력 하고 있다.


시그모이드 함수 구현하기

import numpy as np

import matplotlib.pylab as plt

 

def sigmoid(x):

    return 1/(1+np.exp(-x))

 

x = np.arange(-5.0, 5.0, 0.1)

y = sigmoid(x)

plt.plot(x,y)

plt.ylim(-0.1,1.1)

plt.show()


*시그모이드 함수 와 계단 함수의 차이?

-매끄러움(신경망 학습에서 아주 중요한 역할)

-매끄럽다는 것은 출력값이 연속적으로 변화한다는 뜻

-큰 관점에서 보면 같은 모양

-둘다 입력이 작을때의 출력은 0에 가깝고 입력이 커지면 출력이 1에 가까워지는 구조



비선형 함수

- 시그모이드, 계단 함수 둘다 비선형 함수

- 신경망에서는 선형 함수 사용 안함

- 선형 함수를 이용하면 신경망의 층을 깊게 하는 의미가 없어지기 때문

 

ReLU함수

-       신경망 분야에서 최근에 ReLU함수를 주로 이용

-       입력이 0을 넘으면 그 입력을 그대로 출력하고 0 이하이면 0을 출력하는 함수




반응형

'프로그램 > 딥러닝' 카테고리의 다른 글

[딥러닝] 퍼셉트론  (0) 2018.03.07