본문 바로가기

Python/DeepLearning

퍼셉트론에서 신경망으로(5) - 학습 : 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득 - 지표 : 신경망이 학습할 수 있도록 해줌 (손실 함수) 신경망은 데이터를 보고 학습할 수 있다. 여기서 학습한다는 의미는 가중치 매개변수의 값을 데이터를 보고 자동으로 결정한다는 것이다. 데이터에서 답을 찾고 데이터에서 패턴을 발견하기 때문에 꼭 데이터가 있어야 한다. 신경망 학습에서 사용하는 지표는 손실 함수이다. - 평균 제곱 오차 $$E=\frac{1}{2}\sum_{k}^{} (y_k-t_k)^2$$ import numpy as np def mean_squared_error(y, t): return 0.5 * np.sum((y-t)**2) t = [0,0,1,0,0,0,0,0,0,0] y1 = [0.1,0.05,0.6,0...
퍼셉트론에서 신경망으로(4) 신경망의 구조를 조금 알게 되었으니 MINIST를 사용하여 신경망이 이미지를 분류하게 만들어본다. 이와 같은 추론 과정을 순전파(forward propagation)라고 한다. 링크에 들어가 MINIST 파일을 받을 수 있는 mnist.py 를 다운로드 한다 import sys, os from minist import load_mnist (x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False) print(x_train.shape) print(t_train.shape) print(x_test.shape) print(t_test.shape) 실행하여 올바른 결과가 나오는지 확인해본다. ministy.py에서 load_mn..
퍼셉트론에서 신경망으로(3) 다차원 배열을 이용하여 직접 신경망을 구현해본다. import numpy as np import matplotlib.pylab as plt X = np.array([1,2]) print(X, X.shape) W = np.array([[1,3,5],[2,4,6]]) print(W, W.shape) Y = np.dot(X,W) print(Y) $$\mathbf{X} = \left[\begin{array} {rrr} 1 & 2 \end{array}\right]$$ $$\mathbf{W} = \left[\begin{array} {rrr} 1 & 3 & 5 \\ 2 & 4 & 6 \end{array}\right] $$ 행렬 곱은 그냥 하면 된다. numpy가 다 해줌. 이걸로 3층 신경망을 구현해본다. 입력층은 ..
퍼셉트론에서 신경망으로(2) 활성화 함수는 임계값을 경계로 출력이 바뀐다. 이러한 함수를 계단 함수(step function)이라고 한다. 계단 함수 이외의 다른 함수를 알아본다. - 시그모이드 함수 $$h(x) = \frac{1}{1+exp(-x)}$$ 여기서 exp는 우리가 흔히 알고 있는 자연상수 e이다. - 계단 함수를 그려보자. def step_function(x): if x > 0: return 1 else: return 0 아주 간편하게 0 초과의 값이 나오면 1을 반환하고 0 이하의 값이 나오면 0을 주는 함수이다. 하지만 우리가 사용하는 numpy를 input으로 넣을 수 없으므로 조금 수정한다. import numpy as np def step_function(x): y = x > 0 return y.astype(..
퍼셉트론에서 신경망으로(1) 퍼셉트론은 구현하기 간편하고 좋아보이지만 한 가지 단점을 가지고 있다. 가중치를 여태 직접 정해준 것이다. 결과를 보면서 내가 적절한 가중치 값을 정해주었는데 이 것은 비효율적이다. 문제를 해결하기 위해 신경망을 사용할 수 있다. 신경망은 가중치 매개변수의 적절한 값을 데이터로부터 자동으로 학습하는 능력을 가지고 있다. 다시 퍼셉트론을 복습하고 지나가자면 편향을 나타내는 매개변수를 포함하여 표현할 수 있다. 실제 입력은 x1, x2 이지만 1*b (가중치) 입력까지 포함해주어 출력을 결정한다. 편향은 항상 존재하기 때문에 1로 표현해주었다. 여기서 퍼셉트론또한 하나의 함수로 표현할 수 있다. $$y = h(b + W_1*X_1 + W_2*X_2)$$ $$h(x) = 0 (x0)$$ 이렇게 입력 신호의 총..
퍼셉트론(Perceptron) 알고리즘 - 다수의 신호를 입력으로 받아 하나의 신호를 출력 - '흐른다/흐르지않는다'(1/0)으로 구분 - 입력 신호가 뉴런에 보내질 때에 고유한 가중치가 곱해짐 - 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설 때만 1을 출력 - 한계를 임계값이라고 하며 θ 로 표현함 - 복수의 입력 신호 각각에 고유한 가중치를 부여. 가중치는 신호가 결과에 주는 영향력을 조절하는 요소로 작용 - 가중치가 클수록 신호가 더 중요하다! - Python으로 간단하게 구현해보기 def AND(x1, x2): w1, w2, theta = 0.5, 0.5, 0.7 tmp = x1*w1 + x2*w2 if tmp theta: return '1' def OR(x1, x2): w1, w2, theta = 0.5, 0.5, 0.4 tm..