목록밑.시.딥/2권 (15)
모두야
seq2seq의 문제점/ 해결 Encoder가 시계열 데이터를 인코딩 할 때, Encoder의 출력은 '고정 길이의 벡터' 이다. 입력 문장 길이에 관계없이, 항상 같은 길이의 벡터로 표현해야한다. -> 아무리 긴 문장이여도 고정 길이의 벡터로 변환 해야한다. ☞ Encoder 개선 Encoder 출력 길이를 입력 문장 길이에 따라 바꿔주는 것이 좋다. 시각별 LSTM 계층의 은닉 상태 벡터를 모두 이용하여 입력된 단어와 같은 수의 벡터를 얻는다. => 시각별 LSTM 계층의 은닉 상태에는 어떤 정보가 담겨 있을까? 직전에 입력된 단어의 정보가 많이 포함되어 있다. 은닉상태의 모든 시각만큼 꺼낸다 ☞ Decoder 개선 1. 맥락벡터 c [ 입력과 출력의 여러 단어 중 어떤 단어끼리 서로 관련이 있는가 ..
seq2seq 시계열 데이터 : 언어,음성,동영상 시계열↔시계열 데이터 변환 : 기계 번역→음성 인식 Encoder-Decoder 모델이다. Encoder : 마지막 은닉상태 h에 입력 문장(출발어)를 번역하는 데 필요한 정보가 인코딩된다. : LSTM의 은닉 상태 h 는 고정 길이 벡터이다. Decoder : LSTM 계층이 벡터 h를 입력 받는다. seq2seq는 LSTM 2개가 은닉 상태를 통해 이어져있다. seq2seq 구현하기 단어 단위가 아닌, 문자 단위의 패턴을 학습한다. 57+5 가 입력 되면, ['5','7','+','5']라는 리스트로 처리된다. (주의) 문자 수가 다 다르다. = 샘플마다 데이터의 시간 방향 크기가 다르다. = 가변 길이 시계열 데이터를 다룬다. ==> 미니배치 처리를..
언어 모델을 사용하여 '문장 생성' 수행 1. 말뭉치로 학습된 언어 모델을 이용하여 새로운 문장 생성 2. 개선된 언어 모델을 이용하여 더 자연스러운 문장 생성 seq2seq 구조 공부하기 : 한 시계열 데이터를 다른 시계열 데이터로 변환한다. : RNN 두 개를 연결한다. RNN을 사용한 문장 생성 순서 언어 모델에게 문장을 생성 시키는 순서 - "you say goodbye and I say hello." 라는 말뭉치로 학습한 언어 모델이다. 학습 된 언어 모델에 "I"라는 단어를 입력으로 준다. 언어 모델은 [그림 7-2]와 같은 확률분포를 출력한다. 다음 단어를 새로 생성한다. (1) [결정적 선택] 확률이 가장 높은 단어를 선택한다. (2) [확률적 선택] 단어의 확률에 맞게 선택한다. 확률 분..
언어 모델 구현하기 # coding: utf-8 import sys sys.path.append('..') from common.time_layers import * from common.base_model import BaseModel class Rnnlm(BaseModel): def __init__(self, vocab_size=10000, wordvec_size=100, hidden_size=100): V, D, H = vocab_size, wordvec_size, hidden_size rn = np.random.randn # 가중치 초기화 embed_W = (rn(V, D) / 100).astype('f') lstm_Wx = (rn(D, 4 * H) / np.sqrt(D)).astype('f') ..
RNN(기울기 폭발/ 기울기 손실) 에 이어서---- 기울기 폭발 원인 : 1보다 큰 Wh를 계속 곱해서 오버플로를 일으키며 NaN 값 발생된다. 해결 : 기울기 클리핑 기울기 손실 원인 : tanh의 계속된 미분, 1보다 작은 Wh를 계속 곱해줘서 기울기가 매우 작아진다. 해결 : 게이트가 추가 된 RNN - LSTM [ RNN 문제점은 어떻게 해결할 수 있을까?] 1) 기울기 폭발 - 기울기 클리핑으로 해결 threshold : 문턱값 g : 신경망에서 사용되는 모든 매개변수의 기울기를 하나로 모은 것 ||g|| (기울기의 L2노름) > 문턱값 초과하면 기울기를 수정하자. # 기울기 클리핑 구현 import numpy as np dW1 = np.random.rand(3, 3) * 10 dW2 = np..
[ RNN 복습 / 문제점 ] RNN :순환 경로를 포함하여 과거의 정보 기억 RNN의 문제점 ▷ 시계열 데이터에서 시간적으로 멀리 떨어졌을 경우, 잘 기억하지 못한다. (장기 의존 관계 학습 X) ▷ (해결법) 게이트가 추가된 RNN : LSTM을 사용한다. ▷ (이유) BPTT 에서 기울기 소실 / 기울기 폭발이 일어난다. 기울기 소실 / 폭발 원인 Tom was watching TV in his room. Mary came into the room. Mary said hi to ? (Tom) Tom 이 방에서 TV를 보고 있음 & 그 방에 Mary가 들어옴 이라는 정보를 RNN 계층의 은닉 상태에 인코딩 보관해둬야함 과거 방향으로 의미 있는 기울기 전달 = 의미 있는 정보를 과거로 전달 = 장기 의..
RNN 구현하기 한 단계의 작업을 수행하는 계층을 RNN 계층, T개 단계의 작업을 한번에 처리하는 계층을 Time RNN 계층이라 한다. # RNN 구현하기 class RNN: # 클래스 초기화 def __init__(self, Wx, Wh, b): # 가중치2개, 편향1개 self.params = [Wx, Wh, b] self.grads = [np.zeros_like(Wx), np.zeros_like(Wh), np.zeros_like(b)] #기울기 초기화 self.cache = None #역전파시 중간 데이터 담을 cache 초기화 #순전파 - 입력2개 def forward(self, x, h_prev): #아래입력x, 왼쪽입력h_prev Wx, Wh, b = self.params t = np.do..
지금까지 살펴본 신경망을 피드포워드(feed forward) 신경망이다. 피드포워드 신경망이란, 흐름이 단방향 신경망이다. -> 시계열 데이터 성질(패턴)을 충분히 학습할 수 없다. ==> 따라서, 순환 신경망 (RNN)이 등장한다. word2vec 복습 - CBOW 모델 : 주변 단어(맥락)으로부터 정답(타깃)을 추측한다. 윈도우 크기는 하이퍼파라미터이다. 항상 좌우 대칭이였지만, 이번에는 맥락을 왼쪽 윈도우만으로 한정한다. CBOW 모델의 학습 : 손실 함수(말뭉치 전체의 손실함수 총합)을 최소화하는 가중치 매개변수를 찾자. -> 이러한 가중치 매개변수를 찾게 되면 CBOW 모델은 맥락으로부터 타깃을 더 정확히 추측할 수 있다. ==> 이러한 학습을 통해, 단어의 의미가 인코딩된 '단어의 분산 표현'..
앞 장에서 살펴본 CBOW 모델의 문제점은 말뭉치에 포함된 어휘 수가 많아지면 계산량이 커진다는 점이다. 문제점 입력층의 원핫 표현과 가중치 행렬 Win의 곱 계산 - 어휘 수가 많아지면 원핫 표현의 벡터 크기도 커진다. 은닉층과 가중치 행렬 Wout의 곱 및 Softmax 계층의 계산 - Wout 행렬 곱 계산량도 많다. - 어휘량이 많으면 Softmax 계층에서 계산량이 증가한다. 해결책 Embedding 새로운 계층 도입 네거티브 샘플링 새로운 손실 함수 도입 1. Embedding 계층 기존의 문제점 입력 원핫 벡터를 Matmul 계층에서 가중치 행렬과 곱해 은닉층을 만들어 주었다. 이때 나타나는 결과는 입력(원핫벡터1)이므로 단순히 행렬의 특정 행을 추출하는 것 뿐이다. 따라서 거대한 벡터를 모..
CH3) word2vec - 간단ver (1) CH3) word2vec - 간단ver (1) 단어의 의미를 주변 단어에 의해 형성된다. 추론 기반 기법 word2vec 통계 기반 기법의 문제점 말뭉치의 어휘 수가 많으면 SVD 로 계산량이 큰 작업을 처리하기 어렵다. 통계 기반 기법 : 학습 데이 meme2.tistory.com word2vec 학습 데이터 준비하기 맥락 ->신경망 모델 -> 타깃 말뭉치로부터 맥락,타깃을 만드는 함수 def create_contexts_target(corpus, window_size=1): '''맥락과 타깃 생성 :param corpus: 말뭉치(단어 ID 목록) :param window_size: 윈도우 크기(윈도우 크기가 1이면 타깃 단어 좌우 한 단어씩이 맥락에 포..