이숭간 공부기록
밑바닥부터 시작하는 딥러닝 3장(1)_신경망 본문
2장에서 배웠던 퍼셉트론에서는 원하는 결과를 출력하도록 가중치값을 적절하게 정하는 작업을 사람이 수동으로 해야했음.
신경망은 가중치값을 기계가 데이터로부터 자동으로 학습하는 능력을 가질수있게함
( 퍼셉트론 복습 - 두 신호 x1,x2를 입력받아 y를 출력하는 퍼셉트론.
각신호에 가중치를 곱한값을 모두 더한값에 편향(뉴런이 얼마나 쉽게 활성화되는지를 제어)함을 더한값이 0보다 크면1, 작거나 같으면 0을 출력)
3장의 목표
- 신경망의 개요
- 신경망이 입력데이터가 무엇인지 식별하는 처리과
# 활성화함수 : 입력 신호의 총합을 출력신호로 변환하는 함수 h(x)
활성화함수는 입력신호의 총합이 활성화를 일으키는지 정하는 역할을 함.
활성화함수의 종류
퍼셉트론과 신경망의 차이는 어떤 활성화함수를 쓰느냐의 차이뿐.
함수를 이용하여 신호를 변환하고, 변환된 신호를 다음 뉴런에 전달함.
# 계단함수 : 임계값을 경계로 출력이 바뀌는 함수 (퍼셉트론에서 쓰임)
# 계단함수 구현하기
def step_function(x):
if x>0:
return(1)
else
return(0) --- x에는 실수만 들어갈수있음
x에 np.array[-1.0, 1.0, 2.0]과 같은 넘파이배열 넣고싶으면?? -->
def step_function(x)
y = x>0 # x>0이면 ture, 아님 false를 반환
# y에는 array([false, true, true])가 들어있음.
return y.astype(np.int) # 불린값을 정수형태로 변환
--> 넘파이배열에 부등호연산을 수행하면 배열의 원소 각각에 부등호연산을 수행한 bool배열이 생성됨!!
# 계단함수 그래프그리기
import numpy as np
import matplotlib.pylab as plt
def step_function(x):
return np.array(x > 0, dtype=np.int)
x = np.arange(-5.0, 5.0, 0.1) # -5.0에서 5.0 직전까지 0.1간격의 넘파이배열 생성
y = step_function(x)
plt.plot(x,y)
plt.ylim(-0.1, 1.1) # y축 범위지정
plt.show()
# 시그모이드함수 구현하기
(여기서는 x가 실수뿐만 아니라 넘파이 배열일때도 삽입가능한데 이는 넘파이의 브로드캐스트때문)
@넘파이의 브로드캐스트? 넘파이배열과 스칼라값의 연산을 배열원소 각각과 스칼라값의 연산으로 바꿔수행
시그모이드 함수에서는 np.exp(-1)이 넘파이배열을 반환하기때문에 스칼라값과 수행한결과도 넘파이배열임
# 파이썬의 기본배열구조인 리스트대신 넘파이배열을 쓰는이유? numpy.array클래스에서 제공하는 유용한 기능들을 사용하기 위해서 예를들면 위와같은 브로드캐스트같은!
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 시그모이드함수 그래프
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) # -5.0에서 5.0 직전까지 0.1간격의 넘파이배열 생성
y = sigmoid(x)
plt.plot(x,y)
plt.ylim(-0.1, 1.1) # y축 범위지정
plt.show()
# 계단함수와 시그모이드 함수 비교
매끈함과 끊김!
퍼셉트론의 뉴런사이에는 0또는 1이 흐르지만, 신경망에서는 연속적인 실수가 흐른다.
공통점 - 입력이 작을때 출력은 0에 가깝고 입력이 커지면 출력이 1에가까워짐, 즉 중요도가 높을수록 큰값출력
출력값은 0과 1사이
비선형함수
# 비선형함수 - 직선이 아닌 함수
신경망에서는 활성화 함수로 비선형함수를 사용해야함 (선형함수를 사용하면 층을 아무리 깊게해도 결국 처음의 선형함수와 같은 구조를띔, 즉 은닉층이 없는 네트워크로도 똑같은 기능을 할수있다는뜻)
# ReLU함수 (렐루함수)
렐루함수는 입력이 0을 넘으면 그입력 그대로 출력하고 0이하면 0을 출력함.
# 렐루함수 구현 (두가지방식 모두가능)
def relu(x):
if x>0:
return x
else:
return 0
or
def relu2(x):
return np.maximum(0, x)
'공부공부 > 딥러닝' 카테고리의 다른 글
밑바닥부터 시작하는 딥러닝 3장(2)_신경망 (0) | 2020.08.02 |
---|