에러 = 실제값 - 예측값

MSE = 에러의 제곱들의 평균을 손실함수로 적용할 수 있음
하지만 원래 예측하고자 하는 대상의 제곱으로 표현되기 떄문에 해석이 깔끔하지 않음
그 때문에 루트를 씌워서 루트를 사용함
RMSE의 값이 클수록 예측의 퀄리티다 떨어진다는 것을 의미하므로 RMSE를 줄여나가야 함

위의 예시에서도 좌측의 RMSE가 더 낮으므로 더 좋은 모델이라고 할 수 있음

하지만 RMSE는 분류문제에서는 잘 작동하지 않음
레이블이 1일 때 예측을 0, 레이블이 0일 때 예측을 1 이라고 할 때
이 두 경우 모두 RMSE를 적용하면 같은 정도의 패널티를 가짐
예측 결과가 나쁠 수록 패널티가 더 부과되어야 하는데 RMSE에서는 큰 차이가 생기지 않음
따라서 분류 문제에서는 Cross Entropy(Log Loss) 개념을 사용함
이 방식은 레이블과 예측의 결과가 다를수록 더 큰 패널티가 생기는 함수

위의 예시에서 볼 수 있는 것처럼 예측을 잘 한 경우에는 손실 값이 낮지만
예측이 틀렸을 경우에는 하나만 잘못 되었다 하더라도 손실 값이 크게 늘어남

머신러닝 모델은 파라미터와 하이퍼파라미터로 구성된 수학적 함수이다
- 파라미터 : 모델 학습동안 변화하는 변수로 학습한 내용을 저장한 변수
- 하이퍼파라미터 : 학습이전에 세팅되는 고정된 변수값

선형모델은 bias 와 weight의 파라미터로 이루어져있음
선형 모델에서는 피처 값의 변화에 따라 레이블의 값이 일정하게 변화함
이것을 2D 공간에서 시각화하면 좌상단의 그림과 같음
y= mx + b 형태의 식으로 나타나는데 레이블 데이터를 학습하면서, m과 b에 대한 값이 조정된다
이 개념을 3차원으로도 그릴 수 있수 있는데 위와 같이 하이퍼플레인이 그려짐

그러면 선형모델이 어떻게 데이터를 분류할까?
가장 심플한 케이스는 이진분류
두 종류의 데이터를 가장 잘 나누는 선이 곧 좋은 모델
이 선을 결정경계(Decision Boundary)라고 함
이 때 중요한 것은 학습하지 못한 데이터까지
포괄적으로 분류하는 선을 찾는 것이 중요함

 

 

 

 

 

최근 들어서 다시 뉴럴네트워크의 시대가 되었음
CNN, RNN, GAN 과 같은 구조적인 부분의 기술 발전, 학습효율성을 늘려주는 ReLU 함수,
파라미터의 다양한 초기화 기법, 모델의 일반화를 위한 Dropout 기법 등이 등장하며 뉴럴넷이 더욱 발전함
그간, ML 모델에 등장한 여러 발전들이 신경망에서 다시 활용되었음,

머신러닝은 발전하며, 수백개의 층과 수백개의 파라미터로 이루어져있는 DNN으로 발전하였음.
위의 그림은 GoogLeNet (Inception)이라 불리는 이미지 분류모델을 도식화 한 것

2014년 이미지넷 대회에서 1,000개의 클래스를 가지는 120만개의 이미지를 학습함.
22개의 층(Pooling)을 포함하면 27개층의 뉴럴네트워크로 학습 파라미터의 개수는 1,100만였음.
(최근에는 훨씬 깊은 뉴럴네트워크도 많음)

노란 색 영역은 사람이 직접 손으로 분류했을 때의 에러율로 기계가 따라잡을 기준점
2014년까지는 사람에 못미쳤지만 2015년에 들어서서는 사람을 능가하는 성능을 기록함

딥러닝 모델이 발표되면 상세 스펙과 파라미터 등이 모두 공개되어
다양하게 실험하고 변형하다보니 성능이 빠르게 향상됨

2000년대에 들어 컴퓨팅파워가 발전하게 되며 여러 개의 weak learner를 활용하는 앙상블 기법이 나타남

복잡한 문제에 있어서는 한 명보다 수천 명의 대답을 결합하는게 좋다는 개념을 머신러닝에 적용하게 됨
즉, 각각 개별 classifier나 regressor의 예측 결과를 결합하여 개별 모델의 성능보다 좋은 결과를 도출하게 됨
이러한 기법의 알고리즘을 앙상블이라고 하며 random forest는 가장 인기있는 앙상블 기법중 하나임

랜덤포레스트에서는 디시젼트리를 개별 weak learner로 활용하게 됨
전체 데이터셋에 대한 무작위 샘플링으로 개별 트리에 대한 부분 데이터 집합을 구성함

개별 트리는 독립적으로 학습해서 데이터에 대한 예측을 수행함
분류 문제라면 투표를 통해 다수의 트리가 예측한 결과를 채택할 것이고,
회귀 문제라면 평균, 최대값, 중간치 등을 활용해서 값을 결정할 것임

그리고 일반화를 위해서 example(행) 과 feature(열)에 대해 랜덤샘플링이 이루어짐

개별 예측값들은 학습한 subset에 편향되지만(언더피팅), 개별 결과들을 결합함으로써 편향과 분산을 줄일 수 있음

또한 개별 트리를 계속해서 무한정 추가하면 오버피팅이 올 수 있음
때문에 검증데이터셋에 대해 early stopping 기능을 사용하여 이를 방지할 수 있음

90년대 커널방식의 모델이 출현했음.
그 중 SVM(Support Vector Machine)에 대한 연구가 활발히 이루어짐

SVM은 분류를 위한 모델로, 나눠질 데이터의 군집 사이에 여백(margin)을 주어 일반화를 도모한다.

SVM에서는 결정경계 하이퍼플레인(decision bondary hyperplane) 양쪽으로 두 개의 평행한 하이퍼플레인이 있음.
이 두 개의 하이퍼플레인은 각 면에서 가장 가까운 데이터 포인트와 교차함.
이 두 하이퍼플레인을 Support Vector라고 부르는데 이 두 벡터간의 거리를 margin이라고 함.
margin이 크면 클수록 일반화가 잘됨.

따라서 SVM은 Support Vector간의 여백이 최대한 넓어지는 Support Vector를 발견하는 것이다.
이 때 손실함수는 hinge 손실함수가 사용되며, 로지스틱 회귀의 Cross-Entropy 최소화와 비교됨.

두 개보다 많은 클래스를 분류해야한다면 "한 개 범주" vs "나머지 범주"의 전략으로 하나씩 support vector 를 구해나감.

하지만 두 개 클래스간의 선형성이 없다면 어떻게 해야할까?
이 때는 커널 변환(Kernel Transformation)을 이용하여 위의 그림처럼 2차원에 있던 데이터를 3차원으로 만들 수 있다.
이렇게 변환되면 경계를 분류하는 하이퍼플레인을 쉽게 찾을 수 있다.

이와 같은 방법이 Neural Network에도 존재함.

커널 변환은 신경망의 활성함수가 input을 함수에 매핑하여 공간을 변환하는 방법과 유사함
레이어의 뉴런 수가 차원의 수를 통제함
만약 두 개의 input에 3개의 뉴런이 있다면, input을 2차원에서 3차원 공간으로 매핑하는 것임.

basic linear kernel, polynomial kernel, Gaussian radial basis function(Gaussian rbf) kernel이 자주 사용됨

디시전트리는 1980~90년대에 발명된 개념으로 결과를 해석하기가 쉬운 직관적인 알고리즘으로 회귀와 분류에 모두 사용 가능

디시전트리를 수행할 때는 먼저 데이터셋을 보고 데이터들이 어떻게 분할될 수 있는지 질문을 던져보면 좋다.


위의 그림은 캐글의 타이타닉 생존자 예측 문제를 디시전트리로 시각화한 것이다.

그렇다면 위와 같이 데이터를 분할할 때 어떤 기준으로 적용이 되는가?
사이킷런에서 적용하는 디시전트리 알고리즘(CART)에서는 기본적으로 지니계수를 이용하여 데이터를 분할.

※ 지니계수 : 경제학에서 불평등지수를 나타낼 때 사용하는 것으로 0일 때 완전 평등, 1일 때 완전 불평등을 의미

데이터가 다양한 값을 가질수록 평등하며 특정 값으로 쏠릴 때 불평등한 값이 됨
다양성이 낮을수록 균일도가 높다는 의미로 1로 갈수록 균일도가 높음.(집단의 순수성이 높아짐)
모집단의 지니계수보다 자식 집단의 지니계수가 높다면 분기가 형성되어 데이터가 분할됨

단일 층의 퍼셉트론을 넘어 여러 층의 퍼셉트론을 만들어 한 층의 출력을 다음 층으로 보낸다면 더욱 강력한 모델이 될 수 있음.
다만 활성함수가 선형의 함수라면 결국 이 여러 층도 한 개층으로 압축될 수가 있어 여러 층을 만드는 의미가 없음.
이 때문에 시그모이드, Relu 등과 같은 비선형 함수가 필요함.

여러 계층으로 만들었을 경우에도, 단일 계층에서처럼 입력, 가중치 합계, 활성화 기능 및 출력이 있음.
단일 계층일 때와의 차이는 아래와 같음

1) 이전 계층의 출력값을 입력값으로 받음
2) 활성함수로 비선형함수가 사용됨
3) 입력과 출력 사이에 추가된 계층(Hidden Layer)가 존재함
4) 뉴런 간 연결시 벡터가 아니라 매트릭스 형태로 연결이 됨
- 처음 입력 시 4 X 2 행렬로 가중치 합계 계산을 하고 Hidden Layer에서는 2 x 1 행렬로 계산을 함

위와 같은 선형 활성함수를 사용시에는 최종 결과가 결국 입력 값과 어떤 상수의 조합으로 귀결됨.
이것은 결국 선형회귀에 지나지 않음

시그모이드는 입력값이 무엇이 들어오든 0~1 사이의 값으로 변환하기 때문에 확률과 이진분류에 활용이 가능

tanh 함수는 시그모이드와 유사하지만 출력값의 범위가 -1 ~ 1 이다.
미분된 형태를 보면 시그모이드 함수가 0 ~ 0.25인 것과 비교해 0~1의 넓은 범위 값을 가진다.
다중 레이어에서 시그모이드는 각 활성함수에 대한 미분을 여러 번 수행하면서 작아진 값을 또 미분하기 때문에
계속해서 작아지는 문제가 있었지만, tanh 함수의 경우에는 다중 레이어에서의 미분이 더 잘되어 경사하강이 잘 이루어짐

ReLU(Reflected Linear Unit)으로 입력값이 0 이하면 출력은 0, 입력값이 0이상이면 무조건 자신의 값이 출력이 되는 함수.
학습시 버릴 것은 확실히 버리고, 살릴 것은 확실히 살릴 수 있음.
살린 것에 대한 미분은 항상 1로 유지되어 학습이 잘됨.
하지만 버린 것에 대한 미분은 항상 0이어서 학습이 잘 되지 않음

ELU(Exponential Linear Unit)는 ReLU와 비슷하나 ReLU가 버리는 값에 대한 미분이 항상 0이어서 학습이 잘 안되던 문제를 보완.
이론적으로는 좋지만 e에 대한 계산이 복잡해서 컴퓨팅 자원이 많이 필요함

Frank Rosenblatt가 인간 두뇌의 뉴런을 계산모델로서 퍼셉트론(Perceptron)이라는 개념을 제시함.
그는 퍼셉트론이 간단한 함수, 최근에 우리가 부르는 이진분류(Binary Classification)를 학습할 수 있음을 보여주었음.
하나의 층의 퍼셉트론은 최근에 이야기 되는 뉴럴 네트워크의 가장 간단한 형태의 신경망으로 볼 수 있음.

퍼셉트론에서 단일 계층에 입력되는 인풋과 가중합이 수행되며, 이 가중합은 뉴런 안에 내재된 활성함수(Activation Function)를 통과하게 됩니다. 이 때 활성함수가 반환한 것을 임계값과 비교하여 각 데이터가 속하는 클래스를 결정.

오류는 집계되어 합계를 구하는데 사용되는 가중치를 변경하며, 프로세스는 결과가 수렴할 때까지 계속 반복함.

인간 두뇌의 가장 기본적인 단위는 뉴런으로 뉴럴네트워크는 서로 다른 패턴과 구조로 연결된 뉴런들의 집합임.
위의 그림은 뉴런의 구조를 나타낸 것.

  • Dendrite : 입력 신호(외부자극)을 수신하는 부분
  • Nucleus : 수용된 여러개의 외부 자극을 새로운 자극으로 가공
  • Axon : 새로운 자극이 myelin sheath의 보조를 받아 Axon을 거쳐 여러 가닥으로 송출됨. 이 때 각 가닥은 다른 뉴런의 Dendrite와 연결되어 있음.

이 그림은 뉴런을 수학적으로 나타낸 그림으로 위에 제시된 뉴런의 색과 매칭해보면
인풋이 입력되서 아웃풋으로 송출되기까지의 과정을 알 수 있음

여러 인풋들이 입력되어 가중치를 곱하고 합해집니다. 그 이후 이 값을 임계값과 비교하여 활성함수에 의해 변형됨.
정해진 임계치와 비교해서 값이 의미가 있으면 활성화되고, 아니면 활성화되지 못함.

좋은 아이디어이지만 이 퍼셉트론은 XOR함수같은 복잡한 함수를 모델링하지는 못함.
때문에 처음에는 퍼셉트론 개념이 잘 받아들여지지 않았지만,
후에는 인공신경만, 딥러닝 모델링을 위한 기본 단위로 활용됨.

+ Recent posts