본문 바로가기

딥러닝

(27)
가변 길이 인수 1. 가변 길이의 입출력 변수■ 함수에 따라 여러 개의 변수를 입력으로 받거나, 여러 개의 변수를 출력할 수 있다. 이러한 가변 길이 입출력에 대응할 수 있어야 한다. 1.1 순전파 과정에서 가변 길이 인수 처리를 위한 Function 클래스 수정1,1,1 반복 가능한(iterable) 객체 이용■ 가변 길이의 입출력에 대응하기 위해서는 다음과 같이 하나의 인수만 입력으로 받아 하나의 값만 처리하는 Function 클래스를 수정해야 한다.class Function: def __call__(self, input): x = input.data y = self.forward(x) output = Variable(as_array(y)) output.s..
미분 자동 계산 (4) 1. 구현 간소화■ 미분 자동 계산 (3) 에서 어떤 특정 연산을 수행하는 함수를 정의한 파이썬 클래스(Square, Exp 클래스)를 이용하여 순전파를 수행하기 위해서는, 다음과 같이 먼저 클래스의 인스턴스를 생성한 다음, 생성한 인스턴스를 호출해야 한다.class Square(Function): def forward(self, x): y = x ** 2 return y def backward(self, gy): x = self.input.data gx = 2 * x * gy return gx x = Variable(np.array(2.0))f = Square() # 클래스 인스턴스 생성y = f(x) # 호출■ 이..
미분 자동 계산 (3) 1. 수동 역전파1.1 Variable 클래스 수정■ 앞서, 구현한 Variable 클래스는 다음과 같이 단순히 상자와 같은 역할을 할 수 있도록 정의하였다.class Variable: def __init__(self, data): self.data = data- Variable 클래스의 인스턴스를 생성하여, 상자(변수)에 데이터를 넣을 수 있고, 상자 속을 보면 상자 속에 들어 있는 데이터가 무엇인지 확인할 수 있다.■ 이때, data는 통상값이며, 역전파 구현을 위해서는 통상값에 대응되는 미분값(grad)도 저장할 수 있도록 다음과 같이 미분값을 저장할 인스턴스 변수를 Variable 클래스에 추가하면 된다.class Variable: def __init__(self, data..
미분 자동 계산 (2) 1. 미분1.1 미분이란참고) Differential equations  Differential equations1. 미분의 정의1.1 변화율(증분)■ 다음과 같이 종속변수가 \( y \)이고 독립변수가 \( x \)인 \( y = f(x) \)가 있다고 했을 때, 독립변수 \( x \)의 변화량을 \( x \)의 증분이라 하고 델타 기호를 붙여 \( \Dehyeon-jae.tistory.com■ 어떤 함수 \( f(x) \)가 있을 때, 미분은 보통 \( \displaystyle\lim_{h \to 0} \dfrac{f(x + h) - f(x)}{h} \)로 정의한다. 이는 극한으로 짧은 시간(순간)( \( \Leftrightarrow \displaystyle\lim_{h \to 0} \) )에서의 변..
미분 자동 계산 (1) ■ 미분은 머신러닝, 딥러닝의 여러 분야에서 중요한 역할을 하며, 텐서플로와 파이토치같은 딥러닝 프레임워크는 일종의 미분 계산 도구이다. 미분을 계산하기 위해서는 '변수'와 '함수'가 필요하다.1. 변수■ 변수의 역할은 다음과 같은 상자와 같다.■ 변수(여기서는 상자)에 데이터를 넣을 수 있고(=할당할 수 있고), 상자 속을 보면 상자 속에 들어 있는 데이터가 무엇인지 확인할 수 있다(=참조할 수 있다).1.1 Variable 클래스 구현■ 상자와 같은 역할을 하는 변수라는 개념을 다음과 같이 클래스로 구현할 수 있다. class Variable: def __init__(self, data): self.data = data■ 이렇게 초기화 함수 __init__에서 self.data라는 ..
트랜스포머 (Transformer) (3) 3.4 트랜스포머 Decoder 내부 구조3.4.1 Masked Self-Attention■ Decoder도 Encoder와 동일하게 단어의 임베딩 계층과 포지셔널 인코딩을 거쳐 문장 행렬이 Decoder에 입력된다. ■ Decoder는 3개의 서브 계층으로 구성되어 있다. 첫 번째 서브 계층은 Encoder의 첫 번째 서브 계층과 동일한 셀프 어텐션(Self-Attention)이다. ■ 단 Decoder의 셀프 어텐션 층에는 마스킹을 수행하는 Mak라는 조건이 붙는다.■ 트랜스포머는 seq2seq처럼 디코더에 출력할 문장을 한 번에 입력받는다. ■ seq2seq에서 RNN 계열의 신경망을 사용할 경우, 입력 단어를 매 시점마다 순차적으로 받아 현재 시점과 이전 시점의 단어를 토대로 출력할 단어를 예..
트랜스포머 (Transformer) (2) 3.3 트랜스포머 Encoder 내부 구조3.3.1 Self - Attention■ 셀프 어텐션의 동작 메커니즘은 먼저, 입력 문장의 단어의 임베딩 벡터들로부터 세 벡터(Q, K, V)를 만들기 위해 가중치 행렬 WQ, WK, WV를 사용한다.■ 예를 들어 다음과 같이 'Thinking', 'Machines'라는 단어가 입력으로 들어갈 때, 두 단어의 임베딩 벡터가 각각 \( X_1, X_2 \)라면, 임베딩 벡터는 사전에 준비된 가중치 행렬 \( W^Q, W^K, W^V \) 과의 곱을 통해 그에 맞는 Q 벡터, K 벡터, V 벡터를 만들게 된다.- 단어 'Thinking', 'Machines'의 임베딩 벡터가 가중치 행렬을 통해 각각 Q, K, V 벡터로 변환되는 것을 볼 수 있다.cf) 위의 과정을..
트랜스포머 (Transformer) (1) 3. 트랜스포머 (Transformer)■ 기본 seq2seq 모델은 Encoder-Decoder 모델로 Encoder에서 입력 시퀀스를 하나의 고정 길이 벡터(은닉 상태 벡터)로 압축해서 Decoder에 전달하고, Decoder는 이 벡터 표현을 받아 출력 시퀀스를 만들었다.■ 하지만, 기본 모델은 Encoder에서 입력 시퀀스를 고정 길이 벡터로 압축할 때, 입력 시퀀스의 정보가 손실된다는 단점이 있었다. 이 단점을 보완하기 위해 어텐션(attention)을 사용하여 RNN 계층을 보정하였다.■ 단, 어텐션을 사용해도 RNN의 단점이 남아 있는데, 그것은 바로 병렬 처리이다.■ Encoder와 Decoder를 RNN으로 만들면, RNN은 시간축 방향(오른쪽 방향)을 따라 이전 시점에 계산한 결과를 이..