[혼자 공부하는 머신러닝+딥러닝] #11 LSTM GRU

Clay Ryu's sound lab·2022년 2월 16일
0

Note for 2022

목록 보기
10/47

Long Short Term Memory

단기메모리를 길게 하는 것
은닉상태와 셀상태의 두가지 상태가 순환이 된다.
셀 상태는 출력에 사용되는 것이 아니고 셀 자체 내에서 사용되는 값이다.
셀 안에 4개의 작은 셀이 들어있다.

삭제 게이트 : wf가 있는 셀을 통과해서 셀 상태를 만드는 데 기여
입력 게이트 : 두 셀의 출력이 곱해지는 부분 새로운 정보를 더하는데 기여
출력 게이트 : we와 셀상태를 곱하는 부분

LSTM 신경망

model = keras.Sequential()

model.add(keras.layers.Embedding(500, 16, input_length=100))
model.add(keras.layers.LSTM(8))
model.add(keras.layers.Dense(1, activation='sigmoid'))

# (16인풋 x 8뉴런 + 8순환 x 8뉴런 + 8절편) x 4개의 작은 셀
# 총 800개의 가중치

드롭아웃 적용하기

model12 = keras.Sequential()

model12.add(keras.layers.Embedding(500, 16, input_length=100))
model12.add(keras.layers.LSTM(8, dropout=0.3))
model12.add(keras.layers.Dense(1, activation='sigmoid')) 

2개의 층 연결하기

이전 셀에서 다음 셀에 넘겨줄때 모든 타임스텝의 은닉상태를 다 출력해야한다.

model13 = keras.Sequential()

model13.add(keras.layers.Embedding(500, 16, input_length=100))
model13.add(keras.layers.LSTM(8, dropout=0.3, return_sequences=True))
model13.add(keras.layers.LSTM(8, dropout=0.3))
model13.add(keras.layers.Dense(1, activation='sigmoid')) 

GRU 셀

LSTM의 좀더 간소화된 버젼이다.
은닉상태와 입력을 곱해서 새로운 은닉상태를 만드는 것은 동일하다.
하지만 여기에는 셀상태가 없다.
텐서플로우에는 오른쪽 그림과 같이 조금 변형이 되어 있다.
왼쪽은 gpu연산을 하지 못한다.

GRU 신경망

model14 = keras.Sequential()

model14.add(keras.layers.Embedding(500, 16, input_length=100))
model14.add(keras.layers.GRU(8))
model14.add(keras.layers.Dense(1, activation='sigmoid'))

# (16인풋 x 8뉴런 + 8순환 x 8뉴런 + 8절편 + 8개의 추가 절편) x 3개의 작은 셀
# 624개의 파라미터

이로써 마지막 수업이다. 헤매고 있던 나를 구해준 정말 좋은 강의였다.
박해선 선생님 감사합니다!

profile
chords & code // harmony with structure

0개의 댓글