본문 바로가기

Deep Learning

(10)
[밑바닥부터 시작하는 딥러닝2] Chapter 8. 어텐션 8.1 어텐션의 구조8장에서는 현재 seq2seq가 안고있는 문제를 살펴보고, 어텐션의 구조를 설명하며 구현해 볼 예정이다.8.1.1 seq2seq의 문제점seq2seq에서는 Encoder가 시계열 데이터를 인코딩해 Decoder로 그 정보를 전달한다. 이때 Endoer의 출력은 '고정 길이의 벡터' 이다. 고정 길이 벡터는 문장이 아무리 길어도 동일한 길이의 벡터로 변환된다는 뜻이다. 이 경우 필요한 정보가 벡터에 다 담기지 못할 가능성도 있다. 8.1.2 Encoder 개선Encoder 출력의 길이를 입력 문장의 길이에 따라 바꿔주는게 좋다. 즉, 위 그림처럼 각 시각(각 단어)의 은닉 상태를 모두 이용하면 입력된 단어와 같은 수의 벡터를 얻을 수 있어 Encoder가 '하나의 고정 길이 벡터'라는 ..
[밑바닥부터 시작하는 딥러닝2] Chapter 7. RNN을 사용한 문장 생성 7.1 언어 모델을 사용한 문장 생성7.1.1 RNN을 사용한 문장 생성의 순서LSTM의 신경망 구성은 위와 같다. 이제 언어 모델에게 문장을 생성시키는 순서를 설명해보도록 하자."You say goodbye and I say hello" 말뭉치가 있을 때 학습된 언어모델에 "I"라는 단어를 입력으로 주면 다음과 같은 확률분포를 출력한다. 다음 단어 생성 방법으로는 (1) 확률이 가장 높은 단어를 선택하는 "결정적" 방법, (2) 각 후보 단어의 확률에 맞게 선택하는 "확률적" 방법이 있다. 이 중 두번째를 선택해보도록 하자. 확률분포로부터 샘플링을 수행한 결과 "say"가 선택되었다. 다만 다른 단어들도 출현확률에 따라 샘플링될 가능성이 존재한다. (다양한 답변 생성 가능) 두 번째 단어도 방금 생성된..
[밑바닥부터 시작하는 딥러닝2] Chapter 6. 게이트가 추가된 RNN 5장의 RNN은 과거의 정보를 기억할 수 있지만, 시간적으로 멀리 떨어진 장기(long term) 의존관계를 잘 학습할 수 없다는 단점이 있다. 이를 보완하는 LSTM이나 GRU를 더 자주 사용하곤 하는데, '게이트' 구조를 활용해 시계열 데이터의 장기 의존 관계를 학습할 수 있다.이번 장에서는 LSTM, GRU 등의 게이트가 추가된 RNN 구조를 살펴보고자 한다. 6.1 RNN의 문제점6.1.1 RNN 복습RNN 계층은 순환 경로를 가지고 있으며, 시계열 데이터 $\mathbf{x}_t$를 입력하면 은닉 상태 $\mathbf{h}_t$를 출력하며 여기에는 과거 정보가 저장되어있다. RNN은 바로 이전 시각의 은닉 상태를 이용하여 과거 정보를 계승할 수 있다. 이처럼 행렬의 곱과 합, 활성화 함수 tan..
[밑바닥부터 시작하는 딥러닝2] Chapter 5. 순환 신경망(RNN) 5.1 확률과 언어 모델5.1.1 word2vec을 확률 관점에서 바라보다word2vec의 CBOW : 맥락 $w_{t-1}$과 $w_{t+1}$로부터 타깃 $w_t$를 추측하는 일을 다음 $P(w_t|w_{t-1}, w_{t+1}) 사후 확률을 모델링함으로써 수행한다. 이 부산물로써 단어의 의미가 인코딩된 '단어의 분산 표현'을 얻을 수 있다.그렇다면 본래 목적인 '맥락으로부터 타깃을 추측하는 것'은 곧 '언어모델'과 관련이 있다.5.1.2 언어 모델언어 모델(Language Model)은 특정 단어 시퀀스에 대해 그 시퀀스가 일어날 가능성이 어느 정도인지를 확률로 평가한다. 이를 응용하면 기계 번역과 음성 인식, 그리고 새로운 문장을 생성하는 용도로도 이용 가능하다. 언어 모델은 단어 순서의 자연스러..
[밑바닥부터 시작하는 딥러닝2] Chapter 4. Word2Vec 속도 개선 corpus = np.array([0, 1, 2, 3, 4, 1, 2, 3])power = 0.75sample_size = 2sampler = UnigramSampler(corpus, power, sample_size)target = np.array([1, 3, 0])negative_sample = sampler.get_negative_sample(target)print(negative_sample)# [[0 3]# [2 1]# [2 1]]앞서 CBOW 모델은 말뭉치에 포함된 어휘 수가 많아지면 계산량이 커져 계산 시간이 너무 오래 걸린다. 이번 장에서는 word2vec의 속도 개선을 Embedding 계층과 Negative Sampling loss로 개선할 예정이다.4.1 word2vec 개선 I ..
[밑바닥부터 시작하는 딥러닝2] Chapter 3. Word2Vec 3장은 '추론 기반 기법' 중 가장 유명한 Word2Vec을 소개하고, 그 구조를 구현하며 이해하는 장입니다. 3.1 추론 기반 기법과 신경망3.1.1 통계 기반 기법의 문제점대규모 말뭉치를 다룰 때(ex-100만개 이상의 단어들) 100만 x 100만 동시발생 행렬에 SVD를 적용하는 것은 현실적이지 않음. (SVD를 $n \times n$ 행렬에 적용하는 비용은 $O(n^3)$)추론 기반 기법(신경망)에서는 소량(미니배치)의 학습 샘플씩 반복해서 학습해가며 가중치를 갱신한다.통계 기반 기법은 학습 데이터를 한번에(배치로) 처리하지만, 추론 기반 기법은 학습 데이터의 일부를 사용해(미니배치) 순차적으로 학습한다. 따라서 계산량이 큰 작업을 처리하기도 용이하고, GPU를 이용한 병렬 계산도 가능해 학습 ..
[밑바닥부터 시작하는 딥러닝2] Chapter 2. 자연어와 단어의 분산 표현 다음은 [밑바닥부터 시작하는 딥러닝2]을 학습하고 정리한 내용입니다.2.1 자연어 처리란NLP(자연어처리) : 인간의 말을 컴퓨터에게 이해시키기 위한 기술(분야)대표적인 예 : Q&A 시스템, 문장 자동요약, 감정분석 등. 2.2 시소러스시소러스(Thesaurus) : 유의어 사전. 동의어와 유의어가 한 그룹으로 분류되어 있다. 단어 사이의 '상위와 하위', '전체와 부분' 등 더 세세한 관계까지 정의해 둔 경우가 많음. 그림처럼 모든 단어에 대한 유의어 집합을 만든 다음, 단어들의 관계를 그래프로 표현하여 단어 사이의 연결을 정의할 수 있다. 그러면 이 '단어 네트워크'를 이용해 컴퓨터에게 단어 사이의 관계를 가르칠 수 있다. 더 자세히 알고싶다면 Stanford의 CS224N : Deep Learni..
[밑바닥부터 시작하는 딥러닝2] Chapter 1. 신경망 복습 다음은 [밑바닥부터 시작하는 딥러닝2]을 학습하고 정리하는 내용입니다. 신경망 기초 및 NLP 기초를 Numpy와 Matplotlib만 가지고 구현해봄으로써 자연어처리 및 딥러닝 구조에 대해 더 깊게 이해할 수 있기를 바랍니다. 1.1 수학과 파이썬 복습1.1.1 벡터와 행렬Vector : 크기와 방향을 가진 양. 파이썬에서는 1차원 배열로 취급Matrix(행렬) : 2차원 형태의 배열.수학에서는 열벡터가 기본이지만, 여기에서는 개발의 편의성을 위해 기본적으로 행벡터 기준으로 다룬다. 1.1.2 행렬의 원소별 연산Element-wise(원소별) 연산 : 다차원 넘파이 배열의 사칙연산 중 +와 *(원소별 원소 곱셈)가 가능.1.1.3 브로드캐스트넘파이의 다차원 배열에서는 형상(shape)가 다른 배열끼리도..