티스토리 뷰

이제 본격적으로 인공신경망을 공부하기 전에 여러 개념들을 정리하고 넘어가 볼까 합니다. :)

머신러닝 프로세스

  1. 학습하고자 하는 가설(Hypothesis)을 수학적 표현식으로 나타내기
  2. 가설의 성능을 측정할 수 있는 손실함수 정의하기
  3. 손실함수를 최소화할 수 있는 학습 알고리즘 설계하기

 

gradient descent

- 경사 하강법 (경사를타고 내려가는 알고리즘, 매 스텝마다 미분값 계산)

Batch Gradient Descent - 전체 트레이닝 데이터를 하나의 Batch로 만들어 사용, 트레이닝 데이터 개수가 매우 많아질 수 있고, 파라미터 한 스텝을 업데이트 하는데 굉장히 많은시간이 소모 -> 최적의 파라미터를 찾는데 오랜 시간소모

Stochastic Gradient Descent - 한 스텝을 업데이트 할 때, 1개의 트레이닝 데이터만 사용하는 기법, 파라미터를 한 번 업데이트 할 때 전체 트레이닝 데이터의 특성을 고려하지 않고 각각의 트레이닝 데이터의 특성만 고려함으로 부정확한 방향으로 업데이트가 진행될 수 있음

그럼 뭘 써야 하냐? -> 절충안을 만들어내자! -> Mini-Batch Gradient Descent

만약 트레이닝 데이터가 1000개라면 이 중 100개~200개씩 묶은 Mini-Batch 사용!

 

Learning rate 

알파값을 임의로 정의 했었음 (ex 0.001) 

Learning rate를 잘 정의하는 것이 좋음, 만약 크다면, 내려가는 한발짝의 스텝이 크다는 얘기고 

최적의 코스트를 찾기 어려움, 잘하면 overshooting (코스트가 줄긴 커녕 값이 엄청 커지는 것)이 발생 가능

작다면, 너무 조금씩 이동하기 떄문에, 시간이 많이 걸리게 됨. 또 조금의 굴곡만 있어도 그 굴곡에 갇히게 됨 

(로컬 미니마)  만약 프린트 해봤을때, 너무 변화폭이 적다면, 조금 크게 해줄 필요가 있음, 

닶은 없다.  보통 0.01로 시작,  발산한다면 조금 작게, 너무 작다면 조금 크게 

-> Try several learning rate 

Data(x) preprocessing for gradient descent

- x데이터(피쳐데이터)를 선처리(preprocessing) 해야하는 경우가 있음 

데이타 값에 큰 차이가 있을 때, 

learning rate를 잘 잡았는데도, 이상하게 학습이 잘 안되고, 코스트함수가 발산하거나 이상한 동작을 보일 때에는 데이터 중에 차이가 크게 나는것들이 있는지,  preprocessing 했는지 점검

original data, zero -centered data, normalized data

 

Overfitting

 - 학습데이터에 너무 딱 맞는 모델을 만들어 낼 가능성이 있음.

-> 학습데이터를 갖고 물어보면 잘 답을 하지만, 실제로 사용하거나 할때는 잘 안맞게 됨 

학습시킨데이터에만 너무 특화되어 있음. (학습시킨 데이터에 모델의 표현력이 지나치게 강력할때 발생, ex) 하단의 사진처럼 정확도를 높이기위해 직선을 데이터에 맞게 과도하게 꼬인것을 볼 수 있음. 학습데이터에는 높은 정확도를 자랑하지만 일반적인 경우에서는 좋지 못함)

Underfitting - 모델의 표현력이 부족해서 트레이닝 데이터조차 제대로 예측하지 못하는 상황

해결책 

more training data

reduce the number of features

regularization -> Let's not have too big numbers in the weight

람다 - regularization strength

 

2편에서 계속...!

댓글
링크
최근에 올라온 글
최근에 달린 댓글