전체 글
-
리스트 컴프리헨션 사용시 주의점Programming/Python 2022. 8. 18. 15:10
강화학습 코드를 작성하다가 정말 작은 실수 때문에 3시간을 날려서 기록으로 남겨둔다. 테이블 기반의 강화학습 코드를 작성할 때 주의해야할 것은 리스트의 얕은 복사와 깊은 복사 문제이다. # 얕은 복사 action_value = [0 for _ in range(5)] value_table = [action_value for _ in range(5)] value_table[0][0] = 1 print(value_table) 위와 같이 코드를 작성하면 결과가 아래와 같이 출력된다. [[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]] 왜 일까? value_table[0]의 원소들은 모두 action_value를..
-
[Ray] - Introduction to RayProgramming 2022. 8. 18. 09:49
What is a Ray? Ray는 파이썬을 위한 분산 강화학습 프레임워크입니다. 오픈소스이며 저수준 API를 통해 파이썬으로 작성된 프로그램을 쉽게 병렬처리할 수 있다. 고수준 API에서는 머신러닝을 모델을 위한 분산학습, 하이퍼파라미터 튜닝, 강화학습 알고리즘등을 제공하고 있습니다. 먼저 Ray를 설치해보겠습니다. 리눅스나 맥 환경에서 사용하는 것을 추천드립니다. (window는 베타버전) pip install -U "ray[tune, rllib, serve]" 이후, 주피터 노트북 파일을 만들어서 import하고 init 함수를 통해 ray를 실행시켜봅시다. import ray ray.init() 그러면 위와 같은 Dashboard를 띄울 수 있습니다. 현재 시스템에서 리소스를 얼마나 사용하고 있는..
-
[Python] 파이썬 Closure 및 Decorator 설명Programming/Python 2022. 8. 12. 15:56
데코레이터를 이해하려면 먼저 클로저를 알아야 합니다. 클로저를 이해하려면 파이썬에서 변수 범위가 어떻게 작동하는지 알고 있어야 합니다. 파이썬 변수 범위부터 살펴보겠습니다. 파이썬의 변수 범위 규칙 전역변수는 프로그램의 어떤 부분에서든 접근 가능한 변수입니다. 보통 함수 외부에 정의하거나 함수 내부에서 global 키워드를 통해 전역변수를 조작합니다. b = 6 # 전역변수 def my_func_local(): a = 3 # 지역변수 b = 3 print(f"local a: {a}") print(f"local b: {b}") def my_func_global(): global b # b라는 지역변수를 전역변수로 사용한다는 의미 a = 3 # 지역변수 b = 3 print(f"local a: {a}") p..
-
[Python] __all__ 의 역할Programming/Python 2022. 8. 9. 16:42
__all__ 변수의 역할 어떤 라이브러리 내의 패키지를 분석할 때 보통 __init__.py 를 살펴보게 된다. 이때, __all__ 이라는 변수에 다른 패키지에 속한 함수나 클래스의 이름들을 리스트로 만들어 할당하는 것을 볼 수 있다. 이 변수의 역할은 다른 파일에서 특정 패키지를 `from lib import *`와 같이 쓸 때, *에 들어갈 변수, 함수, 클래스들을 선언하는 것이다. +-- folder | +-- all.py | +-- points.py # ex) points.py __all__ = ['Points', 'add'] class Points: pt1 = (1, 2) pt2 = (-1, -2) def add(pt1, pt2): x = pt1[0] + pt2[0] y = pt2[1] + ..
-
Fast Speech 2 ReviewPapers 2022. 7. 26. 14:18
Key Point ground truth target에 대해서 모델을 직접 학습시킨다. (텍스트로부터 음성을 직접 생성하고 병렬적으로 처리함) pitch, energy, duration 같은 다양한 정보들을 도입하고 조건부로 입력 받아 음성을 생성한다. (여러 모듈들을 사용해서 위의 information을 추출하고 조건부로 사용) Fastspeech 1 모델보다 학습속도와 추론 속도가 빠르다. 음성 품질을 개선했다. (Fastspeech 2s 모델에서는 멜스펙토그램을 사용하지 않는다.) 1. Motivation 왜 Fastspeech 2 모델이 나왔을까요? TTS는 one-to-many mapping 문제입니다. 왜냐하면 하나의 단어에 대해서 매우 많은 경우의 수에 대한 음성이 대응되기 때문입니다. '안..
-
머신러닝에 필요한 벡터, 행렬 미분 개념정리Math 2022. 7. 26. 12:12
머신러닝을 공부하면서 벡터의 미분과 행렬의 미분이 많이 나와서 핵심적인 내용만 정리해보았습니다. 본 글에서는 분자표기법(Numerator-layout notation)을 사용합니다. numerator : 분자 denominator : 분모 $A^ \prime$ 스칼라 함수의 미분 입력이 스칼라이고 출력이 스칼라인 함수 정의역 $X \in \mathbb R$ 에 속하는 스칼라 원소를 공역 $Y \in \mathbb R$ 에 속하는 스칼라로 대응시키는 함수를 $f : \mathbb R \rightarrow \mathbb R$ 이라고 하자. 이 함수에 대한 미분은 다음과 같이 정의된다. $$ {dy \over dx} = \lim_{h \rightarrow 0} {f(x+h) - f(x) \over h} = f..
-
[PRML] 8.4.4 Sum-Product AlgorithmMath/Pattern Recognition & Machine Learning 2021. 12. 27. 14:57
그래프에서 추론문제는 몇몇 노드들이 관측되었을 대, 하나의 노드 또는 여러 개의 노드들의 사후 분포를 계산하는 것이다. 인자 그래프를 바탕으로 트리 구조 그래프 추론 문제를 해결하는 알고리즘이 합-곱 알고리즘이다. 이 파트에서 가정은 다음과 같다. 모델에 존재하는 모든 랜덤변수들은 이산(discrete) 랜덤변수이다. 따라서 주변화(marginalize)는 합산 시그마 기호를 통해 표현하게 된다. 먼저 합의 법칙에서 주변확률을 구하기 위해서는 다음과 같이 결합확률을 특정 랜덤변수에 대해서 주변화를 진행했다. $$ p(x) = \sum_y p(x, y) $$ 그래프 상의 랜덤변수들이 $\mathbf x = \{x_1, x_2, x_3, ..., x_n\}$으로 주어졌을 때, 합의 법칙을 활용해서 그래프 상..
-
[PRML] 8.4.3 Factor Graph카테고리 없음 2021. 12. 27. 14:26
[PRML] 8.4.3 인자 그래프 질문거리 인자란 무엇인가? 인자그래프란 무엇인가? 인자그래프는 왜 써야할까? 인자 그래프를 쓰면 뭐가 좋은가? 앞의 8.1 베이지안 네트워크와 8.3 마르코프 네트워크들은 방향성/비방향성 그래프를 표현하는 수단이었다. 베이지안 네트워크에서는 다음과 같이 그래프를 표현했었다. $$ \begin{equation} \label{eq:bs_graph} p(\mathbf x) = \prod^K_{k=1}p(x_k|pa_k) \end{equation} \tag {1} $$ 위 식은 전체 그래프에 대한 결합확률분포를 k번째 노드의 부모들이 조건으로 주어졌을 때, k노드에 대한 조건부확률들의 곱으로 표현한다. 마르코프 네트워크에서는 포텐셜 함수를 도입해서 다음과 같이 그래프를 표현했..