1
1
예제로 배우는 파이토치(PyTorch)
2
- ******************************
2
+ ************************************
3
3
**Author **: `Justin Johnson <https://github.com/jcjohnson/pytorch-examples >`_
4
4
**번역 **: `박정환 <https://github.com/9bow >`_
5
5
6
6
.. Note ::
7
- 이 튜토리얼은 다소 오래된 PyTorch 튜토리얼입니다.
8
- `기본 다지기 <https://tutorials.pytorch.kr/beginner/basics/intro.html >`_ 에서
7
+ 이 튜토리얼은 다소 오래된 PyTorch 튜토리얼입니다.
8
+ `기본 다지기 <https://tutorials.pytorch.kr/beginner/basics/intro.html >`_ 에서
9
9
입문자를 위한 최신의 내용을 보실 수 있습니다.
10
10
11
11
이 튜토리얼에서는 `PyTorch <https://github.com/pytorch/pytorch >`__ 의 핵심적인 개념을
34
34
35
35
PyTorch를 소개하기 전에, 먼저 NumPy를 사용하여 신경망을 구성해보겠습니다.
36
36
37
- NumPy는 n-차원 배열 객체와 이러한 배열들을 조작하기 위한 다양한 함수들을 제공합니다. NumPy는 과학 분야의
38
- 연산을 위한 포괄적인 프레임워크(generic framework)입니다;
39
- NumPy는 연산 그래프(computation graph)나 딥러닝, 변화도(gradient)에 대해서는 알지 못합니다.
40
- 하지만 NumPy 연산을 사용하여 신경망의 순전파 단계와 역전파 단계를 직접 구현함으로써,
37
+ NumPy는 n-차원 배열 객체와 이러한 배열들을 조작하기 위한 다양한 함수들을 제공합니다. NumPy는 과학 분야의
38
+ 연산을 위한 포괄적인 프레임워크(generic framework)입니다;
39
+ NumPy는 연산 그래프(computation graph)나 딥러닝, 변화도(gradient)에 대해서는 알지 못합니다.
40
+ 하지만 NumPy 연산을 사용하여 신경망의 순전파 단계와 역전파 단계를 직접 구현함으로써,
41
41
3차 다항식이 사인(sine) 함수에 근사하도록 만들 수 있습니다:
42
42
43
43
.. includenodoc :: /beginner/examples_tensor/polynomial_numpy.py
@@ -46,12 +46,12 @@ NumPy는 연산 그래프(computation graph)나 딥러닝, 변화도(gradient)
46
46
파이토치(PyTorch): 텐서(Tensor)
47
47
-------------------------------------------------------------------------------
48
48
49
- NumPy는 훌륭한 프레임워크지만, GPU를 사용하여 수치 연산을 가속화할 수는 없습니다.
50
- 현대의 심층 신경망에서 GPU는 종종 `50배 또는 그 이상 <https://github.com/jcjohnson/cnn-benchmarks >`__ 의
49
+ NumPy는 훌륭한 프레임워크지만, GPU를 사용하여 수치 연산을 가속화할 수는 없습니다.
50
+ 현대의 심층 신경망에서 GPU는 종종 `50배 또는 그 이상 <https://github.com/jcjohnson/cnn-benchmarks >`__ 의
51
51
속도 향상을 제공하기 때문에, 안타깝게도 NumPy는 현대의 딥러닝에는 충분치 않습니다.
52
52
53
53
이번에는 PyTorch의 가장 핵심적인 개념인 **텐서(Tensor) ** 에 대해서 알아보겠습니다.
54
- PyTorch 텐서(Tensor)는 개념적으로 NumPy 배열과 동일합니다:
54
+ PyTorch 텐서(Tensor)는 개념적으로 NumPy 배열과 동일합니다:
55
55
텐서(Tensor)는 n-차원 배열이며, PyTorch는 이러한 텐서들의 연산을 위한 다양한 기능들을 제공합니다.
56
56
NumPy 배열처럼 PyTorch Tensor는 딥러닝이나 연산 그래프, 변화도는 알지 못하며, 과학적 분야의 연산을 위한 포괄적인 도구입니다.
57
57
텐서는 연산 그래프와 변화도를 추적할 수도 있지만, 과학적 연산을 위한 일반적인 도구로도 유용합니다.
@@ -71,14 +71,14 @@ Autograd
71
71
PyTorch: 텐서(Tensor)와 autograd
72
72
-------------------------------------------------------------------------------
73
73
74
- 위의 예제들에서는 신경망의 순전파 단계와 역전파 단계를 직접 구현해보았습니다.
75
- 작은 2계층(2-layer) 신경망에서는 역전파 단계를 직접 구현하는 것이 큰일이 아니지만,
74
+ 위의 예제들에서는 신경망의 순전파 단계와 역전파 단계를 직접 구현해보았습니다.
75
+ 작은 2계층(2-layer) 신경망에서는 역전파 단계를 직접 구현하는 것이 큰일이 아니지만,
76
76
복잡한 대규모 신경망에서는 매우 아슬아슬한 일일 것입니다.
77
77
78
78
다행히도, `자동 미분 <https://en.wikipedia.org/wiki/Automatic_differentiation >`__ 을
79
- 사용하여 신경망의 역전파 단계 연산을 자동화할 수 있습니다. PyTorch의 **autograd ** 패키지는 정확히
80
- 이런 기능을 제공합니다. Autograd를 사용하면, 신경망의 순전파 단계에서 **연산 그래프(computational graph) **
81
- 를 정의하게 됩니다; 이 그래프의 노드(node)는 텐서(tensor)이고, 엣지(edge)는 입력 텐서로부터 출력 텐서를
79
+ 사용하여 신경망의 역전파 단계 연산을 자동화할 수 있습니다. PyTorch의 **autograd ** 패키지는 정확히
80
+ 이런 기능을 제공합니다. Autograd를 사용하면, 신경망의 순전파 단계에서 **연산 그래프(computational graph) **
81
+ 를 정의하게 됩니다; 이 그래프의 노드(node)는 텐서(tensor)이고, 엣지(edge)는 입력 텐서로부터 출력 텐서를
82
82
만들어내는 함수가 됩니다. 이 그래프를 통해 역전파를 하게 되면 변화도를 쉽게 계산할 수 있습니다.
83
83
84
84
이는 복잡하게 들리겠지만, 실제로 사용하는 것은 매우 간단합니다. 각 텐서는 연산그래프에서 노드로 표현됩니다.
@@ -94,12 +94,12 @@ PyTorch: 새 autograd Function 정의하기
94
94
-------------------------------------------------------------------------------
95
95
96
96
내부적으로, autograd의 기본(primitive) 연산자는 실제로 텐서를 조작하는 2개의 함수입니다.
97
- **forward ** 함수는 입력 텐서로부터 출력 텐서를 계산합니다.
97
+ **forward ** 함수는 입력 텐서로부터 출력 텐서를 계산합니다.
98
98
**backward ** 함수는 어떤 스칼라 값에 대한 출력 텐서의 변화도(gradient)를 전달받고,
99
99
동일한 스칼라 값에 대한 입력 텐서의 변화도를 계산합니다.
100
100
101
- PyTorch에서 ``torch.autograd.Function `` 의 하위클래스(subclass)를 정의하고
102
- ``forward `` 와 ``backward `` 함수를 구현함으로써 사용자 정의 autograd 연산자를 손쉽게
101
+ PyTorch에서 ``torch.autograd.Function `` 의 하위클래스(subclass)를 정의하고
102
+ ``forward `` 와 ``backward `` 함수를 구현함으로써 사용자 정의 autograd 연산자를 손쉽게
103
103
정의할 수 있습니다. 그 후, 인스턴스(instance)를 생성하고 이를 함수처럼 호출하고,
104
104
입력 데이터를 갖는 텐서를 전달하는 식으로 새로운 autograd 연산자를 사용할 수 있습니다.
105
105
@@ -126,7 +126,7 @@ PyTorch: nn
126
126
신경망을 구성하는 것을 종종 연산을 **계층(layer) ** 에 배열(arrange)하는 것으로 생각하는데,
127
127
이 중 일부는 학습 도중 최적화가 될 **학습 가능한 매개변수 ** 를 갖고 있습니다.
128
128
129
- 텐서플로우(Tensorflow)에서는, `Keras <https://github.com/fchollet/keras >`__ 와
129
+ 텐서플로우(Tensorflow)에서는, `Keras <https://github.com/fchollet/keras >`__ 와
130
130
`TensorFlow-Slim <https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/slim >`__,
131
131
`TFLearn <http://tflearn.org/ >`__ 같은 패키지들이 연산 그래프를 고수준(high-level)으로 추상화(abstraction)하여
132
132
제공하므로 신경망을 구축하는데 유용합니다.
@@ -170,7 +170,7 @@ PyTorch: 사용자 정의 nn.Module
170
170
PyTorch: 제어 흐름(Control Flow) + 가중치 공유(Weight Sharing)
171
171
-------------------------------------------------------------------------------
172
172
173
- 동적 그래프와 가중치 공유의 예를 보이기 위해, 매우 이상한 모델을 구현해보겠습니다:
173
+ 동적 그래프와 가중치 공유의 예를 보이기 위해, 매우 이상한 모델을 구현해보겠습니다:
174
174
각 순전파 단계에서 3 ~ 5 사이의 임의의 숫자(random number)를 선택하여 다차항들에서 사용하고,
175
175
동일한 가중치를 여러번 재사용하여 4차항과 5차항을 계산합니다.
176
176
0 commit comments