Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 11

Kumoh National Institute of Technology

딥러닝 (Deep Learning)


RNN 고급 활용

컴퓨터공학과 황준하
Contents

1. apple 주가 데이터 준비

2. GRU

3. 스태킹 순환층

4. RNN 드롭아웃

5. 양방향 RNN

2/10
RNN 고급 활용
1. apple 주가 데이터 준비

학습 데이터와 검증 데이터 분리
 프로그램
◦ 08_2_1_apple 주가 예측 .ipynb
 학습 데이터와 검증 데이터 분리
◦ 학습 데이터 : 70%
◦ 검증 데이터 : 30%

3/10
RNN 고급 활용
2. GRU

GRU (Gated Reccurent Unit)


 LSTM 의 단점 : 가중치가 많아서 계산량이 많음
 GRU
◦ LSTM 의 개념을 그대로 유지 : 장기 기억 + 단기 기억 , Forget + Input( 현재 )
 간단한 구조로 개선 . 성능 유사
◦ 2014 년 뉴욕대학교 조경현 교수 제안
 GRU 구조
◦ 기억 셀 (LSTM 의 ct) 없음
◦ Reset Gate
𝑟 =𝜎 ( 𝑥 𝑡 W 𝑥𝑟 +h 𝑡 −1 W h𝑟 +𝑏𝑟 )

 이전 시점의 hidden 상태 값을 얼마나 활용할 것인가 결정 (0~1)


◦ Update Gate
 LSTM 의 Forget + Input
 과거와 현재 정보를 각각 얼마나 반영할지 결정 (z)
 z : 현재 정보 비율 (Input)
 (1-z) : 과거 정보 비율 (Forget)

4/10
RNN 고급 활용
2. GRU

layers.GRU()
 SimpleRNN, LSTM 과 사용 방법 동일
 프로그램
◦ 08_2_1_apple 주가 예측 .ipynb
x = layers.GRU(16, return_sequences=False)
(inputs)

5/10
RNN 고급 활용
3. 스태킹 순환층

RNN 스태킹
 FCNN (Fully-Connected Neural Network)
◦ 층의 개수는 ? 1 개 ? 3 개 ? 10 개 ?
◦ 층이 많으면 표현력 증가  과대 적합 가능성 증가
 RNN
◦ 층이 1 개일 필요가 있나 ? 여러 개 RNN 층  스태킹
(stacking)
◦ 표현력 증가
◦ 학습 시간 길어짐

기존 stacking
6/10
RNN 고급 활용
3. 스태킹 순환층

Tensorflow RNN 스태킹


 기존 레이어와 마찬가지로 layers.LSTM 층을 연속으로
적용
◦ 마지막 레이어 : return_sequences=False
 마지막 타임스텝에서만 y 값 출력 ( 문제에 따라 다를 수 있음 )
◦ 이전 레이어들 : return_sequences=True
 y 출력값을 다음 순환층에서 사용함
inputs = keras.Input(shape=(50, 1))
x = layers.LSTM(64, return_sequences=True)
(inputs)
x = layers.LSTM(32, return_sequences=True)
(x)
x = layers.LSTM(16,
return_sequences=False)(x)
outputs = layers.Dense(1)(x)
model = keras.Model(inputs=inputs, out-
puts=outputs)
기존 stacking
7/10
RNN 고급 활용
4. RNN 드롭아웃

RNN 드롭아웃
 RNN 두 가지 드롭 아웃
◦ 레이어 사이의 드롭 아웃 : 기존과 같이 RNN 레이어 간 (
또는 RNN 레이어와 다른 레이어 사이 ) 의 드롭 아웃
◦ 순환 드롭 아웃 마스크
 순환 드롭 아웃 마스크
◦ 하나의 RNN 순환 층 내에서 타임스텝 사이에 드롭 아웃을
적용
 일반적으로 모든 타임스텝에 동일한 드롭아웃 마스크 적용
x = layers.LSTM(16, return_sequences=False,
recurrent_dropout=0.3)(inputs)
◦ 과대 적합을 방지하기 위해 사용 가능
 문제 및 데이터에 따라 효과가 다를 수 있음
8/10
RNN 고급 활용
5. 양방향 RNN

양방향 RNN (Bidirectional RNN)


 양방향이란 ?
◦ 하나의 예제 sequence
 [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]] 이라면 ,
 순서 1( 정방향 ) : [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]
 순서 2( 역방향 ) : [0, 0, 1, 0], [0, 1, 0, 0], [1, 0, 0, 0]

◦ 어떤 순서가 학습에 도움이 될까 ?


 일반적으로는 정방향 : 주가 , 기온 Merge
( 예 , concat)
 역방향도 도움이 됨 : 자연어 처리
◦ 정방향 , 역방향 모두 학습 RNN RNN

 양방향 RNN
(0, 1, 2) (2, 1, 0)

입력 (0, 1, 2)
9/10
RNN 고급 활용
5. 양방향 RNN

Tensorflow 양방향 RNN Merge


( 예 , con-
cat)
 forward RNN + backward RNN RNN RNN

◦ 최종 출력
(0, 1, 2) (2, 1, 0)
weight RNN + bias = Output

입력 (0, 1, 2)
RNN

 layers.Bidirectional(layers.LSTM(16))
inputs = keras.Input(shape=(50, 1))
x = layers.Bidirectional(layers.LSTM(64,
return_sequences=True))(inputs)
x = layers.Bidirectional(layers.LSTM(32,
return_sequences=True))(x)
x = layers.Bidirectional(layers.LSTM(16,
return_sequences=False))(x)
outputs = layers.Dense(1)(x)
10/10
RNN model
고급 활용 = keras.Model(inputs=inputs, outputs=outputs)
연습 문제

apple 주가 예측 실험 (apple_stock2.csv)
 apple_stock2.csv 데이터는 1980 년부터 2021 년까지의
일별 주가 (Date, Open, High, Low, Close 등 ) 를 포함하고
있다 .
◦ 50 일 동안의 Open, High, Low, Close 주가를 기반으로 그
다음 날의 Open 주가를 예측하는 RNN 프로그램을 작성하라 .
◦ 하나의 예제의 경우 x, y 는 다음과 같이 표현된다 .
 x : [[1, 2, 3, 4], [3, 2, 3, 2], ..., [3, 4, 5, 2]]
 y : [5] 또는 [[5]]
 즉 , x 의 전체 shape 은 [?, 50, 4], y 는 [?, 1]( 또는 [?, 1, 1]) 이 됨
◦ MinMaxScaler 를 사용하여 0~1 로 스케일링한다 .
◦ 전체 데이터의 30% 를 검증 데이터로 사용한다 .
◦ epochs=100

11/10
RNN 고급 활용

You might also like