티스토리 뷰

머신러닝 알고리즘을 실제로 사용할 때 팁.

1. learning rate

2. 데이터 선처리(preprocessing)

3. overfitting

 

1. learning rate

이 알고리즘을 정할 때 learning rate라는 알파값을 임의로 정했다. 

이 learning rate를 잘 정하는 것이 중요하다.

 

learning rate가 크다는 것은 경사 하강을 할 때 step이 크다는 것이다.

step이 크면 왔다갔다 하거나, 위로 튕겨 올라가버릴 수 있다. 이럴 때는 학습이 이루어 지지 않을 뿐만 아니라 숫자가 아닌 값이 나오기도 한다. 이런 현상을 overshooting이라고 한다.

learning rate가 작다는 것은 경사 하강을 할 때 step이 작다는 것이다.

step이 작으면 너무 천천히 내려가기 때문에 시간이 다해 최저점이 아님에도 불구하고 stop 되어버리는 경향이 있다. 이것을 피하기 위해서는 cost함수를 출력해보고 작은값으로 변화하고 있다면 learning rate를 증가시켜본다.

learning rate는 환경에 따라 달라지기 때문에 0.01정도로 시작해 보고 판단해서 조정할 것.

 

 

2. Data (X) Preprocessing for gradient descent

경사면을 따라 내려가서 최고로 낮은 지점에 도착하는 것이 목표다.

 

예를 들어 가지고 있는 데이터의 값 중에 x값들 간에 너무 차이난다면, 등고선을 그려보면 한쪽으로 왜곡된 형태의 그래프가 그려지게 된다.

이때 우리가 어떤 알파값을 잡게 되었을때, 알파값이 아무리 좋은 값이더라도 조금만 잘못하면 밖으로 튀어나갈 수 있다.

 

그래서 데이터의 값들 간에 너무 차이가 크다면 Nomalize해줘야 한다.

내가 learning rate를 잘 잡은것 같은데 학습이 이루어지지 않고 이상한 결과가 나오게 된다면 preprocessing을 했는지 꼭 점검해볼 것.

여러가지 nomalization의 종류중에 하나 선택해서 사용할 것.

 

 

3. Overfitting

학습을 통해 모델을 만들어 가다보니 학습 데이터에 너무 딱 잘 맞는 모델을 만들게 되면, 테스트 데이터나 실제로 사용하는 데이터에 사용해보면 잘 안맞는 경우가 생긴다.

overfitting을 줄이는 방법

1. training data를 많이 가지고 있을것

2. 가지고 있는 feature의 개수를 줄이는것(예를 들어 중복되는 것을 줄인다던지..)

3. regularization

 

Regularization

- 우리가 가지고 있는 weight을 너무 큰 값을 주지 말자. (구부리지 말고 펴!)

cost function에서 우리는 cost를 최적화, 최소화 시키는 것이 목표였는데, cost function 뒤에 어떤 term을 추가해준다. W의 값(각각의 element의 제곱 후 합한다.)이 작아질 수 있도록(커지면 구부려져)한다. 

regularization strenghth가 0이되면 이 값을 사용하지 않겠다는 의미이고, 반대로 큰 값이면 중요하게 생각하겠다는 것이다.

regularization strength를 텐서플로우로 구현하는 것은 간단하다.

출처:

https://www.inflearn.com/course/%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B0%95%EC%A2%8C/lecture/3396

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함