[AI Tech] Week 1. PyTorch

2024. 8. 7. 20:46AI Tech

학습 내용

contiguity-like condition

tensor를 slicing을 사용하거나 tensor의 축/모양을 바꿔 새로운 tensor를 생성할 때, contiguity-like condition 조건에 따라 메모리 추가 할당 여부를 결정한다. 다시 말해, 새로운 `tensor`의 element를 따로 저장하지 않는다는 의미다.
참고로, tensor의 모든 element가 일정한 stride(=간격)으로 메모리에 할당된 경우 contiguity-like condition을 만족한다고 한다.
이처럼, PyTorch는 새로운 `tensor`를 생성할 때 함부로 메모리를 추가 할당하지 않는다.

torch.view vs torch.reshape

두 함수 모두 기존 `tensor`의 모양을 바꿔 새로운 `tensor`를 생성하는 함수다.

 

이때, `torch.view`는 contiguity-like condition을 만족해야 사용 가능하다.

새로운 `tensor`의 element를 위해 메모리를 추가 할당하지 않기 때문이다.

 

`torch.reshape`은 contiguity-like condition 여부와 상관없이 사용 가능하다.

기존 `tensor`가 contiguity-like condition을 만족하지 않을 경우 새로운 `tensor`의 element를 위해 메모리를 추가 할당하기 때문에, 예상치 못한 엄청난 메모리 할당을 초래할 수 있다.

 

결론, 메모리 관리 측면에서는 `torch.view`가 보다 안전한 선택이 될 것이다.

torch.expand VS torch.repeat

두 함수 모두 기존 `tensor`를 반복해 크기를 확장하여 새로운 `tensor`를 생성하는 함수다.

 

이때, `torch.expand`는 `tensor`의 차원 중 일부의 크기가 1이여야 사용 가능하며,

새로운 `tensor`의 element를 위해 메모리를 추가 할당하지 않는다는 장점이 있다.

 

반면, `torch.repeat`는 아무런 조건 없이 사용 가능하지만, 

새로운 `tensor`의 element를 위해 메모리를 추가 할당해야 한다는 단점이 있다.

 

결론, 메모리 효율 측면에서는 `torch.expand`가 현명한 선택이다.

모델 학습 시 사용되는 핵심 함수

- `optimizer.zero_grad()`: 이전 step에서 계산된 기울기 초기화

- `loss.backward()`: 현 step의 손실값에 대한 기울기 계산

- `optimizer.step()`: 기울기로 파라미터 업데이트

데이터 표준화 (StandardScaler)

입력값과 출력값 간의 차이가 클 경우 손실값이 매우 커질 수 있다.

이 경우, 데이터 표준화(mean=1, var=1)를 통해 위 문제를 해결할 수 있다.

 

- `StandardScaler.fit_transform()`: fit 단계에서 입력의 통계량(mean, var)을 계산하고 transform 단계에서 계산된 통계량으로 데이터를 표준화한다.

- `StandardScaler.transform()`: 이전에 계산된 통계량으로 데이터를 표준화한다.

- `StandardScaler.inverse_transform()`: 표준화된 데이터를 원본으로 복구하는 과정이다.

 

일반적으로 학습할 때 `fit_transform()`를 사용하고, 테스트 혹은 검증할 때, `transform()`를 사용한다.

학습 데이터와 동일한 기준으로 테스트 혹은 검증을 해야 하기 때문이다.

 

참고로, 위 3가지 함수 모두 `[n_samples, n_features]`의 행렬을 입력으로 받는다.

Dataset & DataLoader

`Dataset`은 데이터 정의 및 전처리를 수행하는 클래스다.

- `__init__(self, ...)`: 데이터 불러오고 필요한 전처리 과정을 수행하는 함수

- `__len__(self, )`: 데이터 크기 반환 함수

- `__getitem__(self, idx)`: 특정 index에 해당되는 데이터 반환 함수

 

`DataLoader`는 데이터 배치 처리 및 shuffle을 수행하는 클래스다.

`DataLoader(dataset, batch_size, shuffle)`

- `dataset`: Dataset 인스턴스

- `batch_size`: 배치 크기

- `shuffle`: 섞을지 말지 여부(True/False)


피어세션 정리

첫 주인 만큼 아직까지 피어세션이 원활히 진행되지는 않는다. 해당 부분은 개선해야 할 부분이다.

개인적으로 제가 피어세션에서 개선해야할 부분은 바로 QnA을 하는 방식이다.

질문을 잘해야 답변도 품질도 올라가는 만큼, 질문을 잘하도록 노력해야 필요성을 느꼈다.

그리고, 질문 뿐만 아니라 답변도 잘해야 한다고 생각했다. 애매한 답변은 질문자에게 상당한 혼란을 야기할 수 있기 때문이다.

과제 수행 과정 및 결과

PyTorch는 이전에 다뤄본 경험이 있었기에 큰 어려움 없이 수행할 수 있었다. 물론, 헷갈리는 몇 가지 부분이 있었지만, 이는 피어세션 QnA를 통해 해소되었다.

학습 회고

이번 첫 주는 부스트캠프에 적응하는 기간으로 임했다. 팀 모각공을 통해 느슨해진 정신을 바로 잡아 코어타임 때 강좌와 과제를 끝마칠 수 있었다. 그 뿐만 아니라, 부스트캠프 생활 적응에 많은 도움을 받았다.

'AI Tech' 카테고리의 다른 글

데이터 분석 (data analysis)  (0) 2024.09.16