제퍼넷 로고

RNN (Recurrent Neural Networks) : 순차 데이터에 대한 딥 러닝

시간

RNN (Recurrent Neural Networks) : 순차 데이터에 대한 딥 러닝

Recurrent Neural Networks는 다음 단어 / 문자 감지, 시간 공간에서의 금융 자산 가격 예측, 스포츠에서의 액션 모델링, 음악 구성, 이미지 생성 등과 같은 여러 가지 방법으로 사용될 수 있습니다.


RNN (Recurrent Neural Networks)은 일련의 입력을 처리 할 수있는 인공 신경망의 클래스입니다. 깊은 학습 다음 입력 시퀀스를 처리하는 동안 상태를 유지합니다. 전통적인 신경망은 입력을 처리하고 순서를 무시하고 다음 입력으로 넘어갑니다. 시계열과 같은 데이터는 이해하기 위해 따라야하는 순차적 순서를 갖습니다. 전통적인 피드 포워드 네트워크는 각 입력이 서로 독립적 인 것으로 가정하기 때문에 시계열 설정에서 각 입력은 이전 입력에 의존하기 때문에이를 이해할 수 없습니다.

그림 1에서 신경망 (숨겨진 상태)을 볼 수 있습니다. 소요 x값을 출력 ht. 루프는 정보가 한 단계에서 다음 단계로 전달되는 방법을 보여줍니다. 입력은 'JAZZ'의 개별 문자이며 각 문자는 기록 된 순서대로 (즉, 순차적으로) 네트워크 A에 전달됩니다.

반복 신경망은 다음과 같은 여러 가지 방법으로 사용될 수 있습니다.

  • 다음 단어 / 문자 감지
  • 일시적 공간에서 금융 자산 가격 예측
  • 스포츠의 액션 모델링 (축구, 축구, 테니스 등과 같은 스포츠 이벤트에서 다음 액션 예측)
  • 음악 작곡
  • 이미지 생성

RNN vs 자기 회귀 모델

 
자동 회귀 모형은 시간 차원이있는 데이터의 값이 사용자가 지정한 특정 지점까지 이전 값에서 회귀되는 경우입니다. RNN은 동일한 방식으로 작동하지만 비교에서 명백한 차이점은 RNN이 모든 데이터를 확인한다는 것입니다 (즉, 사용자가 특정 기간을 지정할 필요가 없음).

Y0 + β1yt-1 + ㅣt

위의 AR 모델은 다음 시간 기간 값 (yt)을 예측하기 위해 직전 값을 취하는 차수 1 AR (1) 모델입니다. 이것은 선형 모형이므로, 특히 종속 변수와 독립 변수 간의 선형성 가정으로 인해 선형 회귀에 대한 특정 가정이 유지되어야합니다. 이 경우 Y및 yt-1 선형 관계가 있어야합니다. 또한 자기 상관과 같은 다른 검사를 통해 적절한 예측 순서를 결정해야합니다. Yt.

RNN에는 선형성 또는 모델 순서 검사가 필요하지 않습니다. 전체 데이터 세트를 자동으로 확인하여 다음 시퀀스를 시도하고 예측할 수 있습니다. 아래 이미지에서 알 수 있듯이 신경망은 동일한 가중치, 바이어스 및 활성화 기능을 가진 3 개의 숨겨진 레이어로 구성되며 출력을 예측합니다.

그런 다음 이러한 숨겨진 레이어를 병합하여 단일 반복 숨겨진 레이어를 만들 수 있습니다. 반복 뉴런은 이제 모든 이전 단계 입력을 저장하고 해당 정보를 현재 단계 입력과 병합합니다.

RNN의 장점

  • 비선형 시간 / 순차 관계를 모델링 할 수 있습니다.
  • 자가 회귀 프로세스와 비교하여 다음 값을 예측하기 위해 시차를 지정할 필요가 없습니다.

RNN의 단점

  • 사라지는 그라디언트 문제
  • 긴 수평선을 예측하는 데 적합하지 않음

사라지는 그라디언트 문제

 
활성화 함수를 포함하는 더 많은 레이어가 추가되면 손실 함수의 기울기가 XNUMX에 가까워집니다. 그래디언트 디센트 알고리즘은 네트워크 비용 함수의 전체 최소값을 찾습니다. 얕은 네트워크는 너무 작은 그라디언트의 영향을받지 않아야하지만 숨겨진 레이어가 많을수록 네트워크가 커짐에 따라 모델 교육에 그라디언트가 너무 작아 질 수 있습니다.

신경망의 그라디언트는 역 전파 알고리즘을 사용하여 찾을 수 있으며, 이로 인해 네트워크의 파생물을 찾을 수 있습니다. 연쇄 규칙을 사용하여 네트워크를 곱하면 각 계층의 파생물을 찾을 수 있습니다. 이것이 문제가있는 곳입니다. 시그 모이 드 함수와 같은 활성화 함수를 사용하면 숨겨진 레이어 수가 증가함에 따라 그래디언트가 감소 할 수 있습니다.

이 문제는 모델을 컴파일 한 후 심각한 결과를 초래할 수 있습니다. 이에 대한 간단한 해결책은 ReLU 활성화 기능이있는 Long-Short Term Memory 모델을 사용하는 것입니다.

장기 메모리 모델

 
장기 단기 메모리 네트워크는 불안정한 그래디언트의 영향을받지 않고 장기 종속성을 처리 할 수있는 특수한 유형의 반복 신경 네트워크입니다.

위의 다이어그램은 반복 모듈에 RNN과 구별되는 추가 계층이 포함되어 있다는 점을 제외하면 일반적인 RNN입니다.

여기서 차별화는 정보의 컨베이어 벨트 역할을하는 '셀 상태'라는 수평선입니다. LSTM은 위에서 설명한 3 개의 게이트를 사용하여 셀 상태에 대한 정보를 제거하거나 추가합니다. 게이트는 시그 모이 드 함수와 1과 0 사이에서 출력되는 포인트 단위 곱셈 연산으로 구성되어 셀 상태를 통과하는 각 구성 요소의 양을 설명합니다. 값이 1이면 모든 정보가 통과되고 0은 정보를 완전히 무시한다는 의미입니다.

3 개의 게이트는 다음과 같습니다.

1. 입력 게이트 

  • 이 게이트는 시그 모이 드 함수 (0과 1 사이의 값을 할당하여)를 사용하여 메모리를 수정하는 데 사용할 값을 찾은 다음 -1에서 1 사이의 값에 가중치를 부여하는 tanh 함수를 찾는 데 사용됩니다.

2. 게이트를 잊어 버려 

  • 잊어 버림 게이트는 이전 상태를 사용하여 시그 모이 드 함수를 사용하여 무시할 값을 결정합니다 (ht-1) 및 입력 (xt)의 각 값에 0과 1 사이의 값을 할당하여 ct-1.

3. 출력 게이트 

  • 이 블록의 입력은 시그 모이 드 함수를 사용하여 0과 1 사이의 값을 할당 한 다음 tanh 함수를 곱하여 -1과 1 사이의 값을 할당하여 중요도를 결정함으로써 출력을 결정하는 데 사용됩니다.

RNN 코딩 – LSTM

라이브러리는 tensorflow를 tf model = tf.keras.models.Sequential () Dense = tf.keras.layers.Dense Dropout = tf.keras.layers.Dropout LSTM = tf.keras.layers.LSTM으로 가져옵니다. ## Dataset mnist_data = tf.keras.datasets.mnist # mnist는 필기 숫자의 28x28 이미지와 60,000 행의 데이터가있는 레이블의 데이터 세트입니다 ## 기차 및 테스트 데이터 생성 (x_train, y_train), (x_test, y_test) = mnist_data.load_data () x_train = x_train / 255.0 # 교육 데이터 기능 정규화 x_test = x_test / 255.0 # 교육 데이터 레이블 정규화 # 이미지는 28-28 범위의 할당되지 않은 정수 0x255 픽셀입니다. 위의 # 정규화 코드는 필요하지 않으며 여전히 전달 될 수 있습니다 컴파일합니다. 그러나 # 정확도는 약 20 %의 최상의 시나리오에서 90 % 이상의 손실로 훨씬 나빠질 것입니다. # 훈련 시간도 늘어납니다. model.add (LSTM (256, activation = 'relu', return_sequences = True)) model.add (Dropout (0.2)) model.add (LSTM (256, activation = 'relu')) model.add (Dropout (0.1) )) model.add (Dense (32, activation = 'relu')) model.add (Dropout (0.2)) model.add (Dense (10, activation = 'softmax')) 옵티 마이저 = tf.keras.optimizers.Adam (lr = 1e-4, decay = 1e-6) # 컴파일 모델 model.compile (loss = 'sparse_categorical_crossentropy', optimizer = optimizer, metrics = [ 'accuracy'],) # loss = 'sparse_categorical_crossentropy'의 사양은 매우 여기서 우리의 목표는 정수형이며 # 4 인코딩 된 범주가 아니기 때문에 여기서 중요합니다. model.fit (x_train, y_train, epochs = XNUMX, validation_data = (x_test, y_test))
Epoch 1/4 60000/60000 [==============================-278s 5ms / sample-손실 : 0.9960-acc : 0.6611-val_loss : 0.2939-val_acc : 0.9013 Epoch 2/4 60000/60000 [==============================]- 276s 5ms / sample-손실 : 0.2955-acc : 0.9107-val_loss : 0.1523-val_acc : 0.9504 Epoch 3/4 60000/60000 [======================== ========]-273s 5ms / sample-손실 : 0.1931-acc : 0.9452-val_loss : 0.1153-val_acc : 0.9641 Epoch 4/4 60000/60000 [=============== ===================]-270s 4ms / sample-손실 : 0.1489-acc : 0.9581-val_loss : 0.1076-val_acc : 0.9696

 
실물. 허가를 받아 다시 게시했습니다.

관련 :

출처 : https://www.kdnuggets.com/2020/07/rnn-deep-learning-sequential-data.html

spot_img

최신 인텔리전스

spot_img