목록AI (32)
Joonas' Note
한국 노래 가사(1964~2023년) 데이터 분석해보기 배경 노래를 꽤 다양하게 듣는 편인데 최근 한국 노래들에 이지리스닝류가 많아지기도 했고, 한국어 가사의 비중이 점점 줄어들고 있는 등 한국 노래 가사의 트렌드가 궁금해져서 한번 데이터 blog.joonas.io 오랜 시간에 걸쳐서 음원 스트리밍 플랫폼에 추천이 많이 도입되었다. 특정 노래를 기반으로 추천하는 건 아주 오래 전부터 이미 있었지만 (최소 2010년 iTunes 부터), 근래에는 주제/테마별로 묶은 플레이리스트를 추천하기도 한다. 정밀한 그룹화를 하려면 음원의 특성(파형, bpm, 장르, 가수, 연도 등)까지도 고려해야겠지만, 이번에는 자연어 처리에 집중하고 싶은 만큼 가사 내용을 토대로 주제별로 나눌 수 있는 지 확인해보고자 한다. 데이..
Logit logit 함수를 이해하려면 odds 를 알아야한다. logit 함수는 \( logit(p) = log(odds) \) 이기 때문이다. Odds odds 는 어떤 사건이 발생할 확률과 발생하지 않을 확률을 비교한 값이다. 일반적으로는 성공 확률을 실패 확률로 나누어서 계산한다고 한다. $$ odds = \frac{p}{1-p} $$ 여기에 로그를 씌운 함수를 logit function 이라고 부른다. $$ logit(p) = log(odds) = log(\frac{p}{1-p}) $$ 이 logit function 을 x=[0, 1] 에 대해서 그래프를 그려보면 아래와 같이 생겼다. Sigmoid sigmoid 함수는 logit function의 역함수이다. 즉, x와 y를 뒤집은 그래프라는 ..
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..
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..
(이전글 작성 중) 논문: https://arxiv.org/pdf/1703.10593.pdf 논문 저자 PyTorch 구현체: https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix/ CycleGAN Image-to-Image Translation에 대한 논문 중 pix2pix를 기반으로 나온 이후의 논문이다. (pix2pix는 작성중) 그러다보니, Discriminator는 PatchGAN을 쓰고, Generator로는 LSGAN을 사용하고 있다고 한다. pix2pix는 데이터 셋에서 변환하려는 두 이미지 쌍을 pair하게 가지고 있어야했지만, CycleGAN에서는 unpair한 데이터 셋 A, B를 주어도 잘 변환하는 점이 특징이다. 즉, 실제 사진을 모네..
이전 글 - [딥러닝 일지] WGAN (Wasserstein GAN) WGAN-GP 논문: https://arxiv.org/abs/1704.00028 앞선 WGAN에서 애매하게 넘어간 것이 있다. 바로 weight clipping 이다. 얼마만큼의 weight로 clipping을 제한할 것인가는 매직 넘버였다. 논문에서는 [-0.01, 0.01]을 사용했지만, 대부분의 가중치들이 양쪽 끝에 걸린 것을 볼 수 있다. Gradient penalty는 weight clipping처럼 한 쪽으로 몰려있지 않고 가중치가 고르게 퍼져있다. 변경 사항으로는, loss function을 gradient penalty를 계산해서 새로 정의한 것과, 판별자 모델에서 배치 정규화(Batch normalization) 층이 ..