"Python 라이브러리를 활용한 인공지능"의 두 판 사이의 차이
라이언의 꿀팁백과
(→1일차) |
(→1일차) |
||
169번째 줄: | 169번째 줄: | ||
*#Anaconda 다운로드 https://www.anaconda.com/products/distribution | *#Anaconda 다운로드 https://www.anaconda.com/products/distribution | ||
*#설치 | *#설치 | ||
*#주피터 노트북 실행 [[파일:20220808-주피터 실행.png|프레임없음|618x618픽셀]] | *#주피터 노트북 실행 <br />[[파일:20220808-주피터 실행.png|프레임없음|618x618픽셀]] | ||
=== 2일차 === | === 2일차 === |
2022년 8월 8일 (월) 12:27 판
1 개요
올해는 머신러닝 쪽 관련 지식을 함양하고자 한다. 이러한 노력의 일환으로 회사에서 보내주는 외부연수로 아래 강의를 수강했다.
강좌명 | 교육기간 | 교육장소 | 기타 |
---|---|---|---|
Python 라이브러리를 활용한 인공지능 | 2022.8.8 ~ 2022.8.12 | 한국생산성본부 8층 803호 | - 강사명 : 박성백 (sungback@naver.com / 010-8711-7982) ← 평생 A/S 가능
- 수강자 : 10명 (오프라인 7명, 온라인 3명) - 교 재 : <Hands-On Machine Learning with Scikit-Learn Keras & TensorFlow> |
2 교육과정
이번에 내가 수강하는 과정은 아래와 같이 총 5일, 35시간 동안 머신러닝 중 딥러닝에 대해 학습하는 과정이다.
3 책
도서를 읽으며 학습한 내용을 아래에 간략히 정리했다.
3.1 필요한 기술
이 책을 읽으려면 아래 기술과 친숙해야 한다.
- 넘파이(Numpy) https://numpy.org/
- 판다스(Pandas) https://pandas.pydata.org/
- 맷플롯립(Matplotlib) https://matplotlib.org/
앞에 있는 파이썬의 과학 라이브러리(3종)를 학습하려면 아래 링크를 참고하자.
- 넘파이(Numpy)https://github.com/rickiepark/handson-ml2/blob/master/tools_numpy.ipynb
- 판다스(Pandas) https://github.com/rickiepark/handson-ml2/blob/master/tools_pandas.ipynb
- 맷플롯립(Matplotlib) https://github.com/rickiepark/handson-ml2/blob/master/tools_matplotlib.ipynb
파이썬을 잘 모른다면 아래 두 링크에서 학습하면 좋다.
케라스 관련해서는 <케라스 창시자에게 배우는 딥러닝>이라는 책이 번역이 잘 되었다고 한다.
3.2 파이썬 관련 인공지능 프레임워크
- 사이킷런(Scikit-Learn) https://scikit-learn.org/ - 사용법이 쉽고 많은 머신러닝 알고리즘이 효율적으로 구현되어 있으므로 머신러닝을 처음 배울 때 사용하기 아주 좋음. 2007년 데이빗 쿠르나포(David Cournapeau)가 개발했고 현재 Inria(French Institute for Research in Computer Science and Automation)의 연구팀이 이끌고 있음
- 텐서플로(TensorFlow) https://www.tensorflow.org/ - 분산 수치 계산을 위한 매우 복잡한 라이브러리. 수백 대의 다중 그래픽 처리 장치(GPU) 서버에 계산을 분산하여 대규모 신경망을 효과적으로 훈련하고 실행시킴. 구글에서 만들었고 구글의 대규모 머신러닝 애플리케이션에서 사용하고 있음. 2015년 11월에 오픈 소스로 공개되었고 2019년 9월 2.0 버전이 릴리스 됨.
- 케라스(Keras) https://keras.io/ - 고수준 딥러닝 API. 매우 쉽게 신경망을 훈련하고 실행 가능. 케라스는 텐서플로, 시애노(Theano), 마이크로소프트 코그니티브 툴킷(Microsoft Cognitive Toolkit) 위에서 작동. 텐서플로는 자체적인 케라스 API 구현을 tf.keras란 이름으로 포함. tf.keras는 텐서플로의 고급기능을 지원함. (예: 효율적인 데이터 적재 기능 등)
3.3 머신러닝 정의
머신러닝은 데이터에서부터 학습하도록 컴퓨터를 프로그래밍하는 과학(또는 예술)이다. 조금 더 일반적인 정의는 다음과 같다.
- [머신러닝은] 명시적인 프로그래밍 없이 컴퓨터가 학습하는 능력을 갖추게 하는 연구 분야다. (아서 새뮤얼 Arthur Samuel, 1959)
- 어떤 작업 T에 대한 컴퓨터 프로그램의 성능을 P로 측정했을 때 경험 E로 인해 성능이 향상됐다면, 이 컴퓨터 프로그램은 작업 T와 성능 측정 P에 대해 경험 E로 학습한 것이다. (톰 미첼 Tom Michell, 1997)
3.4 머신러닝 용도
- 기존 솔루션으로는 많은 수동 조정과 규칙이 필요한 문제: 하나의 머신러닝 모델이 코드를 간단하게 만들고 전통적인 방법보다 더 잘 수행하도록 할 수 있음
- 전통적인 방법으로는 해결 방법이 없는 복잡한 문제: 가장 뛰어난 머신러닝 기법으로 해결 방법을 찾을 수 있음
- 유동적인 환경: 머신러닝 시스템은 새로운 데이터에 적응할 수 있음
- 복잡한 문제와 대량의 데이터에서 통찰 얻기
3.5 머신러닝 시스템의 종류
머신러닝 시스템의 종류는 굉장히 많으므로 넓은 범주에서 분류하면 도움이 된다.
- 사람의 감독하에 훈련하는 것인지 그렇지 않은 것인지 (지도, 비지도, 준지도, 강화 학습)
- 실시간으로 점진적인 학습을 하는지 아닌지 (온라인 학습과 배치 학습)
- 단순하게 알고 있는 데이터 포인트와 새 데이터 포인트를 비교하는 것인지 아니면 과학자들이 하는 것처럼 훈련 데이터셋에서 패턴을 발견하여 예측 모델을 만드는지 (사례 기반 학습과 모델 기반 학습)
3.5.1 지도 학습과 비지도 학습
머신러닝 시스템을 '학습하는 동안 감독의 형태나 정보량'에 따라 분류할 수 있으며 아래 네 가지 종류가 있음.
- 지도 학습
- 비지도 학습
- 준지도 학습
- 강화 학습
3.5.1.1 지도학습(Supervised Learning)
지도학습에는 알고리즘에 주입하는 훈련 데이터에 레이블(label)이라는 원하는 답을 포함. 분류(classification)가 전형적인 지도 학습이며, 스팸 필터가 좋은 예. 또 다른 전형적인 작업은 예측 변수(predictor variable)라 부르는 특성(feature / 주행거리, 연식, 브랜드 등)을 사용해 중고차 가격 같은 타깃(target) 수치를 예측하는 것이 있음. 이런 종류의 작업을 회귀(regression)라고 부름. 지도학습을 활용하려면 예측 변수와 레이블(중고차 가격이) 포함된 중고차 데이터가 많이 필요함. 다음은 가장 중요한 지도 학습 알고리즘임.
- k-최근접 이웃(k-nearest neighbors)
- 선형 회귀(linear regression)
- 로지스틱 회귀(logistic regression)
- 서포트 벡터 머신(support vector machine, SVM)
- 결정 트리(decision tree)와 랜덤 포레스트(random forest)
- 신경망(neural networks)
3.5.1.2 비지도학습(Unsupervised Learning)
비지도학습에는 말 그대로 훈련 데이터에 레이블이 없음. 시스템은 아무런 도움 없이 학습해야 함. 다음은 가장 중요한 비지도 학습 알고리즘임.
- 군집(clustering)
- k-평균(k-means)
- DBSCAN
- 계층 군집 분석(hierachical cluster analysis, HCA)
- 이상치 탐지(outlier detection)와 특이치 탐지(novelty detection)
- 원-클래스(one-class SVM)
- 아이솔레이션 포레스트(isolation forest)
- 시각화(visualization)와 차원 축소(dimensionality reduction)
- 주성분 분석(principal component analysis, PCA)
- 커널(kernel) PCA
- 지역적 선형 임베딩(locally-linear embedding, LLE)
- t-SNE(t-distributed stochastic embedding)
- 연관 규칙 학습(association rule learning)
- 어프라이어리(Apriori)
- 이클렛(Eclat)
참고로 비지도 학습 알고리즘의 한 가지인 시각화(visualization) 알고리즘은 가능한 한 데이터 구조를 그대로 유지하는 경향이 있어 데이터가 어떻게 조직되어 있는지 이해할 수 있고 예상하지 못한 패턴을 발견할 수도 있어서 유익함
3.5.1.3 준지도 학습(Semisupervised Learning)
일부 데이터에만 레이블이 있는 경우 준지도 학습을 활용할 수 있음. 대부분의 준지도 학습 알고리즘은 지도 학습과 비지도 학습의 조합으로 이루어져 있음. 예를 들어 심층 신경 신뢰망(Deep Belief Network, DBN)은 여러 겹으로 쌓은 제한된 볼츠만 머신(Restricted Boltzmann Machine, RBM)이라 불리는 비지도 학습에 기초함. RBM이 비지도 학습 방식으로 순차적으로 훈련된 다음 전체 시스템이 지도 학습 방식으로 세밀하게 조종됨.
3.5.1.4 강화 학습(Reinforcement Learning)
강화 학습은 보상을 통해 학습을 하는 머신러닝 알고리즘은 학습하는 시스템인 에이전트(agent)가 환경(environment)을 관찰해서 행동을 실행(action)하고 그 결과로 보상(reward) 또는 벌점(penalty)을 받음. 시간이 지나면서 가장 큰 보상을 얻기 위해 정책(policy)이라고 부르는 최상의 전략을 스스로 학습함. 정책은 주어진 상황에서 에이전트가 어떤 행동을 선택해야 할지 정의함.
3.5.2 배치 학습과 온라인 학습
머신러닝 시스템을 분류하는 데 사용하는 다른 기준은 입력 데이터의 스트림(stream)으로부터 점진적으로 학습할 수 있는지 여부다.
3.5.2.1 배치학습(Batch Learning)
배치 학습에서는 시스템이 점진적으로 학습할 수 없음. 가용한 데이터를 모두 사용해 훈련시켜야 함. 일반적으로 이 방식은 시간과 자원을 많이 소모하므로 보통 오프라인에서 수행함. 먼저 시스템을 훈련시키고 그런 다음 제품 시스템에 적용하면 더 이상의 학습 없이 실행됨. 즉, 학습한 것을 단지 적용만 함. 이를 오프라인 학습(offline learning)이라고 함.
배치 학습 시스템이 (새로운 종류의 스팸 같은) 새로운 데이터에 대해 학습하려면 (새로운 데이터뿐만 아니라 이전 데이터도 포함한) 전체 데이터를 사용하여 시스템의 새로운 버전을 처음부터 다시 훈련해야 함. 그런 다음 이전 시스템을 중지시키고 새 시스템으로 교체함. 보통 24시간마다 또는 매주 시스템을 훈련시킴. 시스템이 빠르게 변하는 데이터에 적용해야 한다면 더 능동적인 방법이 필요함.
3.5.2.2 온라인 학습(Online Learning)
온라인 학습에서는 데이터를 순차적으로 한 개씩 또는 미니배치(mini-batch)라 부르는 작은 묶음 단위로 주입하여 시스템을 훈련시킴. 매 학습 단계가 빠르고 비용이 적게 들어 시스템은 데이터가 도착하는 대로 즉시 학습할 수 있음.
온라인 학습은 연속적으로 데이터를 받고 (예를 들면 주식가격) 빠른 변화에 스스로 적응해야 하는 시스템에 적합함. 컴퓨팅 자원이 제한된 경우에도 좋은 선택임. 온라인 학습 시스템이 새로운 데이터 샘플을 학습하면 학습이 끝난 데이터는 더는 필요하지 않으므로 버리면 됨. (이전 상태로 되돌릴 수 있도록 데이터를 재사용하기 위해 보관할 필요가 없다면) 컴퓨터 한 대의 메인 메모리에 들어갈 수 없는 아주 큰 데이터셋을 학습하는 시스템에도 온라인 학습 알고리즘을 사용할 수 있음 (이를 외부 메모리(out-of-core) 학습이라고 함)
온라인 학습 시스템에서 중요한 파라미터 하나는 변화하는 데이터 얼마나 빠르게 적응할 것인지인데 이를 학습률(learning rate)이라고 함. 온라인 학습에서 가장 큰 문제점은 시스템에 나쁜 데이터가 주입되었을 때 시스템 성능이 점진적으로 감소한다는 점임. 이런 위험을 줄이려면 시스템을 면밀히 모니터링하고 성능 감소가 감지되면 즉각 학습을 중지시켜야 함.
3.5.3 사례 기반 학습과 모델 기반 학습
머신러닝 시스템은 어떻게 일반화(generalize)되는가에 따라 분류할 수도 있음. 일반화를 위한 두 가지 접근법은 사례 기반 학습과 모델 기반 학습임.
3.5.3.1 사례 기반 학습(Instance-Based Learning)
사례 기반 학습은 시스템이 훈련 샘플을 기억함으로써 학습을 하도록 함. 그리고 유사도(similarity) 측정을 사용해 새로운 데이터와 학습한 샘플을 (또는 학습한 샘플 중 일부를) 비교하는 식으로 일반화 함.
3.5.3.2 모델 기반 학습(Model-Based Learning)
샘플로부터 일반화시키는 다른 방법은 이 샘플들의 모델을 만들어 예측(prediction)에 사용하는 것으로 이를 모델 기반 학습이라고 함. 모델 기반 학습의 작업은 아래와 같은 과정으로 진행됨.
- 데이터를 분석합니다.
- 모델을 선택합니다.
- 훈련 데이터로 모델을 훈련시킵니다. (즉, 학습 알고리즘이 비용 함수를 최소화하는 모델 파라미터를 찾습니다)
- 마지막으로 새로운 데이터에 모델을 적용해 예측을 하고 (이를 추론(interference)이라고 함), 이 모델이 잘 일반화되길 기대합니다.
4 강의
총 5일 동안 교육한 내용을 아래에 간략히 정리했다.
4.1 1일차
- 인공지능 관련 지루한 설명을 들었다.
- 파일 공유를 위한 주소(https://tinyurl.com/ai220808)를 공유 받았다.
- 인공지능 공식을 간략히 소개하면 y=Wx 의 행렬곱이다.
- W 는 가중치(weight)를 의미한다.
- 강사님이 딥러닝은 인간의 뇌를 모방했다면서 "유재석" 얘기를 했는데 앞에 앉아 있는 어떤 학생이 유재석이 나오는 <유퀴즈 온 더 블록>을 보고 있어서 어이 없었다.
- 이 수업에서는 파이썬 언어, 수집(BeautiflSoup), 분석(Pandas), 시각화(Matplolib, Seaborn), ML 까지 실습을 하며 이를 위해 아나콘다(Anaconda)를 설치하며, 실습은 함께 설치하는 주피터(Jupyter)를 활용.
- 환경설정은 아래와 같이 함
- Anaconda 다운로드 https://www.anaconda.com/products/distribution
- 설치
- 주피터 노트북 실행
4.2 2일차
업데이트 예정
4.3 3일차
업데이트 예정
4.4 4일차
업데이트 예정
4.5 5일차
업데이트 예정
5 참고자료
- 정오표 https://tensorflow.blog/handson-ml2/
- 유튜브 강의 https://bit.ly/homl2-youtube/
- GitHub Repository https://github.com/rickiepark/handson-ml2
- FMA: A Dataset For Music Analysis https://github.com/mdeff/fma