[인공지능 개발에 많이 쓰는 라이브러리]
* 사이킷런
- 분류, 회귀, 군집화, 차원 축소 등의 고전적인 기계 학습을 지원하는 라이브러리
- SVM, 결정트리, 랜덤포레스트, k-nn, 얕은 신경망 등을 제공함
- 딥러닝을 지원하지 않고, 고전적인 기계 학습을 지원
* 텐서플로
- 구글에서 개발한 딥러닝을 지원하는 대표적인 라이브러리
- 컨볼루션 신경망, 순환 신경망, 강화 학습 등 제공
* 케라스
- 텐서플로를 한 단계 추상화한 라이브러리
* 파이토치
- 페이스북에서 개발한 딥러닝 라이브러리
[레모네이드 실습]
* 독립변수: 원인이 되는 것
* 종속변수: 결과
* 순서
1. 과거 데이터 준비
2. 모델 구조 제작
3. 모델 학습
4. 모델 예측(이용)
import tensorflow as tf
import pandas as pd
# 레모네이드 데이터셋 불러오기
filepath = '/content/lemonade.csv'
lemonade = pd.read_csv(filepath)
lemonade.head()
# 독립 변수(temp)와 종속변수(sales)를 선택
independent = lemonade[['temp']]
dependent = lemonade[['sales']]
# 데이터 형태 확인
print(lemonade.shape)
print(independent.shape, dependent.shape)
# TesorFlow 사용하여 모델 만들기
# 독립 변수 개수는 온도 컬럼 하나이므로 첫 번째 줄의 숫자 부분에 1
X = tf.keras.layers.Input(shape=[1])
# 종속변수는 개수가 판매량 하나이기 때문에 숫자 부분에 1
Y = tf.keras.layers.Dense(1)(X)
model = tf.keras.models.Model(X,Y)
# 모델 컴파일하기. 평균 제곱 오차(MSE)를 손실 함수로 사용
model.compile(loss='mse')
# 모델 학습시키기. fit 메서드 사용하여 독립 변수, 종속 변수 전달하고, 학습 횟수(epochs) 지정
model.fit(independent, dependent, epochs=10000, verbose=0)
model.fit(independent, dependent, epochs=10)
# 학습된 모델 사용하여 예측 수행
print(model.predict(independent))
print(model.predict([[15]]))
[과정 1) 과거 데이터 준비]
[과정 2) 모델 구조 생성]
독립변수(원인) 개수는 온도 컬럼 하나이므로 첫 번째 줄의 숫자 부분에 1
종속변수(결과) 개수가 판매량 하나이므로 숫자 부분에 1
[과정 3) 모델 학습]
[과정 4) 모델 예측(이용)]
# 3: Epoch: 전체 데이터를 몇 번 학습할지를 결정해주는 숫자. 지금 예에서는 1000번 학습
# 4: 15라는 독립변수를 넣었을 때 결과를 예측해봐라
* epochs = 10일 때,
Loss는 학습이 얼마나 진행되었는지를 알려주는 지표.
학습이 진행될 수록 값이 떨어짐
* 손실 (loss)
- 데이터의 원래 종속변수(정답)과 예측된 값의 차이의 제곱
- 평균제곱오차 (MSE)
[CPU, GPU, NPU, TPU]
* CPU
- 중앙처리장치
- 컴퓨터의 중앙에서 모든 데이터를 처리하는 장치라는 뜻
- 하나의 부품에 연산 장치, 해독 장치, 제어 장치 등이 집적되어 있는 형태의 마아크로프로세서
- 연산 및 논리 연산을 수행하는 ALU(산술 논리 단위)가 1개임
- 직렬처리
- 전자계산기 기본 구조
* GPU
- 그래픽 처리에 필요한 대용량 연산을 수행하기 위한 Co-processor 형태로 출발
- 단순한 형태의 대량 계산을 CPU로부터 독립시키기 위해 고안됨
- 단순 연산을 병렬처리
[CPU]
* CPU 작동 원리
- CPU는 일의 순서를 잘 계산한 후 순서에 맞춰 계산 수행
- 대부분 프로그램이 복잡한 순서를 가진 알고리즘으로 구현되었기 때문에,
CPU는 이러한 프로그램을 잘 순서화해서 일을 처리
- 처리할 일을 메모리(DRAM)에 불러 들어와서 어떤 식으로 처리할 것인지를 결정한 다음(Control Unit) 계산을 처리 (ALU)
- 딥러닝에서 사용하는 계산들은 기존의 CPU가 수행한 계산보다 훨씬 덜 복잡하므로 딥러닝 계산에 최적화된 처리 장치 필요
- 단점: 순차적인 일에 강하고, 병렬적인 일은 상대적으로 GPU에 비해 떨어짐
[GPU]
- 원래는 그래픽 작업을 처리하는 용도로 개발, 간단하지만 많은 계산을 할 수 있도록 설계
- 딥러닝 또한 간단하지만 많은 문제를 해결해야 하므로 GPU를 사용
- 다만, GPU가 계산 성능이 좋긴 하지만 복잡한 문제를 빠르게 해결할 수 없기 때문에 CPU와 GPU를 적절히 사용하는 것이 중요
[NPU]
- Neural network processing 에 특화된 칩셋
[TPU]
- 구글에서 제작된 NPU의 이름
- 텐서 프로세싱 유닛 기계학습을 위해 개발되었으며, tensorflow에 맞게 제작된 맞춤형 집적 회로
[인공지능이란?]
* 인공지능(Artificial Intelligence)
- 인공지능: 인공적으로 만든 지능
- 지능: 계산이나 문장 작성 따위를 지적 작업에서, 성취 정도에 따라 정하여지는 적응 능력. 즉, 지적 작업에 필요한 능력
[머신러닝]
* 머신러닝(Machine Learing)
- 머신러닝은 데이터를 사용하여 인공지능을 만들 수 있음
- 기계가 공부하는 것.
사람이 직접 프로그램을 만들어서 기계에 넣어주는 것이 아닌,
데이터를 사용하여 기계가 스스로 학습하는 방식
* 전통적인 프로그래밍 방식
- 어떤 결과를 내기 위해서 프로그램 작성
- 그 프로그램에 입력값(데이터)을 주면, 정해진 프로그램(사람이 만든 것, 규칙)에 따라 결과(해답)가 나옴
- 데이터를 넣으면 그 데이터를 어떠한 식으로 처리하는지 프로그래머가 프로그램을 작성함
* 머신러닝 방식
- 데이터와 결과(해답)을 사용하여 학습하기 때문에 스스로 프로그램(규칙)을 만들 수 있음
- 특정 데이터와 함께 그 데이터로 인해 나타나는 결과를 같이 넣어주면 기계가 그 관계(규칙)을 찾음
- 기계 스스로 규칙을 찾아내므로 예전처럼 사람이 직접 프로그래밍 할 필요 없음
* 머신러닝
- 인공적으로 지능을 만들기 위해 사용하는 것
- 사람이 할 수 있거나 하기 어려운 작업을 대신 수행할 기계를 학습을 통해 만들어내는 일련의 작업을 의미
- 사람이 직접 프로그래밍 할 필요 없이 대량의 데이터를 접했을 때 스스로 수정하여 원하는 결과를 얻기 위한 기숧
- 기계가 스스로 프로그램을 만드는 것, '기계가 학습한다'
- 학습 재료가 데이터이므로 오늘날 데이터 중요성이 강조됨
[머신러닝 유형]
1. 지도 학습: 정답지로 학습. 예측 모델 등에 사용 (문제, 정답 모두 알려주고 공부시킴)
2. 비지도 학습: 정답 없이 학습. 군집화 등에 사용 (답을 가르쳐 주지 않고 공부시킴)
3. 강화 학습: 시뮬레이션 반복 학습. 성능 강화 등에 사용 (보상을 통해 상은 최대화, 벌은 최소화하는 방향으로 행위 강화하는 학습)
[지도 학습]
* 지도 학습
- 인공지능을 누군가가 직접 가르치고 이끄는 학습 방법
- 입력값, 결과값(정답 레이블)을 함께 주고 학습을 시키는 방법, 분류/회귀 등 여러가지 방법에 활용됨
- 주로 과거 데이터를 기반으로 앞으로 있을 이벤트를 예측
- 데이터 중에서도 정답이 있는 데이터를 이용하여 학습
- 인공지능이 사과를 학습할 때 사과 사진을 보여주며 '이것은 사과야' 라고 말해주고
배를 학습할 때 배 사진을 보여주며 '이것은 배야'라고 말해줌
- 학습하는 하나하나에 대해 감독자의 입장에서 학습시킴
- 사과, 배 사진은 서로 다른 수많은 종류의 사진이지만, 사과, 배라는 '이름'은 일정함.
- 레이블(Label)이라고 부르고 데이터의 정답을 의미함
- 이러한 형태의 데이터를 인공지능에 입력하여 학습시키면
인공지능은 여러 장의 사과, 배 사진을 보며 사과만의 특징을 찾아냄
- 수많은 데이터를 사용하여 학습한 인공지능에게 새로운 사진을 보여주면서
'이것이 사과?배?' 라고 물으면 인공지능은 학습한 내용 바탕으로 답을 말할 수 있음.
[지도학습 사례 - 분류]
* 지도 학습은 분류(Classification)에 사용됨
- 정답이 있는 데이터, 즉 레이블이 있는 데이터를 사용하여 인공지능 학습
- 레이블 개수에 따라 분류할 수 있음
- 데이터의 정답 개수에 따라 그 종류가 결정됨
- 즉, 어떤 데이터는 여러 성질들이 있는데 그 성질들이 2가지 답으로 나타난다면,
그 데이터를 사용하여 이진 분류를 할 수 있음
- 그리고 여러 성질들이 3가지 답으로 나타난다면 그 데이터로 지도 학습을 사용하여
다중 분류가 가능한 인공지능을 개발할 수 있음
* 이진 분류 (Binary classification)
- 그 중 두가지를 구분하는 문제
- ex) 스팸/일반 메일인지, ct 사진에서 암이 보이는지 아닌지
* 다중 분류 (Multiclass classfication)
- 다양한 새의 종류나 붓꽃(Iris)의 종류 혹은
지폐의 종류와 같이 여러 개 중 하나를 구별
[지도학습 사례 - 회귀]
* 회귀(Regression)
- 연속적인 값을 예측하는 것
- ex) 주식 예측, 학생의 성적 예측
- 분류는 특정한 값, 즉 데이터의 정답 개수(레이블의 수)에 따라 분류하는 가짓수가 결정됨
- 회귀는 특정한 값만 예측할 수 있는 것이 아니라 다양한 값을 예측할 수 있
[비지도 학습]
* 비지도 학습 (Unsupervised Learning)
- 지도학습이 아닌 학습, 정답이 없는 데이터를 사용하여 학습
- 인공지능에게 사과, 배 사진을 주어지고, 정답을 주지 않으므로
정확하게 구별할 수는 없지만, 인공지능이 여러 사진을 비교하며 스스로 형태를 나눔.
- 대상의 특징을 살펴보고 스스로 그 특징에 따라 구분해 나가는 것
- 이때 인공지능은 높은 확률로 사과는 사과, 배는 배로 구분하지만
정답이 없기 때문에 무엇이 사과인지 배인지는 구분하지 못함
- 정답이 없는 데이터를 보고, 그 데이터의 특징을 스스로 찾아서 구분
- 새로운 데이터가 들어왔을 때 그 데이터가 어떤 그룹에 속하는지 스스로 판단할 수 있음
- 정답이 없는 데이터를 사용해서 스스로 판단할 수 있는 지능을 가지게 됨
- 즉, 지도 학습은 정답이 있는 데이터로 학습한다면, 비지도 학습은 정답이 없는 데이터로 학습하는 방식
- 비지도 학습은 지도 학습을 보완해주는 중요한 역할을 함
- ex) 사진에서 사람의 얼굴을 판별하여 사람별로 사진을 정리해주는 인공지능
(처음에는 각 사람의 얼굴 특징을 바탕으로 사람들을 구별해 나감. 정답이 없기 때문에)
[비지도 학습 사례 - 군집화]
* 군집화 (Clustering)
- 데이터를 다양한 그룹으로 만들 수 있음
- 이렇게 만들어진 그룹을 군집(cluster) 이라고 하며,
다양한 그룹으로 만드는 과정을 군집화 하고 함
- 데이터의 여러 특징들을 살펴보고, 가장 대표적인 특징만 뽑아내는 차원 축소를 할 수 있음
- ex) 유튜브 추천 알고리즘, 상품 추천
[비지도 학습 사례 - 차원 축소]
* 차원 축소 (Dimensinality Reduction)
- 차원이란 데이터의 특징(feature)의 크기
- 모든 조건(데이터)을 고려할 수 없으므로 이 중에서 몇 가지의 특징만으로 좁혀나감
(데이터의 피처(feature)를 줄인다)라고 표현
- 비지도 학습을 사용하여 데이터를 잘 표현할 데이터의 피처를 찾아주어서, 학습을 더욱 효율적으로 사용
- 데이터의 특징을 줄여주기 위해서
고차원 데이터에서 분산이 큰 방향을 찾아서
더 작거나 같은 수의 차원을 갖는 부분공간으로 투영하는 것
[강화 학습]
* 강화 학습 (Reinforce Learning)
- 현재의 상태(state)에서 어떤 행동을 취하는 것이 최적인지 학습하는 것
- 행동을 취할 때마다 외부 환경에서 보상이 주어지는데,
이러한 보상을 최대화하는 방향으로 학습이 진행됨
- 지도학습이 배움을 통해서 실력을 키우는 것이라면,
강화학습은 일단 해보면서 경험을 통해서 실력을 키워가는 것
- 시행착오를 거쳐 학습하는 방법
- 그 행동의 결과가 자신에게 유리한 것이었다면 상을 받고, 불리한 것이었다면 벌을 받는 것
- 이 과정을 매우 많이 반복하면 더 많은 보상을 받을 수 있는 더 좋은 답을 찾아낼 수 있다는
[딥러닝]
- 딥러닝은 인공지능을 만드는 방법 중 하나. 인공지능을 만드는 방법에는 딥러닝 이외에도 다양한 기법들 사용되고 있
- 생각할 수 있는 기계를 의미하는 인공지능을 만들기 위한 여러 방법이 있고,
그 중 사람의 뇌에서 이루어지는 원리를 이용하여 인공지능을 만드는 방법이 딥러닝
- 뉴럴 네트워크 --> 즉 신경망
- 사람의 뇌는 여러 신경 세포, 특히 뉴런이라는 세포가 무수히 많이 얽혀 있음. 이를 신경망 이라 함