본문 바로가기

딥러닝/밑바닥부터 시작하는 딥러닝 2

(8)
8장 : 어텐션 8.1 어텐션의 구조 8.1.1 seq2seq의 문제점 seq2seq에서 Encoder의 출력은 고정 길이 벡터 고정 길이 벡터 - 입력 문장의 길이에 관계없이 항상 같은 길이의 벡터로 변환 -> 필요한 정보가 벡터에 다 담기지 못하게 됨 8.1.2 Encoder 개선 Encoder출력의 길이를 입력 문장의 길이에 따라 바꿔줌 -> 시각별 LSTM계층의 은닉 상태 벡터를 모두 이용 -> 입력된 단어와 같은 수의 벡터 각 시각의 은닉 상태에는 직전에 입력된 단어에 대한 정보가 많이 포함되어 있음 -> hs : 각 단어에 해당하는 벡터들의 집합 8.1.3 Decoder 개선 ① 기존 Decoder - Encoder의 LSTM 계층의 마지막 은닉 상태만을 이용 -> hs 전부를 활용할 수 있도록 Decoder..
7장 : RNN을 사용한 문장 생성 7.1 언어 모델을 사용한 문장 생성 7.1.1 RNN을 사용한 문장 생성의 순서 'I' 라는 단어를 입력으로 주면 다음에 출현하는 단어의 확률분포를 출력함 이 결과를 기초로 다음 단어를 새로 생성하려면 1) 확률이 가장 높은 단어를 선택하는 방법 - 결정적 결정적 : 결과가 일정하게 정해지는 것 2) 확률적으로 선택하는 방법 각 후보 단어의 확률에 맞게 선택하는 것, 확률이 높은 단어는 선택되기 쉽고, 낮은 단어는 선택되기 어려움 선택되는 단어(샘플링 단어)가 매번 다를 수 있음 7.1.2 문장 생성 구현 ##RnnlmGen 클래스 구현 class RnnlmGen(Rnnlm): def generate(self, start_id, skip_ids=None, sample_size=100): #statr_i..
6장 : 게이트가 추가된 RNN 6.1 RNN의 문제점 6.1.1 RNN 복습 6.1.2 기울기 소실 또는 기울기 폭발 기울기 소실 : 시간을 거슬러 올라갈수록 기울기가 작아짐 기울기 폭발 : 시간을 거슬러 올라갈수록 기울기가 커짐 6.1.3 기울기 소실과 기울기 폭발의 원인 역전파에서 차례로 tanh -> + -> MatMul 연산 통과 tanh - 미분값 그래프 : 1.0이하, x가 0으로부터 멀어질수록 작아짐 => 역전파에서 기울기가 tanh 노드를 지날 때마다 값이 계속 작아짐 MatMul - 시계열 데이터의 시간 크기만큼 매번 똑같은 Wh가중치가 행렬 곱에 사용됨 N = 2 #미니배치 크기 H = 3 #은닉 상태 벡터의 차원 수 T = 20 #시계열 데이터의 길이 dh = np.ones((N, H)) np.random.seed..
5장 : 순환 신경망(RNN) 지금까지의 신경망 - 피드포워드 (feed forward) 신경망 -> 시계열 데이터 다루지 못한다는 단점 => 순환 신경망 RNN 등장 5.1 확률과 언어 모델 5.1.1 word2vec을 확률 관점에서 바라보다 지금까지는 맥락을 좌우 대칭으로 생각해옴 -> 맥락을 왼쪽 윈도우만으로 한정 5.1.2 언어 모델 단어 나열에 확률 부여 특정한 단어의 시퀀스에 대해 그 시퀀스가 일어날 가능성을 확률로 평가 수식적 설명 W1,...,Wm이라는 m개 단어로 된 문장 단어 W1,...,Wm이라는 순서로 출현할 확률 : P(W1,...,Wm) -> 동시 확률 (여러 사건이 동시에 일어날 확률) 사후 확률을 사용하여 분해 가능 (확률의 곱셈정리에 의해) 파이 기호 : 모든 원소를 곱하는 총곱 -> 사후확률 : 타깃 ..
4장 : word2vec 속도 개선 앞 장의 단순한 word2vec에 두 가지 개선 추가 1) Embedding 계층 도입 2) 네거티브 샘플링이라는 새로운 손실 함수 도입 4.1 word2vec 개선 ① 거대한 말뭉치를 다루게 되면 두 계산의 병목 발생 -> 계산에 많은 시간 소요 1) 입력층의 원핫 표현과 가중치 행렬 W_in의 곱 계산 -> Embedding 계층으로 해결 2) 은닉층과 가중치 행렬 W_out의 곱 및 softmax 계층의 계산 -> 네거티브 샘플링 손실 함수로 해결 4.1.1 Embedding 계층 -> 결과적으로 행렬의 특정 행을 추출하는 것 => 단어ID에 해당하는 행을 추출하는 계층 (Embedding 계층) Embedding 계층에 단어 임베딩(분산 표현) 저장 단어의 밀집벡터 표현 : 단어 임베딩, 분산 표..
3장 : word2vec 추론 기반 기법 3.1 추론 기반 기법과 신경망 단어를 벡터로 표현하는 방법 - 통계 기반 기법, 추론 기반 기법 -> 모두 분포 가설이 배경 3.1.1 통계 기반 기법의 문제점 대규모 말뭉치를 다룰 때 문제 발생 SVD를 nxn 행렬에 적용하는 비용은 O(n^3) 통계 기반 기법은 1회의 처리만에 단어의 분산 표현 얻음 추론 기반 기법에서는 신경망을 이용해 미니배치로 학습 -> 학습 샘플씩 반복해서 학습하며 가중치 갱신 -> 계산량이 큰 작업 처리 가능, GPU 이용한 병렬 계산 가능 3.1.2 추론 기반 기법 개요 추론 : 주변 단어(맥락)가 주어졌을 때 ?에 무슨 단어가 들어가는지 추측하는 작업 추론 문제를 반복해서 풀면서 단어의 출현 패턴 학습 모델 - 맥락 정보를 입력받아 각 단어의 출현 확률을..
2장 : 자연어와 단어의 분산 표현 2.1 자연어 처리란 Natural Language Processing(NLP): 우리의 말을 컴퓨터에게 이해시키기 위한 기술 2.1.1 단어의 의미 우리의 말은 '문자'로 구성, 말의 의미는 '단어'로 구성 단어 : 의미의 최소 단위 2.2 시소러스 : (기본적으로는) 유의어 사전 자연어 처리에 이용되는 시소러스에서는 단어 사이의 '상위와 하위' 혹은 '전체와 부분' 등 더 세세한 관계까지 정의 2.2.1 WordNet : 자연어 처리 분야에서 가장 유명한 시소러스 유의어를 얻거나 단어 네트워크 이용 가능 단어 네크워크를 사용해 단어 사이의 유사도 구할 수 있음 2.2.2 시소러스의 문제점 사람이 수작업으로 레이블링하는 방식 결점 1) 시대 변화에 대응하기 어렵다. 2) 사람을 쓰는 비용은 크다. 3)..
1장 : 신경망 복습 1.3 신경망의 학습 1.3.1 손실함수 교차 엔트로피 오차(Cross Entropy error) 이용 소프트맥스 함수의 출력(확률)이 교차 엔트로피에 입력 확률과 정답 레이블의 오차를 계산 : 손실함수 softmax with Loss 계층 하나로 구현 1.3.2 미분과 기울기 각 원소에 대한 미분을 정리한 것이 기울기 gradient 행렬과 기울기의 형상이 같음 수학에서의 기울기는 벡터에 대한 미분으로 한정된 것과 달리 딥러닝에서는 행렬이나 텐서에 대해서도 미분을 정의하고 기울기라 부름 1.3.3 연쇄 법칙 : 합성함수에 대한 미분의 법칙 -> 많은 함수를 연결하더라도 그 미분은 개별 함수의 미분들을 이용해 구할 수 있음 1.3.4 계산 그래프 각 노드의 역전파 덧셈 노드 : 상류로부터의 기울기 그대로..