'분류 전체보기' 카테고리의 글 목록 (17 Page)
세모로그

카테고리 없음
밑바닥부터 시작하는 딥러닝 - 게이트가 추가된 RNN(2)
2021.10.30
기울기 소실과 LSTM LSTM의 인터페이스 위의 그림은 계산 그래프를 단순화하는 도법이다. 행렬 계산 등을 하나의 직사각형 노드로 정리해 그리는 방식이다. tanh 계산으로 직사각형 노드를 하나 그린다. 이 직사각형 노드 안에 행렬 곱과 편향의 합, 그리고 tanh 함수에 의한 변환이 모두 포함된 것이다. 위의 그림에서 보듯이, LSTM 계층의 인터페이스에는 c라는 경로가 있다는 차이가 있다. c는 '기억 셀'이라 하며, LSTM 전용의 기억 메커니즘이다. 기억 셀의 특징은 데이터를 자기 자신으로만 주고받는다는 것이다. 즉, LSTM 계층 내에서만 완결되고, 다른 계층으로는 출력하지 않는다. 반면, LSTM의 은닉 상태 h는 RNN 계층과 마찬가지로 다른 계층으로 출력된다. LSTM 계층 조립하기 LS..

딥러닝
밑바닥부터 시작하는 딥러닝 - 게이트가 추가된 RNN(1)
2021.10.29
RNN은 순환 경로를 포함하며 과거의 정보를 기억할 수 있었다. 구조가 단순하여 구현도 쉽게 가능했다. 요즘에는 RNN 대신 LSTM이나 GRU라는 계층이 주로 쓰인다. LSTM이나 GRU에는 '게이트'라는 구조가 더해져 있는데, 이 게이트 덕분에 시계열 데이터의 장기 의존 관계를 학습할 수 있다. RNN의 문제점 1. 기울기 소실 또는 기울기 폭발 언어 모델은 주어진 단어들을 기초로 다음에 출현할 단어를 예측하는 일을 한다. "?"에 들어가는 단어는 "Tom"이다. RNNLM이 이 문제에 올바르게 답하려면, 현재 맥락에서 "Tom이 방에서 TV를 보고 있음"과 "그 방에 Mary가 들어옴"이란 정보를 기억해둬야 한다. 이런 전보를 RNN 계층의 은닉 상태에 인코딩해 보관해야 한다. 위의 그림과 같이 정..

딥러닝
밑바닥부터 시작하는 딥러닝 - 순환 신경망(RNN)(2)
2021.10.27
Time RNN 계층 구현 Time RNN 계층은 T개의 RNN 계층으로 구성된다. Time RNN 계층은 아래 그림처럼 표현된다. 위에 그림에서 보면, Time RNN 계층은 RNN 계층 T개를 연결한 신경망이다. 이 신경망으로 Time RNN 클래스로 구현할 것이다. 여기에서는 RNN 계층의 은닉 상태 h를 인스턴스 변수로 유지한다. RNN 계층의 은닉 상태를 Time RNN 계층에서 관리한다. 이렇게 하면 Time RNN 사용자는 RNN 계층 사이에서 은닉 상태를 '인계하는 작업'을 생각하지 않아도 된다는 장점이 생긴다. 다음은 Time RNN 계층의 코드이다. class TimeRNN: def __init__(self, Wx, Wh, b, stateful = False): self.params =..

딥러닝
밑바닥부터 시작하는 딥러닝 - 순환 신경망(RNN)(1)
2021.10.26
지금까지 살펴본 신경망은 피드포워드라는 유형의 신경망이다. 피드포워드란 흐름이 단방향인 신경망을 말한다. 즉 입력 신호가 다음 층(중간층)으로 전달되고, 그 신호를 받은 층은 그다음 층으로 전달하고, 또 다음 층으로 전달되는 한 방향으로만 신호가 전달된다. 피드포워드 신경망은 구성이 단순하여 구조를 이해하기 쉽고, 많은 문제에 응용할 수 있다. 그러나 시계열 데이터를 잘 다루지 못한다는 단점이 있다. 단순한 피드포워드 신경망에서는 시계열 데이터의 성질을 충분히 학습할 수 없다. 그래서 순환 신경망(CNN)이 등장하게 된다. RNN RNN이란 '몇 번이나 반복해서 일어나는 일'을 뜻한다. 즉 '순환하는 신경망'이라는 뜻이 된다. 어느 한 지점에서 시작한 것이, 시간을 지나 다시 원래 장소로 돌아오는 것, ..

딥러닝
밑바닥부터 시작하는 딥러닝 - word2vec 속도 개선(3)
2021.10.25
네거티브 샘플링 긍정적인 예인 'say'만을 대상으로 이진 분류를 해왔다. 만약 여기서 '좋은 가중치'가 준비되어 있다면 Sigmoid 계층의 출력은 1에 가까울 것이다. 그러나 부정적 예에 대해서는 어떠한 정보도 없다. 즉 해야 할 것은 긍정적인 예에 대해서는 Sigmoid 계층의 출력을 1에 가깝게 만들고, 부정적인 예('say' 이외의 단어)에 대해서는 Sigmoid 계층의 출력을 0에 가깝게 만드는 것이다. 위의 그림처럼 맥락이 'you'와 'goodbye'일 때, 타깃이 'hello'일 확률은 낮은 값이어야 바람직하다. 위의 그림에서 타깃이 'hello'일 확률은 0.021이다. 이런 결과를 만들어주는 가중치가 필요하다. 그러나 모든 부정적 예를 대상으로 하여 이진 분류를 학습시키는 것은 불가능..