본문 바로가기

Deep Learning

SEQUENCE-TO-SEQUENCE MODELING WITH NN.TRANSFORMER AND TORCHTEXT Introduction 이번 튜토리얼은 nn.Transformer를 이용하여 sequence-to-sequence 모델을 어떻게 학습시키는지 알아보겠습니다. Pytroch 1.2 release는 Attention is All You Need에 기반한 표준 transformer 모듈을 포함합니다. transformer 모델은 더욱 parallelizable하면서 다양한 sequence-to-sequence에 우월함이 증명되었습니다. nn.Transformer는 전적으로 attention mechanism(최근 nn.MultiheadAttention으로 구현된 다른 모듈)에 의존하여 인풋과 아웃풋사이의 global dependency를 추출합니다. nn.Transformer은 고도로 모듈화되어 이 튜토리얼의.. 더보기
LANGUAGE TRANSLATION WITH TORCHTEXT Introduction 이번 튜토리얼은 torchtext의 몇 몇 편리한 클래스를 이용하여 영어와 독일어 모두를 포함한 잘 알려진 데이터 셋에 대해 진행하고, 독일 문장을 영어로 번역할 수 있는 attention을 이용한 sequence-to-sequence 모델을 학습시켜보도록 하겠습니다. 이 튜토리얼이 끝나면, 여러분은 다음과 같은 것을 할 수 있습니다: 문장을 NLP 모델링에서 일반적으로 사용되는 포맷으로 전처리 할 수 있습니다. 이는 torchtext의 편리한 클래스를 이용합니다: TranslationDataset Field BucketIterator 본 튜토리얼의 원본은 다음과 같습니다. 역자의 주석은 지금 이 문단과 같이 citation으로 남기겠습니다. 본 코드는 colab을 통해서 실행할 .. 더보기
TEXT CLASSIFICATION WITH TORCHTEXT Introduction 이번 튜토리얼은 torchtext 내에 있는 text classification datasets을 어떻게 사용할 수 있는지 보여주고, 다음을 포함합니다. - AG_NEWS, - SogouNews, - DBpedia, - YelpReviewPolarity, - YelpReviewFull, - YahooAnswers, - AmazonReviewPolarity, - AmazonReviewFull 이 예제는 이러한 TextClassification datasets 중 하나를 이용하여 지도학습 분류 알고리즘을 어떻게 학습시키는지 보여줍니다. 본 튜토리얼은 파이토치 홈페이지 내의 튜토리얼을 번역한 자료입니다. 다수 의역이 되어있습니다. 역자주의 경우 지금과 같이 citation을 통해 남기도.. 더보기
PyTorch contiguous Attention을 활용한 NMT를 학습하던 도중 다음과 같은 에러가 발생했다. --------------------------------------------------------------------------- RuntimeError Traceback (most recent call last) in () 108 for epoch in range(N_EPOCHS): 109 start_time = time.time() --> 110 train_loss = train(model, train_iterator, optimizer, criterion, CLIP) 111 valid_loss = evaluate(model, valid_iterator, criterion) 112 end_time = time.tim.. 더보기
PyTorch에서 tensor를 copy하는 법 https://stackoverflow.com/questions/55266154/pytorch-preferred-way-to-copy-a-tensor PyTorch에서 tensor를 복사하는 방법은 여러가지가 있다. y = tensor.new_tensor(x) #a y = x.clone().detach() #b y = torch.empty_like(x).copy_(x) #c y = torch.tensor(x) #d 과연 어떠한 방법이 올바르게 tensor를 복사하는 방법일까? a: y = tensor.new_tensor(x) new_tensor()는 parameter가 뭐든간에 이를 읽어서 leaf variable을 생성한다. 따라서 근본적으로 b와 동일한 코드이다. 만약 grad가 흐르게 하고 싶다면,.. 더보기
torch.expand() vs. torch.repeat() 네트워크에 feed하다보면 차원을 만져줘야 되는 일이 있다. 그때 사용하는 것이 torch.repeat()인데, torch.expand()랑 구체적으로 어떠한 차이가 있는지 모르겠어서 한번 찾아봤다. torch.repeat(*sizes) 특정 텐서의 sizes 차원의 데이터를 반복한다. 예시를 통해 이해해보자. >>> x = torch.tensor([1, 2, 3]) >>> x.repeat(4, 2) tensor([[ 1, 2, 3, 1, 2, 3], [ 1, 2, 3, 1, 2, 3], [ 1, 2, 3, 1, 2, 3], [ 1, 2, 3, 1, 2, 3]]) >>> x.repeat(4, 2, 1).size() torch.Size([4, 2, 3]) x는 [1, 2, 3]으로, 이를 dim=0으로 4.. 더보기
PyTorch RNN 그냥 PyTorch RNN 이용하면서 중요한 점 간단하게 공유해봄. 실제 코드에서의 이야기이니 RNN을 모르는 사람은 이론적인 배경을 공부하고 오면 좋을듯 싶다. 기본 구조 우리가 생각하는 것과는 다르게, RNN은 $x_1, ..., x_{t}$]의 sequence 데이터 전부를 필요로 한다. 즉, iterative $x=1, 2, 3, ...$을 하나씩 넣는 구조가 아니다. 기본 구조는 다음과 같이 생겼다. model = RNN(input_size: int, hidden_size: int, num_layers: int=1, bias=True, batch_first: bool, dropout: float, bidirectional: bool=False, nonlinearity: str='tanh&.. 더보기
PyTorch Attention 구현 issue 정리 포트폴리오 용으로 Attention을 구현하던 중 헷갈리는 개념을 정리하였다. 원본은 https://stackoverflow.com/questions/62444430/implementing-attention/62445044#62445044 을 참고하면 된다. (본 링크는 부족한 영어실력으로 내가 직접한 것임.) 1. Decoder의 초기 hidden state $s_0$는 어떤 값인가?? 이를 물어본 이유는 내가 참고한 implementation에서 $s_0$를 구하는 과정이 각기 다 달랐기 때문이다. 아래는 PyTorch 재단에서 제공하는 NLP 튜토리얼인데, 이 부분에서 $s_0$는 context vector로 정의하고 있다. https://colab.research.google.com/drive/1.. 더보기