목록전체 글 (224)
Joonas' Note
Proximal Policy Optimization (PPO, 2017) 목적 함수를 완성하기 위한 gradient 식은 아래와 같다. $$ \nabla_{\theta}J_{\theta} \cong \sum_{t=0}^{\infty} \int_{s_t,a_t,s_{t+1}}\nabla_{\theta}lnp_{\theta}(a_t|s_t)~A_t~p_{\theta}(s_t,a_t)~p(s_{t+1}|s_t,a_t)~ds_t,a_t,s_{t+1} $$ 여기서 \(A_t\)는 n-step TD error 인데, \(A_t\)의 정의에 따라서 아래와 같이 달라졌었다. $$ A_t = \begin{cases} G_t & \longrightarrow REINFORCE \\ Q(s_t) & \longrightarro..

A3C (Asynchronous A2C, 2016) 샘플 사이의 상관 관계를 비동기 업데이트로 해결 리플레이 메모리를 사용하지 않음 on-policy 개념적으로는 A2C 를 여러개 두고, 각 에이전트마다 아래와 같이 gradient를 계산해서, 그걸 글로벌 네트워크에 반영하는 방식이다. $$ Q_{(1)}(s_t,a_t)(-\sum y_i log p_i) \rightarrow gradient_{(1)} \\ Q_{(2)}(s_t,a_t)(-\sum y_i log p_i) \rightarrow gradient_{(2)} \\ \vdots $$ 배경 A2C는 샘플 간 상관 관계에 문제가 있었다 시간의 흐름에 따라, 샘플을 수집했기 때문 또한 샘플에 따라 정책(\(\pi\))이 업데이트 되고, 업데이트 된 정..

책을 읽다가 행렬식(determinant)에 대한 노트를 읽었는데, 기하학적으로 설명된 부분에 궁금한 점이 생겨서 정리해보고자 한다. 2X2 행렬 책에서는 2X2 행렬에 대해서 \(det(A)~=~a_{11}a_{22} - a_{12}a_{21}\) 을 이렇게 설명하고 있었다. 행렬 \(A~=~\begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix}\) 의 행렬식은 두 개의 열 벡터 \(\begin{pmatrix} a_{11} \\ a_{21} \end{pmatrix}\) 와 \(\begin{pmatrix} a_{12} \\ a_{22} \end{pmatrix}\) 를 두 변으로 하는 평행사변형의 면적이다. 그럼 행렬 \(\begin{pmatri..

참고한 원문 Put your Android Studio on a diet How to make a deep clean of your Android Studio & Gradle junk files to fix up the mess. engineering.backmarket.com aar 내에 있는 클래스를 자꾸 인덱싱을 못 하길래 검색하다가 찾은 방법인데, 생각보다 유용해서 블로그로 옮긴다. 참고로 위 문제는 해결 못 했다. 🤔 요약 1) "Build -> Clean Project" 로 먼저 빌드된 파일들 삭제 2) "File -> Invalidate Chaces / Restart" 로 캐시 제거 (안드로이드 스튜디오가 다시 시작되면 gradle을 다시 읽고 처리하는 데 일단은 무시) 3) .gradle ..
함수의 실행 속도를 측정하는 코드이다. 다음과 같이 함수들을 미리 선언해둔다. import time def measure(func): """ Returns milliseconds how much time takes to run given func """ start = time.time() func() end = time.time() diff = end - start return diff * 1000 def bench(func, k: int = 1, params: list = [{}], title: str = ''): pcnt = len(params) pstr = f" x {pcnt} params" if pcnt > 1 else '' print(f"[run x {k}{pstr}] {title}") t = ..

최근에 회사에서 간단하게 파이썬으로 스크립트를 작성하다가 데이터베이스를 사용해야할 일이 있었다. 간단한 목적이라 단순한 연산들만 있으면 되는데, 불필요하게 거대한 사이즈의 패키지들(SQLAlchemy, PyMongo 등)을 설치해야하는 게 불편했다. 왜냐하면 경험상 이것들은 초기에 별도로 설정해야하는 작업이 굉장히 많기 때문이다. 그래서 in-memory 여도 좋으니 간단한 설정으로 마치 json 객체처럼 사용할 수 있는 패키지가 있는 지 찾아보았는데, 이 당시에는 찾지 못했다. 개발을 꽤 마친 이후에 tinyDB 라는 아주 비슷한 동작의 패키지를 발견했다. (지금와서 보면 dict 호환성 측면에서 아주 미묘하게 다르다.) 그럼 패키지를 사용하지 않고 built-in 패키지인 json 으로 커버하자니, ..
삼바 연동은 정상적으로 되고 있었고, 서버쪽 설정도 변경이 없었다. 특히 다른 IP와 PC에서는 되는 데 한 컴퓨터에서만 유독 계속 안되고 있었다. 인터넷에 나오는 방법들은 전부 해봤는데 모두 안됐고, CMD 로 실행하니까 그나마 오류 코드라도 알 수 있었다. CMD> net use \\ /user:joona 시스템 오류 1219이(가) 생겼습니다. 동일한 사용자가 둘 이상의 사용자 이름으로 서버 또는 공유 리소스에 다중 연결할 수 없습니다. 서버나 공유 리소스에 대한 이 전 연결을 모두 끊고 다시 시도하십시오. 해결 방법은 CMD를 관리자 권한으로 실행하고, 아래 커맨드를 순서대로 입력하면 된다. sc stop netlogon sc stop sessionenv sc stop lanmanworkstati..

PyTorch 공식 문서에서 강화학습(Reinforcement Learning)의 한 예시로 DQN 튜토리얼이 있어서 살펴보기로 했다. 시간이 많이 지나서 깨달은 사실은, 한글 문서와 영어 문서의 내용과 도메인이 다르다는 것이었다. 한글 문서: https://tutorials.pytorch.kr/intermediate/reinforcement_q_learning.html 영어 문서: https://pytorch.org/tutorials/intermediate/reinforcement_q_learning.html 한글 문서의 경우에는 Cart-Pole-v0 을 기준으로 작성된 예전 내용이라서, Cart-Pole-v1로 그대로 옮기면 학습도 잘 안되고 동작 방식에도 큰 차이가 있었다. 참고로 한글 문서는 1..