낱말사전
139개 · 본문에서 밑줄 친 말을 누르면 여기 뜻이 떠요.
- 변수Variable
- 값에 이름표를 붙여 담아 두는 상자예요. x = 3이라고 쓰면 x라는 상자에 3이 들어가요.
- 리스트List
- 값 여러 개를 줄 세워 담는 목록이에요. [10, 20, 30]처럼 대괄호로 써요.
- 인덱스Index
- 목록에서 몇 번째인지 가리키는 번호예요. 파이썬은 첫 번째가 0번이에요.
- 슬라이싱Slicing
- 목록이나 텐서의 일부를 잘라 꺼내는 거예요. a[1:4]는 1번부터 3번까지예요. 끝 번호는 포함하지 않아요.
- for 문For loop
- 같은 일을 여러 번 되풀이하는 문장이에요. 학습할 때 batch를 하나씩 꺼내며 도는 데 써요.
- rangerange
- 숫자 줄을 만들어 주는 함수예요. range(4)는 0, 1, 2, 3이고 끝 숫자는 안 들어가요. range(0, 10, 4)는 0, 4, 8이에요.
- 함수Function
- 자주 쓰는 계산에 이름을 붙여 둔 묶음이에요. def로 만들고, 부를 때마다 같은 일을 해요.
- 매개변수Parameter / Argument
- 함수에게 넘겨주는 재료예요. add(1, 2)에서 1과 2가 재료예요.
- 기본값Default value
- 재료를 안 줬을 때 대신 쓰는 값이에요. def add(a, b=10)에서 b를 안 주면 10이 들어가요.
- returnreturn
- 함수가 계산한 결과를 밖으로 돌려주는 키워드예요. forward도 마지막에 return으로 예측값을 돌려줘요.
- f-stringf-string
- 문자열 앞에 f를 붙이면 중괄호 안의 변수를 값으로 바꿔 줘요. f"{a}"는 a의 값이 들어간 글자가 돼요.
- importimport
- 남이 만들어 둔 도구 상자를 가져다 쓰겠다는 선언이에요. import torch를 하면 torch의 기능을 쓸 수 있어요.
- 들여쓰기Indentation
- 줄 앞을 띄워서 '이 줄은 위 문장 안에 속해요'라고 알리는 파이썬의 규칙이에요. for나 def 안쪽 줄은 4칸 들여 써요.
- 조건문Conditional
- 조건이 맞을 때만 실행하는 문장이에요. if amount <= self.balance:처럼 써요.
- 에러Error / Exception
- 코드가 잘못되어 멈출 때 나오는 메시지예요. 시험에서는 '어떤 에러가 나는지'를 묻기도 해요.
- NumPyNumPy
- 숫자 계산을 빠르게 해 주는 파이썬 도구예요. PyTorch의 텐서와 아주 비슷하게 생겼어요.
- Jupyter NotebookJupyter Notebook
- 코드를 한 칸(셀)씩 실행하며 결과를 바로 보는 공책 같은 프로그램이에요. 파일 이름이 .ipynb로 끝나요.
- 클래스Class
- 물건을 만드는 설계도예요. 붕어빵 틀이 클래스, 구워진 붕어빵이 인스턴스예요.
- 인스턴스Instance / Object
- 클래스(설계도)로 실제로 만든 물건이에요. 같은 클래스에서 만든 인스턴스들은 각자 자기 값을 따로 가져요.
- 속성Attribute
- 인스턴스가 기억하는 데이터예요. self.name, self.score처럼 self에 붙여 저장해요.
- 메서드Method
- 클래스 안에 만든 함수, 즉 인스턴스가 하는 동작이에요. introduce(), forward() 같은 것들이에요.
- selfself
- 메서드 안에서 '지금 이 인스턴스 자신'을 가리키는 말이에요. 만들 때는 쓰지만 부를 때는 직접 넘기지 않아요.
- __init____init__ (constructor)
- 인스턴스를 만들 때 자동으로 한 번 실행되어 처음 상태를 저장하는 메서드예요.
- 상속Inheritance
- 부모 클래스의 속성과 메서드를 자식 클래스가 물려받는 거예요. class Dog(Animal)처럼 괄호에 부모를 써요.
- 부모 클래스Parent class
- 물려주는 쪽 클래스예요. 여러 자식이 공통으로 쓰는 기능을 여기에 모아 둬요.
- 자식 클래스Child class
- 물려받는 쪽 클래스예요. 부모에게 없는 자기만의 기능을 더 만들 수 있어요.
- 오버라이딩Overriding
- 자식이 부모와 같은 이름의 메서드를 다시 만들어 덮어쓰는 거예요. 이름이 같으면 자식 것이 먼저 실행돼요.
- super()super()
- 부모 클래스를 가리키는 말이에요. super().__init__()으로 부모의 초기화를 직접 불러요. 자식이 __init__을 다시 쓰면 꼭 필요해요.
- __call____call__ (callable)
- 이 메서드가 있으면 인스턴스를 f(3)처럼 함수 부르듯 쓸 수 있어요. nn.Module이 이걸 이미 가지고 있어요.
- 클래스 속성Class attribute
- 인스턴스마다가 아니라 클래스에 하나만 붙은 공통 값이에요. 클래스에서 바꾸면 모든 인스턴스에 반영돼요.
- 인스턴스 속성Instance attribute
- self.name = name처럼 인스턴스마다 따로 가지는 값이에요. 한 인스턴스를 바꿔도 다른 것은 그대로예요.
- TensorTensor
- 숫자를 담는 다차원 칸이에요. PyTorch에서 데이터와 weight를 담는 기본 그릇이에요. 엑셀 표의 확장판이라고 생각하면 돼요.
- 스칼라Scalar
- 숫자 하나예요. shape이 ()이고 .item()으로 파이썬 숫자로 꺼낼 수 있어요.
- 벡터Vector
- 숫자를 한 줄로 늘어놓은 거예요. shape이 (3,)이면 원소 3개짜리예요.
- 행렬Matrix
- 숫자를 가로세로 표로 놓은 거예요. shape (2, 3)이면 2행 3열이에요.
- shapeShape
- 텐서의 각 차원 길이예요. (4, 3)은 4행 3열, 전체 원소는 12개예요. 에러가 나면 제일 먼저 확인해요.
- dtypeData type
- 원소의 종류예요. 정수는 torch.int64, 소수는 torch.float32가 기본이에요.
- deviceDevice
- 텐서가 놓인 곳이에요. cpu 또는 cuda(GPU)예요. 계산하려는 텐서끼리 같은 곳에 있어야 해요.
- ndimNumber of dimensions
- 차원이 몇 개인지예요. shape (2, 3, 4)면 ndim은 3이에요.
- numelNumber of elements
- 전체 원소 개수예요. shape (2, 3, 4)면 2×3×4 = 24예요.
- itemitem()
- 원소가 하나뿐인 텐서에서 파이썬 숫자만 꺼내는 함수예요.
- arangearange
- 0, 1, 2, ...처럼 일정하게 늘어나는 숫자를 만들어요. torch.arange(5)는 0부터 4까지예요.
- zeroszeros / ones
- 모든 칸을 0 또는 1로 채운 텐서를 만들어요. torch.zeros(2, 3)은 2행 3열의 0 표예요.
- randnrandn
- 평균 0인 정규분포 난수로 채운 텐서를 만들어요. weight 처음 값을 만들 때 써요.
- manual_seedmanual_seed
- 난수를 항상 같은 순서로 나오게 고정해요. 그래야 실행할 때마다 결과를 같은 조건에서 비교할 수 있어요.
- reshapereshape / view
- 원소 수는 그대로 두고 모양만 바꿔요. reshape(3, -1)에서 -1은 알아서 계산해 달라는 뜻이에요. view는 메모리를 공유하는 대신 조건이 까다로워요.
- squeezesqueeze
- 크기가 1인 차원을 지워요. (1, 3, 1)은 (3,)이 돼요. 크기 1이 아닌 차원은 그대로 둬요.
- unsqueezeunsqueeze
- 원하는 위치에 크기 1인 차원을 끼워 넣어요. 이미지 (28, 28)에 unsqueeze(0)을 하면 (1, 28, 28)이에요.
- catcat
- 이미 있는 차원을 따라 이어 붙여요. (2, 3) 두 개를 dim=0으로 cat하면 (4, 3)이고 차원 수는 그대로예요.
- stackstack
- 새 차원을 만들어서 쌓아요. (2, 3) 두 개를 stack하면 (2, 2, 3)이 돼요. 차원 수가 하나 늘어요.
- 브로드캐스팅Broadcasting
- 모양이 다른 텐서끼리 계산할 때 작은 쪽을 자동으로 늘려 맞춰 주는 기능이에요. 오른쪽 끝부터 비교해서 같거나 1이거나 없어야 해요.
- 행렬 곱Matrix multiplication
- 행과 열을 곱해 더하는 계산이에요. (4, 3) @ (3, 2)는 (4, 2)가 돼요. *는 같은 자리끼리 곱하는 다른 계산이에요.
- 원소별 연산Element-wise operation
- 같은 자리의 원소끼리 계산하는 거예요. a * b가 이 방식이에요.
- dimdim
- 어느 방향으로 합칠지 정해요. dim=0은 세로로(열마다), dim=1은 가로로(행마다) 합쳐요.
- 불리언 인덱싱Boolean indexing
- 조건으로 원하는 값만 뽑아요. x[x > 5]는 5보다 큰 값만 꺼내요.
- (N, C, H, W)Batch, Channel, Height, Width
- 이미지 묶음의 모양 약속이에요. 몇 장(N), 채널 수(C), 높이(H), 너비(W) 순서예요. (8, 1, 28, 28)은 28×28 흑백 8장이에요.
- flattenFlatten
- 이미지 같은 여러 차원을 한 줄로 쭉 펴는 거예요. flatten(start_dim=1)이면 배치 차원은 두고 나머지를 펴요.
- from_numpyfrom_numpy
- NumPy 배열과 텐서를 바꾸는 방법이에요. from_numpy와 .numpy()는 메모리를 같이 써서 한쪽을 바꾸면 다른 쪽도 바뀌어요. torch.tensor(arr)는 복사라 독립이에요.
- 메모리 공유Memory sharing
- 두 변수가 같은 저장 공간을 가리키는 거예요. 한쪽을 바꾸면 다른 쪽도 같이 바뀌어서 버그의 원인이 되기도 해요.
- CPUCentral Processing Unit
- 컴퓨터의 두뇌예요. 복잡하고 다양한 일을 순서대로 처리하는 데 강해요.
- GPUGraphics Processing Unit
- 단순한 계산을 한꺼번에 아주 많이 하는 데 강한 장치예요. 딥러닝의 행렬 계산을 빠르게 해 줘요.
- CUDACUDA
- 엔비디아 GPU로 계산하게 해 주는 기술이에요. PyTorch에서 device를 'cuda'라고 쓰면 GPU를 뜻해요.
- is_availablecuda.is_available()
- 지금 컴퓨터에서 GPU를 쓸 수 있는지 True/False로 알려 줘요. CUDA를 깔기만 했다고 True가 되는 건 아니에요.
- .to(device).to(device)
- 텐서나 모델을 CPU나 GPU로 옮겨요. 옮겨진 새 텐서를 돌려주므로 x = x.to(device)처럼 다시 저장해야 해요.
- ColabGoogle Colaboratory
- 구글이 무료로 빌려주는 온라인 노트북이에요. 런타임 유형을 T4 GPU로 바꾸면 GPU를 쓸 수 있어요.
- 런타임Runtime
- Colab에서 코드를 실제로 돌리는 컴퓨터예요. 메뉴에서 하드웨어 가속기를 T4 GPU로 골라요.
- nn.Moduletorch.nn.Module
- PyTorch 모델의 부모 클래스예요. 이걸 상속하고 __init__과 forward만 만들면 학습에 필요한 나머지 기능은 알아서 붙어요.
- nn.Lineartorch.nn.Linear
- 입력에 weight를 곱하고 bias를 더하는 층이에요. nn.Linear(3, 2)는 숫자 3개를 받아 2개를 내놓아요.
- weightWeight
- 모델이 학습으로 고쳐 가는 숫자예요. 각 입력이 결과에 얼마나 영향을 줄지 정해요. Linear의 weight는 (출력, 입력) 모양이에요.
- biasBias
- 계산 결과에 더해 주는 보정 숫자예요. 출력 개수만큼 있어요. Linear(3, 2)의 bias는 (2,)예요.
- forwardForward propagation
- 입력에서 예측값까지 계산해 나가는 과정이에요. 모델 클래스에서 forward 함수에 이 흐름을 써요.
- model(x)model(x)
- 모델을 함수처럼 부르는 방법이에요. 내부에서 nn.Module의 __call__이 처리한 뒤 forward를 실행해요. forward를 직접 부르지 않아요.
- layerLayer
- 계산 한 단계를 맡은 층이에요. Linear 층, ReLU 층 등을 겹쳐 쌓아 모델을 만들어요.
- featureFeature
- 모델에 넣는 입력 숫자 하나하나예요. 학생 정보 5가지를 쓰면 feature가 5개예요.
- in_features / out_featuresin_features / out_features
- Linear가 받는 숫자 개수와 내놓는 숫자 개수예요. 입력의 마지막 차원이 in_features와 같아야 해요.
- ReLURectified Linear Unit
- 음수는 0으로, 양수는 그대로 두는 규칙이에요. 학습할 값이 없고 shape도 안 바뀌어요.
- nn.Sequentialtorch.nn.Sequential
- 층을 순서대로 늘어놓아 하나의 모델로 쓰는 상자예요. 한 줄로 쭉 흐를 때 쓰고, 경로를 합치는 모델은 직접 클래스로 만들어요.
- nn.Parametertorch.nn.Parameter
- 모델에 등록되어 학습되는 텐서예요. 기본으로 requires_grad=True이고 parameters()에 나와요. 일반 텐서는 등록이 안 돼서 업데이트되지 않아요.
- parameters()parameters() / named_parameters()
- 모델에 등록된 학습 대상을 모두 꺼내요. named_parameters()는 이름까지 같이 줘요. optimizer에 넘길 때 써요.
- named_childrennamed_children()
- 모델에 등록된 층(하위 모듈)의 이름과 객체를 보여 줘요. layer를 self에 저장하지 않으면 여기에 안 나와요.
- MLPMulti-Layer Perceptron
- Linear 층과 ReLU를 여러 번 겹친 기본 신경망이에요. 수업의 TinyMLP가 이 모양이에요.
- FCFully Connected
- 입력 하나하나가 출력 하나하나에 모두 연결된 층, 즉 Linear예요. 변수 이름은 보통 fc1, fc2로 지어요.
- hookHook
- 계산 중간에 끼워 넣는 확인용 장치예요. 이름만 알면 돼요. model(x)는 hook 처리를 거치지만 forward를 직접 부르면 건너뛰어요.
- gradientGradient
- weight를 아주 조금 바꿨을 때 loss가 얼마나, 어느 쪽으로 변하는지 알려 주는 값이에요. 부호는 방향이고 크기는 민감도예요.
- autogradAutograd
- PyTorch가 gradient를 대신 계산해 주는 기능이에요. 우리는 backward()만 부르면 돼요.
- requires_gradrequires_grad
- 이 텐서의 gradient를 계산·기록해 달라는 표시예요. True여야 backward 후에 .grad가 생겨요.
- backwardBackward / Backpropagation
- loss에서 거꾸로 거슬러 가며 gradient를 계산해 .grad에 저장해요. 계산·저장만 하고 weight 값은 안 바꿔요.
- chain ruleChain rule
- 여러 단계를 거친 계산의 미분을 단계별 미분의 곱으로 구하는 방법이에요. 예 1×3×4 = 12. 값만 맞으면 어떻게 구하든 돼요.
- 계산 그래프Computational graph
- 계산 과정을 점과 선으로 기록한 지도예요. backward가 이 지도를 거꾸로 따라가며 gradient를 구해요. 한 번 쓰면 풀려서 재사용할 수 없어요.
- leaf tensorLeaf tensor
- 계산 그래프의 맨 끝에 있는 텐서예요. 직접 만든 requires_grad 텐서와 모델의 weight, bias가 해당돼요. .grad는 leaf에만 저장돼요.
- .grad.grad
- backward 후 leaf 텐서에 저장되는 gradient 값이에요. backward 전에는 None이에요.
- gradient 누적Gradient accumulation
- backward를 부를 때마다 .grad에 덮어쓰지 않고 더해져요. 그래서 매 step 시작에 0으로 지워야 해요.
- zero_gradzero_grad()
- 쌓인 gradient를 지워요. optimizer.zero_grad()는 학습 step의 첫 단계예요. backward보다 앞에 불러야 해요.
- torch.no_gradtorch.no_grad()
- 이 블록 안에서는 gradient를 기록하지 않아요. weight를 직접 고칠 때, 평가·예측할 때 써서 계산을 아껴요.
- in-place 연산In-place operation
- 새로 만들지 않고 원래 텐서의 값을 그 자리에서 고치는 연산이에요. W -= lr * W.grad가 예예요. requires_grad 텐서에는 no_grad 안에서만 할 수 있어요.
- detachdetach()
- 계산 그래프와의 연결을 끊은 텐서를 만들어요. 값만 보고 싶을 때 써요.
- 경사 하강법Gradient descent
- loss가 줄어드는 방향으로 weight를 조금씩 옮기는 방법이에요. 산에서 가장 낮은 곳을 향해 한 발씩 내려가는 것과 같아요.
- 학습률Learning rate
- 한 번에 weight를 얼마나 움직일지 정하는 숫자예요. 너무 크면 튀어서 못 찾고, 너무 작으면 느려요. 보통 아주 작게 써요.
- 업데이트 식Update rule
- 새 w = 현재 w − lr × grad예요. gradient가 음수면 w가 커지고, 양수면 줄어요.
- lossLoss
- 예측이 정답에서 얼마나 틀렸는지를 숫자 하나로 요약한 값이에요. 작을수록 잘 맞는 거예요.
- predictionPrediction
- 모델이 내놓은 답이에요. 정답(target)과 비교해서 loss를 구해요.
- targetTarget
- 모델이 맞혀야 하는 정답이에요. 예측할 때는 넣지 않고 loss 계산에만 써요.
- MSEMean Squared Error
- (예측 − 정답)을 제곱해서 평균 낸 값이에요. 제곱해서 +와 −가 서로 지워지지 않아요. 예 [3,4] vs [1,5]는 2.5예요.
- nn.MSELosstorch.nn.MSELoss
- MSE를 대신 계산해 주는 도구예요. criterion = nn.MSELoss()로 만들고 criterion(prediction, target)으로 써요. 결과는 숫자 하나예요.
- CrossEntropyLossCross entropy loss
- 분류 문제에서 많이 쓰는 loss예요. 수업에서는 이름만 소개했어요.
- optimizerOptimizer
- gradient를 보고 weight를 실제로 고치는 도구예요. model.parameters()를 넘겨 만들고, step()을 불러야 고쳐져요.
- SGDStochastic Gradient Descent
- 가장 기본적인 optimizer예요. w ← w − lr × grad로 고쳐요. optim.SGD(model.parameters(), lr=0.1)로 만들어요.
- AdamAdam
- SGD보다 똑똑하게 방향과 속도를 조절하는 optimizer예요. 수업에서는 이름만 나왔어요.
- stepstep()
- 저장된 gradient로 weight를 한 번 고치는 함수예요. gradient를 새로 계산하지는 않아요.
- 학습 5단계Training step
- zero_grad → forward → loss → backward → step의 다섯 단계예요. batch마다 이 순서로 한 번씩 해요.
- 회귀Regression
- 점수나 가격처럼 이어지는 숫자를 맞히는 문제예요. 주로 MSE loss를 써요.
- 분류Classification
- 합격/불합격, 고양이/강아지처럼 종류를 고르는 문제예요.
- 범주형 데이터Categorical data
- 성별처럼 글자로 된 종류 데이터예요. 모델은 숫자만 다루니까 남=0, 여=1로 바꾸거나 one-hot으로 바꿔요.
- sampleSample
- 입력 하나와 그에 맞는 정답 하나의 짝이에요. 학생 한 명의 정보와 그 학생의 점수가 샘플 하나예요.
- batchBatch
- 한 번에 묶어서 처리하는 샘플 묶음이에요. 샘플 4개씩 묶으면 batch 크기가 4예요.
- batch_sizeBatch size
- 한 batch에 들어가는 샘플 수예요. 10개를 4개씩 자르면 4, 4, 2로 세 묶음이 돼요.
- epochEpoch
- 학습 데이터 전체를 한 번 모두 사용한 것이에요. 책 한 권을 처음부터 끝까지 한 번 읽은 것과 같아요.
- iterationIteration / Step
- batch 하나로 weight를 한 번 고치는 일이에요. 1 epoch 동안 iteration 수는 batch 개수와 같아요.
- DatasetDataset
- 샘플을 번호로 꺼낼 수 있는 데이터 모음이에요. __len__과 __getitem__을 만들어 주면 돼요.
- __len____len__
- len(dataset)을 하면 불려서 샘플이 모두 몇 개인지 알려주는 메서드예요.
- __getitem____getitem__
- dataset[3]처럼 번호로 꺼낼 때 불려서 3번째 (입력, 정답) 쌍을 돌려주는 메서드예요.
- TensorDatasetTensorDataset
- 입력 텐서와 정답 텐서를 같은 번호끼리 짝지어 주는 PyTorch의 기본 Dataset이에요. 샘플 수(첫 차원)가 같아야 해요.
- DataLoaderDataLoader
- Dataset에서 샘플을 꺼내 batch로 묶어 차례로 내주는 도구예요. for batch_x, batch_y in loader:로 돌아요.
- shuffleShuffle
- epoch마다 데이터 순서를 섞는 옵션이에요. 학습 때는 True, 검증 때는 False로 해요.
- drop_lastdrop_last
- batch_size보다 적게 남은 마지막 묶음을 버릴지 정하는 옵션이에요. 기본값은 False라서 남은 것도 써요.
- len(loader)len(DataLoader)
- 한 epoch에 batch가 몇 묶음인지 알려 줘요. 샘플 수 ÷ batch 크기를 올림한 값이에요. 10개, batch 4면 3이에요.
- train setTraining set
- 모델이 보고 배우는 데이터예요. 이걸로 weight를 고쳐요.
- validation setValidation set
- 학습에 쓰지 않고 따로 떼어 둔 데이터예요. 처음 보는 데이터에서 얼마나 잘하는지 재는 시험지 역할이에요.
- test setTest set
- 마지막에 최종 성능을 재는 데이터예요. 학습에도, 중간 점검에도 쓰지 않아요.
- model.train()model.train()
- 모델을 학습용 모드로 바꿔요. Dropout 같은 층이 학습 때 방식으로 일해요.
- model.eval()model.eval()
- 모델을 평가용 모드로 바꿔요. gradient를 끄지는 않아서 torch.no_grad()를 따로 함께 써요.
- 과적합Overfitting
- 학습 데이터는 잘 맞히는데 처음 보는 데이터에서는 못 맞히는 상태예요. 문제집 답만 외운 것과 같아요. validation으로 확인해요.
- epoch lossEpoch loss
- 한 epoch의 전체 평균 loss예요. batch loss × batch 샘플 수를 모두 더한 뒤 전체 샘플 수로 나눠요.
- 딥러닝Deep learning
- 층을 여러 겹 쌓은 인공신경망으로 데이터에서 규칙을 스스로 배우게 하는 방법이에요.
- 인공신경망Neural network
- 숫자를 받아 곱하고 더하는 층을 여러 겹 쌓은 계산 구조예요. 층의 weight를 학습으로 고쳐요.
- 학습Training
- 데이터를 보며 loss가 줄어들도록 weight를 반복해서 고치는 일이에요.
- 추론Inference
- 학습이 끝난 모델로 새 입력의 답을 계산하는 일이에요. 이때는 weight를 고치지 않아요.
- 파라미터 초기화Initialization
- 학습 시작 때 weight를 randn 같은 랜덤 값으로 채우는 거예요. 그래서 처음 예측은 틀리는 게 정상이에요.
- 수렴Convergence
- 학습을 거듭하면서 loss가 더는 줄지 않을 만큼 작은 값에 가까워지는 거예요. w가 정답 2에 가까워지는 모습이에요.