Processing math: 100%
본문 바로가기

전체 글

(177)
시퀀스투시퀀스(Sequence‑to‑Sequence, seq2seq) (3) 1. Seq2Seq 개선 ■ Seq2Seq 모델의 학습 진행 속도와 정확도를 개선할 수 있는 방법으로 입력 데이터를 반전(reverse)하는 것과 Peeky Decoder를 사용하는 방법이 있다. 1.1 Encoder에 들어가는 입력 시퀀스 반전(reverse)■ 첫 번째 방법은 Encoder에 입력되는 입력 시퀀스 데이터의 순서를 반전시켜 Encoder 모델어 입력하는 것이다. 이 기법은 단순하지만 성능을 개선시킬 수 있다.■ 입력 시퀀스 반전 기법이란, 예를 들어 '나', '는', '고양이', '로소', '이다.'라는 순서를 가지는 시퀀싀의 순서를 반전시켜 '이다', '로소', '고양이', '는', '나'와 같이 역순으로 Encoder 모델에 입력하는 것이다.■ 단순히 입력 시퀀스의 순서를 바꾸는 ..
시퀀스투시퀀스(Sequence‑to‑Sequence, seq2seq) (2) 1. Seq2Seq를 이용한 번역기 구현■ seq2seq 모델을 사용하여 기계 번역기를 구현한다. 예제로 사용한 데이터는 영어-프랑스어 텍스트 파일이다. 해당 파일은 영어와 프랑스어가 대응되는 병렬 말뭉치(parallel corpus)이다.- 병렬 말뭉치는 두 개 이상의 언어가 상호 대응되는 형태로 연결된 말뭉치이다.■ 목표는 이 병렬 말뭉치를 사용하여 입력 시퀀스인 영어를 입력하면 출력 시퀀스인 프랑스어를 출력하는 seq2seq 모델을 구현하는 것이다. 이때, 입력 시퀀스와 출력 시퀀스의 길이는 서로 다를 수 있다.1.1 전처리■ 이 텍스트 데이터는 Run!    Prenez vos jambes à vos cous !와 같이 \t(tab)을 기준으로 영어와 프랑스어로 연결되어 있으며, 악센트와 구두점이..
LSTM, GRU (2) 1. nn.LSTM( ), nn.GRU( )1.1 (일반적인) LSTM/GRU■ 파이토치에서 LSTM/GRU 셀을 사용하는 방법은 RNN 셀을 사용하려고 했을 때와 유사하다.torch.nn.LSTM(input_size, hidden_size, num_layers=1, bias=True, batch_first=False, dropout=0.0, bidirectional=False, proj_size=0, device=None, dtype=None) torch.nn.GRU(input_size, hidden_size, num_layers=1, bias=True, batch_first=False, dropout=0.0, bidirectional=False, device=None, dtype=..
LSTM, GRU (1) 1. LSTM 등장 배경■ LSTM 모델은 기존의 바닐라 RNN 모델에서 정보를 저장하는 과정을 발전시켜 바닐라 RNN의 큰 단점이었던 단기 기억만 가능하다는 부분(장기 의존성 문제)을 개선했다. ■ 이 과정에는 새로운 '기억 셀(memory cell)'인 'cell state' 구조를 제안하고 '게이트(gate)'라는 개념을 사용하여 단기 기억과 장기 기억뿐만 아니라 '망각' 개념까지 담겨 있어 인간의 기억 관리와 비슷한 부분이 있다.1.1 RNN 문제점■ 가장 단순한 형태의 RNN을 바닐라 RNN(Vanilla RNN) 또는 Simple RNN이라고 부른다. 바닐라 RNN은 다음과 같은 순환 경로를 통해 과거 시점의 정보를 계승할 수 있어 시퀀스 데이터를 다루기에 적합하다. - 바닐라 RNN은 위와 ..
RNN (2) 3. 파이토치 nn.RNN( )■ 파이토치의 torch.nn.RNN( )을 통해서 RNN 셀을 구현할 수 있으며, torch.nn.RNN( )의 파라미터를 통해 깊은 RNN과 양방향 RNN도 구현할 수 있다. 파라미터는 다음과 같다.torch.nn.RNN(input_size, hidden_size, num_layers=1, nonlinearity='tanh', bias=True, batch_first=False, dropout=0.0, bidirectional=False, device=None, dtype=None)- input_size: 입력할 특성(feature)의 개수이다. - hidden_size: 은닉 상태 벡터의 차원이다.- num_layers:  RNN 레이어를 입력-출력 방향으로 쌓아 ..
가변 길이 인수 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..
상관행렬, 공분산행렬을 이용한 주성분분석 ■ Singular value decomposition (2) - 특이값 분해 응용 (2) 에서 사용한 예시 데이터를 이용하여 공분산행렬을 기반으로 계산된 주성분분석과 상관행렬을 기반으로 계산된 주성분분석을 비교하고자 한다.1. (표본) 공분산행렬에 기초한 분석■ PCA 수행 단계는 다음과 같다. 공분산행렬을 기준으로 설명하면,- ① 데이터의 공분산 행렬을 계산- 여기서 얻게 되는 공분산 행렬은 변수(feature) 사이의 공분산 행렬이다.- 공분산을 계산하기 전에 데이터는 평균 중심화가 적용되어 있어야 한다.- ② ①에서 얻은 공분산 행렬의 고윳값 분해를 구한다.- ③ 고윳값 분해를 통해 얻은 고윳값의 크기에 따라 내림차순으로 정렬하고, 그에 따라 고유벡터를 정렬한다.- 일반적으로 고윳값(eigen v..
RNN (1) 1. 순환 신경망(Recurrent Neural Network, RNN)■ 시계열 데이터에 더 나은 예측을 하기 위해 과거 시점의 정보를 현재 시점에 반영하는 순환 신경망(Recurrent Neural Network, RNN)은 피드포워드 신경망과 달리 다음과 같이 순환 경로가 존재한다. 1.1 RNN 구조■ xt가 입력층의 입력 벡터라고 할 때, 각 단어의 분산 표현은 xt이며, x0,x1,,xt,가 순서대로 하나씩 RNN 계층에 들어간다. ■ 위와 같은 순환 구조를 시점(time step) 기준으로 펼치면, 다음과 같이 한 방향으로 연산이 수행되는 피드포워드 신경망으로 볼 수 있다. - RNN을 표현할 때, 위의 그림에서 좌측과 같..