밑바닥부터 시작하는 딥러닝2 - Chap8. 어텐션(Attention)
·
공부/밑바닥부터 시작하는 딥러닝
앞챕터에서 RNN을 사용해 문장을 생성했다. 2개의 RNN을 연결하여 시계열 데이터를 다른 시계열 데이터로 변환도 해봤다.(seq2seq) 이번 챕터에서는 seq2seq의 가능성, 그리고 RNN의 가능성을 한걸음 더 깊이 탐험한다.어텐션(Attention)은 스테이블 디퓨전같은 생성 모델을 포함하여, 최근 딥러닝 분야에서 중요한 기술 중 하나이다. 어텐션의 구조seq2seq를 한층 더 강력하게 하는 어텐션 매커니즘을 소개한다.텐션 매커니즘 덕분에 seq2seq는 인간처럼 필요한 정보에만 주목할 수 있다.  seq2seq의 문제점seq2seq에서는 Encoder가 시계열 데이터를 인코딩한다. 인코딩된 정보를 Decoder로 전달한다.이때 Encoder의 출력은 고정 길이의 벡터였다. 이 고정 길이에 큰 문..
밑바닥부터 시작하는 딥러닝2 - Chap7. RNN을 사용한 문장 생성
·
공부/밑바닥부터 시작하는 딥러닝
chap 5,6에 걸쳐 RNN과 LSTM의 구조와 구현을 살펴보았다. 이번 장에서는 언어 모델을 사용해 문장 생성을 수행한다.구체적으로는 우선 말뭉치를 사용해 학습한 언어 모델을 이용하여 새로운 문장을 만들어낸다. 그 다음 개선된 언어 모델을 이용해 더 자연스러운 문장을 생성하는 모습을 선보일 것이다. 여기까지 해보면 'AI로 글을 쓰게 한다'라는 개념을 알 수 있을 것이다.  seq2seq의 신경망도 다룬다. (from) sequence to sequence(시계열에서 시계열로)를 뜻하는 말로, 한 시계열 데이터를 다른 시계열 데이터로 변환하는 것을 말한다. seq2seq는 기계 번역, 챗봇, 메일의 자동 답신 등 다양하게 응용될 수 있다.   언어 모델을 사용한 문장 생성언어 모델은 다양한 애플리케이..
밑바닥부터 시작하는 딥러닝2 - Chap6. 게이트가 추가된 RNN
·
공부/밑바닥부터 시작하는 딥러닝
5장에서 본 RNN은 순환 경로를 포함하여 과거의 정보를 기억할 수 있었다. 구조도 단순하여 구현이 쉬웠다.하지만 성능이 좋지 못하다. 그 원인은 시계열 데이터에서 시간적으로 멀리 떨어진, 장기 의존 관계를 잘 학습할 수 없다는 데 있다. 요즘에는 앞장의 단순한 RNN 대신 LSTM이나 GRU라는 계층이 주로 쓰인다.  LSTM이나 GRU에는 gate라는 구조가 더해져 있는데, 이 게이트 덕분에 시계열 데이터의 장기 의존 관계를 학습할 수 있다. RNN의 문제점앞장의 RNN은 시계열 데이터의 장기 의존 관계를 학습하기 어렵다. 원인은 BPTT에서 기울기 소멸 혹은 폭발이 일어나기 때문이다.  RNN 복습RNN계층은 시계열 데이터 xt를 입력하면 ht를 출력한다. ht는 RNN계층의 은닉 상태라고 하며, ..
밑바닥부터 시작하는 딥러닝2 - Chap5. 순환 신경망(RNN)
·
공부/밑바닥부터 시작하는 딥러닝
지금까지 살펴본 신경망은 피드포워드(feed forward)라는 신경망이다. 흐름이 단방향인 신경망을 말한다.다시 말해, 입력 신호가 다음 층(중간 층)으로 전달되고, 그 신호를 받은 층은 그 다음 층으로 전달하고, 다시 다음 층으로... 식으로 한 방향으로만 신호가 전달된다.  피드포워드 신경망은 구성이 단순하여 구조를 이해하기 쉽고, 그래서 많은 문제에 으용할 수 있다. 그러나 커다란 단점이 하나 있는데, 바로 시계열 데이터를 잘 다루지 못한다는 것이다. 정확하게 말하면, 단순한 피드포워드 신경망에서는 시계열 데이터의 성질(패턴)을 충분히 학습할 수 없다.그래서 순환 신경망(Recurrent Neural Network, RNN)이 등장하게 된다.  확률과 언어 모델 RNN을 시작하기 위한 준비 과정으..
밑바닥부터 시작하는 딥러닝2 - Chap4. word2vec 속도 개선
·
공부/밑바닥부터 시작하는 딥러닝
앞장에서 word2vec의 구조를 배우고 CBOW모델을 구현했다. 단순한 2층 신경망이라서 간단하게 구현할 수 있었다.이 구현에는 몇가지 문제가 있다. 가장 큰 문제는 말뭉치에 포함된 어휘수가 많아지면 계산량이 커져 계산 시간이 너무 오래걸린다.이러한 점 때문에 이번 장의 목표는 word2vec의 속도 개선으로 잡아보았다.첫번째 개선은 Embedding이라는 새로운 계층을 도입한다. 두번째로는 네거티브 샘플링이라는 새로운 손실 함수를 도입한다. 이 두가지 개선으로 PTB 데이터셋(실용적인 크기의 말뭉치)을 가지고 학습을 수행할 것이다. word2vec 개선 1 - Embedding앞장에서 CBOW 모델 구현 복습을 해보자.단어 2개를 contexts로 사용해, 하나의target을 추측한다.이때 가중치 W..
밑바닥부터 시작하는 딥러닝2 - Chap3. word2vec
·
공부/밑바닥부터 시작하는 딥러닝
이번 장의 주제도 단어의 분산 표현이다.앞장에서는 통계 기반 기법으로 단어의 분산 표현을 얻었는데, 이번 장에서는 더 강력한 기법인 추론 기반 기법에 대해 알아본다. 추론 기반 기법은 말 그대로 추론을 하는 기법이다. 이 추론 과정에서 word2vec 신경망을 이용한다. 목표는 단순한 word2vec 구현이다. 처리 효율을 희생하는 대신 이해하기 쉽도록 구성했기 때문이다.  추론 기반 기법의 신경망 단어를 벡터로 표현하는 방법은 지금까지 활발히 연구되었다. 그중 성공적인 기법을 크게 두 부류로 나눌 수 있는데, 통계 기반 기법과 추론 기반 기법이다. 단어의 의미를 얻는 방식은 서로 크게 다르지만, 그 배경에는 모두 분포 가설이 있다.  통계 기반 기법의 문제점 통계 기반 기법에서는 주변 단어의 빈도를 기..
밑바닥부터 시작하는 딥러닝2 - Chap2. 자연어와 단어의 분산 표현
·
공부/밑바닥부터 시작하는 딥러닝
자연어 처리가 다루는 분야는 다양하지만, 본질적 문제는 컴퓨터가 우리의 말을 알아듣게 만드는 것이다.이번 장에서는 고전적인 기법을 알아보고, 파이썬으로 텍스트를 다루는 연습도 겸한다.텍스트를 단어로 분할하는 처리나 단어를 단어 ID로 변환하는 처리 등을 구현한다. 자연어 처리란우리가 평소에 쓰는 말을 자연어라고 한다.자연어 처리(Natural Language Processing,NLP)를 문자 그대로 해석하면 자연어를 처리하는 분야이고, 우리 말을 컴퓨터에게 이해시키기 위한 기술이다. 일반적인 프로그래밍 언어는 기계적이고 고정되어 있다. 반면 자연어는 부드러운 언어이다. 똑같은 의미의 문장도 여러 형태로 표현할 수 있거나, 뜻이 애매할 수 있거나, 그 의미나 형태가 유연하게 바뀔 수 있다.  단어의 의미..
밑바닥부터 시작하는 딥러닝2 - Chap1. 신경망 복습
·
공부/밑바닥부터 시작하는 딥러닝
수학과 파이썬 복습밑바닥부터 시작하는 딥러닝1 내용을 복습해보자.신경망 계산에 필요한 vector나 matrix등에 관한 이야기이다.  벡터와 행렬신경망에서는 벡터와 행렬(또는 텐서)이 도처에서 등장한다. 벡터는 크기와 방향을 가진 양이다. 숫자가 일렬로 늘어선 집합으로 표현할 수 있으며, 파이썬에서는 1차원 배열로 취급할 수 있다.그에 반해 행렬은 숫자가 2차원 형태(사각형)으로 늘어선 것이다. 벡터는 단순한 개념이지만 이를 표현하는 방법이 두가지이므로 주의해야 한다.하나는 숫자를 세로로 나열하는 열벡터이고, 다른 하나는 가로로 나열하는 행벡터이다.수학과 딥러닝 등 많은 분야에서 열벡터 방식을 선호하지만,  이 책에서는 구현 편의를 고려해 행벡터로 다룬다. 다음은 벡터와 행렬을 numpy를 활용해 파이..
밑바닥부터 시작하는 딥러닝1 - Chap8. 딥러닝
·
공부/밑바닥부터 시작하는 딥러닝
딥러닝은 층을 깊게 한 심층 신경망이다. 여기서 사용하는 합성곱 계층은 모두 3x3크기의 작은 필터로, 층이 깊어지면서 채널 수가 더 늘어나는 것이 특징이다.합성곱 계층의 채널수는 앞 계층에서부터 순서대로 16, 16, 32, 32, 64, 64로 늘어난다.또 그림과 같이 풀링 계층을 추가하여 중간 데이터의 공간 크기를 점차 줄여간다.마지막 단의 완전연결 계층에서는 드롭아웃 계층을 사용한다.이외의 것들을 합쳐 정리하면 이 신경망의 특징은 다음과 같다.3x3의 작은 필터를 사용한 합성곱 계층활성화 함수는 ReLU완전연결 계층 뒤에 드롭아웃 계층 사용 Adam을 사용해 최적화가중치 초기값은 He 초기값이 신경망이 잘못 인식할 확률은 겨우 0.62%이다. 실제로 어떤 이미지를 인식하지 못했는지 살펴보자.이번의..
밑바닥부터 시작하는 딥러닝1 - Chap7. 합성곱 신경망(CNN)
·
공부/밑바닥부터 시작하는 딥러닝
이번장의 주제는 합성곱 신경망(convolutional neural network, CNN)이다.  전체 구조CNN도 지금까지 본 신경망과 같이 레고 블록처럼 계층을 조합하여 만들 수 있다.다만, 합성곱 계층(convolution layer)과 풀링 계층(pooling layer)이 새롭게 등장한다.지금까지 본 신경망은 인접하는 계층의 모든 뉴런과 결합되어 있다. 이를 완전연결(fully-connected,전결합)이라고 하며, 완전히 연결된 계층을 Affine계층이라는 이름으로 구현했다.Affine계층을 사용하면, 가령 층이 5개인 완전연결 신경망은 아래 그림과 같이 구현할 수 있다.그림과 같이 완전연결 신경망은 Affine 계층 뒤에 활성화 함수를 갖는 ReLU계층(혹은 Sigmoid계층)이 이어진다...