분류 전체보기 47

Decision - 학교선택 (MIT EECS)

마지막에 나에게 있던 선택지는 Stanford Statistics, Harvard Statistics, Princeton PACM, MIT EECS 였다. 이외의 학교는 확실히 여기에 있는 4개의 학교가 모든 부분에서 낫다고 생각했기 때문에 합격하자마자 withdraw를 하였다. 여기서 어떻게 골랐는지를 오늘 소개하고자 한다. 1. 내가 전공할 분야는 무엇인가 결국 deep learning theory / reinforcement learning theory를 한다고 하면 전공이 상관이 없을 수 있다. 하지만 주변에 내가 하는 분야를 하는 사람이 많을수록 좋을 것이라고 생각했다. 따라서 비교적 학과 인원이 적은 Stanford Statistics (10명 내외), Harvard Statistics (5명..

Application : CV

CV는 curriculum vitae, 한국어로는 CV이다. 이 글에 나의 CV도 첨부하였다. 지원할 당시에는 3장 정도의 CV가 있었지만, 지금은 더 늘어서 4장 정도이니, 지원 때랑 다른 것을 미리 이야기하도록 하겠다. 내가 생각하는 유학 서류를 교수들이 읽는 프로세스는 다음과 같다. 사실은 아니고 뇌피셜이니, 믿어도 안 믿어도 괜찮다. 하지만 내가 대학이라면 이런 식으로 (특히 컴퓨터나 AI 쪽은) 진행할 것 같다는 생각을 했다. 0. 정량적인 서류 컷을 한다. 예를 들어서, 영어 점수가 너무 낮거나 학점이 너무 낮다면 커트할 수 있다. 혹은 정말 prestige 한 학교들 (보수적인 학교들)은 자신들이 아는 학교 학부 출신이거나 석사 출신이 아니면 버릴 수도 있다. 후자는 몇몇 사례가 있다고 들어..

JAX 공부 - 쉬어가기

Getting Started 관련 문서를 전부 읽었다. 이제 Reference Documentation, Advanced JAX Tutorial들을 하나씩 자세히 볼 예정이다. 텐서 플로우 / 파이 토치 / JAX를 적당히 섞어가면서 코딩하는 것이 좋아 보인다. JAX를 공부하면서 느낀 것은 JAX 자체를 공부할 때 이 원리를 정확하게 파악해야만 한다는 것이다. JIT이라는 개념을 이해하는 것도 매우 어렵고, 이를 코딩에 적용하는 것도 어렵다. 따라서 나같이 함수형 프로그래밍이 처음인 사람들은 이게 왜 되는지 항상 고민해보고 내가 생각한 게 과연 함수형 프로그래밍 향 생각인지를 고민해야 하는 것 같다.

연구/JAX 2022.07.20

JAX 공부 12 - pjit

https://jax.readthedocs.io/en/latest/jax-101/08-pjit.html Introduction to pjit — JAX documentation jax.readthedocs.io 여러 device에서 XLA를 돌리기 위해서 있는 툴이다. 같은 프로그램을 N개의 device에서 돌리기 위해서 있고, XLA SPMD partitioner에 대해서 사용한다고 한다. Mesh로 나누게 된다. Mesh 내에서 in_axis resources, out_axis_resources를 잘 대응시켜야 한다. mesh_shape = (4, 2) devices = np.asarray(jax.devices()).reshape(*mesh_shape) # 'x', 'y' axis names are ..

연구/JAX 2022.07.20

JAX 공부 10 - Parallel Evaluation in JAX

https://jax.readthedocs.io/en/latest/jax-101/06-parallelism.html#specifying-in-axes Parallel Evaluation in JAX — JAX documentation jax.readthedocs.io 이 문서를 공부하며 작성했다 사실 기존의 gpu와 다를 건 거의 없다. 이 문서는 tpu의 적용을 이야기하는데, 기존의 jax.vmap을 jax.pmap으로 바꾼다 생각하면 된다. 차이가 나는 건, parallelized function은 SharedDeviceArray를 리턴하는데, 왜냐면 이 행렬이 parallelizm에서 전부에 공유되었기 때문이다. in_axes는 내가 헷갈리는 개념이라 다른 곳에서 레퍼를 더 가져온다. https:/..

연구/JAX 2022.07.20

JAX 공부 9 - Pytrees

https://jax.readthedocs.io/en/latest/jax-101/05.1-pytrees.html Working with Pytrees — JAX documentation jax.readthedocs.io 이 문서를 공부하며 작성하고 있다. pytree는 한마디로 모든 걸 짬뽕해둔 거라 할 수 있다. 여기부터 mlp를 training 하는 게 나오므로 코드를 잘 보도록 하자. 처음 init_mlp_parameters 는 params에 dict를 끼워 넣는 것이다. weight와 bias를 넣게 된다. import numpy as np def init_mlp_params(layer_widths): params = [] for n_in, n_out in zip(layer_widths[:-1],..

연구/JAX 2022.07.19

JAX 공부 8 - Automatic Vectorization in JAX, Automatic Differentiation in JAX

https://jax.readthedocs.io/en/latest/jax-101/03-vectorization.html Automatic Vectorization in JAX — JAX documentation jax.readthedocs.io 이 문서를 공부하면서 작성한다. jax.vmap을 이용해서 vectorized implementation을 진행한다. 이는 jax.jit과 비슷하게 automatically adding batch axes 한다. 그냥 잘 쓰면 되는 듯... jit이랑 vmap은 composable 하다고 한다. 위의 문서는 내용이 없는 듯.. https://jax.readthedocs.io/en/latest/jax-101/04-advanced-autodiff.html Advanc..

연구/JAX 2022.07.19

JAX 공부 8 - JIT in JAX

JIT을 공부하기 전에, 내가 위키에서 JIT의 정의를 가져왔다. 사실 JIT이 뭔지 정확히 감이 안 잡혔는데, 위키를 보니 감을 잡아가는 것 같다. JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다. 전통적인 입장에서 컴퓨터 프로그램을 만드는 방법은 두 가지가 있는데, 인터프리트 방식과 정적 컴파일 방식으로 나눌 수 있다. 이 중 인터프리트 방식은 실행 중 프로그래밍 언어를 읽어가면서 해당 기능에 대응하는 기계어 코드를 실행하며, 반면 정적 컴파일은 실행하기 전에 프로그램 코드를 기계어로 번역한다. JIT 컴파일러는 두 가지의 방식을 혼합한 방식으로 생각할 수 있는데, 실..

연구/JAX 2022.07.19

JAX 공부 7 - difference from numpy

https://jax.readthedocs.io/en/latest/jax-101/01-jax-basics.html JAX As Accelerated NumPy — JAX documentation jax.readthedocs.io 을 공부하면서 작성하고 있다. JAX는 함수형 프로그래밍을 하기 위해서 만들어졌다는 게 중요하다. 아... 근데 내가 직접 이 문서를 볼수록 나랑 잘 맞는 거 같다. 나는 학창 시절에도 python보다 c++ 이 더 편했다. python의 ambiguity가 나를 더 힘들게 했는데, 점점 재미가 붙는 거 같다. 아무튼.. 계속해서 설명하면 JAX를 익히는데 함수형 프로그래밍을 잘 알 필요는 없다. 사실 나도 함수형 프로그래밍을 모른다. 다만 functional programmin..

연구/JAX 2022.07.19