지금까지 내용을 간략히 정리하고 가겠습니다.
- 인공지능 : 인간의 지능이 가지는 학습, 추리, 논증 따위의 기능을 갖춘 시스템
- 인공지능은 강한 인공지능과 약한 인공지능으로 나뉜다
- 인공지능의 접근 방법
- 과학적 : 인간의 지능을 충분히 연구한다음 그 원리를 충실히 모방하는 기계 제작
- 공학적 : 쓸만한 지능 기계를 만들 수 있다면 인간의 지능 원리를 따르지 않아도 됨
- 규칙 기반 방법론 : 사람이 사용하는 규칙을 수집하여 프로그래밍(if-else)
- 하지만 규칙을 위반하는 샘플이 발생함
- 기계 학습 방법론 : 충분한 데이터를 수집 -> 기계가 스스로 규칙을 찾아내 학습하는 방법
- 딥러닝 방법론 : 기계 학습은 특징까지 수작업으로 알아내야하지만, 딥러닝은 특징마저 스스로 알아냄
- 규칙 기반 방법론 : 사람이 사용하는 규칙을 수집하여 프로그래밍(if-else)
- 머신러닝의 데이터의 중요성
- 데이터가 없으면 머신러닝은 학습을 할 수 없다.
- Data Set : 머신러닝이 사용하는 데이터, 여러개의 샘플을 담고 있어서 데이터 셋이라 부름
- Feature Vector : 데이터의 특징들로 구성되어있는 특징들의 집합
- Feature의 종류
- 수치형 특징
- 거리 개념이 있음 (길이가 3인 꽃과 길이가 100인 꽃은 거리가 멈)
- 실수 혹은 정수, 이진 값
- 범주형 특징
- 순서형
- 학점, 수능 등급 등
- 거리 개념이 있으므로 순서대로 정수를 부여하면 수치형으로 취급 가능
- 이름형
- 혈액형, 지역 등으로 거리 개념이 없음
- 보통 원핫코드로 표현함
- 순서형
- 수치형 특징
- Feature의 종류
- 부류, Class, Target, Lable : 데이터의 종류 (저는 보통 Target, Lable을 사용합니다.)
- 값 또는 원핫 코드
- 원핫 코드는 (1,0,0), (0,1,0), (0,0,1) 이런 식으로 표현된다
- 값 또는 원핫 코드
- 훈련 집합 : 머신러닝 모델이 학습하는데 사용하는 데이터로서 특징 벡터와 타겟 값이 들어가있음
- 테스트 집합 : 머신러닝의 정확도를 테스트하는데 사용하는 데이터로서 특징 벡터만 있음. 이때 예측한 결과와 테스트 집합의 타겟 값을 비교하여 정확도를 평가함
- Hyper Parameter : 모델의 동작을 제어하는 변수, 학습을 시작하기 전에 적절한 값으로 세팅해줘야 하는 변수
- 머신러닝의 종류
- Supervised Learning : 데이터와 라벨로 학습을 하는 모델
- UnSupervised Learning : 데이터로만 학습을 하는 모델 (ex 인종에 따라서 분류)
- Reinforcement Learning : 상태와 행동의 쌍으로 학습을 하는 모델
- 머신러닝의 성능 측정 방법
- 일반화 (Generalization) 능력으로 평가를 함
- 이때 성능을 측정하기 위해 혼동행렬 (confusion Matrix)을 사용함
- 혼동행렬은 \(n_{ij}\)이고, i는 예측 값, j는 실제 값입니다.
- 정확률 (accuracy) : 맞힌 샘플 수 / 전체 샘플 수
- 정밀도 (precision) : TP / TP + FP (모델이 맞다고 예측한 것 중에서의 비율)
- 재현률 (recall) : TP / TP + FN (실제로 긍정인 것 중에 모델이 얼마나 제대로 측정했는지의 비율)
- 일반화 능력을 올리는 방법
- 교차 검증
- 우연히 train, test 집합에 잘 맞는 모델을 방지하기위해 사용
- 훈련 세트를 또 여러개로 쪼개서 k-1개는 학습, 다른 하나로 검증함
- 여러 번의 검증을 통해 평균 값을 냄
- Over Fitting을 막는 다양한 방법
- 데이터셋 증가, 규제, 드롭아웃, 앙상블 방법 등
- 교차 검증
- 딥러닝
- 인공 신경망 (ANN : Artificial Neural Network)으로 시작함
- 가장 기본적인 퍼셉트론부터, 다층 퍼셉트론, 딥러닝까지 이어짐
- 퍼셉트론 (Perceptron)
- 입력 층과 출력 층을 가지고 있는 단순한 구조
- 입력 층과 출력 층은 가중치로 이어져 있음
- 활성화 함수로 계단 함수를 사용함 -> 이진 분류
- 다층 퍼셉트론 (MLP : Multi Layer Perceptron)
- 입력 층과 출력 층 사이에 은닉 층 (Hidden Layer)을 추가한 퍼셉트론
- 은닉 층이 많아질수록 신경망의 용량이 커지고, over fitting의 가능성이 커진다.
- 은닉 층이 많아지면 더욱 다양한 파라미터를 학습할 수 있음
- 활성화 함수로는 ReLU, SoftMax 등을 사용
- 딥러닝 (Deep Learning)
- MLP에서 더욱더 많은 은닉 층을 추가한 형태
- 수많은 가중치 행렬과 입력 값의 곱셈을 통해서 결과를 예측함
- 활성화 함수는 MLP와 동일
- 머신러닝의 학습 전략
- 손실 함수 (loss function) : 실제 결과와 예측 결과의 차이를 나타내는 함수
- 머신러닝은 이 손실 함수를 최소화하는데 목적을 두고 학습한다.
- MSE, Cross-Entropy등 많은 종류가 있음
- 기존의 MSE는 확률이나 분류 문제에서 약한 손실함수임. 실제로는 오차가 큰데 작다고 나올 수가 있음. 왜냐면 오차가 1보다 작으면 더 작게, 1보다 크면 더 크게 반환하므로
- 따라서 나온게 교차 엔트로피 함수. 두 개의 분류나 확률 분포의 차이를 계산해줌
- 어떻게 손실 함수를 최소화 하는가?
- 단순히 가중치를 무작위로 바꾸는 것으로는 최소화 할 수 없음
- 이때 나온 기법이 경사하강법!
- 경사하강법 (Gradient Descent) : 손실 함수를 줄이는 기법
- 경사하강법은 현재의 w를 기준으로 w를 어디로 옮겨야 하는지 알려준다
- 방향은 알아냈지만, 얼만큼 이동해야하는지는 learning rate (하이퍼 파라미터)를 통해서 제어함
- 경사하강법에서 조금 더 응용을 추가한 경사하강법들이 있음
- 확률적 경사하강법 (SGD : Stochastic Gradient Descent)
- 기존의 경사하강법은 샘플 하나마다 가중치를 갱신해서 시간이 오래 걸림
- 따라서 샘플들을 배치 사이즈 별로 모아서 한꺼번에 가중치를 갱신하는 방법
- 이때 샘플들이 무작위로 샘플링되는 효과가 있어서 확률적이라는 이름이 붙음
- 모멘텀 (Momentum) 경사하강법
- SGD는 심하게 지그재그하거나, local minimum에 빠질 수 있는 위험이 있음
- 이때 이전의 방향에 가중치를 줘서 관성을 가지게 함
- 그렇게 한다면 심하게 지그재그 하지도 않고, local minimum에 빠져도 쉽게 나올 수 있음
- 적응적 학습률 (Learning Rate Scheduler) 경사하강법
- SGD의 학습률이 너무 작으면 시간이 오래 걸리거나, global minimum에 가기도 전에 학습이 종료될 수도 있음
- 그와 반대로 학습률이 너무 크면 심하게 지그재그할 수도 있음. global minimum 주위를 뺑뺑도는 형태
- 따라서 멀리있을때는 학습률 크게, 가까이가면 갈수록 학습률을 작게 만듬
- 대표적인 예시로는 RMSProp, Adam이 있음
- Adam 경사하강법은 모멘텀과 적응적 학습률을 모두 적용한 경사하강법임
- 확률적 경사하강법 (SGD : Stochastic Gradient Descent)
- 층이 깊어질수록 생기는 문제
- 그레이디언트 소멸 문제 (Vanishing Gradient Problem)
- 가중치를 갱신하는 과정에서 오차가 점점 사라지며 결국 입력 층과 가까운 은닉 층은 가중치가 갱신되지 않는 현상
- 미분을 하므로 우측에서 좌측으로 갈수록 점점 값이 줄어든다
- 해결법으로는 활성화 함수를 ReLU 함수를 사용함
- ReLU 함수는 값이 음수면 미분값 0, 양수면 미분값 1을 반환함
- 과잉 적합 (Over Fitting)
- 데이터의 양을 늘림 (data augmentation)
- 규제, 드롭아웃, 앙상블을 통해 over fitting을 해결
- 그레이디언트 소멸 문제 (Vanishing Gradient Problem)
- 손실 함수 (loss function) : 실제 결과와 예측 결과의 차이를 나타내는 함수
- 하이퍼 파라미터를 찾고 모델을 최적화 하는법
- 하이퍼 파라미터는 종류가 매우 다양함
- 심지어 하나의 하이퍼 파라미터에도 들어갈 수 있는 옵션도 매우 많음
- 따라서 이러한 모든 하이퍼 파라미터를 테스트해보고 알아내야함
- 물론 일일이 다 넣는 것보다 이론적 배경을 통해서 넣을 하이퍼 파라미터의 옵션들을 추려내야함
- Grid Search
- 하이퍼 파라미터_1 : [옵션 값들], 하이퍼 파라미터_2 : [옵션 값들] ... 하이퍼 파라미터_m : [옵션 값들]
- 이런 식으로 모델의 하이퍼 파라미터를 하나하나 다 넣어서 테스트함
- 가장 좋은 하이퍼 파라미터를 반환하지만, 시간이 아주 오래 걸린다는 단점이 있음
- Randomized Search
- 하이퍼 파라미터의 범위나 옵션 값들을 줘서 랜덤하게 찾는 방법
- 가장 좋은 하이퍼 파라미터는 아닐 수도 있지만, 그나마 좋은 하이퍼 파라미터를 찾을 수 있고, 시간이 적게 걸림
- Grid Search
- 모델을 최적화 하는 방법
- 앙상블 (Ensemble) 방법
- 좋은 모델들을 그룹화 함
- 하나의 모델보다 그룹화된 모델이 더 좋은 예측을 내놓는다는 방법
- 교차 검증을 이용한 하이퍼 파라미터의 최적화
- cross validation을 통해서 어떤 하이퍼 파라미터가 가장 좋은지를 알아냄
- 참고로 위의 Grid, Randomized Search에는 교차 검증을 위한 옵션이 있음
- 앙상블 (Ensemble) 방법
감사합니다.
다음부터는 CNN, RNN에 대해서 글을 올리고, 코드로도 올려보겠습니다.
지적 환영합니다.