본문 바로가기
카테고리 없음

머신러닝 개요 - 딥러닝을 이용한 자연어 처리 입문

by tryotto 2019. 12. 28.

# 머신러닝 개요




1. 의의 


- 이전 : 문제에 대한 해답을 찾기 위해, 알고리즘을 개발했었다

> 그러나, 모든 문제들에 대해 알고리즘을 개발 할 수 없을뿐만 아니라,

   실생활에서는 알고리즘이 존재하지 않는 문제들이 존재한다

- 이후 (머신러닝 도입) : 

> 문제와 해답을 이용해서 훈련을 하든

> 문제만 주어진 경우에 잘 분류를 하든

>> "어림짐작해서" 답을 구해내자!! : 가장 답을 구하기에 적합한 식을 고안해내는 것이 목표




2. 머신러닝의 목표 


- 하이퍼 파라미터 : 트레이닝 이전에 값을 설정

- 매개변수 : 트레이닝을 통해 구해낼 값

>> 머신러닝을 통해, 최적의 매개변수 값을 구해내자!




3. 모델의 평가 


- 구성 : 훈련 데이터 + 검증 데이터 + 테스트 데이터

> 검증 데이터 존재 이유 : 사실 명확하진 않음. 

   먼저 훈련 데이터를 통해 훈련을 한 뒤, 검증 데이터로 검증을 한다. 이때, 검증 하는 과정에서 또 한 번 모델이 훈련 된다.

   따라서, 맨 마지막에 테스트 데이터에서 최종적으로 검증이 되는 것.

> 결국, 훈련 데이터와 검증 데이터 모두에서 fitting 은 일어나며, 테스트 데이터에서는 fitting 이 일어나지 않는다

> 훈련 데이터 = 시험지, 검증 데이터 = 모의고사, 테스트 데이터 = 수능


- 데이터 양이 많으면 그대로 검증 데이터 이용,

                   적으면 k-폴드 교차 검증 방식 이용




4. 머신러닝의 큰 갈래


- 지도학습과 비지도학습, 그리고 강화학습


1) 지도학습

- 분류 문제 :  0, 1, 2.. 같이, 이산적인 output 값을 가진다. 각각의 value 에 맞는 class 로 분류된다.

> 이진 분류, 다중 분류 문제 등

> Logistic Regression

- 회귀 문제 : 0.42.. 같이, 연속적인 output 값을 가진다. 각각의 output 값에 맞게, 매개변수 값을 변형해준다

> Linear Regression

> SVM 은 두 가지 문제 성질 모두 만족


2) 비지도학습

- Clustering 문제 등


3) 강화학습





5. 혼돈 행렬 


- 의의 : 

> 정확도를 구해도, 그 내면을 알지 못함 

> 혼돈 행렬이라는 간단한 행렬을 도입해서, 정확도가 구해진 자세한 경위를 알 수 있게 된다!

(사실, 자세한 경위라고 하기에도 우스운 정도지만 그래도 어느 정도의 정보는 알게 된다)


- 정밀도, 재현률 : 혼돈 행렬을 통해 더 알 수 있게 되는 정보들





6. 선형 회귀  https://wikidocs.net/21670


- 식의 종류 : 

1) 단순 선형 회귀 : 변수가 한 개

2) 다중 선형 회귀 : 변수가 여러 개


- 가설함수 : 가설함수의 y 값을 "예측값" 이라고 한다


- 손실함수 (= 비용함수, Cost Function)

- 정의 : 가설함수의 예측값과, 실제 데이터의 실제 값 사이의 오차들의 합을 구하는 함수.

> 어떤 문제인지에 따라 다른 손실함수가 달라진다

ex) 선형회귀에선 MSE, 로지스틱 회귀에선 Cross Entropy 를 쓴다.


- Optimizer - Gradient Descent : 

- 의의 : 최적의 매개변수 W 값을 바로 구하는게 best 지만, 그게 힘들 때가 더 많다 (계산량이 존나 많아서)

> 이때, 각 지점에서의 미분 계수 값을 이용해서 W 값을 조금씩 변형시킨다면, 결국엔 최적 W 값을 구할 수 있을거라는 착안.

- 뭘 미분하는가? 

> 최종 목적은, 손실함수를 최소화 하는 것.

> 따라서, 손실함수 그래프의 각 지점에서 미분계수를 구해야 한다!

> 그래서, W 값을 조금씩 수정해나가면 된다!



7. 로지스틱 회귀


- 의의 : 

> 0, 1 두 가지의 output 을 갖는 data set 이 있다고 하자

> 이 data set 은, 특정 limit 을 넘으면 1 의 값을 갖고, 그 전까지는 0 의 값을 갖는다.

     > 이런 data set 의 특성을 반영할 수 있는 함수가 없을까? 

: Sigmoid Function !!


- 특성 :

1) 0~1 사이의 값을 갖는다

> 따라서, 이 값을 확률 값으로 매핑할 수 있다.

2) S 자 모양을 갖는다.


- 로지스틱 회귀의 목적 : 

Sigmoid 함수 안에 들어가는 최적의 W, b 라는 매개변수 값을 찾는다!


- 의문점 1 : Sigmoid Function 은, 결국 어느 hinge 에서 y 값을 1 로 매핑할 것인지만 알면 되지 않나?? 그냥 ㄱㄴ 모양의 함수를 쓰면 안 되나??

     어차피 hinge 값만 정확하면 되잖아!!

> 답 1) 이상적인 경우에는, 주어진 data set 이 모두 완벽하게 0, 1로 정확하게 매핑되겠지만, 현실세계의 data에선 그렇게 될 수 없다.

어떤 data 는 잘못된 y 값으로 매핑될 수도 있다.

따라서, 모든 경우에 대해서 완벽하게 매핑을 시키는 것이 불가능하므로, 확률적으로 매핑을 시키는게 가장 효율적이다.

그러기 위해선, 확률 값이 오직 0, 1 만 가져선 안된다. 0~1 사이의 값들이 연속적으로 존재하는 함숫값이어야 한다.

따라서, Sigmoid 함수를 쓸 수밖에 없다.


- 의문점 2 : b=0 인 경우엔, W 값이 뭐가 나오든 상관 없는거 아냐? 결국엔 중요한건 hinge 일 뿐인데? b=0 이면 hinge 의 위치가 0 인 지점으로                 고정되잖냐!!!!

> 답 2) 일부는 맞는 말이다. 그러나, 만약에 hinge 가 되는 probability 를 0.5 가 아닌, 0.7 같은 값으로 바꿔버린다면?

그렇게 된다면, W 값이 정말 중요해진다.

따라서, b=0 이더라도 Optimization 은 여전히 중요하다! 최적의 W 값을 추적하는 과정이기 때문!


- 손실 함수 : 잘못된 classification에 대해 cost 를 주기 위해서, Cross Entropy 를 써야 한다

- Classification 문제에선 Cross Entropy 를 주로 손실함수로 많이들 사용한다.



- 인공 신경망과의 관계 : 인공신경망에서, 반드시 로지스틱 회귀를 통한 Classification 과, 해당 값을 Soft Max 시키는 과정이 필요하다.





8. Soft Max 회귀


- Soft Max 함수 

> Multi-class 분류에 대해서 로지스틱 회귀를 한다면, 각각의 class 에 할당될 probability 를 output 으로 얻게 된다.

> 그러나, 나는 output들의 합=1 로 만들고싶다 : Soft Max 함수 적용! 


- 의문점 : 왜 Soft Max 함수에서, 굳이 e 를 밑으로 하는 지수함수를 쓰는걸까?

> 위키에 따르면, 더 좋은 분포 값을 만들어내기 위함이라고 함 (자세한 사항은 모름.)

> 즉, 다른 값을 밑으로 해도 상관은 없다. 성능이 안 좋아질 뿐..


- 손실함수 :

- 예측값 : Soft Max 함수의 output 값

- 실제값 : 원 핫 벡터 값 (data set으로 주어지는 값임)

- 수식 :

두 값들 간의 차를 이용해서, 손실함수를 만들 수 있다.

- 큰 틀 : Cross Entropy

> why? 앞에서 했던 로지스틱 회귀와 마찬가지로, classification 문제이므로, 엔트로피를 적용하는게 가장 좋다 (고 한다)

> 정확한 이유는 모르겠으나, Soft Max 회귀의 경우에는 이 방식이 가장 효율적인 것 같다.