전체 글

전체 글

    [Pytorch] torch.nn.init 초기화

    0. 개요 torch.nn.init 안에 들어 있는 xavier 초기화와 kaiming 초기화에 대해 서술한다. 1. 가중치 초기화 기법 딥러닝에서 layer 를 여러 개 쌓아 DNN 을 만들면 모델의 복잡도가 높아져서 다양한 문제를 해결할 수 있게 된다. 그러나 layer 가 깊어질수록 역전파되는 gradient 가 불안정해진다는 단점이 생긴다. gradient 가 너무 작아지거나 폭주하는 문제가 발생할 수 있는데, 그러면 당연히 모델 학습이 제대로 이루어지지 않는다. 이 문제를 해결하기 위해 여러 방법이 제안되었는데, 이 글에서는 layer 가중치 초기화 기법에 대해 서술하고자 한다. 불안정한 gradient 흐름의 원인이 각 층의 출력과 입력에 대한 분산이 서로 다르기 때문이라는 주장이 있었다. 그..

    Gradient vanishing / exploding

    1. Gradient vanishing / exploding 문제 딥러닝을 할 때 층을 여러 개 쌓아서 DNN 을 만든다. 학습을 위해 역전파를 할 때, gradient 를 사용해서 각 층의 parameter 를 업데이트 한다. 그런데 층이 깊어질수록, gradient 가 점점 사라지거나 폭발적으로 증가하는 문제가 발생할 수 있다. 이러면 당연히 학습이 제대로 진행되지 않는다. gradient 가 점점 사라지는 것을 gradient vanishing, gradient 가 점점 커지는 것을 gradient exploding 이라고 부른다. 이 문제를 해결하기 위해 여러 솔루션들이 제안 되었는데, 대표적으로 아래 4가지 방법이 사용된다. 1) 각 층에 특정한 초기화 적용 각 층에 사용하는 활성화 함수에 따라..

    [Pytorch] torch.nn.Conv2d

    0. 개요 pytorch.nn 의 Conv2d 클래스 사용법을 알아본다. convolution 개념을 알고 있어야 하므로, 모른다면 아래 글을 읽어보자. (https://kalpaca.tistory.com/116) 1. torch.nn.Conv2d torch.nn.Conv2d 는 pytorch 의 신경망 모듈인 nn 에 속해있는 클래스이고, 2차원 convolution layer 를 구현해 놓은 것이다. 주로 사용하는 클래스의 prototype 은 다음과 같다. torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, bias=True) 인자를 하나씩 살펴보도록 하자. in_channels (필수) fo..

    Convolution Layer

    0. 개요 Neural Net 을 이루는 기본 layer 중 Convolution layer 에 대해 적어보려 한다. 구체적인 이론보다는, 혼자 독학하고 쉽게 이해한 내용을 바탕으로 기술하려고 한다. 틀린 내용이 있다면 차차 수정해 나가도록 하겠다. GIF 는 모두 다음 깃헙에서 가져왔다. (https://github.com/vdumoulin/conv_arithmetic) 1. 기본 개념 Convolution layer 는 주어진 입력에 대해 convolution 연산을 하는 layer 를 말한다. 1차원, 2차원, 3차원 입력이 주로 사용되고, 입력의 차원 수에 따라 conv1d, conv2d, conv3d 등으로 불리기도 한다. 위 그림은 2차원 입력에 대한 convolution layer 의 동작을..

    [Pytorch] Linear Layer

    0. 개요 Neural Net layer 의 기본인 Linear Layer 를 구현해보자. 1. Linear layer Linear layer 는 크게 3부분으로 나누어 생각할 수 있다. 입력층 (input layer) - 그림에서 맨 왼쪽에 있는 부분이다. - 입력 데이터라고 생각해도 된다. 은닉층 (hidden layer) - 그림에서 가운데 있는 3개 layer 를 의미한다. - 출력층으로 가기 전에 거치는 중간 층으로 생각하면 된다. 출력층 (output layer) - 그림에서 맨 오른쪽에 있는 부분이다. - 최종 출력 데이터라고 생각해도 된다. 각 층에 있는 동그라미를 뉴런이라고 하는데, 각 뉴런을 연결하는 선은 가중치 (weight) 이다. 그림에는 보이지 않지만 편향 (bias) 도 존재할..

    [Pytorch] Tensor 만들기 - 3

    0. 개요 이미 가지고 있는 데이터를 사용해서 Tensor 를 만들어보자. 1. torch.tensor() torch.tensor(data, dtype=None, device=None, requires_grad=False) torch.tensor() 함수를 사용하면 새로운 텐서를 만들 수 있다. 이 과정은 Tensor 클래스의 객체를 새로 생성함으로써 진행된다. 주로 사용하는 인자들을 하나씩 알아보자. data array 형식으로 이루어진 자료가 들어올 수 있다. 리스트, 튜플, numpy 배열, tensor 등이 들어올 수 있다. dtype 생성할 텐서의 타입을 지정한다. default 는 None 인데, None 이면 인자로 들어온 data 의 타입으로부터 추론해서 결정된다. device 텐서가 올라..

    [Pytorch] Tensor 만들기 - 2

    0. 개요 텐서의 크기를 직접 입력하지 않고, 이미 만들어진 텐서를 이용해서 새로운 텐서를 만들어보자. 1. 특징 이번 글에서 볼 함수들의 공통점은 다음과 같다. import torch tensor_XXX_like = torch.XXX_like(input=???, dtype=???, device=???, requires_grad=???) 이전 글에서 본 함수 이름 뒤에 "_like" 가 붙은 형태의 함수를 살펴보려 한다. "input" 이라는 인자가 새로 생겼는데, 여기에는 Tensor 타입의 객체가 들어간다. 인자로 들어온 텐서의 크기와 같은 크기의 새로운 텐서가 각 함수에 알맞는 값으로 초기화되어 리턴된다. 2. 텐서 생성 함수 본격적으로 텐서 생성 함수를 알아보자. input 으로 사용되는 모든 텐..

    [Pytorch] Tensor 만들기 - 1

    0. 개요 이미 정해져 있거나 우리가 원하는 특정한 값으로 초기화된 Tensor 를 만들어보자. 1. 특징 이번 글에서 볼 함수들의 공통점은 다음과 같다. import torch tensor_XXX = torch.XXX(size=???, dtype=???, device=???, requires_grad=???) XXX 는 텐서를 만들 수 있는 함수 이름을 의미한다. 함수를 호출할 때 조금 더 다양한 argument 를 넣을 수 있지만, 주로 사용하는 것은 저 4개 정도인 것 같다. 1) size - 생성할 텐서의 크기를 말한다. - 그냥 나열해도 되지만, 리스트나 튜플로 묶어서 넣어주는게 정신건강에 좋다. 2) dtype - 생성할 텐서의 타입이다. - 지정하지 않으면, default 로 torch.fl..

    [Anaconda] importerror: dll load failed: 지정된 모듈을 찾을 수 없습니다.

    아나콘다 환경에서 가상환경을 만들고 주피터에 커널을 등록한 다음 pytorch 나 numpy 등을 import 하면 아래 오류를 볼 수도 있다. importerror: dll load failed: 지정된 모듈을 찾을 수 없습니다. 근데 신기한건, anaconda prompt 에서 동일한 가상환경을 실행한 후, 동일한 모듈을 import 하면 잘 된다는 것이다. 이것 때문에 하루동안 삽질한 후, 해결책을 찾아냈다. (적어도 나한테는...) 시스템 환경변수에 가상환경 경로가 등록되지 않았기 때문이다. 어떤 걸 등록해야하는지 확인하려면, anaconda prompt 에서 아래 명령어를 입력한다. conda env list 그러면 사용가능한 가상환경의 목록과 그 가상환경이 설치된 경로가 나올 것이다. 내가 만..

    단순 선형 회귀 분석

    1. 회귀 분석 - 상관 관계를 통해 선형성은 확인할 수 있지만 인과 관계를 파악할 수는 없다. - 따라서 상관 관계가 있는 두 변수 사이에 인과 관계를 확인하는 과정을 회귀 분석이라고 한다. 2. 회귀분석의 종류 - 회귀 함수 모양: 선형 회귀 / 비선형 회귀 - 독립변수 개수: 단순 회귀 / 다중 회귀 - 종속변수 개수: 단변량 회귀 / 다변량 회귀 3. 선형 회귀분석의 목적 2가지 1) 종속변수에 대한 독립변수의 영향을 설명한다. 2) 독립변수가 주어질 때, 종속변수를 예측한다. 4. 단순 선형 회귀 모델 $$y = \beta_{0} + \beta_{1}x$$ 단순 선형 회귀 모델은 독립변수 1개 / 종속변수 1개이므로 1차 함수의 모양을 한다. $\beta_{0}$ 은 y 절편, $\beta_{1..