카테고리 없음

[머신러닝/딥러닝] 인공지능 소개

옆동네애옹이 2024. 9. 6. 11:43
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의 표현

  • 샘플을 특징 벡터와 레이블로 표현
  1. 특징 벡터(feature vector)
    • 특징 벡터는 x로 표기**(d=특징의 개수, 특징 벡터의 차원 dimension)**
    • 특징 벡터: x=(x1, x2, ..., xd) (3.1) // 보통 x로 표기
  2. 레이블(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)
# 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): 최적의 하이퍼 매개변수 값 자동으로 설정하는 일. 머신러닝의 중요한 주제 중 하나

인공지능의 핵심

  • 데이터를 읽고 모델링과 예측을 실행
  • 붓꽃 영상을 획득하고 특징을 추출하는 컴퓨터 비전 모듈을 전처리로 붙이면 붓꽃 인식 프로그램 완성
  • 실용적인 시스템 사례
    • 과일 등급 분류
    • 딸기 따는 로봇

인공지능 설계 단계

  1. 데이터 확보
  2. 샘플 = 특징벡터 + 레이블로 분류
    1. 샘플을 각각 훈련데이터, 테스트 데이터로 분할
  3. 훈련 데이터 이용 학습(머신러닝) - 특징 벡터, 레이블 모두 학습
  4. 테스트 데이터 이용 예측, 머신러닝 성능 확인
    1. 특징 벡터만을 가지고 예측 > 예측 결과 발생
    2. 정확률 측정 시 레이블 정보 사용

인공지능설계 사례: 과일 등급을 분류하는 기계

  • 사과를 상중하의 3부류로 분류하는 인공지능 기계의 설계
  1. 데이터 확보
    1. 상중하 비율이 비슷하게 수천개의 사과수집 (데이터편향-data bias을 방지하기 위해 여러 농장에서 수집)
    2. 카메라로 촬영해 파일에 저장
  2. 특징 벡터와 레이블 준비
    1. 어떤 특징을 사용할까? ex) 사과의 크기, 색깔, 표면의 균일도는 분별력이 높은 특징
    2. 컴퓨터 비전 기술로 특징 프로그램 작성. 특징 추출해 apple.data 파일에 저장
      • apple.data: apple의 종류를 끌어내는 data.
    3. 사과 분류 전문가를 고용하여 레이블링한 후 apple.target 파일에 저장
      • apple.target: 사과를 상중하로 분류해 레이블 붙이기
  3. 학습하는 과정을 프로그래밍(훈련 데이터 사용)
  4. from sklearn import svm s = svm.SVC(gamma=0.1, C=10) s.fit(apple.data, apple.target) # apple 데이터 모델링
  5. 예측 과정을 프로그래밍(새로 수집한 테스트 데이터 사용)
s.predict(x) # 새로운 사과에서 추출한 특징 벡터 x를 예측

데이터 편향 데이터 편향은 다양한 형태로 발생. 예를 들어, 필기 숫자 데이터셋을 만들 때 편의상 대학생을 대상으로 수집했다면, 정자체에 가까운 샘플의 비율이 높을 수 있음. 은행 창구에서 발생하는 전표나 우편 봉투에 쓰인 우편번호에서 수집하면 데이터 편향 크게 줄일 수 있음. 예를 들어, lfw 데이터셋은 인종별/나이별/성별 편향이 있어 상업용 얼굴인식 프로그램을 만드는 데 한계가 있음.

규칙 기반 v. 고전적 기계학습 v. 딥러닝

  • 규칙 기반 방법
    • 분류하는 규칙을 사람이 구현
      • ex) “꽃잎의 길이가 a보다 크고, 너비가 b보다 작으면 Setosa”라는 규칙에서 a와 b를 사람이 결정해줌
    • 큰 데이터셋에서는 불가능하고, 데이터가 바뀌면 처음부터 새로 작업해야 하는 비효율성
  • 기계 학습 방법
    • 특징 벡터를 추출하고 레이블을 붙이는 과정은 규칙 기반과 동일(수작업 특징-hand-crafted feature)
    • 분류하는 규칙 만드는 일은 기계학습 모델을 이용해 자동으로 수행
    • 사람의 사전지식을 반영하는 것, 그런데 한계 역시 동일하게 반영됨
  • 딥러닝 방법
    • 레이블을 붙이는 과정은 기계학습과 동일(레이블은 사람(전문가)이 붙임)
    • 특징 벡터를 학습이 자동으로 알아냄. 사람손길X
      • 특징 학습-feature learning 또는 표현 학습-representation learning을 한다고 말함
    • 장점
      • 특징 추출과 분류를 동시에 최적화하므로 뛰어난 성능 보장
      • 인공지능 제품 제작이 빠름

원샷 학습, 퓨샷 학습, 준지도 학습

레이블을 붙이는 작업은 전문가의 일이므로 비용이 많이 듦. 따라서 딥러닝이 활용하는 샘플들은:

  1. 1-shot learning(원샷 학습): 레이블이 있는 샘플을 하나만 사용해 학습
  2. few-shot learning(퓨샷 학습): 레이블이 있는 샘플을 몇 개만 사용해 학습
  3. semi-supervised learning(준지도 학습): 레이블이 있는 소량의 샘플과 레이블이 없는 대량의 샘플을 함께 사용

 

728x90