Deep Learning/from scratch II

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..

Deep Learning/from scratch II

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

통계 기반 기법 : 학습 데이터를 한꺼번에 처리(배치 학습)하고, 단어의 빈도를 기초로 단어를 표현한다. 추론 기반 기법: 학습 데이터의 일부를 사용하여 순차적으로 학습(미니 배치 학습) 추론 기반 기법과 신경망 맥락 정보를 입력받아 단어의 출현 확률 기반으로 맥락에서 나올 단어를 추측한다. 신경망에서는 단어를 원핫벡터로 변환한다. 인덱스와 단어 ID와 같은 원소를 1로, 나머지는 모두 0으로 설정한다. 원핫벡터 변환 과정을 거치면 단어를 고정길이 벡터로 변환할 수 있다. 단어를 백터로 나타낼 수 있고, 신경망으로 처리할 수 있다. 입력층 뉴런과의 가중합(weighted sum)은 은닉층 뉴런이다. 코드로 구현하면 다음과 같다. import numpy as np c = np.array([[1,0,0,0,..

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2] - 자연어와 단어의 분산 표현 II

통계 기반 기법 개선 상호정보량 만약 the car drive 라는 단어가 있으면, the와 car 과의 연관성 보다, car과 drive가 더 관련성이 깊다고 생각할 것입니다. 하지만 the가 더 많이 등장한다면, the와의 관련성이 더 높다고 생각할 것이다. 이러한 문제를 해결하기 위해 점별 상호정보량(PMI) 이라는 척도를 사용한다. P(x)는 x가 일어날 확률, P(y)는 y가 일어날 확률, P(x,y)는 x,y가 동시에 일어날 확률이다. C는 동시발생 행렬, C(x,y)는 단어 x와 y가 동시발생하는 횟수, C(x)와 C(y)는 각각 단어 x와 y의 등장 횟수이다. N은 말뭉치에 포함된 단어수를 의미한다. 만약 the 가 1000번, car가 20번, drive가 10번 등장했을 때, the와 ..

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2] - 2. 자연어와 단어의 분산 표현 I

밑딥1은 대부분이 배웠던 내용이라 복습의 목적으로 일주일만에 책 한권 다했다. 밑딥2 1장은 밑딥1의 총망라라 정리하지 않았고 2장부터 시작합니다 밑딥1보다 좀 더 꼼꼼히 기록할 예정임 통계 기반 기법 말뭉치 전처리 하기 통계 기반 기법에서는 말뭉치(corpus)를 이용한다. 말뭉치란 대량의 텍스트 데이터를 의미한다. 우리가 흔히 볼 수 있는 뉴스, 소설과 같은 글도 말뭉치로 되어 있다. 다음과 같은 말뭉치로 앞으로의 분석을 진행할 것이다. text = 'You say goodbye and I say hello.' 이 텍스트를 단어 단위로 분할한다. txt = 'You say goodbye and I say hello.' txt = txt.lower() #단어 소문자화 txt = txt.replace('..

해파리냉채무침
'Deep Learning/from scratch II' 카테고리의 글 목록 (2 Page)