본문 바로가기
기계학습/코세라 - 기계학습 (Andrew Ng)

week10

by tryotto 2019. 8. 14.

1. 데이터의 크기가 너무 클때, Gradient Descent의 사용법

      - 우선, Data Set을 굳이 크게 받을 필요 있나?

-> 처리하는 데에 너무 오랜 시간이 걸린다. 적은 Data Set으로도 해결 가능하다면,

    굳이 큰 Data Set을 사용할 필요가 없다


-> 어떻게 이걸 알 수 있을까? : Learning Curve 를 그려보자

       1) J_cv 값이 J_train 값보다 훨씬 크다 : High Variance

-> 많은 양의 데이터셋이 있을수록 더 정확해진다 : Data Set을 줄이면 안된다

       2) J_cv 값과 J_train 값이 거의 똑같다 (둘다 큼)  : High Bias

-> 많은 양의 데이터셋이 있을수록 오류가 생긴다: Data Set을 줄이는게 더 좋다


       - 많은 양의 Data Set을 처리할 수 있는 Gradient Descent 방식이 없을까?

1) Batch Gradient Descent : 사실상 그냥 Gradient Descent와 똑같지만, 하나로 묶어서

계산이 가능하다는 점에 있어서 보기엔 더 좋다


2) Stochastic Gradient Descent : 굳이 모든 데이터들을 다 확인해서 Gradient값을

     구하는게 아니라, 매 턴마다 딱 한 개의 데이터를

     참고해서 Gradient 값을 구한다



2. Stochastic Gradient Descent 적용 순서

      1) 임의로, Trainning Set을 섞어준다

      2) Trainning Set의 크기(=m) 만큼, 아래의 단계를 반복해준다

- trainning set 중에서, "한 개"의 example만을 꺼낸다

- 그 example의 값에 맞게, Gradient 값을 구해서 Θ값을 변형해준다


3. Mini-batch Gradient Descent 

      - 방식 : Batch랑 Strochastic을 적절히 섞은 것

->Stochastic의 경우, 딱 한 개의 데이터를 매 턴마다 사용해서 Θ값을 계속 갱신했다면,

   Batch의 경우, 2~100 사이의 크기의 데이터를 뽑아서 Θ를 계속 갱신함


      - 효율성 : 일반 Gradient 또는 일반적인 Batch 보다 훨씬 속도가 빠르다 

(일반 Gradient와 Batch는 매 턴마다 모든 데이터셋을 다 계산해야하기 떄문)


      - Stochastic 보다 좋은가? 

- Mini-batch를 이용시, Vectorization의 성질을 사용할 수 있음

-> 코딩할때, 더 쉽게 라이브러리를 끌어와서 계산을 할 수 있음

- Stochastic 의 경우엔, 사용할 수 있는 라이브러리가 잘 없어서 어려움이 있음


**그러나, 시간적인 면을 봤을땐 당연히 Stochastic이 훨씬 빠르다!


4. Stochastic 방식을 하는 도중에, Bug가 발생하지 않는지 확인하는 방법? (제대로 Converging 하고 있는지 확인방법)

      - 일반적인 Gradient 의 성능 평가 방식 : 

1) J_train 함수를 직접 그린다

2) 위의 함수 모양이 계속 감소하는 함수인지를 확인한다 (그렇지 않다면, 문제가 있는 함수)


      - Stochastic Graient Descent의 성능 평가 방식 :

1) (x,y) 값을 매 턴마다 업데이트 하기 전에, 꼭!! cost 함수를 먼저 계산해준다

2) 1000번의 반복문이 실행될때마다, 이전까지 계속 구해줬던 cost 함수의 값들을

    평균 내서 그림으로 그려준다 (plot)

3) 전체적으로 봤을때, 계속 감소하는 함수가 아니라면 문제가 있는 함수다

-> 만약에, 상수함수 모양 (증감X)이라면, 전체적으로 문제가 있는 함수다.

     뜯어 고쳐야 한다.

-> 만약에, 증가하는 함수 모양이 나온다면, learning rate를 낮춰보자

    (diverging 하고 있기 때문)


  ** average하는 데이터값의 크기가 클수록, oscillation이 덜 발생한다



5. Stochastic 방식을 적용할때, learning rate를 계속해서 어떻게 Tunnung할 수 있는가? 

       - 문제의식 : Stochastic 방식에서 learning rate를 보통 일정하게 유지하는 편이다

-> 한 점에서 수렴하지 못하고, 계속해서 local minimum 주위를 맴돌게 된다


       - 해결책 : 반복을 계속 하는 과정 안에서, learning rate를 조금씩 줄여나간다

-> 더 정확한 방식이긴 하나, 현업에서는 아직도 learning rate를 유지하는걸 주로 사용



6. Online Learning 

      - 의의 : 온라인을 운영하다보면, 많은 데이터들이 계속해서 누적됨

-> 누적된 데이터들로 계속해서 머신러닝을 할 것도 아닌데, 굳이 계속 저장해야할까?


      - 해결책 : 데이터 하나를 얻으면, 그 데이터를 이용해서 Θ값을 업데이트 하고, 사용한 데이터는 버린다

( 소규모 온라인 페이지라면, 굳이 버릴 필요는 없다. 대규모라서 버리는것. 유지관리가 더 힘듬)


      - 장점 : Θ값이 일반 Gradiant Descent처럼, 여태 있던 모든 데이터들을 종합한 값에 의해 

    업데이트 되는게 아니라, Stochastic 방식처럼, 가장 최근의 데이터 하나만을 이용해서

    업데이트 하는 것이므로, 최신 정보에 따라 유지를 할 수 있다

  ( 과거의 정보에 의해 영향을 받지 않는다 )


      - 그외) 온라인 사이트에서 사용하는 머신러닝 기법

- 추천 검색어 알고리즘

      1) 특정 검색어와 관련이 있을 것 같은 10가지의 유사 검색어를 찾는다 (=x, Θ)

      2) 추천된 검색어를 클릭할 경우 (y=1), 클릭하지 않을 경우 (y=0) 를 따진다

      3) (y | x ; Θ ) 에 대한 머신러닝을 수행한다

-> 단, 이때의 방식은 웬만하면 Stochastic 방식을 취한다 (한번 쓰고 데이터를 버리는 방식)



'기계학습 > 코세라 - 기계학습 (Andrew Ng)' 카테고리의 다른 글

(개념별 정리) Regularization  (0) 2019.08.17
week 11  (0) 2019.08.14
week9  (0) 2019.08.14
week8 (2)  (0) 2019.08.14
week8  (0) 2019.08.14