전체 글 109

[Pytorch] Dataset과 DataLoader

대용량 데이터의 일부만 메모리에 적재하여 효율적으로 학습시키기 위해 필요한 Dataset과 DataLoader에 대해 알아보자. Dataset 모델에 입력할 데이터의 형태를 정의한다. torch.utils.data.Dataset을 상속받아 생성한 Custom Dataset 클래스는 __init__, __len__, __getitem__을 구현해야 한다. __init__ CSV 파일이나 XML 파일과 같은 데이터를 불러온다. 데이터의 전처리를 수행할 수 있다. __len__ 데이터셋의 전체 개수를 반환한다. __getitem__ 데이터셋에서 주어진 인덱스에 해당하는 데이터를 반환한다. import torch import pandas as pd from torch.utils.data import Datase..

AI/PyTorch 2023.03.16

[PyTorch] 파라미터 구현하기

PyTorch에서 모듈의 파라미터를 torch.nn.parameter.Parameter 클래스를 활용해 구현하는 방법에 대해 알아보자. torch.nn.parameter.Parameter Tensor의 하위 클래스로, 모듈의 파라미터 역할을 하는 클래스이다. Tensor 클래스가 아닌, Parameter 클래스로 모듈의 파라미터를 만들어야 모듈의 파라미터 목록에 자동으로 등록된다. import torch from torch import nn from torch.nn.parameter import Parameter class MyModel(nn.Module): def __init__(self): super().__init__() self.W1 = torch.Tensor([5]) self.W2 = Param..

AI/PyTorch 2023.03.16

[PyTorch] 신경망 모델과 torch.nn.module

PyTorch에서 제공하는 신경망 모델의 기본 클래스인 torch.nn.module 클래스에 대해 알아보자. torch.nn.module 모델의 구성 요소인 layer와 parameter를 담는 컨테이너이다. function이 모여 layer를 구성하고, layer가 모여 model이 만들어진다. torch.nn.module을 상속받은 클래스는 function이 될 수도 있고, layer, model이 될 수도 있다. import torch.nn as nn # 모델 클래스 예시 class MyModel(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): # 부모 클래스인 nn.Module 클래스의 생성자를 호출한다. super(MyMod..

AI/PyTorch 2023.03.16

[PyTorch] torch.reshape과 torch.Tensor.view의 차이

PyTorch에서 tensor의 차원을 재구성하는 함수인 reshape 함수와 view 함수의 각각의 특징과 차이점에 대해 알아보자. torch.reshape contiguous 속성을 만족하는 tensor가 인자로 주어진 경우, 데이터를 복사하지 않고, 같은 메모리 공간을 공유하는 새로운 tensor를 반환한다. 반면, contiguous 속성을 만족하지 않는 tensor가 인자로 주어진 경우, 데이터를 복사해 새로운 tensor를 생성해 반환한다. contiguous란 무엇일까? contiguous는 ‘인접한’이라는 뜻을 가진 단어로, tensor의 데이터들이 인덱스 순서대로 메모리가 인접해 있는지를 나타내는 속성이다. tensor1 = torch.randn(2, 3) tensor2 = tensor1..

AI/PyTorch 2023.03.14

[PyTorch] torch.mm과 torch.matmul의 차이

PyTorch에서 tensor의 곱을 연산하는 torch.mm과 torch.matmul의 각각의 특징과 차이점을 알아보자. torch.mm 2D tensor와 2D tensor의 행렬 곱셈을 수행한다. broadcast를 지원하지 않는다. torch.mm(input, mat2, *, out=None) → Tensor input의 크기가 (n x m)인 경우, mat2의 크기는 (m x p)여야 하고, output의 크기는 (n x p)가 된다. torch.matmul tensor와 tensor의 행렬 곱셈을 수행한다. broadcasting을 지원한다. 따라서 의도치 않은 결과가 나올 수 있다는 점에 주의해야 한다. vector와 vector의 연산 tensor1 = torch.tensor([1,2,3]..

AI/PyTorch 2023.03.14

[PyTorch] PyTorch 기초

오픈소스 머신 러닝 프레임워크인 PyTorch에 대해 알아보자. Tensor PyTorch에서 사용하는 자료구조이다. Numpy의 ndarray와 유사한 개념으로 사용된다. numpy import numpy as np n_array = np.arange(10).reshape(2, 5) print(n_array) # 출력: # [[0 1 2 3 4] # [5 6 7 8 9]] print(f"ndim : {n_array.ndim}, shape : {n_array.shape}") # 출력: ndim : 2, shape : (2, 5) pytorch import torch t_array = torch.FloatTensor(np.arange(10).reshape(2, 5)) print(t_array) # 출력: ..

AI/PyTorch 2023.03.13

[Math] CNN과 RNN 기본 개념

기본적인 딥러닝 모델 중 하나인 CNN과 RNN의 개념에 대해 알아보자. CNN 커널을 입력벡터 상에서 움직여가면서 선형 모델과 합성함수가 적용되는 구조이다. 입력이 3차원인 경우, 즉 여러 채널의 2차원 입력이 주어질 경우, 커널의 채널 수를 입력의 채널 수와 같게 만들어야 한다. 출력의 채널 개수를 O_c개로 만들고 싶다면, 커널을 O_c개 사용하면 된다. CNN의 역전파 간단한 CNN 구조에서 순전파의 예시 그림이다. 그레디언트가 출력 벡터에 전달된다. 커널의 각 파라미터에 전달되는 그레디언트는 convolution 연산과 같은 형태가 된다. RNN 시퀀스 데이터의 패턴을 학습하는데 특화된 인공 신경망의 한 종류이다. 이전 시퀀스의 정보들을 잠재변수 H_t에 모아, 출력을 만들고, 다음 순서의 잠재..

AI/AI Math 2023.03.13

[Math] 조건부 확률과 인과 관계

머신러닝 모델을 모델링 하는데 있어서 중요한 개념인 조건부 확률의 베이즈 정리와 인과 관계에 대해서 알아보자. 베이즈 정리 조건부 확률을 이용해서 새로운 정보가 주어졌을 때 정보를 갱신할 때 사용한다. B라는 새로운 정보가 주어졌을 때 P(A)로부터 P(A|B)를 계산하는 방법을 제공한다. 사후확률 : 데이터가 관찰되었을 때 파라미터가 성립할 확률 사전확률 : 데이터를 관찰하기 전, 사전에 가정하고 있는 확률 가능도 : 현재의 파라미터에서 관찰된 데이터가 등장할 확률 Evidence : 데이터의 분포 사전 확률을 가능도와 Evidence를 활용해 사후확률로 업데이트 한다. 새롭게 데이터가 관찰될 때마다 사후확률을 업데이트할 수 있다. 인과 관계 인과 관계는 데이터 분포가 바뀌더라도 예측 정확도가 유지될 ..

AI/AI Math 2023.03.12

[Math] 다층 퍼셉트론

다층 퍼셉트론의 구조와 데이터를 갖고 학습하는 방식, 결과물을 만드는 방법에 대해 알아보자. 입력 데이터 X와 가중치 행렬 W, 절편 행렬 b의 선형 결합으로 결과 행렬 O가 생성된다. 하나의 입력 데이터, 즉 X 행렬에서 하나의 행 벡터(xk)는 W 행렬에서 하나의 열 벡터와 내적하여 하나의 결과값(ok)를 만들어 낸다. 위 선형 결합에서 p개의 선형 모델이 입력 데이터를 받아 p개의 결과값을 만들어낸다고 생각할 수 있다. (W 행렬의 열이 p개 이므로) Softmax 함수는 선형 모형의 출력을 확률로 해석할 수 있게 확률 벡터로 변환해주는 함수이다. 선형 결합의 결과 벡터 O를 Softmax 함수의 인자로 넣어 분류 문제를 해결할 수 있다. 신경망은 선형 모델과 활성함수를 합성한 함수이다. 활성 함수..

AI/AI Math 2023.03.12

[Math] 경사 하강법

머신러닝 및 딥러닝 분야에서 핵심적인 개념 중 하나인 경사 하강법에 대해 알아보자. 경사 하강법 AI 모델의 가중치를 최적화 하는 방법 중 하나이다. 현재 위치에서 미분한 값을 빼서 함수 값을 감소시킨다. 벡터로 입력받는 다변수 함수의 경우, 편미분을 통해 그레디언트 벡터를 얻어 경사 하강법에 사용한다. 경사 하강법의 한계 경사 하강법은 미분 가능하고 볼록(convex)한 함수에 대해서만 이론적으로 수렴할 수 있다. 그러나, 그 외의 함수에서는 최소점으로의 수렴을 보장하지 않는다. 확률적 경사 하강법 (SGD) 볼록하지 않은 (non-convex) Cost Function을 최적화하기 위해 사용한다. 모든 데이터를 사용해서 업데이트하는 것이 아닌, 데이터 한 개 또는 데이터 일부를 활용해 업데이트한다. ..

AI/AI Math 2023.03.11