ML/도서

4장 : 모델훈련

열심히해요 2021. 5. 8. 16:35
모듈/메소드 설명
np.random.rand(nrow, ncol) # 행, 열
np.random.randn(nrow, ncol)
np.random.randint(1, 20) # 1부터 19까지 랜덤 숫자 1개
0부터 1사이의 균일분포에서 난수 array 생성
가우시안 표준정규분포에서 난수 array 생성
정수 난수 1개 추출
np.zeros( (nrows, ncols) )
np.ones( (nrows, ncols) )

0/1로 구성된 array 생성
   
np.r_[a,b]
np.hstack([a,b])
np.concatenate((a,b), axis=0)
두 배열을 옆으로 붙이기
np.c_[[a], [b]]
np.vstack([a,b])
np.concatenate((a,b), axis=1)
두 배열을 위아래로 붙이기
np.c_[a,b]
np.column_stack([a,b])
np.concatenate((a.T,b.T), axis=0)
두개의 1차원 컬럼을 옆으로 붙이기
   
np.linalg 선형대수함수
np.linalg.inv(x) 역행렬
   
np.ravel(x) 다차원 배열을 1차원 배열로 변환시켜줌.
   
   
   
   
   
   
   

* Gradient Descent를 사용할 때의 주의점.

- 모든 특성이 같은 스케일을 갖도록 or 스케일의 차이가 크지 않도록 feature scaling 해주어야 한다.

- 변수별로 스케일의 차이가 크다면, 수렴하는데 많은 시간이 걸림.

 

1. Batch Gradient Descent(Full Gradient Descent)

- 매 학습 step마다 모든 학습 데이터를 사용해서 Cost function의 Gradient를 계산하여 모수 값을 업데이트 시키는 방법

 

2. Stocastic Gradient Descent

- 매 step에서 한개의 샘플을 무작위로 선택하고, Cost function의 Grdient를 계산하여 모수 값을 업데이트 시키는 방법

- 장점 : 빠른속도, 비용함수가 불규칙할 때, 지역 최솟값을 건너뛰는데 도움이 됨.

- 단점 : 무작위성 때문에 생긴 학습 과정의 불안정함으로 인해, 전역 최적값에 도달하지 못할 수도 있음

- => 해결책 : 초기엔 높은 학습률을 선정하고 점차 학습률을 줄여감으로써 전역 최적값에 안정적으로 도달 할 수 있게 해줌.(학습 스케줄 이라고 부름)

* 주의점 : 학습시 훈련 샘플이 i.i.id(independent, identically distribution, 즉 이전 샘플과 다음 샘플은 독립적이면서 동일한 분포를 가져야함)를 만족해야 평균적으로 파라미터가 전역 최적점을 향해 진행한다고 보장할 수 있음. 따라서 학습에 사용되는 샘플은 매 step 마다 무작위로 선택함.

 

3. Mini Batch Gradient Descent

- 매 step에 미니배치라고 부르는 임의의 작음 샘플 세트에 대해 그레디언트를 계산하는 것.

- GPU를 사용해 성능 향상을 얻을 수 있음.

- SGD 보다 덜 불규칙적으로 움직임. 전역 최적값에 도달할 확률을 높지만, 지역 최솟값에 빠질 위험이 있음.

 

[ Regularization / Shrinkage]

1. Ridge (사전적 정의 : 산등성이)

- 입력 feature의 scale에 민감함. 따라서, 사용전 데이터의 scale을 맞춰주는 것이 중요함.(ex. StandardScalar)

- 전역 최적값에 가까워지면 경사하강법이 자동으로 느려지고 수렴에 도움됨(진동x)

 

2. Lasso (사전적 정의 : 올가미 밧줄)

- 덜 중요한 특성의 가중치를 0으로 만들려고 함. -> 따라서 해석력 증가.

- 전역 최적값에 가까워지면 진동함. 따라서 훈련하는동안 점진적으로 학습률을 감소시키는게 도움됨.

- lasso는 0에서 미분 불가. subgradient vector를 사용하여 경사하강법을 적용함.

유의미한 변수가 적을 때 Ridge보다 더 나은 성능을 냄. 유의미한 변수가 많을 때는 ridge가 더 좋은 성능

 

3. elastic net(사전적 정의 : 고무밴드, 탄력성 있는)

- ridge와 lasso 회귀를 절충한 모델

- 대부분의 변수들이 유의미할 때 좋은 성능을 냄.

- 딥러닝 처럼 feature의 차원이 높은 경우, lasso가 좋은 성능을 낼지 ridge가 좋은 성능을 낼지 미리 알 수 없음.

이 때, elastic net을 사용하기에 적절함.

5. logloss가 convex한가?

https://taeoh-kim.github.io/blog/crossent/

 

Cross Entropy의 정확한 확률적 의미

Cross Entropy의 정확한 확률적 의미 By Taeoh Kim at September 26, 2017 Computer Vision and Machine Learning Study Post 6 Cross Entropy의 정확한 확률적 의미 김성훈 교수님의 딥러닝 강의를 듣다 보면, Logistic Regression으로

taeoh-kim.github.io