Loading...
2021. 11. 4. 20:58

밑바닥부터 시작하는 딥러닝 - seq2seq(1)

이번 글에서는 시계열 데이터를 다른 시계열 데이터로 변환하는 모델을 생각해볼 것이다. 이를 위한 기법으로, 2개의 RNN을 이용하는 seq2seq라는 기법을 살펴볼 것이다. seq2seq의 원리 seq2seq를 Encoder-Decoder 모델이라고도 한다. Encoder는 입력 데이터를 인코딩하고, Decoder는 인코딩된 데이터를 디코딩(복호화)한다. 더보기 인코딩(부호화)이란 정보를 어떤 규칙에 따라 변환하는 것이다. 문자 코드를 예로 들면, 'A'라는 문자를 '1000001'이라는 이진수로 변환하는 식이다. 한편, 디코딩(복호화)이란 인코딩된 정보를 원래의 정보로 되돌리는 것이다. 문자코드를 예로 들면, '1000001'이라는 비트 패턴을 'A'라는 문자로 변화하는 일이 바로 디코딩이다. 그럼 s..

2021. 11. 3. 21:44

밑바닥부터 시작하는 딥러닝 - RNN을 사용한 문장 생성

지금까지 RNN과 LSTM의 구조와 구현을 살펴봤다. 이번 글에서는 언어 모델을 사용해 '문장 생성'을 수행해볼 것이다. 말뭉치를 사용해 학습한 언어 모델을 이용하여 새로운 문장을 만드는 것이다. 그런 다음 개선된 언어 모델을 이용하여 더 자연스러운 문장을 생성하는 것을 해볼 것이다. RNN을 사용한 문장 생성의 순서 언어 모델은 지금까지 주어진 단어들에서 다음에 출현하는 단어의 확률분포를 출력한다. 위의 그림은 'I'라는 단어를 주었을 때 출력한 확률분포이다. 이 결과를 기초로 다음 단어를 새로 생성하려면 어떻게 해야 할까? 첫 번째로 확률이 가장 높은 단어를 선택하는 방법이다. 확률이 가장 높은 단어를 선택할 뿐이므로 결과가 일정하게 정해진다. 또한 '확률적'으로 선택하는 방법이다. 각 후보 단어의 ..

2021. 11. 2. 21:30

밑바닥부터 시작하는 딥러닝 - 게이트가 추가된 RNN(4)

LSTM 계층 다층화 RNNLM으로 정확한 모델을 만들고자 한다면 많은 경우 LSTM 계층을 깊게 쌓아 효과를 볼 수 있다. LSTM을 2층, 3층 식으로 여러 겹 쌓으면 언어 모델의 정확도가 향상될 수 있다. LSTM을 2층으로 쌓아 RNNLM을 만든다고 하면 위의 그림처럼 된다. 첫 번째 LSTM 계층의 은닉 상태가 두 번째 LSTM 계층에 입력된다. 이와 같은 요령으로 LSTM 계층을 몇 층이라도 쌓을 수 있으며, 그 결과 더 복잡한 패턴을 학습할 수 있게 된다. 피드포워드 신경망에서 계층을 쌓는 것이다. 몇 층이나 쌓는 거는 하이퍼파라미터에 관한 문제이다. 쌓는 층 수는 하이퍼파라미터이므로 처리할 문제의 복잡도나 준비된 학습 데이터의 양에 따라 적절하게 결정해야 한다. 드롭아웃에 의한 과적합 억제..

2021. 11. 1. 22:10

밑바닥부터 시작하는 딥러닝 - 게이트가 추가된 RNN(3)

Time LSTM 구현 다음으로 Time LSTM 구현을 해볼 것이다. Time LSTM은 T개분의 시계열 데이터를 한꺼번에 처리하는 계층이다. 전체 그림은 아래 그림과 같다. RNN에서는 학습할 때 Truncated BPTT를 수행했다. Truncated BPTT는 역전파의 연결은 적당한 길이로 끊었지만, 순전파의 흐름은 그대로 유지한다. 위의 그림처럼 은닉 상태와 기억 셀을 인스턴스 변수로 유지할 것이다. 이렇게 하여 다음번에 forward()가 불렸을 때, 이전 시각의 은닉 상태에서부터 시작할 수 있다. Time LSTM 계층 구현을 코드로 알아보자. class TimeLSTM: def __init__(self, Wx, Wh, b, stateful = False): self.params = [Wx,..

2021. 10. 27. 21:08

밑바닥부터 시작하는 딥러닝 - 순환 신경망(RNN)(2)

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 =..

2021. 10. 26. 21:03

밑바닥부터 시작하는 딥러닝 - 순환 신경망(RNN)(1)

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