4장 : 모델훈련
모듈/메소드 | 설명 |
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