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..
발단 모델을 수정하고 Alembic의 revision을 생성하려고 하는 커맨드를 입력하는 도중, env.py 에서 내 프로젝트의 app 모듈을 찾지 못 하는 ModuleNotFoundError 에러가 떴다. 원인 어떠한 이유에서 Alembic은 커맨드를 실행할 때, local "." 경로를 sys.path에 추가하지 않는데 그래서 프로젝트의 모듈을 못 찾는 것 같다. 해결 alembic.ini로 가서 아래 코드의 주석을 해제해주어 local "." 경로를 sys.path에 추가하자. (주석되어있음) prepend_sys_path = . stack overflow :alembic-modulenotfounderror-in-env-py alembic github :해당 에러에 대한 커밋
post나 put처럼 delete를 사용하는데 안돼서 당황할 때가 있다. 혹시 delete를 호출할 때 두번째 인자에 body를 넣고있지않은가? Axios는 RESTful API 방식을 지키기 위해서 delete메소드에 절대 바디를 담지않으려는 친구였다. (RESTful이 궁금하다면 찾아보자) 즉, POST나 PUT처럼 두번째 인자에 body를 담지않는다! 그래서 두 번쨰 인자로는 data option을 인자로 넣어줘야 바디로 얹혀진다. const res = await axios.delete('https://here/is/path/for/delete', { data : { id : 1} });
DIP - 의존 역전 원칙(Dependency inversion principle) 고차원 모듈은 저차원 모듈에 의존하면 안 된다. 이 두 모듈 모두 다른 추상화된 것에 의존해야 한다. 추상화된 것은 구체적인 것에 의존하면 안 된다. 구체적인 것이 추상화된 것에 의존해야 한다. 로버트 C. 마틴은 DIP에 대해 이렇게 말했다. 이것만 보면 이 말이 의존 역전 원칙이라는 용어와 잘 맞물리지 않는다. 고차원 모듈은 뭐고 저차원 모듈은 뭐지? 먼저 이것부터 알아보자. 고차원 모듈(High Level Module) : Interface/abstraction 같이 저차원 모듈을 조종하는 모듈 저차원 모듈(Low Level Module) : 고차원 모듈이 일을 할 수 있게 도와주는 작은 모듈들 예를 들어 고차원 모..
객체 지향 설계 5원칙 - SOLID SOLID란? SOLID란 용어는 로버트 C.마틴(aka Uncle Bob)가 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙으로 제시한 원칙을 마이클 페더스가 앞글자만 따서 만들어진 용어이며. 다섯가지 원칙은 다음과 같다. SRP(Single Reponsibility Principle) : 단일 책임 원칙 OCP(Open Closed Principle) : 개방 폐쇄 원칙 LSP(Liskov Substitution Principle) : 리스코프 치환 원칙 ISP(Interface Segregation Principle) : 인터페이스 분리 원칙 DIP(Dependency Inversion Principle) : 의존 역전 원칙 SOLID는 기존의 높은 응집도..
[인터넷의 재료 2탄] IP위에서 돌아가는 TCP/UDP 프로토콜 인터넷의 재료 1탄: 네트워크, IP란? 저번 시간에서는 인터넷의 정의와 네트워크, 컴퓨터와 컴퓨터가 데이터 통신을 하기 위해 만들어둔 프로토콜에 대하여 살펴보았었다. 가장 중요했던 것은 장치를 고유하게 식별할 수 있게 주소를 사용하며, 보내려는 메시지를 패킷으로 잘게 나누어 목적지에 잘 도착하도록 하는 인터넷 프로토콜에 관련된 것들이었다. 그리고 끝에서 이런 얘기를 했었다. 이러한 IP가 패킷의 모든 결과를 처리해주지 않는다고 말이다. 보내려는 패킷이 오염되고, 손실되고, 순서없이 도착했을 경우 IP가 해줄 수 있는 일은 없기때문에 IP 위에서 더 높은 수준의 프로토콜을 사용해아한다. 그 프로토콜들을 이제부터 알아보자. UDP (User..
[인터넷의 재료 1탄] IP란? Inter-network 라는 말에서 나온 인터넷은 여러 통신망을 하나로 연결하는 개념에서 출발하였으며 지금은 거대한 컴퓨터 통신망을 의미한다. 중앙에서 관리하는 사람이 없으며 누구도 소유할 수 없고 규칙을 지키는 한 모두가 접근할 수 있기 때문에 굉장히 열려있는 통신망이다. 인터넷은 서로 통신하는 방법을 정의한 protocol 규칙에 의해 네트워킹할 수 있으며 여러 계층의 protocol에 의해서 구동된다. 이 인터넷이 어떻게 작동하는지, 어떤 protocol들이 있는지 한 번 정리해보자. Computer networks 컴퓨터 네트워크는 서로 연결되어 데이터를 전송하거나 수신할 수 있는 컴퓨터 디바이스의 그룹이다. 여기서 디바이스는 컴퓨터, 태블릿, 핸드폰 등등 프로그..
OAuth(OAuth2.0)란 무엇일까? 소셜로그인이 작동하는 법 사이트에 회원가입을 하지않아도 이미 가지고 있는 아이디를 통해 로그인할 수 있게 만드는 소셜로그인. 많은 사람들이 들어봤거나 사용해봤을 것이다. 이렇게 간편한 로그인은 OAuth를 통해서 구현할 수 있다. 이 OAuth는 무엇이고 어떻게 작동하는 것인지 궁금해져서 이번 기회에 간단하게 정리해보려고한다. What is OAuth? OAuth는 Open Authorization의 줄임말로 보안 위임 엑세스(secure delegated access) 개방형 표준(open standard)이다. 현재 OAuth1.0과 OAuth2.0 두 버전이 존재한다. Open Standard 많은 사람들이 OAuth를 API라고 생각하는데 OAuth는 개방..