Cousera - Optimization Algorithms 잘 작동되는 모델을 찾으려고 훈련을 반복해야하는 숙명에 놓여있는 머신러닝. 훈련의 반복이니까 모델을 빠르게 학습시키는 것도 중요하다. 엄청나게 많은 큰 데이터를 훈련하는 것은 엄청 느릴 것인데 그때문에 최적화 알고리즘을 사용하여 효율성을 좋게만들어야한다. 그러므로 다음과 같은 알고리즘을 활용할 수 있다. Mini-batch Gradient Descent 배치 경사하강법의 단점 벡터화는 m개의 샘플을 상대적으로 빠르게 훈련시킬 수 있음 그러나 m이 500만개 정도로 엄청 큰데 경사하강법을 사용해야한다면? 경사하강법을 사용하면 500만개의 전체 훈련 샘플을 처리한 뒤 다음 단계를 밟고 또 전체를 처리하고 밟고를 반복해야한다. 느리다! 500만개의 ..
Coursera - Hyperparameter 모델의 Weight를 건드렸던 Regurlarizing 다음으로 Optimization(최적화) 과 관련된 Hyperparameter 세팅을 배웠다. Input을 Normalization 해서 데이터셋의 분포를 좋게 최적화 딥뉴럴네트워크에서 레이어가 깊어질 수록 기울기가 폭발적으로 증가하거나 감소되어 학습에 어려움이 있을 수 있는데,Weight 를 특정하게 Initialize 함으로써 최적화! Weight 는 0으로 초기화되면 안되며 랜덤으로 초기화되어야 symmetry를 피할 수 있다. 0으로하면 효과없음 Weight 를 너무 크게 잡으면 최적화를 느리게 할 것이다. 복잡한 역전파구현의 버그를 어떻게 빨리 찾아서 최적화할수있을까?Gradient Checki..

Django, Node.js, Flask, FastAPI, Express 등등, 스크립팅 언어의 프레임워크를 쓸 때는 API endpoint path의 순서를 조심해야한다. 나같은 경우엔 React와 Django에서 이 순서를 조심하다가 FastAPI에서 이 순서를 간과하여 굉장한 삽질을 해버렸다. 알고보니 대부분의 스크립팅 언어 프레임워크는 리퀘스트가 들어오면 내가 정의한 코드의 순서대로 경로를 매칭한다는 것이다. 즉, 광범위한 path를 코드 제일 위에 위치시키면 그것만 매칭해버린다는 것이다. 아래의 API 코드를 보자. @app.route('/users') def get_users(): ... @app.route('/users/') def get_user(user_id): ... 이 경우엔 /use..