Machine Learning
인공신경망 ( ANN ) #6-2 최적화 : 초기 가중치 설정, 기울기 소실( gradient vanishing ), 배치 정규화 ( batch normalization )
인공신경망 ( ANN ) #6-2 최적화 : 초기 가중치 설정, 기울기 소실( gradient vanishing ), 배치 정규화 ( batch normalization )
2017.03.25초기 가중치 설정오버피팅 문제 때문에 언제까지고 반복을 돌려 정확도를 올릴 수는 없기 때문에, 최적의 초깃값으로 설정하는게 도움이 된다. 초기 가중치에 따른 활성화값 분포활성화 함수의 출력 데이터를 활성화값이라고 하는데, 초기 가중치에 따른 활성화값의 분포를 관찰하면 중요한 정보를 얻을 수 있다. 활성화 함수로 sigmoid를 사용하며 W는 표준편차(stdev)가 1인 정규분포로 초기화한 경우 :히스토그램의 세로 값은 해당 범위(계급이라 한다)내에 데이터가 몇 개나 있는지를 나타낸다. 여기서는 계급을 30개로 나눴으니 각 계급은 0.0333...의 범위를 갖는다. 즉, 0~0.0333.... 범위의 값을 가진 활성화값이 35000개 가량 있다는 뜻이다. 각 막대를 모두 더하면 X는 1000x100, 각 ..
인공신경망 ( ANN ) #6-1 최적화 : 가중치 최적화 기법
인공신경망 ( ANN ) #6-1 최적화 : 가중치 최적화 기법
2017.03.24매개변수 갱신(최적화) 기법가장 좋은 기법은 없고, 풀어야 할 문제가 어떤 것이냐에 따라 좋은 기법이 다르다. 각각의 장단이 있다.그러나 보통은 기본 SGD보다는 나머지 방법이 좋은 결과를 보인다.일반적으로 Adam이 가장 좋은 결과를 보이기 때문에 기본 optimizer로 사용한다.http://newsight.tistory.com/224http://sebastianruder.com/optimizing-gradient-descent/ https://keras.io/optimizers/ 1. 확률적 경사 하강법(SGD, Stochastic Gradient Descent)단점z = x^2/4 + y^2 인 그래프는 단면이 타원이며 z가 증가할 수록 타원이 넓어지는 모양이다.이 함수의 최솟값은 (0, 0, 0..
인공신경망 ( ANN ) #5 오차역전파법(backpropagation)
인공신경망 ( ANN ) #5 오차역전파법(backpropagation)
2017.03.20numerical_gradient에서는 수치 미분을 통해 기울기를 계산했었는데 이는 다음과 같은 두가지 문제점이 있다.1. 정확한 미분값이 아니라, 근사값이다.2. 속도가 너무 느리다. \\(w_1, ..., w_n\\)까지 있으면, 기울기를 계산하기 위해 이 각각을 대상으로 \\(\frac{loss(x+h) - loss(x-h)}{2h}\\)를 구해야 한다. sol1. 해석적 미분을 사용한다.sol2. 중복 계산을 피하기 위해 오차역전파를 사용한다. 역전파 : 역방향으로 해당 함수의 국소적 미분을 곱해 나가는 것역전파의 핵심은 국소적 계산과 연쇄법칙(chain rule)이다.*국소적 계산 : 현재 계산이 이전 계산이나 다음 계산의 영향을 받지 않는다. 연쇄 법칙 ( chain rule )연쇄 법칙은 그..
인공신경망 ( ANN ) #4-2 학습 ( 미분, 기울기, 경사법, 신경망 학습 과정 )
인공신경망 ( ANN ) #4-2 학습 ( 미분, 기울기, 경사법, 신경망 학습 과정 )
2017.03.18미분 (differential)\\[\frac{d}{dx}f(x) = \lim_{\Delta x \to 0}\frac{f(x + \Delta x) - f(x)}{\Delta x}\\]x+h와 x 사이의 기울기를 얻는 것(전방 차분) 보다 x-h와 x+h 사이의 기울기를 얻는 것(중심 차분, 중앙 차분)이 오차가 더 적다.부동소수점 오차가 발생하지 않도록 h는 ``py 1e-4``(0.0001)보다 커야 한다. 이는 실제 미분값이 아니라 실제 값에 대한 근사값을 구하는 수치(numerial) 미분이다.실제로 수식을 미분해 도함수를 구하는 것을 해석적(analytic) 미분이라 한다.```pythondef numerical_diff(f, x): h = 1e-4 return (f(x-h) + f(x+h))/ ..
인공신경망 ( ANN ) #4-1 학습 ( 손실함수, 오차함수 )
인공신경망 ( ANN ) #4-1 학습 ( 손실함수, 오차함수 )
2017.03.16손실 함수 ( loss function ) ANN에서는 학습을 통해 최적의 가중치 매개변수를 결정하기 위한 지표로(기준으로) 손실 함수(loss function)를 사용한다. 손실 함수의 결과값(오차)을 가장 작게 만드는 것이 신경망 학습의 목표이고, 손실 함수의 결과값을 작게 만들기 위해서 가중치 매개변수를 조작해 나가는 과정이 학습, 각각의 가중치 매개변수를 어디로 얼마나 조절해야 손실 함수의 결과값이 적어질지를 결정할 때 참고하는 것이 미분값(기울기)이다. 예를들어 x가 가중치 매개변수, y가 손실 함수라고 할 때, 미분이 음수면 기울기가 음수니까 x를 h만큼 증가시켰을 때 y는 감소하므로 그 가중치 매개변수를 증가시켜 손실 함수의 값을 감소시킬 수 있다. 반대로 미분이 양수면 기울기가 양수이므로 ..
인공신경망 ( ANN ) #3 MNIST 이미지 인식 ( 분류/추론/순전파 )
인공신경망 ( ANN ) #3 MNIST 이미지 인식 ( 분류/추론/순전파 )
2017.03.13ANN에서 문제를 해결하는 방식은 두 단계로 이루어져 있다.학습 : 학습 데이터를 이용해 가중치 매개변수를 학습한다. (지도 학습, SL(Supervised Learning))추론 : 학습한 가중치 매개변수를 이용해 입력 데이터에 대한 결과를 추측한다.학습은 지도 학습(Supervised Learning)과 비지도 학습(Unsupervised Learning)으로 나뉘며지도 학습의 추론은 다시 분류(Classification)와 회귀(Regression)로 나뉜다. 지금부터는 신경망의 분류(Classification)를 다룬다. MNIST 데이터셋 인식MNIST는 손글씨 숫자 이미지 집합이다. ML에서 다양한 곳에서 사용된다.0부터 9까지의 숫자 이미지로 구성되며 훈련 이미지는 60,000장, 시험 이미..
인공신경망 ( ANN ) #2 신경망 구조, softmax 함수
인공신경망 ( ANN ) #2 신경망 구조, softmax 함수
2017.03.12신경망 출력 계산신경망 각 층의 출력 계산은 행렬곱으로 처리할 수 있다.2017/03/11 - [Coding/python] - [python] numpy, matplotlib``python np.dot()``을 사용하면 신경망의 출력을 쉽게 계산할 수 있다.* 행렬곱 == 스칼라곱 ( scalar product, dot product ) == 내적 ( inner product )이다.행렬 A와 행렬 B의 각 행과 열을 행벡터, 열벡터로 보면 결국 두 벡터의 스칼라곱을 수행하는 것이기 때문. ```pythonX = np.array([1, 2])W = np.array([[1, 3, 5], [2, 4, 6]])Y = np.dot(X, W) + B```층이 깊어질 수록 이를 계산하기가 난해하기 때문에, 이같은 ..
인공신경망 ( ANN, Artificial Neural Network ) #1 활성화 함수
인공신경망 ( ANN, Artificial Neural Network ) #1 활성화 함수
2017.03.12인공신경망 ( ANN, Artificial Neural Network )인공신경망은 시냅스의 결합으로 네트워크를 형성한 인공 뉴런(노드)이 학습을 통해 시냅스의 결합 세기를 변화시켜, 문제 해결 능력을 가지는 모델 전반을 가리킨다. 좁은 의미에서는 오차역전파법을 이용한 다층 퍼셉트론을 가리키는 경우도 있지만, 이것은 잘못된 용법으로, 인공신경망은 이에 국한되지 않는다. 인공신경망은 가중치 매개변수 값의 설정을 입력으로부터 자동으로 학습하는 능력을 가진 모델을 말한다.다층 퍼셉트론은 인공신경망을 구현하는 알고리즘의 한 종류라고 생각하면 된다. 단층 퍼셉트론의 활성화 함수 ( 계단 함수 )\\(x_1, x_2\\) 두 신호를 받아 \\(y\\)를 출력하는 퍼셉트론을 수식으로 나타내면 다음과 같다.\\(y =..
퍼셉트론( perceptron )
퍼셉트론( perceptron )
2017.03.12퍼셉트론과 단층 퍼셉트론 ( single-layer perceptron )퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력하는 모델을 말한다. 입력으로는 입력 \\(x\\), 가중치 \\(w\\), 임계값 \\(\theta\\) 또는 편향 \\(b(= -\theta)\\)를 가진다.뉴런에서 보내온 신호의 총합이 임계값을 넘어설 때 1을 출력한다.입력 신호마다 각각의 가중치가 있는데, 가중치가 클 수록 해당 신호가 그만큼 중요함을 뜻한다.임계값 \\(\theta\\)를 \\(-b\\)로 치환하여 사용한다. 편향 \\(b\\)는 뉴런이 얼마나 쉽게 활성화하느냐를 결정한다. 간단한 AND 회로를 퍼셉트론으로 옮기면 다음과 같은 형태다.```pythonimport numpy as np def AND(x..