딥러닝(DL)/딥러닝 기초 13

Generative model vs Discriminative model (생성 모델과 판별 모델)

이번 포스팅에서는 Generative / Discriminative model이 무엇이고, 이 둘의 차이점에 대해 다룹니다. 머신러닝 모델은 크게 2가지 타입, Generative model과 Discriminative model로 분류될 수 있습니다. 우리는 이미 이런 모델들을 사용해 이미지를 생성하기도 하고, 자연어를 처리하기도 하고, 객체 탐지나 세그멘테이션 등 꽤 어려운 task들을 수행해내고 있습니다. 그러나 근본적으로, 이 2개의 용어는 통계적인 분류 문제에 대한 모델을 설명하는 것에서 정의됩니다. Classification 의 정의를, 위 그림에 맞게 다시 설명해봅시다. 각 데이터 $X$가 있고, 레이블된 클래스 값 $Y$가 존재합니다. Classification는 입력 데이터를 사전에 정의..

[DL] 선형 회귀 ( Linear Regression )

오늘의 포스팅에서는 파이썬(Python) 만으로 그리고 파이토치(PyTorch)를 이용하여 간단한 선형 회귀 모델을 만들어 보겠습니다. Python 선형 회귀 구현 (Bias X) Python 선형 회귀 구현 (Bias X) PyTorch 선형 회귀 구현 PyTorch 다변수 선형 회귀 구현 Python 선형 회귀 구현 (Bias X) 하루 노동 시간 하루 매출 1 25,000 2 55,000 3 75,000 4 110,000 5 128,000 6 155,000 7 180,000 위 표와 같이 하루 노동 시간에 따른 하루 매출 데이터가 있다고 가정하겠습니다. 하루 노동 시간이 8시간일 때 하루 매출은 얼마가 될까요? 이 질문에 대답하기 위해서는 1시간, 2시간, ... , 7시간을 일했을 때 얼마를 벌었..

[DL] 역전파를 이용한 2층 신경망 학습 구현

구현이라기보단 제가 스스로 이해하기 위해 주석 및 설명을 달아놓는 포스팅입니다. 개념 설명이 아닌 포스팅이라 코드를 보실 분 아니면 넘어가셔도 좋을 것 같습니다. # coding: utf-8 import sys, os sys.path.append(os.pardir) # 부모 디렉터리의 파일을 가져올 수 있도록 설정 import numpy as np from common.layers import * from common.gradient import numerical_gradient from collections import OrderedDict class TwoLayerNet: def __init__(self, input_size, hidden_size, output_size, weight_init_std..

[DL] 역전파 ( Backward-propagation )

다층 퍼셉트론(MLP) 같은 깊은 신경망이 등장한 후 선형으로 분류가 가능하지 않은 데이터들을 분류하는 것이 가능해졌습니다. 하지만 모델의 깊이(depth)가 깊어질수록, 즉 모델의 층이 많아질수록 모델의 가중치의 수는 기하급수적으로 많이 늘어납니다. 기존의 경사하강법(수치미분)은 기울기를 이용하여 가중치를 업데이트하는 방법을 사용하는데, 이 때 수치미분 방법으로 여러 층에 존재하는 가중치들을 모두 하나하나 업데이트하는 것은 매우 많은 연산량과 메모리를 요구합니다. 이를 해결하고자 고안된 알고리즘이 역전파 알고리즘(Backpropagation algorithm) 입니다. 역전파를 설명하는 대표적인 2가지 방법은 계산 그래프(Computational graph) 로 설명하는 방법과, 다변수 미분을 직접 수..

[DL] 학습 알고리즘 구현 ( 2층 신경망 )

앞선 포스팅에서 다루었던 내용들을 종합하여 간단한 구조의 신경망 학습을 전체적으로 구현해보는 포스팅입니다. 구현 하기 전 신경망 학습의 절차에 대해 간단히 확인해보면 아래와 같습니다. 미니배치 - 훈련 데이터의 일부를 무작위로 가져와 학습 기울기 산출 - 각 가중치 매개변수의 기울기를 구함 ( 손실함수 값을 줄이기 위해 ) 매개변수 갱신 - 가중치 매개변수를 학습률과 기울기의 곱을 뺌으로써 갱신 반복 - 1~3 반복 2층 신경망 클래스를 구현하는 것부터 시작됩니다. class TwoLayerNet: def __init__(self, input_size, hidden_size, output_size, weight_init_std=0.01): # 가중치 초기화 self.params = {} self.para..

[DL] 경사 하강법 ( Gradient Descent )

기계학습 문제는 학습의 목표가 최적의 매개변수를 찾는 것이고, 이는 곧 손실 함수가 최솟값이 될 때의 매개변수를 찾는 것과 동일합니다. 이 때 기울기를 사용해서 함수의 최솟값을 찾는 아이디어가 경사 하강법(Gradient Descent) 입니다. [DL] 손실 함수 ( Loss function ) 신경망 학습이란 train 데이터로부터 가중치 매개변수의 최적값을 자동으로 얻는 것을 뜻합니다. 이번 포스팅에서는 신경망이 학습할 수 있도록 해주는 지표인 손실 함수에 대해 알아보도록 하 songsite123.tistory.com 지난 포스팅에서 손실 함수의 개념을 알아보았습니다. 손실함수는 신경망의 성능의 '나쁨'을 나타내는 지표로 현재의 신경망이 훈련 데이터를 얼마나 잘 처리하지 못하는가 를 나타냅니다. 이..

[DL] 수치 미분 ( Numerical differentiation )

뉴럴 네트워크는 데이터를 통해 학습을 할 때 "미분"을 이용하여 학습을 합니다. $$ f'(x) = \lim_{h \to 0} \dfrac{f(x+h)-f(x)}{h} $$ 미분 계수는 극한으로 정의됩니다. 어떤 함수의 순간 변화율을 구하는 것을 의미하고 고등학교 수학 시간에 이미 여러 번 배운 수식이죠. 그런데 딥러닝에서는 컴퓨터한테 극한값이라는 고차원 적인 개념을 알려주고 프로그래밍하기 복잡하기 때문에 엄밀한 미분 계수는 아니지만, 그와 비슷한 값이 나오는 평균 변화율을 사용하게 됩니다. 아이디어는 매우 작은 $h$를 잡게 되면 실제 미분계수와 거의 동일한 값을 가진다는 것이죠. 즉 미분 계수를 다음과 같이 충분히 작은 $h$를 잡아 근사시킵니다. $$ \dfrac{f(x+h)-f(x)+}{h} $$..

[DL] 정보 엔트로피 ( Information Entropy )

정보이론은 최대한 많은 데이터를 매체에 저장하거나 채널을 통해 통신하기 위해 데이터를 정량화하는 수학의 한 분야입니다. 쉬운 말로 정보량을 수치화 할 수 있을까? 라는 질문에서 시작된 것이 정보이론입니다. 정보 엔트로피란 정보 이론에서 나타난 개념으로, 보통 엔트로피라는 단어는 화학이나 물리에서, 열역학에 대해 배울 때 가장 먼저 듣게 될텐데 실제로 정보 엔트로피는 섀넌이 열역학에서 정의된 엔트로피를 확장한 개념으로 열역학에서의 엔트로피와 크게 다르지 않은 개념입니다. 딥러닝을 하는데 갑자기 무슨 열역학? 엔트로피? 라고 생각할 수 있지만 지난 포스팅에서 소개했듯 손실 함수로 자주 사용되는 크로스 엔트로피라는 것도 배웠고, 이를 이해하기 위해서는 엔트로피에 대해 자세히 알 필요가 있습니다. 또한 자연어 ..

[DL] 손실 함수 ( Loss function )

신경망 학습이란 train 데이터로부터 가중치 매개변수의 최적값을 자동으로 얻는 것을 뜻합니다. 이번 포스팅에서는 신경망이 학습할 수 있도록 해주는 지표인 손실 함수에 대해 알아보도록 하겠습니다. 손실 함수 ( Loss function ) 란? 신경망 학습에서는 현재의 상태를 하나의 지표로 표현합니다. 신경망은 이러한 하나의 지표를 기준으로 최적의 매개변수 값을 탐색하는데, 이 때 신경망 학습에서 사용되는 지표를 손실/비용 함수(Loss function, Cost function) 이라고 합니다. 즉 손실 함수란 신경망의 성능의 '나쁨'을 나타내는 지표로 현재의 신경망이 훈련 데이터를 얼마나 잘 처리하지 못하는가 를 나타냅니다. 인공신경망의 성능이 좋을수록 손실 함수의 값이 낮고 성능이 나쁠수록 손실함수..

[DL] MNIST ( Modified National Institute of Standards and Technology database )

이번 포스팅은 MNIST 데이터셋을 이용해 직접 신경망의 순전파를 확인해보고, 일종의 실습을 하는 포스팅입니다. MNIST 는 대표적인 기계학습 데이터셋으로 0부터 9까지의 숫자 이미지로 구성된 데이터셋입니다. MNIST의 이미지 데이터는 $28 \times 28$ 크기의 흑백 이미지이며, 각 픽셀은 $0$ ~ $255$ 까지의 밝기 값을 가집니다. 또한 각 이미지에는 그 숫자에 대한 레이블이 붙어있습니다. 이 데이터셋 내부에 이미 훈련 이미지가 $60,000$장, 시험 이미자가 $10,000$장 준비되어 있습니다. 훈련 이미지들을 사용해 학습된 모델로 시험 이미지를 분류해보는 것이 오늘의 목적입니다. 오늘은 학습된 매개변수로 사용해 분류가 진행되는 과정(순전파, Forward propagation)만 ..

728x90