import torch
자, 오늘은 파이토치 첫 번째 글이다. 이번 글에서는 간단하게 소개하는 시간을 가져보고자 한다.
우선, Pytorch란 Facebook (현 Meta)에서 개발한 프레임워크로, 이전의 Torch라고 하는 프레임워크를 Python으로 접근 가능하게 변경하면서 앞에 'Py'란 이름을 붙였다.
0.1 버전을 시작으로 하여 현재 2.0버전까지 출시되었다.
Pytorch의 정의를 한 줄로 이야기하자면 다음과 같다.
'GPU 가속이 적용되는 파이썬으로 조작 가능한 Tensor와 동적 신경망 구축이 가능한 프레임워크'
자, 그렇다면 여기서 우리는 'Tensor'와 '동적 계산 그래프'라는 것을 알고 가야 한다.
우선, Tensor는 다음 글에서 더 자세하게 이야기하겠지만, 여기서는 간단하게 '다차원 배열'이라고 정의하자.
대표적인 예로 넘파이의 ndarray가 있다.
신경망 모델을 우리가 데이터를 활용해서 학습하는 데는 무수히 많은 연산들이 이뤄진다. 이 연산들은 전부 '텐서'를 활용해서 이뤄지는 것이고 결국 데이터, 모델의 파라미터는 전부 텐서라는 형태를 하고 있다.
또 파이토치의 중요한 특징은 '동적 계산 그래프' (Dynamic computational graph)가 있다.
이 글은 딥러닝에 대해서는 공부해보았다는 가정 하에 작성되므로, 딥러닝 개념을 별도로 정리하진 않고 알고 있다는 가정하에 설명하겠다.
우리가 모델 학습을 진행할 때는 여러 번의 epoch을 돌리는데 이때마다 네트워크 변경이 가능한 신경망을 동적 계산 그래프라고 한다. 즉, 학습 도중에 은닉층을 추가하거나 제거하는 등의 모델 조작이 가능한 것이다.
연산 그래프도 마찬가지로 Define-by-run 방식으로 이뤄지는데, 이는 연산 그래프를 만듦과 동시에 값이 할당되는 방식이다. 즉, 연산 그래프가 정의됨과 동시에 값도 초기화되면서 연산이 이뤄지기 때문에 연산 그래프와 연산을 별도로 분리해서 생각할 필요가 없다.
또한 파이토치는 내부적으로 자동 미분 엔진을 가지고 있다. 이를 우리는 Automatic differentiation이라고 한다.
신경망은 복잡한 합성함수로 표현할 수 있고, 만약 우리가 loss value부터 시작해서 맨 첫 은닉층 (hidden layer)의 파라미터까지 미분이 이뤄지는 연산을 직접 다 코드로 구현해야 한다면, 상당히 복잡한 일이 될 것이다.
특히 요즘처럼 상당히 크기가 큰 신경망을 다루는 상황 속에서 이는 엄청난 노가다 작업일 것이다.
하지만 파이토치에서는 이를 코드 한 줄로 이뤄지도록 내부적으로 구현해놓았다.
우리는 그저 아래 코드 한 줄이면 ${\partial \over \partial w}L$을 계산할 수 있다.
loss.backward()
다음으로 파이토치는 GPU 가속이 적용된다. 즉, Tensor를 우리는 GPU 메모리에 저장하고, GPU 연산장치를 활용해 텐서 사이의 연산들이 이뤄지도록 하는 것이 가능하다.
마지막으로 파이토치에는 사전 학습된 많은 신경망 모델들이 내부적으로 구현돼 있고, 많이 사용되는 데이터셋, 학습 과정을 모니터링할 수 있는 다양한 시각화 도구들을 활용할 수 있다.
파이토치는 이미 딥러닝 프레임워크의 대세로 자리잡았다.
앞으로 우리는 본 시리즈 'Deep dive into pytorch'에서 파이토치에 대한 기본 문법들을 하나하나 살펴나가고자 한다.
'Deep dive into Pytorch' 카테고리의 다른 글
Pytorch 5 : Save and Load (0) | 2023.07.17 |
---|---|
Pytorch 4 : Training (1) | 2023.07.16 |
Pytorch 3 : Neural network 구현 (0) | 2023.07.15 |
Pytorch 2 (0) | 2023.07.11 |
Pytorch 1. Tensor (0) | 2023.07.06 |
댓글