본문 바로가기

Python/DeepLearning

TensorFlow 교육 - 1일차

0.  AI 개념과 역사 및 활용분야

1. AI 개념

- Symbolic AI

- Machine Learning

- Deep Learning

(1) AI 접근 기법 (모델링 + 알고리즘)

- Real world task

- Modeling

- Formal task

(3) Features

2. 머신러닝의 동작원리

<학습이란?>

- 학습에 의해 지식이 축적되거나 새로운 기능을 습득하거나 혹은 경험이 풍부해지는 등 학습자의 내용 상태가 변화함

- 이 변화는 학습자가 외부 환경에 따라 적합한 방향으로 발현함

- 새로운 문제가 나타났을 때 더 현명하게 문제에 대응할 수 있게 됨

- 머신러닝에서는 기계, 컴퓨터 프로그램이 학습을 수행함

- 컴퓨터 프로그램이 바깥 세상과 상호 작용하여 그 결과에 따라 내용 상태를 변경해 가는 과정

> labeling이 문제가 되는 경우가 많기 때문에 데이터를 직접 확인한 후 테스트를 하는 것이 좋다.

> epoch(세대or주기)을 많이 돌려야 학습할 수 있다. (얼마나 해야하는지 모름, 도메인 영역-어플리케이션 종류-준비데이터에 따라 다르다)

$$ h(x) = w_1x_1 + w_2x_2 + … +b $$

> parameter : machine learning에서는 parameter가 w(weight)과 b(bais)이다.

> x = input, y = input (h(x)는 아님. 여기서 y는 학습할 데이터)

> 가변적인 요소 : hyper parameter (내가 조절할 수 있는 요소)

 epoch는 내가 조절할 수 있으므로 hyper parameter이고 weight는 기계가 바꾸므로 그냥 parameter이다.  generalization(창조력)이 높은 h(x)가 좋은 h(x)이다.

 학습을 위해 보통 dataset을 trainning dataset + test dataset 2개로 나누라고 하지만, 실무에서는 tranning dataset + validation dataset + test dataset 3개로 나누어서 학습하는 것이 좋다. (8:1:1 정도) hyper parameter에는 알고리즘도 들어간다. 한 개의 알고리즘만 테스트하는 것이 아니라 여러 개의 알고리즘을 실험하여 어떤 것이 가장 정확한지 선택하는 것이 중요하다. validation dataset은 이 단계에서 들어간다. 어떤 알고리즘이 가장 적합한지 찾기 위해서이다. 그렇기 때문에 develop dataset이라고도 부른다.

Symbolic AI = data + rule => answer

machine learning = data + answer => rule / 미지의 문제 해결 가능

> over fitting : trainning dataset에만 적합되어 있어 다른 dataset에서는 적중률이 낮은 것.

> under fitting : trainning 에서도 적중률이 낮은 것 -> epoch를 높이면 해결 가능.

 이미 있는 데이터에 대해서 알아내는 것보다 미지의 데이터의 예측율이 높은 것이 더 좋은 모델이다.

 machine learning에 대해서 필요한 3가지

- input data(x)

- 기대 출력(y)

- 알고리즘의 성능을 측정하는 방법

> representation (표현) : 컴퓨터 세계에서 나타내는 방법. 이미지 -> 컴퓨터가 인식하는 이미지로 변환 

 데이터 변환은 분류 작업 같은 문제(알고리즘)을 더 쉽게 해결할 수 있도록 만들어 줌.

> 정규화(nomarlization) : feature를 고른 이후 data의 성격이 다르다면 똑같은 잣대로 비교하기 힘드므로 성격을 같게 바꾸어주는 것이다. 

 A.I에서 가장 많이 나오는 표현 중 하나가 Insight(직감)이다. (경험에 의한 축적) 직감을 통해 어떤 parameter를 선택할 것인지 몇 번이나 epoch를 돌릴 것인지 등등 선택해야하기 때문이다. 

 머신러닝의 learning는 Supervised, Unsupervised, Reinforcement 3가지 방법이 있다. 대부분 Supervised 기법(지도 학습)을 사용하며 label이 존재하는 data를 사용한다. 

지도 학습

- 라벨이 존재하는 데이터

- 함수 학습 및 피드백

- 객관적인 평가 가능

- 분류 / 예측

정답을 주고 컴퓨터가 이 정답을 맞출 수 있도록 학습
비지도 학습

- 라벨이 존재하지 않는 데이터

- 피드백 불가

- 객관적인 평가 거의 불가능

- 군집화 / 연관 규칙

정답을 주지 않고 데이터에 숨겨진 특징이나 구조를 발견
강화 학습

- 의사결정 프로세스

- 보상 시스템

- 스스로 깨닫기

에이전트가 다양한 액션을 취하면서 최적의 액션 집합을 탐색

- 회귀 (regression-예측) : 통계학에서 사용하는 용어. 

기계학습 프로젝트 프로세스

기획 - 데이터 수집 - 데이터 탐색 - 데이터 전처리 - 모델링 - 모델 평가 - 결과 보고서 작성

import numpy as np

x = [2, 4, 6, 8]
y = [81, 93, 91, 97]

mx = np.mean(x)
my = np.mean(y)

print('mx:', mx, 'my:',my)

divisor = sum([(i-mx)**2 for i in x])
print('divisor:', divisor)

def func_nu(x, mx, y, my):
    nu = 0
    for i in range(len(x)):
        nu += (x[i]-mx)*(y[i]-my)
    return nu

numerator = func_nu(x, mx, y, my)

print('numerator:',numerator)
a = numerator/divisor
print('a:',a)
b = my-(mx*a)
print('b:',b)

선형 회귀!

import numpy as np

ab = [3,76]
data = [[2,81],[4,93],[6,91],[8,97]]

x = [i[0] for i in data]
y = [i[1] for i in data]

print(x,y)

#h(x) = ax+b
def predit(x):
    return ab[0]*x + ab[1]

def rmse(p,y):
    return np.sqrt(((p-y)**2).mean())

p_rst = []

for i in range(len(x)):
    p_rst.append(predit(x[i]))
    print('y:',y[i],'p_rst:',p_rst[i],'i:',i)

print(rmse(np.array(p_rst), np.array(y)))