[JAX] Automatic Differentiation; Logiostic Regression
·
코딩/JAX
`[JAX] Automatic Differentiation; jax.grad`에서 이어지는 내용입니다.이 포스팅에서는 지난시간의 `jax.grad`에 이어 나머지 주제에 대해 이야기 해보려합니다.`jax.grad`를 사용한 계산로지스틱 회귀에서의 gradient 계산 (이번 포스팅)중첩 리스트, 튜플, 딕셔너리에 대한 미분`jax.value_and_grad`를 사용하여 함수와 그 그래디언트 평가 수치 미분과의 비교 로지스틱 회귀에서의 gradient 계산다음의 예제는 로지스틱 회귀모델에서 `jax.grad()`를 이용하여 그래디언트를 계산하는 방법을 보여줍니다. 설정은 다음과 같습니다:먼저 시그모이드 함수는 탄젠트 쌍곡함수의 변환으로 표현 하였습니다; $tanh(x)=2\sigma{(2x)}-1$key ..
[JAX] Automatic Differentiation; jax.grad
·
코딩/JAX
`[JAX] Automatic Vectorization`에 이어지는 내용입니다. 아래의 공식 문서를 정리(거의 번역)한 내용입니다.https://docs.jax.dev/en/latest/automatic-differentiation.html이 포스팅에서는 `JAX`의 자동 미분(autodiff)의 기본적인 활용법에 대해 학습합니다. `JAX`는 일반적인 자동 미분 시스템을 제공합니다. 미분의 계산은 현대 머신러닝에 있어 매우 중요한 부분이며, 튜토리얼에서는 다음과 같은 기본적인 자동 미분 주제를 다룹니다:`jax.grad`를 사용한 계산 (이번 포스팅)로지스틱 회귀에서의 gradient 계산중첩 리스트, 튜플, 딕셔너리에 대한 미분`jax.value_and_grad`를 사용하여 함수와 그 그래디언트 평가..
[JAX] Automatic Vectorization
·
코딩/JAX
`[JAX] Just-in-time compilation`에 이어지는 내용입니다. 아래의 공식문서를 공부(거의 번역)하며 기록합니다.http://docs.jax.dev/en/latest/automatic-vectorization.html이번 포스팅에는 `jax.vmap()`을 통한 벡터화에 대해 설명하겠습니다.Manual vectorization다음은 1차원 벡터 두개의 convolution을 계산하는 코드입니다:import jaximport jax.numpy as jnpx = jnp.arange(5)w = jnp.array([2., 3., 4.])def convolve(x, w): output = [] for i in range(1, len(x)-1): output.append(jnp.dot(..
[JAX] Just-in-time compilation
·
코딩/JAX
`[JAX] Quick Start`에 이어지는 내용입니다. 아래의 공식문서를 공부(거의 번역)한 내용입니다.https://docs.jax.dev/en/latest/jit-compilation.html Just-in-time (JIT)이 포스팅에서는 `JAX`가 어떻게 동작하고, 어떤 방식으로 최적화되는지를 살펴보겠습니다. `jax.jit()` 함수는 파이썬 함수를 JIT 컴파일이 가능하도록 변환합니다.더보기참고로 JIT은 인터프리터 언어인 파이썬 코드의 실행을 컴파일 방식으로 최적화하여 성능을 향상시킵니다. 예를 들어, 컴파일 언어인 C는 코드를 기계어로 컴파일한 후 실행 파일(.exe)로 만들어 실행합니다. 이렇게 생성된 실행 파일은 매우 빠른 실행 속도를 보입니다. `jax.jit()` 또한 이와 유..
[Function] 순수 함수
·
코딩/노트
`순수함수(pure function)`는 부작용(side-effect)이 없는 함수로, 함수 외부의 상태에 영향을 끼치지 않는 함수를 의미합니다. 구체적으로는 입력이 같으면 출력도 항상 같아야합니다. 예를들어, 아래는 리스트에 새로운 원소를 추가하는 함수입니다.def add_item(lst, item): lst.append(item) return lstmy_list = [1, 2, 3]add_item(my_list, 4)my_list>>> [1, 2, 3, 4]이 경우에는 함수 외부의 변수가 mutate됩니다. 순수하지 못한 함수죠. 이런 경우 원치 않는 부작용(side-effect)이 있다고 할 수 있습니다. def add_item_pure(lst, item): return lst + ..
[Python] Pickle
·
코딩/노트
Pickle`Python`으로 작업을 하다보면, 종종 저장하기 애매한 `object`가 있습니다. 예를들어, 딕셔너리 정보를 저장하려 할 때, 데이터프레임으로 바꾸어 `.csv`로 저장해야 할 때가 그렇습니다. 이때 주로 사용하는 저장 방식이 `Pickle` 입니다. 이 모듈을 사용하면 특정 자료를 객체 구조 그대로 유지하며 저장 및 불러오기가 가능합니다.  저장하는 과정을 `pickling`(또는 `serialization`, `marshalling` ...), 반대로 불러오는 과정을 `unpickling`이라고 합니다. 저장 과정이 `seialization` 직렬화 라고 불리는 이유는 오브젝트의 정보를 `Byte Stream`(정보를 연속적인 `0`과 `1`로 이진화 시켜 저장)으로 저장하기 때문입니..