2021. 8. 16. 18:22ㆍ카테고리 없음
- 목차
probability over sequences
응용
Audio to Text
Text to text
feedforward net
input hidden output
[] -----> [] ----> []
FCL을 위와 같이 간단하게 표시 각각은 모두 vector
yt = f(Wyh*ht + by)
ht = f(whx*xt + bh)
RNN 개념
input hidden output
[] -----> [] ----> []
^ |
+--------+
yt = f(Wyh*ht + by)
ht = f(whx*xt + whh*ht-1 + bh)
'hidden state'를 (기억) 지니고 있다는 차이점
지금까지의 입력 데이터를 요약한 정보
모든 입력 처리 후 network에 hidden state는
sequence 전체를 요약하는 정보가 됨
이전까지의 기억을 바탕으로 새로운 단어를 이해
새로운 단어마다 이 과정이 반복
그래서 recurrent (순환적)이라고 함
Vanilla RNN: unfolding computational graph
y1 y2 .... yT-1 yT
[] [] [] []
| | ... | |
[] [] [] [] <-- hidden
| |
[] [] ... <- input
x1 x2 .... <-- 시간축임(기존과 달리)
데이터가 한번에 들어가는 것이 아니라, x1, x2,.. 차례대로 들어감
RNN은 x0, x1, x2, .....
입력의 단위 자연어처리의 경우 한 문장
sequence data를 indance 단위로 학습
time-series역시 instance로 학습
대신 자연어처리와 달리 sliding window 방식임
time series의 length를 잡아야 하는데, 3000 ts 등(time stamps)
uni-value의 숫자의 sequence
그런데 multi-var면 vector의 sequence가 됨
Bidirectional RNN
[ ] <- [ ] <- [ ]
| | |
[ ] -> [ ] -> [ ]
| | |
[ ] <- [ ] <- [ ]
| | |
[ ] ..... [ ]
x0 x4
x1 x3
x2 x2
.. x1
LSTM
같은 입력이 4곳으로 들어감
| |
v v
-> [] -----[x] ------> cell ---> sig --> [x] ---> he
^ |
| |
[x]-+
^
|
sig
^
|
ft = sig(wfx*wt + wfh*ht-1 + bf)
it = sig(wix*wt + wih*ht-1 + bi)
ot = sig(wox*wt + woh*ht-1 + bo)
RNN이 back-propagation이 잘 안됨
그래서 forget gate (앞의 것을 잊을래 기억할래를 ML로 학습하는 gate)
or 출력을 줄지 말지 결정하는 gate
그래서 sigmoid(0~1 사이 값) 기억 할래 말래를 붙임
ct = ft ? ct-1 + it ? tanh(Wcx*xt + Wch*ht-1 + gc)
ht = ot ? tanh(ct)
?는 내적에 원 씌움
sequence-to-sequence
입력 sequence와 출력 sequence를 각각 질문과 대답으로 구성하여 챗봇, 기계 번역을 만듦
Text summarization
STT등에서도 사용
RNN을 어떻게 조립했느냐로 seq2seq를 만듦
encoder와 decoder로 구성
1) encoder
입력의 모든 단어들을 순차적으로 입력 후 마지막에 이 모든 단어
정보를 압축하여 하나의 vector로 만듦
-> context vector
입력 문장 정보가 하나의 context vector로 압축
이후, 이 context vector를 decoder로 전송
2) decoder
decoder는 context vector를 받아 번역된 단어를 한 개씩 순차적으로 출력함
context vector
보통 수백이상의 차원을 지님
3) seq2seq encoder 구조
+-------------------------------+
| LSTM -> LSTM -> LSTM -> LSTM ------> context
+-------------------------------+
I am a student
je suis etudiant <eos>
^
|
+------------------------------+
context ---> | LSTM -> LSTM -> LSTM -> LSTM |
+------------------------------+
^
|
<sos> je suis etudiant
decoder는 < sos> 이후
다음에 등장할 확률이 높은 단어를 예측
첫 time step에서 je를 예측
를 다음 RNN cell에 입력
두 번째 시점에서는 je로 부터 suis를 예측..
이렇게 반복 <eos>까지
입력 문장은
단어 tokenization을 통해 단어 단위로 쪼개짐
단어 token 각각은 RNN 셀의 각 시점의 입력이 됨
모든 단어 입력 후 은닉 상태를 context vector로서 decoder어 넘김
context vector는 디코더 RNN 셀의 첫번째 은닉 상태로 사용됨