1. 경사법(경사 하강법) 기계학습 문제 대부분은 학습 단계에서 최적의 매개변수를 찾아냅니다. 신경망 역시 최적의 매개변수(가중치와 편향)을 학습 시에 찾아야 합니다.여기에서 최적이란 손실 함수가 최솟값이 될 때의 매개변수 값입니다.일반적인 문제의 손실 함수는 매우 복잡하죠 매개변수 공간이 광대하여 어디가 최솟값이 되는 곳인지를 짐작할 수 없습니다.이런 상황에서 기울기를 잘 이용해 함수의 최솟값을 찾으려는 것이 경사법입니다. 여기서 주의할 점은 각 지점에서 함수의 값을 낮추는 방안을 제시하는 지표가 기울기라는 것입니다. 경사하강법은 현 위치에서 기울어진 방향으로 일정 거리만큼 이동합니다. 그런 다음 이동한 곳에서도 마찬가지로 기울기를 구하고, 또 기울어진 방향으로 나아가기를 반복합니다. 이렇게 해서 함수..
신경망 학습 1. 훈련 데이터와 시험 데이터기계학습 문제는 데이터를 훈련 데이터와 시험 데이터로 나눠 학습과 실험을 수행하는 것이 일반적입니다.우선 훈련 데이터만 사용하여 학습하면서 최적의 매개변수를 찾습니다. 왜 훈련과 테스트 데이터로 나누냐면 범용적으로 사용할 수 있는 모델이기 때문입니다. 범용 능력은 아직 보지 못한 데이터로도 문제를 올바르게 풀어내는 능력입니다. 2. 손실 함수신경망 학습에서는 현재의 상태를 '하나의 지표'로 표현합니다. 그리고 그 지표를 가장 좋게 만들어주는 가중치 매개변수의 값을 탐색하는 것입니다.즉, 신경망도 '하나의 지표'를 기준으로 최적의 매개변수 값을 탐색합니다.신경망 학습에서 사용하는 지표는 손실 함수라고 합니다. 이 손실 함수는 임의의 함수를 사용할 수도 있지만 일반..
손글씨 숫자 분류를 통해 이미 학습된 매개변수를 사용하여 학습 과정은 생략하고, 추론 과정만 구현해 보겠습니다. 1. MNIST 데이터셋 MNIST 데이터셋은 0부터 9까지의 숫자 이미지로 구성됩니다. 훈련 이미지 60,000장 시험 이미지 10,000으로 학습한 모델로 시험 이미지들을 얼마나 정확하게 분류하는지 보겠습니다. MNIST의 이미지 데이터는 28 * 28 크기의 이미지(1채널)이며, 각 픽셀은 0에서 255까지의 값을 취합니다. load_mnist 함수는 읽은 MNIST 데이터를 "(훈련 이미지, 훈련 레이블), (시험 이미지, 시험 레이블)" 형식으로 반환합니다.인수로는 normalize, flatten, one_hot_label 세 가지를 설정할 수 있습니다. normalize는 입력 이..
1. 출력층 설계하기 신경망은 분류와 회귀 모두에 이용할 수 있다. 다만 둘 중 어떤 문제냐에 따라 출력층에서 사용하는 활성화 함수가 달라집니다. 일반적으로 회귀에는 항등 함수를, 분류에는 소프트맥스 함수를 사용합니다. p.s 기계학습 문제는 분류(classification)와 회귀(regression)로 나뉩니다. 분류는 데이터가 어느 클래스에 속하느냐 문제입니다.사진 속 인물의 성별을 분류하는 문제가 여기에 속합니다.회귀는 입력 데이터에서 수치를 예측하는 문제입니다.사진 속 인물의 몸무게를 예측하는 문제가 회귀입니다. 2. 항등 함수와 소프트맥스 함수 구현하기 항등 함수(identity function)는 입력을 그대로 출력합니다. 입력과 출력이 항상 같다는 뜻의 항등!항등 함수에 의한 변환은 은닉층..
1. 3층 신경망 구현하기 아래 [그림 1]처럼 3층 신경망에서 수행되는, 입력부터 출력까지의 처리(순방향 처리)를 구현했습니다.입력층(0층)은 2개, 은닉층(1층)은 3개, 두 번째 은닉층(2층)은 2개, 출력층(3층)은 2개 뉴런으로 구성 [그림 1] [그림 2]를 보면 입력층의 뉴런 x2에서 다음 층의 뉴런 a1 으로 향하는 가중치를 표시하고 있습니다.[그림 2] [그림 3]과 같이 편향을 뜻하는 뉴런인 1이 추가되었습니다.a1 (1)를 수식으로 나타내면a1 (1) = w11 (1) * x1 + w12 (1) * x2 + b1 (1) A(1) = XW(1) + B(1) A(1) = (a1(1), a2(1) a3(1)), X = (x1, x2), B(1) = (b1(1), b2(1), b3(1)) w..
1. 신경망 신경망을 그림으로 나타내면 [그림 1] 처럼 됩니다. 여기에서 가장 왼쪽 줄을 입력층, 맨 오른쪽 줄을 출력층, 중간 줄을 은닉층이라고 합니다.은닉층의 뉴런은 (입력층이나 출력층과 달리) 사람 눈에는 보이지 않습니다. 그래서 '은닉'인 것입니다.[그림 1] 2. 활성화 함수 입력 신호의 총합을 출력 신호로 변환하는 함수를 일반적으로 활성화 함수(activation funcion)라 합니다. '활성화'라는 이름이 말해주듯 활성화 함수는 입력 신호의 총합이 활성화를 일으키는지를 정하는 역할을 합니다. [식 1]는 가중치가 곱해진 입력 신호의 총합을 계산하고, 그 합을 활성화 함수에 입력해 결과를 내는 2단계로 처리됩니다. [식 1] 그래서 다음과 같은 2개의 식으로 나눌 수 있습니다. [식 2]..
1. Autograd & VariableAutograd는 자동 미분을 수행하는 torch의 핵심 패키지로, 자동 미분을 위해 테잎(tape) 기반 시스템을 사용합니다.순전파(foward) 단계에서 autograd 테잎은 수행하는 모든 연산을 기억합니다. 그리고, 역전파(backward) 단계에서 연산들을 재생(replay)합니다.Autograd를 사용하면 backprop을 위한 미분 값을 자동으로 계산해줍니다.자동 계산위해서는 사용하는 변수는 torch.autograd에 있는 Variable이라는 것을 사용해야합니다. Variable 모습을 구현하면 다음과 같습니다. import torchfrom torch.autograd import Variablea = torch.rand(5)a = Variable(..
1. 퍼셉트론 퍼셉트론은 프랑크 로젠블라트가 1957년에 고안한 알고리즘입니다. 고대 화석 같은 이 알고리즘을 지금 시점에 왜 배우는가 하면, 퍼셉트론이 신경망(딥러닝)의 기원이 되는 알고리즘이기 때문입니다. 퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력합니다. 신호는 '1이나 0' 두가지 값을 가질 수 있습니다.[그림 1] [그림 1]은 입력으로 2개의 신호를 받은 퍼셉트론의 예입니다. x1과 x2는 입력신호, y는 출력 신호, w1과 w2는 가중치를 뜻합니다.그림의 원을 뉴런 혹은 노드라고 부릅니다.입력 신호가 뉴런에 보내질 때는 각각 고유한 가중치가 곱해집니다(w1* x1, w2 * x2)뉴런에서 보내온 신호의 총합이 정해진 한계를 넘는다면? 1을 출력합니다. 이를 [공식 1]으로 풀면..
사실 딥러닝 보다는 머신러닝에 더 가까운 개념이지만 머신러닝이 딥러닝을 포함하고 있어서 공부해보았다.Linear regression 가설(Hypothesis)과 비용함수(Cost function) 1차 방정식으로 세울수 있다.H(x) = W * x + b 가설 세우기아래 그림의 기울기 선중에서 우리가 가지고 있는 데이터 중에 어떤 선이 제일 알맞는 선일까를 찾는게 목표x의 값에 W라는 것을 곱하고 b를 하면 기울기가 나온다.즉 W와 b의 값에 따라 다른 선들이 나타게 되는 것 그림의 기울기를 대충 구해보면 아래와 같다.파란색은 H(x) = 1 * x + 0노란색은 H(x) = 0.5 * x + 2 이 둘중에 W와 b가 어떤게 더 좋은것인가 알아야하는것[그림 1] [그림 2]를 보면 가설이 나타내는 점들과..
- Machine Learning Limitations of explicit programming1. Spam filter: many rules (Spam 룰들이 너무 많음)2. Automatic driving: too many rules Machine learning: "Field of study that gives computers the ability to learn without being explicitly programmed" Arthur Samuel (1959) 일일이 프로그래밍 하지말고 학습하자. Supervised/Unsupervised learning - Supervised learning 레이블링이 정해저 있는 데이터를 가지고 학습 시험성적을 0~100점 regression 시험의 성..