pytorch (20) 썸네일형 리스트형 Transformer 구현 지난 포스트 [Machine Learning/Architecture] - Transformer 이번 포스트에서는 Transformer Pytorch 구현에 대해 알아보도록 하겠습니다. 먼저, 이번 포스트에서 다룰 코드는 고현웅님의 Transformer github 레파지토리에서 발췌한 것임을 미리 밝힙니다. (Transformer 의 각 구성 요소별로 코드 정리가 잘 되어있습니다.) Scaled dot product attention Figure 1을 구현하는 블락입니다. 이때, multi-head attention 을 위해 $Q, K, V$가 head 개수만큼 분리되어 [batch size, head, length (입력 길이), d (차원)] 의 4차원 텐서입니다. 코드에서 "@" 은 pytorch .. Clustering - Invariant Information Clustering for Unsupervised Image Classification and Segmentation (1) 이번 포스트에서 살펴볼 논문은 IMSAT 과 마찬가지로 mutual information 을 최대화하여 clustering 하는 방법론에 관한 내용입니다. 입력 $x$와 $x$에 대한 출력 $y$의 mutual information 을 최대화하는 IMSAT과 달리 이번 포스트의 IIC (Invariant Information Clustering)에서는 입력 $x$와 $x$와 비슷한 $x'$의 각 출력의 mutual information 을 최대화하는 것인데요, image clustering 과 segmentation 에 적용하여 놀라운 성능을 거두었다고 합니다. 자세한 내용을 한 번 살펴보겠습니다. Method Invariant information clustering 먼저 $x, x'$ 을 이미지의 내.. Pytorch - backward(retain_graph=True) (1) Pytorch 에서는 계산된 목적함수의 loss 값에 backward() 함수를 계산하면 모델을 구성하는 파라미터에 대한 gradient (기울기)를 계산합니다. backward() 메소드는 암묵적으로 loss 값이 벡터가 아닌 scalar 라고 가정하여 최종 loss 값에 대한 평균이나 합을 통해 벡터를 하나의 scalar 값으로 만들어 주어야 하는데요, backward(torch.tensor([1], dtype=torch.float) 이 디폴트로 설정되어 있습니다. backward() 메소드를 수행할 때 또다른 유용한 파라미터는 retain_graph 라는 매개변수입니다. ratain 이라는 말에서 알 수 있듯이 텐서들의 연속된 연산으로 구성되는 graph 를 유지한다는 것인데 한 번 살펴보도록 하겠.. Pytorch - hook Deep neural networks 는 마지막 단의 목적함수에 대한 파라미터 별 기울기를 통한 gradient descient 방식으로 업데이트 됩니다. 이때 편미분의 chain-rule 을 이용한 back-propagation (neural networks 의 뒷 단에서 앞 단 순으로 기울기가 계산됩니다) 을 이용해 deep neural networks 를 구성하는 모든 파라미터의 목적함수에 대한 기울기를 구할 수 있습니다. Pytorch 에는 hook 이라는 기능이 있어 매 layer 마다 print 문을 통해 확인하지 않아도 각 층의 activation/gradient 값을 확인할 수 있습니다. 먼저 Figure 1과 같은 2-layer 의 MLP 를 구성해보도록 하겠습니다. import torc.. 이전 1 2 3 다음