전체 글 55

[밑바닥부터 시작하는 딥러닝 2]Chapter 8. 어텐션

8.1 어텐션의 구조encoder 개선지금까지 LSTM 계층의 마지막 은닉 상태만을 Decoder에 전달했다. 그러나 Encoder 출력의 길이는 입력 문장의 길이에 따라 바꿔주는 게 좋다. 이 점이 Encoder의 개선 포인트이다.위의 그림처럼 시각별 LSTM 계층의 은닉 상태 벡터를 모두 이용하는 것이다.각 시각의 은닉 상태 벡터를 모두 이용하면 입력된 단어와 같은 수의 벡터를 얻을 수 있다. 위의 예에서는 5개의 단어가 입력되었고, 이때 Encoder는 5개의 벡터를 출력한다. 이것으로 Encoder는 '하나의 고정 길이 벡터'라는 제약으로부터 해방된다. 위의 그림에서 주목할 것은 LSTM 계층의 은닉 상태의 "내용"이다. 시각별 LSTM 계층의 은닉 상태에는 어떠한 정보가 담겨 있을까? 각 시각의..

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

7.1 언어 모델을 사용한 문장 생성시계열 데이터를 한꺼번에 처리하는 Time 계층 사용한 구성언어 모델은 위와 같이 다음에 출현할 단어의 확률 분포를 출력다음 단어를 새로 생성하려면?첫번째로는 확률이 가장 높은 단어 선택확률분포에서 샘플링한 결과 'say'가 선택된 경우하지만 이 선택은 확률적이기 때문에 필연적이지는 않는다즉, 낮은 확률로 다른 단어가 선택될수도 있다는 점import syssys.path.append('..')from rnnlm_gen import RnnlmGenfrom dataset import ptbcorpus, word_to_id, id_to_word = ptb.load_data('train')vocab_size = len(word_to_id)corpus_size = len(cor..

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

6.1 RNN의 문제점BPTT에서의 vanishing gradient , exploding gradient 으로 인해 시계열 데이터의 장기 의존 관계 학습에 어려움이 있다. RNN - 시계열 데이터 xt">xt𝑥𝑡 입력시 ht">htℎ𝑡(은닉 상태) 출력기울기(gradient)학습해야 할 의미가 있는 정보과거로 전달, 장기 의존 관계 학습중간에 정보가 사라지면 가중치 매개변수의 갱신 불가 6.1.2 기울기 소실( vanishing gradient ), 기울기 폭발( exploding gradient )의 원인기울기 소실 - 기울기가 빠르게 작아지며 일정 수준 이하로 작아지면 가중치 매개변수가 갱신되지 않는 문제기울기 폭발 - 오버플로를 유발하여 NaN(Not a Number) 유발해결 방법 기울기 ..

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

5.1 확률과 언어 모델윈도우 크기가 1인 CBOW 모델의 사후 확률 모델링 좌우 비대칭으로도 윈도우 크기 설정 가능(ex:왼쪽 2, 오른쪽 0)- 위의 사후 확률을 어떻게 구할 수 있을까?- CBOW에서는 맥락의 크기를 특정 값으로 한정하여 근사적으로 나타낼 수 있다여기서는 왼쪽 2개 단어로 한정2층 마르코프 연쇄(Markov Chain: 미래의 상태가 현재 상태에만 의존해 결정되는 것)-> 결국 특정 길이로 고정, 긴 맥락이 필요한 문제에 제대로 된 답을 도출 못함, 맥락 크기를 키울 수는 있으나 맥락 안의 단어 순서가 무시된다(bag-of-words)일반 CBOW 모델: 은닉층에서 더해지므로 순서 무시한다5.2 RNN이란"순환하는 신경망"닫힌 경로 필요 -> 데이터가 순환하면서 정보가 끊임없이 갱신..

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

4.1 word2vec 개선앞장에서 구현한 CBOW 모델예시처럼 입력되는 어휘가 7개일땐 문제가 없다하지만 어휘가 100만개, 은닉층의 뉴런이 100개인 CBOW 모델을 생각해보자.위 모델의 계산을 위해서는 많은 시간이 소요되는데, 정확히는 다음의 두 계산에서 병목이 일어난다.입력층의 원핫 표현과 가중치 행렬 W_in의 곱 계산은닉층과 가중치 행렬 W_out의 곱 및 Softmax 계층의 계산첫 번째 병목을 살펴보자. 어휘가 100만개라면 원핫표현 하나만해도 원소수가 100만개인 벡터가 되어, 상당한 메모리를 차지하게 된다. 이 원핫벡터와 가중치 행렬 W_in을 곱해야 하는데, 이것만으로 계산자원을 많이 사용한다. 이 문제는 Embedding 계층을 도입하는 것으로 해결된다.두 번째 병목은 은닉층 이후의..

[밑바닥부터 시작하는 딥러닝 2] Chapter 3. word2vec

3.1 추론 기반 기법과 신경망단어를 벡터로 표현하는 방법통계 기반 기법추론 기반 방법3.1.1 통계 기반 기법의 문제점통계 기반 기법 - 학습 데이터를 한번에 처리(배치 학습)추론 기반 기법 - 학습 데이터의 일부를 사용하여 순차적으로 학습(미니배치 학습)3.1.3 신경망에서의 단어 처리신경망에서 단어를 사용하기 위해 고정 길이의 벡터로 변환one-hot 벡터 - 벡터의 원소 중 하나만 1, 나머지는 모두 0인 벡테"You say goodbye and i say hello" 의 one-hot 표현 예시3.2 단순한 word2vecCBOW(continuous bag-of-words) 모델의 추론 처리CBOW - context(주변 단어)로부터 Target(중앙 단어)을 추측하는 용도의 신경망다중 클래스 ..

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

자연어 처리란사람들이 평소에 사용하는 말을 자연어라고 한다. 자연어 처리(NLP)는 사람의 말을 컴퓨터에게 이해시키기 위한 기술이다. 자연어 처리가 추구하는 목표는 사람의 말을 컴퓨터가 이해하도록 만들어서, 컴퓨터가 우리에게 도움이 되는 일을 수행하게 하는 것이다.단어의 의미우리의 말은 ‘문자’로 구성되며, 말의 의미는 ‘단어’로 구성된다. 즉 단어는 의미의 최소단위이다. 컴퓨터에게 단어의 의미를 전달하기 위해서는 먼저 단어를 표현하는 방식이 있어야 한다. 여러가지 방식 중 3가지 정도 알아보자.시소러스(유의어 사전)를 활용한 기법통계 기반 기법추론 기반 기법(word2vec) 시소러스시소러스는 유의어 사전으로 뜻이 비슷한 단어가 한 그룹으로 분류되어 있다. ex) car, auto, automobile..

[밑바닥부터 시작하는 딥러닝 2] Chapter 1. 신경망 복습

1.1 수학과 파이썬 복습1.1.1 벡터와 행렬벡터 - 크기와 방향을 가진 양, 1차원 배열행렬 - 2차원 형태로 늘어선 것, 2차원 배열, 가로줄 행row, 열column열벡터 - 숫자를 세로로 나열행벡터 - 숫자를 가로로 나열>>>import numpy as np>>>x = np.array([1, 2, 3])>>>x.__class__ # 클래스 이름 표시>>>x.shape(3,)>>>x.ndim1>>>W = np.array([[1,2,3],[4,5,6]])>>>W.shape(2,3)>>>W.dim21.1.2 행렬의 원소별 연산>>>W = np.array([[1,2,3],[4,5,6]])>>>X = np.array([[0,1,2],[3,4,5]])>>>W + Xarray([[1,3,5], ..

[Kafka] 카프카란?

카프카란 높은 서버와 클라이언트들이 높은 퍼포먼스의 TCP 프로토콜을 하게 하는 분산 시스템이다. 링크드인에서 개발한 오픈소스 메시지 브로커 프로젝트이며, 목적은 데이터 파이프라인의 퍼포먼스를 올리고 스트리밍 분석 및 데이터 결합이다. 카프카를 왜 사용하는지 예시를 보면, 보통 간단한 프로젝트를 하면 윗 그림처럼 하나의 어플리케이션(Source)에 하나의 데이터베이스(target)와 연결된다. -나는 대학시절에 여러개의 데이터베이스를 사용해야 하는 프로젝트는 해본적이 없다.. 그래서 카프카의 필요성에 대해서는 전혀 느끼지 못했다. 자 그럼 어플리케이션과 데이터베이스가 많으면 어떻게 될까 이것도 실제 서비스중인 어플리케이션에 비하면 적은 편이지만 그래도 수정하고 유지보수 하는데에 매우 까다로워 졌다는걸 알..

Kafka 2022.07.18

[Spring] Inversion of Control (IoC)

Inversion of Control(IoC)이란? 직역을 하자면 제어의 역전이다. 하지만, 이렇게 얘기하면 전혀 와 닿지가 않는다. 제어가 역전 되었다고 하는데 제어의 대상은 무엇인가 누구에서 누구로 역전 되었다는걸까 기존에는 객체를 생성하고 관리하는 걸 개발자가 직접 코드로 했다면, 제어의 역전을 적용하면 이런 일들을 개발자가 아닌 프레임워크가 하게 하는 것이다. 즉, 객체 생성과 관리의 주도권이 개발자가 아닌 프레임워크에게 있다는 뜻이다. 그럼 이게 왜 필요한지에 대해서는 직접 코드를 작성해보면 알수 있다. 선생님이라는 클래스를 만들어 봤다. 선생님은 당연히 여러 업무를 하시겠지만 예시용으로 가르치는 일만 하는걸로 하자. 예시 (IoC 적용 안 했을때) 선생님은 당연히 수학, 과학, 체육 등등 다양..

Spring 2022.01.11