머신 러닝이란?
머신 러닝은 문제를 해결하기 위한 맞춤 코드(custom code)가 아닌 일련의 데이터에 대해 무언가 흥미로운 것을 알려줄 수 있는 일반 알고리즘 (generic algorithms)
- 코드를 작성하는 대신 데이터를 일반 알고리즘에 공급하면, 데이터를 기반으로 한 자체 로직이 생성
분류 알고리즘 (classification algorithm) 예
- 데이터를 서로 다른 그룹으로 분류
- 필기체 숫자를 인식에 사용되는 동일한 분류 알고리즘을 그대로 이메일의 스팸 분류에 적용
- 동일한 알고리즘이지만 다른 학습 데이터를 제공하면 다른 분류 로직을 자동으로 생성
- 머신 러닝은 이런 종류의 일반 알고리즘 (generic algorithms)을 의미하는 포괄적인 용어
지도 학습과 비지도 학습 (Supervised vs. Unsupervised Learning)
머신 러닝 알고리즘은 지도 학습 (supervised learining)과 비지도 학습 (unsupervised learning)으로 구분
지도 학습 (supervised learning)
- 결과에 대한 사전 지식이 필요
- 학습(훈련) 데이터에 라벨링이 되어 있어야 함.
즉 각 질문 (input)에 대해 무엇이 정답 (output)인지 훈련 데이터가 알고 있어야 함.
- 회귀분석 (regression), 분류 (classification), 협업 필터링 (collaborative filtering), 인공 신경망 (artificial neural network) 등
비지도 학습 (unsupervised learning)
- 구체적인 결과에 대한 사전 지식이 없지만 데이터를 통해 유의미한 지식을 얻고자 하는 경우에 사용
- 데이터만 존재, 즉, 문제는 있는데 답은 없는 경우
- 클러스터링(clustering), 차원 축소(dimension reduction) 등
선형 회귀분석 (Linear Regression Analysis)
선형 회귀분석은 직선을 데이터 포인트들 간의 관계가 기울기를 결정하는 직선을 정의
- 이상치 (outlier)에 민감하여 기울기에 영향
분류 알고리즘 (1)
구글의 Gmail은 이메일의 스팸 여부를 분류 (classification) 알고리즘을 사용하여 감지
- 이메일의 데이터 (송신자, 수신사, 제목, 메시지)에 근거하여 분류
- 라벨링된 데이터가 알고리즘에 제공되는 지도 학습
분류 알고리즘 (2)
라벨링된 데이터로 학습이 끝나면, 새로이 입력된 데이터에 대해 미리 정의 된 카테고리 중 하나로 분류
분류 알고리즘 적용 예
- 스팸 메일 감지, 카드 사기 감지, 감성 분석 (sentiment analysis)
분류 알고리즘 (3)
미리 정의된 특징 (feature)에 기반하여 분류
클러스터링 알고리즘 (1)
구글 News는 제목과 내용에 기반하여 뉴스 기사들을 카테고리로 그룹화하는데 클러스터링 (Clustering) 알고리즘을 사용
클러스터링 알고리즘 (2)
클러스터링 알고리즘은 입력된 데이터 (뉴스 기사 등) 들의 유사성 (similarity)을 분석하여 그룹화된 카테고리로 분류
생물학적 뉴런
생물학적 신경세포인 뉴런(neuron)이 수상돌기(dendrtie)를 통해서 입력을 받아 축삭돌기(axon)를 통해 출력을 생성하는 과정을 수학적으로 모델링
인접한 두 뉴런의 연결 부분인 시냅스(synapse)에서 학습이 일어남
인공 뉴런
인공뉴런(퍼셉트론, perceptron)은 생물학적 신경세포의 작동방식을 수학적으로 모델링
인공 뉴런 학습
뉴런의 함수를 사용하여 뉴런이 삼각형과 원으로 라벨되어 있는 훈련 데이터로 매개변수 W 와 b를 학습
- 선형회귀 학습과 유사
- 뉴런에게 라벨 데이터를 주입하고 얻은 결과를 실제 값과 비교하고, 에러를 최소화하도록 가중치 W와 편향(bias) b를 조정
W 와 b의 매개변수를 구해서 가중리 합을 계산하고 나면 z에 저장된 결과를 '0' 또는 '1'로 바꾸는 활성화함수 (activation function)가 필요
- 여러 종류의 활성화 함수가 있지만 여기에서는 0과 1사이의 실수를 리턴하는 시그모이드(sigmoid) 함수를 적용
시그모이드 함수 (Sigmoid Function)
시그모이드 함수 (Sigmoid Function)
신경망 학습 개요
학습 알고리즘
-
데이터 세트의 값들을 반복하여 적용하여 매번 더 정확한 결과를 얻기 위해 각 뉴런의 W와 b 매개변수를 수정
-
매 반복마다 개선 여부를 확인하기 위해 비용/오류/손실함수를 계산
-
(손실, 비용) 함수의 값을 최소화하는 방향으로 함수의 매개변수의 변경을 반복적으로 수행
경사 하강법 (Gradient Descent)
경사 하강법
-
(손실, 비용) 함수의 값을 최소화하는 방향으로 함수의 매개변수의 변경을 수행하는 최적화 알고리즘
-
함수의 기울기 (경사)를 구하여 기울기가 낮은 쪽 (작은 기울기 값) 으로 계속 이동하여 반복적으로 최적화를 수행
-
기울기를 계산해야 하므로 (비용) 함수는 미분 가능해야 함
-
매개변수 (W와 b)의 초기 값에서 시작해서 이러한 방법을 W와 b를 수정해가며 결국에는 비용 함수를 최소화하는 매개 변수 값을 찾아냄
학습 속도 (Learning Rate)
학습 속도 (learning rate)는 최적해 (최소비용(손실))에 도달하기 위한 이동 구간의 크기 (변동폭)을 설정
- 너무 크면 최적해를 지나감 (오버슈팅, overshooting)
- 너무 작으면 최적해에 도달하기까지 많은 시간 소요
파아토치(PyTorch) 소개
파이토치는 파이썬을 위한 오픈 소스 머신러닝 라이브러리
파이토치 텐서
파이토치는 텐서(tensor)를 사용하여 모델의 입력, 출력, 매개변수 등을 표현
- 텐서는 다차원 배열을 표현
- 넘파이의 배열과 유사
파이토치 자동 미분
경사 하강법 등에서 손실함수 (loss, cost)를 최소화하는 방향의 기울기를 구하기 위해 파이토치의 자동 미분 (Autograd) 기능을 이용
-
신경망에서 역전파로 파라미터 (W, b 등)에 대해 손실함수의 기울기 계산
-
파이토치에서는 기울기 계산을 위해 해당 텐서에서 requires_grad 속성을 설정(True)하여 역전파 시 계산된 기울기의 연산 기록을 저장하고 추적
간단한 신경망 예
y = 2x + 1 의 방정식 예측 예
4개 계층 구성
간단한 신경망 예: ReLU 활성화 함수
은닉계층의 활성화 함수로 ReLU (Rectified Linear Unit) 적용
- max(0,x)
- 시그모이드 함수의 비선형성 (non=linearity)를 개선
- 기울기 소멸(gradient vanishing) 문제 개선
간단한 신경망 예: 모델
모델 구성
- Sequential 컨테이너는 노드를 계층 (layer)으로 순서대로 쌓아 올리는 모델
간단한 신경망 예: 학습 모델 설정
모델의 torch.optim 패키지를 사용하여 학습 모델을 설정
-
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
-
SGD(Stochastic Gradient Descent), 확률적 경사 하강법
선형 회귀분석 (Linear Regression) 이란?
회귀분석 (regression)
선형 회귀 분석 (linear retgression)
-
종속 변수 y와 한 개 이상의 독립 변수 (또는 설명 변수) x와의 선형 상관 관계를 모델링하는 회귀분석 기법
-
두 변수 사이의 관계일 경우 단순 선형 회귀분석이라고 하며 여러 개의 변수 간의 관계인 경우 다중 선형 회귀분석
-
선형 회귀 분석을 위한 다양한 기법(알고리즘)들이 개발
단순한 선형 회귀분석 예
학생의 공부 시간에 따른 성적 추정 예
- 선형 회귀 가설(hypothesis) H(x) = W * x + b
- 공부 시간 x로 부터 성적을 추정하기 위해 파라미터 W와 b를 추정
단순 선형 회귀분석 - 최소 제곱법
최소 제곱법 (ordinary least square)은 가장 단순하면서 널리 사용되는 선형 회귀분석의 알고리즘
- 실제 데이터와 추정 값의 차이의 제곱의 합이 최소가 되도록 파라미터 추정
단순한 선형 회귀분석 적용 예
y = W * x + b 형태의 단순한 선형 회귀분석 모델에 대해 기존의 알고리즘(최소 제곱법)과 머신 러닝의 학습(경사하강법)을 적용한 예를 통해 머신 러닝 동작 구조의 이해를 목표
y = 0.1 * x + 0.3 관계를 갖는 가상 데이터를 생성하고 이 데이터를 통해 파라미터 W (0.1)와 b(0.3)을 추정하는 선형 회귀분석 적용
가상 데이터 생성
numpy 패키지를 사용하여 y = 0.1 * x + 0.3 관계를 갖는 가상 데이터를 생성
가상 데이터 분포 그림
- matplot 라이브러리 사용하여 그리기
- 주피터 노트북에서 그리기 위해 다음 추가
선형 회귀 분석 머신 러닝 (1)
하나의 선형 노드(인공 뉴런)만 표현
입력 데이터 x_data로 부터 출력 값 y를 예측할 수 있는 학습 알고리즘을 훈련
선형 회귀 분석 머신 러닝 (2)
학습 알고리즘
비용 함수로 평균 제곱오차 (mean square error, MSE)를 사용
추정된 W와 b로 예측된 값과 실제 값과의 차이 (에러 값)을 리턴
-
SGD(Stochastic Gradient Descent), 확률적 경사 하강법
-
손실 함수의 값을 최소하하는 방향으로 함수의 매개변수의 변경을 반복적으로 수행하는 최적화 알고리즘
-
함수의 기울기(경사)를 구하여 기울기가 낮은 쪽으로 계속 이동하여 반복적으로 최적화를 수행
-
모델의 파라미터와 학습 속도 지정