이번 글에서는 프로그래머스 인공지능 데브코스의 6주차 강의에 대한 정리입니다.
1. 인공지능과 기계학습 소개
- 일상 속 인공지능
- 음성인식 (Siri), 추천 시스템 (Netfilx), 자율주행
- 실시간 객체 인식 (Face ID), 로봇, 번역 (papago)
- 데이터 기반의 접근
- 기술에 집중하기 보다는, 인간 중심의 소통이 중요
- 인공지능 == 도구
- 도구를 만드는 방법을 배우는 것도 중요하지만, 도구를 사용하는 방법도 배워야 함
- 기계도 학습이 가능한가? 경험을 통해 점진적으로 성능이 향상되는 기계를 만들 수 있다!
- 인공지능: 인간의 학습, 추론, 지각, 자연언어 이해 등의 지능적 능력을 기기로 실현한 기술
- 학습: 경험의 결과로 나타나는, 비교적 지속적인 행동의 변화나 그 잠재력의 변화 또는 지식을 습득하는 과정
- 경험 E를 통해, 주어진 작업 T에 대한, 성능 P의 향상 (E * T = P)
- 인공지능의 주도권 전환
- 지식 기반 -> 기계 학습 -> 심층 학습 (표현 학습, Deep learning, Representation learning)
- 데이터 중심 접근 방식으로 전환
- 예측은 회귀 (Regression) 문제와 분류 (Classification) 문제로 나뉨
- 회귀는 목표치가 실수, 분류는 종류의 값
기계 학습 개념
- 훈련집합 (Training set)
- 가설: 눈대중으로 데이터 양상이 직선 형태를 보임 -> 모델을 직선으로 선택 가정
- 기계 학습의 훈련 (Train)
- 주어진 문제인 예측을 정확하게 할 수 있는 최적의 매개변수를 찾는 과정
- 처음에는 임의의 매개변수로 시작하지만, 개선하여 정량적인 최적 성능 (Performance)에 도달
- 훈련을 마치면, 추론 (Inference)을 수행
- 새로운 특징에 대응되는 목표치의 예측에 사용
- 기계 학습의 궁극적인 목표
- 훈련집합에 없는 새로운 데이터에 대한 오류를 최소화 (새로운 데이터 = 테스트 집합)
- 테스트 집합에 대한 높은 성능을 일반화 (Generalization) 능력이라 부름
- 기계 학습의 필수 요소
- 학습할 수 있는 데이터가 있어야 함
- 데이터 규칙이 존재해야 함
- 수학적으로 설명이 불가능
- 차원의 저주 (Curse of Dimensionality): 차원이 높아짐에 따라 발생하는 현실적인 문제들
- 기술 추세
- 기계 학습 알고리즘과 응용의 다양화
- 표현 학습이 중요해짐
- 심층 학습이 기계 학습의 주류
- 심층 학습은 현대 인공지능 실현에 핵심 기술
- 인공지능의 단계: 초인공지능, 강인공지능, 약인공지능
데이터에 대한 이해
- 데이터 수집 -> 모델 정립 (가설) -> 예측
- 기계 학습: 데이터를 설명할 수 있는 학습 모델을 찾아내는 과정
- 주어진 과업에 적합한 다양한 데이터를 충분한 양만큼 수집 => 과업 성능 향상
간단한 기계 학습의 예
- 목적 함수 (비용 함수, Objective function, Cost function)
- 과업을 달성하기 위해 모델의 성능이 개선되는지 객관적으로 확인할 수 있는 지표
- 비용 함수의 예 중 하나는 평균제곱오차 (Mean Squared Error, MSE)
- 비용 함수를 최소화 시킬 수 있는 파라미터를 찾는 것이 목표
- 조금 더 현실적인 상황: 실제 세계는 선형 데이터가 아니고 잡음이 섞임 (비선형 모델이 필요)
모델 선택
- 과소적합 (Underfitting): 모델의 용량 (자유도)이 작아서 오차가 클 수 밖에 없는 현상
- 과소적합을 극복하기 위해서는 더 많은 데이터를 사용하거나, 비선형 모델을 사용하라
- 과잉적합 (Overfitting): 고차원으로 근사한다면, 훈련 집합에 대해 거의 완벽하게 추정 가능
- 하지만 새로운 데이터를 예측하는 경우에는 문제가 발생할 수 있음
- 모델의 용량이 크기 때문에 학습 과정에서 잡음까지도 학습해버림
따라서 적절한 용량의 모델을 선택하는 모델 선택 작업이 필요함
- 편향 (Bias)과 분산 (변동, Variance) => trade-off 관계
- 훈련집합을 여러 번 수집하여 1~12차에 반복해서 적용하는 실험
- 저차원에서는 오차가 크고, 편향도 큼. 하지만 비슷한 모델을 얻음 (낮은 변동)
- 고차원에서는 오차가 작고, 편향도 작음. 하지만 크게 다른 모델을 얻음 (높은 변동)
- 용량이 작은 모델 (과소적합)은 편향이 크고, 분산이 작음
- 용량이 복잡한 모델 (과대적합)은 편향이 작고, 분산이 큼
- 기계 학습의 궁극적인 목표
- 낮은 편향과 낮은 분산을 가진 예측 모델을 만드는 것이 목표
- 하지만 모델의 편향과 분산은 상충 관계
- 따라서 편향을 최소로 유지하며, 분산도를 최대로 낮추는 전략이 필요함
- 모델의 용량이 증가한다는 것은 편향이 감소하고, 분산이 증가하는 경향이 있음
- 검증집합을 이용한 모델 선택
- 훈련집합과 테스트집합과 다른 별도의 검증집합 (Validation set)을 가진 상황
- 부트스트랩 (Bootstrap)
- 임의의 복원 추출 샘플링 (Sampling with replacement) 반복
- 데이터 분포가 불균형 일 때 사용
- 현대 기계 학습의 전략
- 용량이 충분히 큰 모델을 선택한 후에,
- 선택한 모델이 정상을 벗어나지 않도록 여러 규제 (Regularization) 기법을 적용
- 데이터 확대: 데이터를 많이 수집할수록 일반화 능력이 향상됨
- 가중치 감쇠: 개선된 목적함수를 이용하여 가중치를 작게 조절하는 규제 기법
지도 방식에 따른 유형
- 지도 학습 (Supervised Learning)
- 특징 벡터와 목표치 (정답)가 모두 주어진 상황
- 회귀와 분류 문제로 구분
- 비지도 학습 (Unsupervised Learning)
- 특징 벡터는 주어지는데, 목표치가 주어지지 않는 상황 (정답이 없음)
- 군집화 (Clustering), 밀도 추정 (Density estimation), 특징 공간 변환 (PCA) 과업
- 강화 학습 (Reinforcement Learning)
- 상대적인 목표치가 주어지는데, 지도 학습과 다른 형태 (보상)
- 준지도 학습 (Semi-supervised Learning)
- 일부는 특징 벡터와 목표치를 모두 가지지만, 나머지는 특징 벡터만 가지는 상황
- 최근, 대부분의 데이터가 특징 벡터 수집은 쉽지만, 목표치는 수작업이 필요하여 최근 중요성 부각
다양한 기준에 따른 유형
- 오프라인 학습과 온라인 학습 (Offline, Online Learning)
- 보통은 오프라인 학습을 다룸
- 온라인 학습은 IoT 등에서 추가로 발생하는 데이터 샘플을 가지고 점증적 학습 수행
- 결정론적 학습과 확률적 학습 (Deterministic, Stochastic Learning)
- 결정론적에서는 같은 데이터를 가지고 다시 학습하면 같은 예측 모델이 만들어짐
- 확률적 학습은 학습 과정에서 확률 분포를 사용하므로, 같은 데이터로 학습하면 다른 예측 모델이 나옴
- 분별 모델과 생성 모델 (Discriminative, Generative Models)
- 분별 모델은 부류 예측에만 관심. 즉,
P(y|x)
의 추정에 관심 - 생성 모델은 P(x) 또는
P(x|y)
를 추정하여 새로운 샘플을 생성하여 사용할 수 있음
- 분별 모델은 부류 예측에만 관심. 즉,
2. 기계학습과 수학 리뷰
기계학습에서 수학의 역할
- 수학은 목적함수를 정의하고, 목적함수의 최저점을 찾아주는 최적화 이론 제공
- 최적화 이론에 학습률, 멈춤 조건과 같은 제어를 추가하여 알고리즘 구축
벡터와 행렬
- 백터 (Vector): 샘플을 특징 벡터 (Feature vector)로 표현
- 행렬 (Matrix): 여러 개의 벡터를 담음, 훈련 집합을 담은 행렬을 설계 행렬 (Design matrix)이라고 부름
- 전치 행렬 (Transpose matrix): 행 요소와 열 요소를 뒤바꾼 것
- 행렬을 이용하면, 방정식을 간결하게 표현 가능
- 특수 행렬들
- 정사각행렬 (정방행렬, Square matrix)
- 대각행렬 (Diagonal matrix)
- 단위행렬 (Identity matrix)
- 대칭행렬 (Symmetrix matrix)
- 행렬 연산: 행렬 곱셈, 벡터의 내적 (Inner product)
- 텐서 (Tensor): 3차원 이상의 구조를 가진 숫자 배열 (array)
- 0차: 수 (Scalar), 1차: 벡터 (Vector), 2차: 행렬 (Matrix)
- 유사도 (Similarity)와 거리 (Distance): 벡터를 기하학적으로 해석 (코사인 유사도)
- 벡터와 행렬의 거리 (크기)를 놈 (Norm)으로 측정
- 행렬의 프로베니우스 놈 (Frobenius norm)으로 행렬의 크기 측정 가능
- 1차 놈 (Manhattan distance)
- 2차 놈 (Euclidean distance)
퍼셉트론의 해석
- 퍼셉트론 (Perceptron): 1958년에 고안한 분류기 (Classifier) 모델, 활성 함수는 계단 함수 사용
- 다중 퍼셉트론 (Multi-layer perceptron)
- 추론 (Inferring)은 학습을 마친 알고리즘을 현장의 새로운 데이터에 적용하는 작업
- 훈련 (Training)은 훈련 집합의 샘플에 대하여 가장 잘 설명할 수 있는 가중치를 찾아내는 작업
- 현대 기계학습에서 심층학습은 퍼셉트론을 여러 층으로 확장하여 만듦
선형결합과 벡터공간
- 벡터: 공간 상의 한 점으로 화살표 끝이 벡터의 좌표에 해당
- 선형결합이 만드는 벡터공간: 기저 벡터 a와 b의 선형 결합 (Linear combination)
- 선형결합으로 만들어지는 공간을 벡터공간 (Vector space)이라고 부름
역행렬
- 다음의 성질은 서로 필요충분조건
- A는 역행렬을 갖음. 즉, 특이행렬이 아님
- A는 최대계수를 갖음
- A의 모든 행과 열이 선형독립임
- A의 행렬식은 0이 아님
- A의 고윳값은 모두 0이 아님
행렬 분해
- 분해 (Decomposition): 정수 3717은 특성이 보이지 않지만,
3*3*7*59
로 소인수 분해하면 특성이 보임 - 고윳값 (Eigenvalue), 고유 벡터 (Eigenvector)
- 고유 분해 (Eigen-decomposition)는 고윳값과 고유 벡터가 존재하는 정사각행렬에만 적용 가능
- 하지만 기계학습에서는 정사각행렬이 아닌 경우의 분해도 필요하기 때문에 고유 분해는 한계가 있음
- 특잇값 분해 (Singular Value Decomposition, SVD) 등장 - 정사각행렬이 아닌 행렬의 역행렬 계산에 사용
확률과 통계
- 기계학습이 처리할 데이터는 불확실한 세상에서 발생하므로, 불확실성 (Uncertainty)을 다루는 확률 및 통계가 필수
- 확률 변수 (Random variable)
- 확률 분포 (Probability distribution): 확률질량함수 & 이산확률변수, 확률밀도함수 & 연속확률변수
- 확률 벡터 (Random vector): 확률변수를 요소로 갖음
- 확률 기초: 곱 규칙 (Product rule), 합 규칙 (Sum rule)
- 조건부 확률, 연쇄법칙 (Chain rule), 독립 (Independence), 조건부 독립, 기댓값
베이즈 정리와 기계학습
- 베이즈 정리 (Bayes’ rule)
- 사후 (Posteriori) 확률 = 우도 (Likelihood) 확률 * 사전 (Prior) 확률
- 사후 확률을 직접 추정하는 일은 아주 단순한 경우를 빼고 거의 불가능
- 따라서 베이즈 정리를 이용하여 추정
최대 우도
- 매개변수 (모수, Parameter)를 모르는 상황에서 매개변수를 추정하는 문제
- 어떤 확률변수의 관찰된 값들을 토대로 그 확률변수의 매개변수를 구하는 방법 (최대 우도, Maximum Likelihood)
평균과 분산
- 데이터의 요약 정보로서 평균 (Mean)과 분산 (Variance)
- 평균 벡터 (치우침 정도)와 공분산 행렬 (Covariance matrix) - 확률변수의 상관정도
유용한 확률분포
- 가우시안 분포 (Gaussian distribution): 평균과 분산으로 정의
- 다차원 가우시안 분포: 평균 벡터와 공분산행렬로 정의
- 베르누이 분포 (Bernoulli distribution): 성공 확률 p이고, 실패 확률이 1-p인 분포
- 이항 분포 (Binomial distribution): 성공 확률이 p인 베르누이 실험을 m번 수행할 때, 성공할 횟수의 확률분포
- 로지스틱 시그모이드 함수 (Logistic Sigmoid function): 일반적으로 베르누이 분포의 매개변수를 조정을 통해 얻음
- 소프트플러스 함수 (Softplus function): 정규 분포의 매개변수의 조정을 통해 얻음
- 지수 분포 (Exponential distribution)
- 라플라스 분포 (Laplace distribution)
- 디랙 분포 (Dirac distribution)
- 혼합 분포들 (Mixture distribution): 3개의 요소를 가진 가우시안 혼합 분포
- 변수 변환 (Change of variables): 기존 확률변수를 새로운 확률변수로 바꾸는 것
정보이론
- 정보이론: 사건 (Event)이 지닌 정보를 정량화 할 수 있을까?
- 정보이론의 기본 원리: 확률이 작을수록 많은 정보
- 자주 발생하는 사건보다, 잘 일어나지 않는 사건 (Unlikely event)의 정보량 (Informative)이 많음
- 정보이론과 확률통계는 많은 교차점을 가짐, 확률통계는 기계학습의 기초적인 근간 제공
- 정보이론 관점에서도 기계학습을 접근 가능: 엔트로피, 교차 엔트로피, KL 발산, 상대 엔트로피
- 자기 정보 (Self information): 사건 (메시지)의 정보량
- 엔트로피 (Entropy): 확률변수 x의 불확실성을 나타내는 엔트로피, 모든 사건 정보량의 기댓값으로 표현
- 모든 사건이 동일한 확률을 가지 때 즉, 불확실성이 가장 높은 경우에 엔트로피가 최고임
- 교차 엔트로피 (Cross entropy): 두 확률분포 P와 Q 사이의 교차 엔트로피
- 심층학습의 손실함수로 많이 사용
- 교차 엔트로피를 손실함수로 사용하는 경우, KL 발산의 최소화 함과 동일
- KL 다이버전스: 두 확률분포 사이의 거리를 계산할 때 주로 사용
- 가지고 있는 데이터 분포 P(X)와 추정한 데이터 분포 Q(X) 간의 차이를 최소화하는데 교차 엔트로피 사용
최적화
- 기계학습의 최적화는 단지 훈련집합이 주어지고,
- 훈련집합에 따라 정해지는 목적함수의 최저점으로 만드는 모델의 매개변수를 찾아야 함
- 주로 확률적 경사 하강법 (Stochastic gradient descent, SGD) 사용
매개변수 공간의 탐색
- 특징 공간의 높은 차원에 비해 훈련 집합의 크기가 작아서 참인 확률분포를 구하는 일은 불가능
- 따라서 기계학습은 적절한 모델 (가설)을 선택하고, 목적함수를 정의하여 모델의 매개변수 공간을 탐색
- 그리고 목적함수가 최저가 되는 최적점을 찾는 전략 사용
- 특징 공간에서 해야 하는 일을 모델의 매개변수 공간에서 하는 일로 대치
- 최적화 문제 해결: 낱낱 탐색 (Exhaustive search) 알고리즘, 무작위 탐색 (Random search) 알고리즘
- 경사 하강법 (미분 활용)
- 최적화 문제 해결: 낱낱 탐색 (Exhaustive search) 알고리즘, 무작위 탐색 (Random search) 알고리즘
미분
- 미분에 의한 최적화: 1차 도함수는 함수의 기울기 (경사), 즉 값이 커지는 방향을 지시
- 편미분 (Partial derivative): 변수가 복수인 함수의 미분, 미분 값이 이루는 벡터를 경사도라고 부름
- 기계학습에서 편미분: 매개변수 집합은 복수 매개변수이므로, 편미분을 사용
- 최적화는 예측 단계가 아닌, 학습 단계에서 필요함
경사 하강 알고리즘
- 경사 하강법 (Gradient descent)는 낮은 곳을 찾아가는 원리
- 함수의 기울기 (경사)를 구하여 기울기가 낮은 쪽으로 반복적으로 이동하여 최솟값에 도달
- 집단 (무리, Batch) 경사 하강 알고리즘
- 샘플의 경사도를 구하고 평균한 후에 한꺼번에 갱신
- 훈련 집합 전체를 다 봐야 갱신을 일어나기 때문에 학습 과정이 오래 걸린다는 단점 존재
- 정확한 방향으로 수렴하긴 하지만, 속도가 느리다는 단점
- 확률론적 경사 하강 (SGD, Stochastic Gradient Descent) 알고리즘
- 한 샘플 혹은 작은 집단 (무리, Mini-batch)의 경사도를 계산한 후 즉시 갱신
- 수렴이 다소 해맬 수도 있긴 하지만, 속도가 빠르다는 장점
3. ML Basics - E2E
End to End 머신러닝 프로젝트
- 큰 그림 보기
- 문제 정의: 지도학습 & 비지도학습, 분류문제 & 회귀문제, 배치학습 & 온라인학습
- 성능측정지표: RMSE 등
- 데이터를 구하기
- 데이터 가져오기
- 데이터 구조 훑어보기
- train, test 데이터셋 나누기 (데이터 변경이 생겨도 일관성 있는 기준을 유지하도록 하라)
- 데이터로부터 통찰을 얻기 위해 탐색하고, 시각화 해보기
- 상관관계 확인
- 머신러닝 알고리즘을 위해 데이터를 준비하기
- 데이터 수동 변환 보다는, 함수를 만들어서 자동 변환하는 것이 더 좋음
- 새로운 데이터에 대한 변환을 손쉽게 재생산 할 수 있음
- 향후 재사용할 수 있는 라이브러리 구축 가능 - 데이터 정제 (Data Cleansing)
- 누락된 특성 다루는 방법: 행 제거, 열 제거, 특정 값으로 채우기 (0, 평균, 중간값 등)
SimpleImputer
함수 활용하기- One hot 인코딩 (
OrdinalEncoder, OneHotEncoder
함수 활용하기) - 특성 스케일링 (Feature Scaling): Min max scaling, Standardization - 변환 파이프라인 (Transformation Pipeline): 순차적 변환 시, 사용 (Pipeline class)
- 모델을 선택하고 훈련시키기
- 모델을 상세하게 조정하기
- 솔루션을 제시하기
- 시스템을 론칭하고, 모니터링 및 유지보수 하기
4. ML Basics - Linear Algebra
- 행렬의 곱셈
- 중요한 연산과 성질들 (정방행렬, 삼각행렬, 대각행렬, 단위행렬)
- Norms
- 선형독립과 Rank
- 역행렬, 직교행렬
- 행렬식
- 이차형식
- 고유값, 고유벡터
- 행렬미분
5. 6주차 돌아보기
- 기간: 2022. 10. 24 ~ 2022. 10. 29
출처: 프로그래머스 인공지능 데브코스 4기 6주차 강의 -> 강의 내용 정리 깃허브 링크