Embedding Transformer에서 사용되는 Embedding은 Input Embedding과 Output Embedding이 있으며, 이들과 더해지는 Positional Encoding이 있다. Input과 Output Embedding은 torch에서 제공하는 nn.Embedding을 사용하였으며, Positional Encoding은 논문에서 제시하는 수식을 따라 Positional Encoding class를 구현하였다. 1. Positional Encoding Positional Encoding은 시퀀스의 순서 (단어의 위치 정보) 를 알려주는 역할을 한다. Input과 Output Embedding이 입력될 때 Positional Encoding 정보가 더해져 Encoder와 Decod..
논문 구현에 대한 설명을 하다 보니 함수에 쓰인 수식들을 표현해야 할 때가 많다. 하지만 사용하던 티스토리 스킨에서는 수식을 캡처하여 이미지로 입력해야 했다. 그렇기 때문에 쉽고 간편하게 수식을 작성하기 위해서 LaTeX라는 수식을 멋드러지게 작성할 수 있게 도와주는 문서 작성 도구를 스킨에 적용해보려고 한다. 1. 스킨에 LaTeX를 적용하기 스킨에 LaTeX를 적용하는 방법은 간단하다. Head 에 아래 script를 추가하면 끝!이다. 출처: Configuring and Loading MathJax — MathJax 3.2 documentation 2. LaTeX로 수식 작성하기 수식을 작성하기 위해서는 몇 가지 규칙을 알아야 한다. 수식은 $$ 사이에 작성한다. 기호 앞에는 \를 붙여야 한다. (..
Sub Layers Encoder와 Decoder를 구성하는 Sub Layer로는 Multi-Head Attention과 Position-Wise Fully Connected Feed-Forward Network가 있다. Multi-Head Attention가 내포하는 Scaled Dot-Product Attention까지 총 3가지의 Sub Layer class를 구현하였다. [목차] Multi-Head Attention Scaled Dot-Product Attention Position-Wise Fully Connected Feed-Forward Network 1. Multi-Head Attention Multi-Head 이름은 입력된 Q, K, V 행렬을 Head의 수만큼 나누었기 때문에 붙여졌다...
Transformer 모델은 자연어 처리에서 가장 기본이 되고 있기 때문에, 한번 제대로 공부해 보고자 하는 마음에 논문부터 코드 구현까지 해보게 되었다. 코드는 hyunwoongko 님 깃허브 자료의 도움을 받았으며, Transformer 모델 구현부터 한영 번역 학습까지 진행하였다. 논문의 구성 요소들을 바탕으로 공부한 내용과 코드를 리뷰해 보았다. Date : 12월 9일 ~ 1월 15일 Paper: Attention Is All You Need Github Link: https://github.com/angiekim05/study/tree/master/Paper_Code_Practice/Transformer [ML/Transformer] - [딥러닝 / PyTorch] Transformer 구현 ..
동적프로그래밍동적 프로그래밍은 큰 문제를 작은 문제로 나누어 푸는 방법이다.분할 정복과는 다르게 작은 문제를 푸는데서 답이 같은 문제가 중복적으로 일어날 경우 사용한다.보통 점화식을 만들 수 있다.1. 동적프로그래밍의 조건큰 문제는 작은 문제로 나눌 수 있고 작은 문제가 반복해서 나타난다.같은 문제라면 계산할 때마다 같은 답이 도출된다.2. 메모이제이션 (Memoization)메모이제이션은 한번 풀었던 작은 문제를 다시 반복해서 풀지 않기 위해 메모해두고 필요할 때 답만 꺼내 보는 것이다.담아 놓는 것이기 때문에 캐싱 (caching) 이라고도 불린다.메모이제이션을 통해 먼저 구한 결과를 담아 두면, 아래 피보나치 예시에서 점선으로 표시된 노드는 먼저 먼저 계산된 값을 사용하면 되기 때문에 반복해서 계산..
문제 두 전봇대 A와 B 사이에 몇 개의 전깃줄을 제거해야 교차하는 전깃줄이 없는지 구하는 문제이다. 즉, 최소한의 제거할 수 있는 전깃줄의 개수를 도출해야 한다. 풀이 서로 전깃줄이 교차하지 않게 하기 위해 없애야 하는 전깃줄의 최소 개수를 구해야 한다. 예를 들어, A-1번과 B-8번이 연결된 전깃줄보다 A-3번과 B-9번이 연결된 전깃줄이 더 아래 있는 것을 알 수 있다. 이를 통해 A의 번호가 순차적으로 커질 때, 각각의 A와 연결된 B의 번호도 더 커진다면 교차하지 않는 전깃줄의 개수를 구할 수 있음을 알 수 있다. A의 정렬된 번호를 리스트의 인덱스로 두고, B의 번호를 가지고 가장 긴 증가하는 수열(LIS)을 구함으로써 교차하지 않는 전깃줄의 최대 개수(c)를 구할 수 있다...
이분 탐색이란, 오름차순으로 정렬된 배열을 반복적으로 반으로 나누어 target이 선택될 때까지 탐색하는 알고리즘이다. 1. 이분 탐색의 조건 반드시 오름차순으로 정렬된 상태에서 시작해야 한다. 2. 이분 탐색 알고리즘 시간복잡도: O(logN) 반복문과 재귀 두 가지 방법을 사용할 수 있다. 자료를 오름차순으로 정렬한다. 자료의 중간값(mid)이 찾고자 하는 값(target)인지 비교한다. mid 값이 target과 다르다면 대소관계를 비교하여 탐색 범위를 좁히고, target과 mid 값이 같을 때까지 아래 조건에 따라 2번과 3번을 반복한다. ⓐ target이 mid 값 보다 작으면 end를 mid 왼쪽 값으로 바꿔준다. (절반의 왼쪽 탐색) ⓑ target이 mid 값 보다 크면 start를 mi..