728x90
21년도 학교에서 들었던 인공지능 수업을 리마인드하는 측면에서 작성해보았습니다.
인간과 인공지능
- 인간이 뛰어난 능력: 상식, 딜레마 해결력, 윤리의식, 공감능력, 상상력, 공상력, 추상화능력, 일반화능력
- 인공지능 능력: 자연어 처리, 패턴인식, 지식암기, 기계학습, 편견 제거, 무한대의 가동성
규칙기반 방법론 vs. 기계학습 방법론
규칙기반 방법론
- 사람이 사용하는 규칙을 수집하여 프로그래밍
- 필기 숫자 인식 프로그램: 숫자 3은 “왼쪽에서 보면 위와 아래에 터진 골이 있고, 오른쪽에서 보면 둥근 원호가 중간에서 만나고”와 같은 규칙을 수집
- 한계 노출: 규칙을 위반하는 샘플이 꾸준히 발생
기계학습 방법론
- 인공지능 초반에는 규칙 기반이 대세였으나 90년부터 기계학습으로 주도권이 이동
- 충분한 데이터를 수집한 후 기계학습 모델을 학습(데이터-주도 패러다임)
파이썬
- 파이썬은 벡터와 행렬 처리를 코딩하는데 편리한언어, 기계학습은 벡터와 행렬처리 많이 수행하므로 파이썬을 주로 사용
- 핵심 라이브러리는 효율성때문에 C로 코딩되어있음
인터프리터 방식의 파이썬
언어 번역기: 컴파일러 vs. 인터프리터 방식
- 컴파일러 방식
- 프로그램 전체를 번역한 후 한번에 실행
- 실행이 빠름
- C, C++
- 인터프리터 방식
- 한 라인씩 번역하고 실행하는 일을 순차적으로 수행
- 일부 코드만 선택해 실행하는 일이 가능 < 스파이더에서는 실행하고자 하는 코드를 마우스로 선택한 후 F9누름
인공지능 개발에 많이 쓰이는 라이브러리
- 현대 프로그래밍 언어는 오픈소스로 공개
- 파이썬, R, Ruby, Perl, Julia, Swift 등
- 제3자 라이브러리가 풍부한 장점
- 파이썬은 하루에도 수십 개의 새 라이브러리가 공개됨
- 파이썬 라이브러리 정보
- 언어 > 파이썬
- 라이브러리 관리 > 파이파이(Pypi)
- 라이브러리 > Numpy, Matplotlib, Scikit-learn, Tensorflow, Keras, PyTorch
- 기초 라이브러리
- Numpy: 다차원 배열 지원(부록A)
- Matplotlib: 데이터 시각화(부록B)
- 인공지능 라이브러리
- Scikit-learn: 고전적인 기계 학습 지원
- TensorFlow: 딥러닝 지원
- Keras: 텐서플로를 한 단계 추상화한 라이브러리 - 더 직관적인 명령어/라이브러리
- PyTorch: 딥러닝 라이브러리
객체지향 언어를 이용한 인공지능 프로그래밍
- 객체지향 언어: 서로 관련있는 변수/함수를 하나로 묶어 다룰 수 있는 클래스 제공
- 객체지향 프로그래밍
from gtts import gTTS
import playsound
tts_kor = gTTS(text = news_ko, lang='ko')
tts_en = gTTS(text = news_en, lang='en')
tts_fren = gTTS(text = news_fren, lang='fr')
tts_ko.save
tts_en.save
tts_fren.save
- 와플메이커=class, 와플메이커로 찍어낸 와플=instance
from kitchenware import waffle_maker
mom_waffle = waffle_maker()
dad_waffle = waffle_maker(bake_time=70)
my_waffle = waffle_maker()
mom_waffle.put(fruit='strawberry')
dad_waffle.dip(drink='coffee')
- 클래스 멤버 변수와 멤버 함수 확인 dir(gTTS)
- 객체가 어떤 클래스인지 확인하기 type(my_waffle)
객체지향 언어로 작성한 프로그램은 class 단위로 모듈화되어 다른 프로젝트로 가져다쓸 수 있는 재사용성이 좋아 SW 생산성 높이는 것이 효과적. AI분야도 객체지향 특성 잘 활용가능
기계학습 기초
- 데이터=에너지를 만드는 연료에 해당
from sklearn import datasets
d = datasets.load_iris()
print(d.DESCR) # Descriptions
- 용어
- Dataset: sample들로 구성
- Attribute: Feature Vector로 구성
- Class(부류)
기계학습에서 Dataset의 표현
- 샘플을 특징 벡터와 레이블로 표현
- 특징 벡터(feature vector)
- 특징 벡터는 x로 표기**(d=특징의 개수, 특징 벡터의 차원 dimension)**
- 특징 벡터: x=(x1, x2, ..., xd) (3.1) // 보통 x로 표기
- 레이블(label)
- 레이블은 0, 1, 2, ..., c-1의 값 또는 1, 2, ..., c-1, c의 값 또는 원핫 코드(one-hot encoding) // 지도학습 할 수 있게 우리가 알고 있는 값. 샘플들에 이름 붙이기
- 원핫 코드는 한 요소만 1인 이진열
- ex) iris에서 Setosa는 (1, 0, 0), Versicolor는 (0, 1, 0), Virginica는 (0, 0, 1)
- 원핫 코드는 한 요소만 1인 이진열
# 3-1. Iris에 머신러닝 적용: 모델링과 예측
from sklearn import svm
s = svm.SVC(gamma=0.1, C=10)
s.fit(d.data, d.target) # 훈련집합
new_d = [[6.4, 3.2, 6.0, 2.5], [7.1, 3.1, 4.7, 1.35]] # 101번째와 51번째 sample 변형해 새로운 데이터 생성
res = s.predict(new_d) # new_d는 test 집합
# predic method는 새로운 data를 놓고 예측이 어떻게 나올지 보는겅
print("새로운 2개 샘플의 부류는", res) # [2, 1]
모델링과 예측
- 훈련 집합(Train Set): 머신러닝 학습하는 데 쓰는 데이터로서 특징 벡터와 레이블 정보 모두 제공
- 테스트 집합(Test Set): 학습 마친 모델의 성능 측정에 사용하는 데이터
- 예측할 때는 특징 벡터 정보만 제공
- 예측 결과를 가지고 정확률을 측정할 때 레이블 정보 사용
- Train Set, Test Set 나누지 않으면 Overfitting(과적합) 발생 > 신뢰X
- 하이퍼 매개변수(hyper parameter): 모델의 동작을 제어하는데 사용하는 변수
- 모델 학습 시작 전에 설정해야 함
- 적절한 값으로 설정해야 좋은 성능 얻을 수 있음. 변수 잘 바꾸면 안정적으로 좋은 성능 나옴
- 하이퍼 매개변수 최적화(hyper parameter optimization): 최적의 하이퍼 매개변수 값 자동으로 설정하는 일. 머신러닝의 중요한 주제 중 하나
인공지능의 핵심
- 데이터를 읽고 모델링과 예측을 실행
- 붓꽃 영상을 획득하고 특징을 추출하는 컴퓨터 비전 모듈을 전처리로 붙이면 붓꽃 인식 프로그램 완성
- 실용적인 시스템 사례
- 과일 등급 분류
- 딸기 따는 로봇
인공지능 설계 단계
- 데이터 확보
- 샘플 = 특징벡터 + 레이블로 분류
- 샘플을 각각 훈련데이터, 테스트 데이터로 분할
- 훈련 데이터 이용 학습(머신러닝) - 특징 벡터, 레이블 모두 학습
- 테스트 데이터 이용 예측, 머신러닝 성능 확인
- 특징 벡터만을 가지고 예측 > 예측 결과 발생
- 정확률 측정 시 레이블 정보 사용
인공지능설계 사례: 과일 등급을 분류하는 기계
- 사과를 상중하의 3부류로 분류하는 인공지능 기계의 설계
- 데이터 확보
- 상중하 비율이 비슷하게 수천개의 사과수집 (데이터편향-data bias을 방지하기 위해 여러 농장에서 수집)
- 카메라로 촬영해 파일에 저장
- 특징 벡터와 레이블 준비
- 어떤 특징을 사용할까? ex) 사과의 크기, 색깔, 표면의 균일도는 분별력이 높은 특징
- 컴퓨터 비전 기술로 특징 프로그램 작성. 특징 추출해 apple.data 파일에 저장
- apple.data: apple의 종류를 끌어내는 data.
- 사과 분류 전문가를 고용하여 레이블링한 후 apple.target 파일에 저장
- apple.target: 사과를 상중하로 분류해 레이블 붙이기
- 학습하는 과정을 프로그래밍(훈련 데이터 사용)
- from sklearn import svm s = svm.SVC(gamma=0.1, C=10) s.fit(apple.data, apple.target) # apple 데이터 모델링
- 예측 과정을 프로그래밍(새로 수집한 테스트 데이터 사용)
s.predict(x) # 새로운 사과에서 추출한 특징 벡터 x를 예측
데이터 편향 데이터 편향은 다양한 형태로 발생. 예를 들어, 필기 숫자 데이터셋을 만들 때 편의상 대학생을 대상으로 수집했다면, 정자체에 가까운 샘플의 비율이 높을 수 있음. 은행 창구에서 발생하는 전표나 우편 봉투에 쓰인 우편번호에서 수집하면 데이터 편향 크게 줄일 수 있음. 예를 들어, lfw 데이터셋은 인종별/나이별/성별 편향이 있어 상업용 얼굴인식 프로그램을 만드는 데 한계가 있음.
규칙 기반 v. 고전적 기계학습 v. 딥러닝
- 규칙 기반 방법
- 분류하는 규칙을 사람이 구현
- ex) “꽃잎의 길이가 a보다 크고, 너비가 b보다 작으면 Setosa”라는 규칙에서 a와 b를 사람이 결정해줌
- 큰 데이터셋에서는 불가능하고, 데이터가 바뀌면 처음부터 새로 작업해야 하는 비효율성
- 분류하는 규칙을 사람이 구현
- 기계 학습 방법
- 특징 벡터를 추출하고 레이블을 붙이는 과정은 규칙 기반과 동일(수작업 특징-hand-crafted feature)
- 분류하는 규칙 만드는 일은 기계학습 모델을 이용해 자동으로 수행
- 사람의 사전지식을 반영하는 것, 그런데 한계 역시 동일하게 반영됨
- 딥러닝 방법
- 레이블을 붙이는 과정은 기계학습과 동일(레이블은 사람(전문가)이 붙임)
- 특징 벡터를 학습이 자동으로 알아냄. 사람손길X
- 특징 학습-feature learning 또는 표현 학습-representation learning을 한다고 말함
- 장점
- 특징 추출과 분류를 동시에 최적화하므로 뛰어난 성능 보장
- 인공지능 제품 제작이 빠름
원샷 학습, 퓨샷 학습, 준지도 학습
레이블을 붙이는 작업은 전문가의 일이므로 비용이 많이 듦. 따라서 딥러닝이 활용하는 샘플들은:
- 1-shot learning(원샷 학습): 레이블이 있는 샘플을 하나만 사용해 학습
- few-shot learning(퓨샷 학습): 레이블이 있는 샘플을 몇 개만 사용해 학습
- semi-supervised learning(준지도 학습): 레이블이 있는 소량의 샘플과 레이블이 없는 대량의 샘플을 함께 사용
728x90