Data Science

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2] - 7장 RNN을 사용한 문장 생성 I

언어 모델을 사용한 문장 생성 RNN을 사용한 문장 생성의 순서 시계열 데이터(T개분 만큼) 모아 처리하는 Time LSTM과 Time Affine 계층을 만들었다. I라는 단어를 주었을 때 출력한 확률분포는 다음과 같이 보인다. 이것을 기초로 다음 단어를 생성하는 방법은 두가지가 있다. 1) 확률이 가장 높은 단어 선택하기. 결과가 일정하게 정해짐 (결정적 방법) 2) 확률적으로 선택, 각 후보 단어의 확률에 맞게 선택하는것, 확률이 높은 단어는 선택되기 쉽고 확률이 낮은 단어는 선택되기 어렵다. 이 방식은 선택되는 단어가 매번 다르다. (확률적 결정 방법) 2번째 방법(확률적 선택)으로 샘플링을 수행한 결과로 say가 선택되었다. 다만 결정적이 아니고 확률적으로 결정되었다는 특징이 있다. 다른 단어들..

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2] - 6장 게이트가 추가된 RNN II

LSTM을 사용한 언어 모델 LSTM 계층을 사용하는 Rnnlm 클래스 구현 import sys sys.path.append('..') from time_layers import * from base_model import BaseModel class Rnnlm: 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') lstm_Wh =..

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2] - 6장 게이트가 추가된 RNN I

RNN의 문제점 기울기 소실 또는 기울기 폭발 RNN은 시계열 데이터의 장기 의존 관계를 학습하기 어렵다. 두가지 주 원인이 기울기 소실, 기울기 폭발이 있다. 언어 모델은 주어진 단어들을 기반으로 다음 단어를 예측한다. Tom was watching TV in his room. Mary came into the room. Mary said hi to ____ 빈칸에 들어갈 단어는 Tom이다. Tom이 방에서 tv를 보고 있는 것과, mary가 방으로 들어간 정보가 기억돼야 한다. 정답이 Tom인것을 도출하기 위한 학습은 BPTT로 수행한다. 역전파 수행시 RNN 계층이 과거 방향으로 의미있는 기울기를 전달한다. 기울기는 의미있는 정보가 들어있고, 이것을 과거로 전달함으로써 장기 의존 관계를 학습한다. ..

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2] - 5. 순환신경망(RNN) II

시계열 데이터 처리 계층 구현 RNNLM의 전체 그림 맨 아래 embedding 계층은 단어 ID를 단어 벡터로 변환 ->분산 표현 RNN 계층 입력 -> 은닉상태 위쪽 & 오른쪽으로 출력 -> 위로 출력한 은닉상태 affine 계층 -> softmax you 를 입력했을 때, say가 가장 높게 나옴. 제대로 예측하려면 좋은 가중치를 사용해야함. say를 입력했을 때, goodbye와 hello가 높게 나옴. 'you say goodye', 'you say hello' 모두 자연스러운 문장인 것으로 보아 RNN 계층은 'you say'라는 맥락을 기억하고 있다. you say 라는 과거의 정보를 은닉상태 벡터로 저장해둔 것이다. RNN 계층이 과거에서 현재로 데이터를 흘려보내줌으로써 과거의 정보를 인코..

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2] - 5. 순환 신경망(RNN) I

feed forward (피드포워드 신경망): 흐름이 단방향인 신경망, 입력 신호가 중간층, 그 다음 층 계속 그 다음층으로 한 방향으로만 전달 되는 것을 의미함. 피드포워드는 시계열 데이터의 성질을 충분히 학습하기 어려움, 그래서 순환신경망의(Recurrent Neural Network) 등장 확률과 언어 모델 word2vec을 확률 관점에서 바라볼 때 W1 W2 ... Wt-1 Wt Wt+1 .... WT-1 WT CBOW모델은 맥락 Wt-1 Wt+1로 부터 Wt를 추측하는 일을 수행한다. 수식으로 나타내면 다음과 같다. P(Wt | Wt-1, Wt+1) 이 사후 확률은 Wt-1과 Wt+1이 주어졌을 때 Wt가 일어날 확률을 뜻한다. 윈도우 크기(양쪽 맥락 수)가 1일 때이다. 아래는 맥락을 왼쪽 윈..

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2] - 4. word2vec 속도 개선 II

개선판 word2vec 학습 CBOW 모델 구현 import sys sys.path.append('..') import numpy as np from layers import Embedding from negative_sampling_layer import NegativeSamplingLoss class CBOW: def __init__(self, vocab_size, hidden_size, window_size, corpus): #어휘수, 은닉층 뉴런수, 맥락크기, 단어 ID 목록 V, H = vocab_size, hidden_size # 가중치 초기화 W_in = 0.01 * np.random.randn(V, H).astype('f') W_out = 0.01 * np.random.randn(V, H)..

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2]- 4. word2vec 속도 개선 I

word2vec의 속도 개선으로 새로운 계층을 도입하는 Embedding, 새로운 손실함수를 도입하는 negative sampling 이 두가지가 있다. Embedding word2vec 구현 시 단어를 one-hot vector 로바꿔 가중치 행렬을 곱한다. 만약 어휘수가 100만개일 경우, one-hot vector도 100만 차원이 된다. 도출되는 건 아래 사진 처럼 특정 행을 추출하는 것이다. 그러므로 원핫 표현 변환과 복잡한 행렬곱은 필요가 없다. embedding 계층은 단어 ID에 해당하는 행을 추출하여 사용한다. embedding 계층 구현 행 추출 행렬에서 W[2] W[5] 처럼 특정 행을 추출한다. import numpy as np W = np.arange(21).reshape(7, 3..

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2] - 3장 word2vec II

학습 데이터 준비 맥락: 각 행이 신경망의 입력으로 쓰임. 타겟: 각 행이 예측해야 하는 단어 맥락수는 여러개지만 타겟은 오직 하나, 그래서 맥락을 영어로 쓸 때는 's' 를 붙여 복수형임을 명시하는 것이 좋다. 말뭉치로부터 맥락과 타겟을 만드는 함수 구현 1.말뭉치 텍스트 ID 변환 2장에서 구현한 함수 사용 #util.py import numpy as np def preprocess(text): text = text.lower() text = text.replace('.', ' .') words = text.split(' ') word_to_id = {} id_to_word = {} for word in words: if word not in word_to_id: new_id = len(word_to..

해파리냉채무침
'분류 전체보기' 카테고리의 글 목록 (8 Page)