๋ฐ์ํ
1. RNN ์ด๋?
RNN์ Sequence data๋ฅผ ์ฒ๋ฆฌ ํ๊ธฐ ์ํ ์ ๊ฒฝ๋ง ๊ตฌ์กฐ ์ ๋๋ค.
- ์ฃผ๋ก ์์ฐ์ด์ฒ๋ฆฌ(NLP)๋ฅผ ํฌํจํ ์ฌ๋ฌ Sequence Modeling ์์ ์์ ์ฌ์ฉ๋ฉ๋๋ค.
- ํน์ง์ผ๋ก๋ ์๊ฐ์ , ๊ณต๊ฐ์ ์์ ๊ด๊ณ์ ์ํ์ฌ Context๋ฅผ ๊ฐ์ง๋ ํน์ฑ์ด ์์ต๋๋ค.
๐ก example
I want to have an apple
- ์ด 'apple'์ ํ๋ฒ ์ฃผ๋ชฉํด ๋ณด๊ฒ ์ต๋๋ค.
- ์ด apple์ด๋ผ๋ ๋จ์ด๋ ๋ฌธ๋งฅ์ด ํ์ฑํ๋ ์ฃผ๋ณ์ ๋จ์ด๋ค์ ํจ๊ป ์ดํด๋ด์ผ ํ๋จํ ์ ์์ต๋๋ค.
2. RNN์ ๋ํ์ฌ
RNN์ ํน์ง์ ์ด๋ค๊ฒ์ด ์์๊น์?
- RNN์ ์๋์ธต(hidden layer)์ node์์ ํ์ฑํ ํจ์(activation function)์ ํตํด ๋์จ ๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅ์ธต ๋ฐฉํฅ์ผ๋ก ๋ณด๋ด๋ฉด์, hidden layer node์ ๋ค์ ๊ณ์ฐ์ input์ผ๋ก ๋ณด๋ ๋๋ค.
- ๊ทผ๋ฐ, RNN์ ์ํ์ค ๊ธธ์ด๊ฐ ๊ธธ์ด์ง์๋ก ์ ๋ณด ์์ถ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. RNN์ ์
๋ ฅ ์ ๋ณด๋ฅผ ์ฐจ๋ก๋๋ก ์ฒ๋ฆฌํ๊ณ ์ค๋ ์ ์ ์ฝ์๋ ๋จ์ด๋ ์์ด๋ฒ๋ฆฌ๋ ๊ฒฝํฅ์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค.
- ์ด ๋ง์ ์ฆ, ์ค๋ ์ ์ ์ ๋ ฅ๋ ๋จ์ด๋ ์์ด๋ฒ๋ฆฌ๊ฑฐ๋, ํน์ ๋จ์ด์ ์ ๋ณด๋ฅผ ๊ณผ๋ํ๊ฒ ๋ฐ์ํด ์ ์ฒด ์ ๋ณด๋ฅผ ์๊ณกํ๋ ๊ฒฝ์ฐ๊ฐ ์์ฃผ ์๊ธด๋ค๋ ์๋ฏธ์ ๋๋ค.
3. RNN์ ์ ํน์ง, ๊ตฌ์กฐ ๋ฐ ์๋์๋ฆฌ
RNN์ ์ ํน์ง๊ณผ ๋ํ์ฌ ์ค๋ช ํด๋ณด๊ฒ ์ต๋๋ค.
- ์ํ์ค์ ๊ฐ ์์๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ๊ฐ ๋จ๊ณ์์ ์ถ๋ ฅ๋ ์๋ ์ํ๋ ๋ค์ ๋จ๊ณ์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. - ์์ฐจ์ ์ฒ๋ฆฌ
- RNN ์ ์ Sequence์ ๋ชจ๋ ๋จ๊ณ์ ๊ฑธ์ณ ๊ฐ์ ๊ฐ์ค์น(weight)์ ํธํฅ(bias)์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ํ๋ผ๋ฏธํฐ์ ์๋ฅผ ์ค์ด๊ณ , ๋ชจ๋ธ์ ํ์ต ๋ฅ๋ ฅ์ ํฅ์์ํต๋๋ค. - ํ๋ผ๋ฏธํฐ ๊ณต์
- RNN์ ๊ฐ๋ณ ๊ธธ์ด์ ์ ๋ ฅ ์ํ์ค๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. - ๊ฐํธ ๊ธธ์ด ์ํ์ค ์ฒ๋ฆฌ
์ด๋ฒ์ RNN์ ์ ๊ตฌ์กฐ ๋ฐ ์๋์๋ฆฌ์ ๋ํ์ฌ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
- ์๋์ ๊ทธ๋ฆผ์ ํ๋ฒ ๋ณด๊ฒ ์ต๋๋ค.
์ฌ๊ธฐ์ x๋ ์ ๋ ฅ์ธต์ Input Vector, Y๋ ์ถ๋ ฅ์ธต์ Output Vector ์ ๋๋ค.
- ์ฌ๊ธฐ์ ๊ฐ์ด๋ฐ์ h๊ฐ ์๋๋ฐ, ์ฌ๊ธฐ์๋ h๋ RNN์ ์ด๋ผ๊ณ ํฉ๋๋ค.
- RNN์ ์ RNN์์ ์๋์ธต(hidden layer)์์ ํ์ฑํ ํจ์(activation function)์ ํตํด ๋์จ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ณด๋ด๋ ์ญํ ์ ํ๋ ๋ ธ๋๋ฅผ ์ (cell)์ด๋ผ๊ณ ํฉ๋๋ค.
- ์ด ์ ์ ์ด์ ์ ๊ฐ์ ๊ธฐ์ตํ๋ ค๋ ์ฑํฅ์ด ์๋๋ฐ, memory์ ์ญํ ์ ์ํํ๊ธฐ๋ ํฉ๋๋ค. ์ด ์ ์ ๋ฉ๋ชจ๋ฆฌ ์ or RNN ์ ์ด๋ผ๊ณ ํฉ๋๋ค.
- ์๋์ธต(hidden layer)์์ ๋ฉ๋ชจ๋ฆฌ ์ ์ time step(๊ฐ๊ฐ์ ์์ )์์์ ๋ฐ๋ก ์ด์ ์์ ์์์ ์๋์ธต์ ๋ฉ๋ชจ๋ฆฌ ์ ์์ ๋์จ ๊ฐ์ ์์ ์ input์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ์ด๋ฅผ ํ์ฌ ์์ ์ด๋ผ๊ณ ํฉ๋๋ค -> ์ด ๊ณผ์ ์ RNN์์๋ Feedback ์ด๋ผ๊ณ ํฉ๋๋ค.
Feedback ๋ณด์ถฉ ์ค๋ช
- Feedback์ hidden state์ ์ํ์ ์ธ ์ ๋ฌ์ ํตํด ์ด๋ฃจ์ด์ง๋๋ค. ์ด์ ์์ ์์์ hidden state๋ ๊ฐ์ค์น(weight)์ ํจ๊ป ํ์ฌ ์์ ์ ์
๋ ฅ์ผ๋ก ๊ฒฐํฉ๋์ด์ ์๋ก์ด hidden state๋ฅผ ์์ฑํฉ๋๋ค.
- ์ฆ ์์ฝํ๋ฉด -> Hidden state์ ์ด์ input์ ๋ํ ๊ธฐ์ต์ ์ ์ฅํ๊ณ , ์๋ก์ด input์ด ๋ค์ด์ฌ๋ ๋ง๋ค ๊ธฐ์ต์ ์์ ํฉ๋๋ค.
- ๋ค์ RNN ์ ์ ์ค๋ช ์ผ๋ก ๋์์์ ํ์ฌ ์์ ์ ๋ณ์๋ช ์ t๋ผ๊ณ ์ค๋ช ํ๊ฒ ์ต๋๋ค. (์์ ์ฌ์ง์๋ ์์ง๋ง x,y์์ t๊ฐ ๋ถ์ด์๋ค๊ณ ์๊ฐํด์ฃผ์ธ์) like Xt, Yt
- ํ์ฌ์์ ์์ t์์ ๋ฉ๋ชจ๋ฆฌ ์ ์ด ๊ฐ๊ณ ์๋ ๊ฐ์ ๊ณผ๊ฑฐ์ ๋ฉ๋ชจ๋ฆฌ ์ ๋ค์ ๊ฐ์ ์ํฅ์ ๋ฐ์๊ฒ์ ์๋ฏธํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ ์ด output layer ๋ฐฉํฅ ๋๋ ๋ค์ ์์ ์ธ t+1์ ์์ ์๊ฒ ๋ณด๋ด๋ ๊ฐ์ ์๋์ํ (hidden state)๋ผ๊ณ ํฉ๋๋ค.
- t์์ ์ ๋ฉ๋ชจ๋ฆฌ์ ์ t-1์ ๋ฉ๋ชจ๋ฆฌ ์ ์ด ๋ณด๋ธ hidden state ๊ฐ์ t์์ ์ ์๋ ์๋ ๊ณ์ฐ์ ์ํ ์ ๋ ฅ๊ฐ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.RNN์ ํํํ ๋ ์ข์ธก๊ณผ ๊ฐ์ด ํ์ดํ๋ก ์ฌ์ดํด์ ๊ทธ๋ ค์ ํํํ๊ธฐ๋ ํ์ง๋ง, ์ฐ์ธก๊ณผ ๊ฐ์ด ํ์ดํ๋ก ์ฌ์ดํด์ ๊ทธ๋ ค์ ํํ ํ๋ ๋์ ์ฌ๋ฌ ์์ ์ผ๋ก ํผ์ณ์ ํํํ๊ธฐ๋ ํฉ๋๋ค.
- ๋ ๊ทธ๋ฆผ๋ค ๋์ผํ ๊ทธ๋ฆผ์ผ๋ก ์ฌ์ดํด์ ๊ทธ๋ฆฌ๋ ํ์ดํ๋ฅผ ์ฌ์ฉํ์ฌ ํํํ์์ง๋ง, ํ๋ฆ์ ๋ฐ๋ผ์ ์ด๋ป๊ฒ ํํํ์๋๋์ ์ฐจ์ด์ผ ๋ฟ ๋ ๋ค ๋์ผํ RNN์ ํํํ๊ณ ์์ต๋๋ค.
- RNN์์๋ input layer(์ ๋ ฅ์ธต)๊ณผ output layer(์ถ๋ ฅ์ธต)์์๋ ๊ฐ๊ฐ input, output ๋ฒกํฐ, hidden layer(์๋์ธต)์์๋ ์๋ ์ํ(hidden state)์ด๋ผ๋ ํํ์ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
4. RNN ๋ชจ๋ธ์ ๋ค์ํ ํํ
RNN ๋ชจ๋ธ์ ๋ค์ํ ํํ์ ๋ํ์ฌ ์ค๋ช ๋๋ฆฌ๊ฒ ์ต๋๋ค.
- RNN์ ์ ๋ ฅ, ์ถ๋ ฅ์ ๊ธธ์ด๋ฅผ ๋ค๋ฅด๊ฒ ์ค๊ณ ํ ์ ์์ผ๋ฉฐ, ๋ํ ๋ค์ํ ์ฉ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค
- RNN์ ์ ๊ฐ ์์ ์ ์ , ์ถ๋ ฅ์ ๋จ์๋ ์ฌ์ฉ์๊ฐ ์ ํ ์ ์์ง๋ง, ๊ฐ์ฅ ๋ณดํธ์ ์ธ ๋จ์๋ 'Word Vector' ์ ๋๋ค.
Many-to-One ๋ชจ๋ธ
Many-to-One ๊ตฌ์กฐ ๋ชจ๋ธ (๋ค ๋ ์ผ ๊ตฌ์กฐ)
- Many-to-One๊ตฌ์กฐ์ ๋ชจ๋ธ์ input(์ ๋ ฅ)๋๋ Sequence๊ฐ ๊ธ์ , ๋ถ์ ์ ์ธ์ง ํ๋จํ๋ ๊ฐ์ฑ ๋ถ๋ฅ (Sentiment Classification)
- ๋ฉ์ผ์ด ์ ์์ธ์ง, ์คํจ์ธ์ง ํ๋ณํ๋ Spam Detection์ ์ฌ์ฉ๋ฉ๋๋ค.
Mant-to-Many ๋ชจ๋ธ
Many-to-Many ๊ตฌ์กฐ ๋ชจ๋ธ (๋ค ๋ ๋ค ๊ตฌ์กฐ)
- Many-to-Many ๊ตฌ์กฐ์ ๋ชจ๋ธ์ ์ฌ์ฉ์๊ฐ ๋ฌธ์ฅ์ ์ ๋ ฅํ๋ฉด ์์ธกํ์ฌ ๋จ์ด๋ฅผ ์์ฑํ๊ณ , ๋๋ต ๋ฌธ์ฅ์ ์ถ๋ ฅํ๋ ChatGpt์ ๊ฐ์ ์ฑ๋ด๊ณผ
- ์ ๋ ฅ ๋ฌธ์ฅ์ผ๋ก๋ถํฐ ๋ฒ์ญ๋ ๋ฌธ์ฅ์ ์ถ๋ ฅํ๋ ๋ฒ์ญ๊ธฐ, ๋๋ ๊ฐ์ฒด๋ช ์ธ์์ด๋ ํ์ฌ ํ๊น ๊ณผ ๊ฐ์ ์์
- ์๋๋ฉด ํ๋ ์๋ณ ๋น๋์ค๋ฅผ ๋ถ๋ฅํ๋ ์์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
One-to-Many ๋ชจ๋ธ
One-to-many ๊ตฌ์กฐ ๋ชจ๋ธ (์ผ ๋ ๋ค ๊ตฌ์กฐ)
- One-to-many ๊ตฌ์กฐ์ ๋ชจ๋ธ์ ํ๋์ image input์ ๋ํ์ฌ ์ฌ์ง์ ์ ๋ชฉ์ ์ถ๋ ฅํ๋ Image Captioning(์ด๋ฏธ์ง ์บก์ ๋) ์์ ์ ํ ์ ์์ต๋๋ค.
- ์ฌ์ง์ ์ ๋ชฉ์ ๋จ์ด๋ค์ ๋์ด์ด๋ฏ๋ก Sequence Output(์ํ์ค ์ถ๋ ฅ) ์ ๋๋ค.
Bidrectional ๋ชจ๋ธ
Bidrectional ๊ตฌ์กฐ ๋ชจ๋ธ (์๋ฐฉํฅ ์ํ ์ ๊ฒฝ๋ง ๊ตฌ์กฐ)
- Bidrectional ๊ตฌ์กฐ ๋ชจ๋ธ์ Sequence Data๋ฅผ ์์์ ๋ค๋ก, ๋ค์์ ์์ผ๋ก ์๋ฐฉํฅ์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ, ๊ฐ ์์ ์์์ ๊ณผ๊ฑฐ, ๋ฏธ๋์ ์ ๋ณด ๋ชจ๋๋ฅผ ๊ณ ๋ คํ๊ฒ ํด์ฃผ๋ ์ ๊ฒฝ๋ง ๊ตฌ์กฐ์ ๋๋ค.
- Bidrectional ๊ตฌ์กฐ ๋ชจ๋ธ(์๋ฐฉํฅ ๊ตฌ์กฐ ๋ชจ๋ธ)์ ์์์ ์ค๋ช
ํ๋ฏ์ด
- ์์์ ๋ค๋ก์ธ ์ ๋ฐฉํฅ RNN (์ํ์ค ์ฒ์-> ๋๊น์ง ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ), ๊ณผ๊ฑฐ์ ์ ๋ณด๋ฅผ ๋ชจ๋ธ๋งํ๋ฉฐ
- ๋ค์์ ์์ผ๋ก์ธ ์ญ๋ฐฉํฅ RNN (์ํ์ค ๋-> ์ฒ์๊น์ง ์ญ์์ผ๋ก ์ฒ๋ฆฌ), ๊ฐ ์์ ์์ ๋ฏธ๋์ ์ ๋ณด๋ฅผ ๋ชจ๋ธ๋ง ํฉ๋๋ค.
- ์ด๋ ๊ฒ ์ ๋ฐฉํฅ, ์ญ๋ฐฉํฅ RNN, 2๊ฐ์ RNN์ธต์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ๊ทธ๋ฆฌ๊ณ , ์ ๋ฐฉํฅ, ์ญ๋ฐฉํฅ RNN์ ์๋ ์ํ(hidden state)๋ ์ฐ๊ฒฐ or ๊ฒฐํฉ ๋์ด์ ์ต์ข output์ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก ์งํ๋ฉ๋๋ค.
- ์ด๋์ Bidrectional ๊ตฌ์กฐ ๋ชจ๋ธ์ ํด๋น ์์ ์ ์ ํ ์ปจํ ์คํธ๋ฅผ ๋ชจ๋ ์ดํดํ ์ ์์ผ๋ฏ๋ก, ์ ์ฒด Sequence ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ๊ณ , Sequence์ ๊ฐ ๋ถ๋ถ์ ๋ํ ์ ์ฒด์ ์ธ ์ดํด๊ฐ ํ์ํ ์์ ์์ ์ ํธ ๋ฉ๋๋ค.
- ๊ทธ๋ฆฌ๊ณ Bidrectional ๊ตฌ์กฐ, ์ฆ ์๋ฐฉํฅ RNN์ ํ ์คํธ ๋ถ๋ฅ, ๊ฐ์ ๋ถ์, ๊ธฐ๊ณ ๋ฒ์ญ, ์์ฑ ์ธ์ ๋ฑ์ ์์ ์์ ์ฌ์ฉ๋ฉ๋๋ค.
5. RNN ๊ณต์
ํ๋ฒ RNN์ ๋ํ ๊ณต์์ ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
- ํ์ฌ ์์ t์์ ์์์ํ๊ฐ์ ht๋ผ๊ณ ์ ์ํฉ๋๋ค.
- ์๋์ธต (hidden layer)์ Memory Cell์ ht๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด์ 2๊ฐ์ ๊ฐ์ค์น๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
- ํ๋๋ ์ ๋ ฅ์ธต (input layer)์ ๋ค์ด๊ฐ๋ ๊ฐ์ค์น Wx์ด๊ณ , ๋ค๋ฅธ ํ๋๋ ์ด์ ์์ t-1์ ์๋ ์ํ ๊ฐ์ธ ht-1์ ์ํ ๊ฐ์ค์น Wh ์ ๋๋ค.
์ด๋ฅผ ์์ํ ํ๋ฉด ์ด๋ ์ต๋๋ค.
RNN์ ์๋์ธต ์ฐ์ฐ์ Vector, ํ๋ ฌ ์ฐ์ฐ์ ์ด์ฉํด์ ํ๋ฒ ๊ณ์ฐํด ๋ณด๊ฒ ์ต๋๋ค.
- ์์ฐ์ด์ฒ๋ฆฌ(NLP)์์ RNN์ ์ ๋ ฅ Xt๋ ๋๋ถ๋ถ ๋จ์ด Vector๋ก ๊ฐ์ฃผํ ์ ์์ต๋๋ค.
- ๋จ์ด Vector์ ์ฐจ์์ d๋ผ๊ณ ํ๊ณ , ์๋ ์ํ (hidden state)์ ํฌ๊ธฐ๋ฅผ Dh๋ผ๊ณ ํ๋ฉด, ๊ฐ Vector & ํ๋ ฌ์ ํฌ๊ธฐ๋ ์๋์ ๊ฐ์ต๋๋ค.
- Batch size๊ฐ 1์ด๊ณ , d & Dh๊ฐ์ 4๋ก ๊ฐ์ ํ์๋, RNN์ hidden layer ์ฐ์ฐ์ ๊ทธ๋ฆผ์ผ๋ก ํํํ์ต๋๋ค.
์๋์ธต (hidden layer)์ ์์, ht๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํ ํจ์๋ ํ์ดํผ๋ณผ๋ฆญํ์ ํธ ํจ์ (tan h) ํจ์๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ด๋ ๊ฐ๊ฐ์ ๊ฐ์ค์น Wx, Wh, Wy๋ ํ๋์ ์ธต์์๋ ๋ชจ๋ ์์ ์์์ ๊ฐ์ ๋์ผํ๊ฒ ๊ณต์ ํ์ง๋ง?
- ์๋์ธต (hidden layer)๊ฐ 2๊ฐ ์ด์์ด๋ฉด, ๊ฐ ์๋์ธต (hidden layer)์์์ ๊ฐ์ค์น๋ ์๋ก ๋ฌ๋ผ์ง๋๋ค.
6. RNN ๊ตฌํ with Keras
TF(tensorflow)์ Keras ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ RNN์ธต์ ์ถ๊ฐํ๋ ์ฝ๋๋ฅผ ํ๋ฒ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
import tensorflow as tf
- ์ด ์ฝ๋๋ tf.keras.layers.SimpleRNN์ ์ด์ฉํ์ฌ ๊ธฐ๋ณธ์ ์ธ RNN ์ธต์ผ๋ก ์ถ๊ฐํ์ต๋๋ค.
- ์ด layer๋ 128๊ฐ์ ๋ด๋ฐ(unit)์ ๊ฐ์ง๋ฉฐ, ๊ธฐ๋ณธ์ ์ผ๋ก tanh ํ์ฑํ ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก NLP์์ Embedding์ธต์ ๋จ์ด์ ์ ์ encoding์ Vector๋ก ๋ณํํ ๋ ์ฌ์ฉํฉ๋๋ค.
๐ก example
: 1000๊ฐ์ ๋จ์ด๋ฅผ ๊ฐ์ง ์ดํ ์ฌ์ ๊ณผ ๊ฐ ๋จ์ด๋ฅผ 32์ฐจ์์ ๋ฒกํฐ๋ก ๋ณํํ๋ ๊ฒฝ์ฐ๋ฅผ ์ฝ๋๋ก ๋ณด๋ฉด ์๋ ์ฝ๋์ ๊ฐ์ต๋๋ค.
model = tf.keras.Sequential([
tf.keras.layers.Embedding(input_dim=1000, output_dim=32),
- input_dim์ Embedding ์ธต์ ๋ฃ์ด์ฃผ๋ parameter, ์์๋ก๋ 1000๊ฐ์ ์ดํ์ฌ์ (vocab)์ด๋ฏ๋ก, 1000์ ์ ์ด์ค๋๋ค.
- output_dim์ input์ผ๋ก ๋ฃ์ด์ค ์ดํ์ฌ์ (vocab) & ๋จ์ด๋ฅผ ๋ฒกํฐ๋ก ๋ณํํ์ฌ ์ถ๋ ฅํด์ค๋๋ค. ์ฌ๊ธฐ์๋ 32์ฐจ์์ Vector๋ก ๋ณํํ๋ค๊ณ ํ์ผ๋๊น, 32๋ฅผ ์ ์ด์ค๋๋ค.
simple RNN์ ๊ธฐ๋ณธ์ ์ธ RNN์ธต์ผ๋ก, ์ฌ๊ธฐ์๋ 128๊ฐ์ unit์ ์ฌ์ฉํ๋ค๊ณ ํ์ผ๋๊น, ์๋ ์ฝ๋์ ๊ฐ์ต๋๋ค.
- SimpleRNN์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ ํจ์๋ฅผ tanh ํ์ฑํ ํจ์๋ฅผ ์ฌ์ฉํ๋ฏ๋ก, ๊ตณ์ด activation='tanh' ์ ์จ์ค ํ์๋ ์์ต๋๋ค.
tf.keras.layers.SimpleRNN(128),
SimpleRNN์ parameter๊ฐ ๋ฌด์์ด ์๋์ง ๋ณด๊ฒ ์ต๋๋ค.
SimpleRNN(hidden_units, input_shape=(timesteps, input_dim))
- hidden_units = hidden state์ ํฌ๊ธฐ๋ฅผ ์ ์. ๋ฉ๋ชจ๋ฆฌ ์ ์ด ๋ค์ ์์ ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ณผ ์ถ๋ ฅ์ธต์ผ๋ก ๋ณด๋ด๋ ๊ฐ์ ํฌ๊ธฐ(output_dim)์๋ ๋์ผ. RNN ๋ชจ๋ธ์ ์ฉ๋(capacity)์ ๋๋ฆฐ๋ค๊ณ ๋ณด๋ฉด ๋๋ฉฐ, ๋ณดํต ์์ ๋ชจ๋ธ์ ๊ฒฝ์ฐ ๋ณดํต 128, 256, 512, 1024 ๋ฑ์ ๊ฐ์ ๊ฐ์ง๋ค.
- timesteps = input Sequence์ ๊ธธ์ด(input_length)๋ผ๊ณ ํํํ๊ธฐ๋ ํจ.
- input_dim = ์ ๋ ฅ์ ํฌ๊ธฐ.
- RNN ์ธต์ (batch_size, timesteps, input_dim) ํฌ๊ธฐ์ 3D ํ ์๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ , ๋ง์ฝ 10๊ฐ์ Class๋ก ๋ถ๋ฅํ๋ ๋ฌธ์ ๋ฉด, Dense์ธต์ ์ถ๊ฐํฉ๋๋ค. - output layer
tf.keras.layers.Dense(10, activation='softmax')
])
- ๋ง์ฝ์ 2๊ฐ์ ํด๋์ค๋ก ๋ถ๋ฅํ๋ ๋ฌธ์ ๋ฉด, unit ๊ฐ์ 2๊ฐ๋ก ํด์ฃผ๊ณ , ํ์ฑํ ํจ์ (activation)ํจ์๋ฅผ 'binary'๋ก ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก compile ํด์ฃผ๋ ์ฝ๋๋ ๋ชจ๋ธ์ ์์ฝ๊ฐ์ ์ถ๋ ฅ ํด์ฃผ๋ ์ฝ๋์ ์์ฑํด์ค๋๋ค.
# ๋ชจ๋ธ ์ปดํ์ผ
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# ๋ชจ๋ธ ์์ฝ ์ถ๋ ฅ
model.summary()
- ์คํ ํ๋ฉด ๋ชจ๋ธ์ ๋ํ ์์ฝ ๊ฐ์ด ๋์ต๋๋ค.
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding (Embedding) (None, None, 32) 32000
simple_rnn (SimpleRNN) (None, 128) 20608
dense (Dense) (None, 10) 1290
=================================================================
Total params: 53898 (210.54 KB)
Trainable params: 53898 (210.54 KB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________
๊ทธ๋ฌ๋ฉด RNN์ธต์ ์ด๋ป๊ฒ 3D Tensor๋ฅผ ์ ๋ ฅ๋ฐ๊ณ , ์ด๋ป๊ฒ hidden state๋ฅผ ์ถ๋ ฅํ ๊น์?
- RNN์ธต์ ์ฌ์ฉ์๊ฐ ์ค์ ํ๋๊ฒ์ ๋ฐ๋ผ 2๊ฐ์ง ์ข ๋ฅ์ ์ถ๋ ฅ์ ๋ง๋ค์ด ๋ ๋๋ค.
- ๋ง์ฝ Memory Cell์ ์ต์ข ์์ ์์์ hidden state(์๋ ์ํ) ๊ฐ๋ง return ํ๋ ค๋ฉด
(batch_size, output_dim)
- ์ด๋ ๊ฒ 2D Tensor๋ง return ํฉ๋๋ค.
- ๊ทธ๋ฌ๋, Memory Cell์ ๊ฐ Time step(์์ )์ hidden state ๊ฐ๋ค์ ๋ชจ์์ return ํ๋ ค๋ฉด
(batch_size, timesteps, output_dim)
- ์ด๋ ๊ฒ 3D Tensor๋ฅผ return ํฉ๋๋ค.
- ์ด๊ฒ ๊ฐ๋ฅํ ์ด์ ๋, RNN ์ธต์ return_sequences parameter(๋งค๊ฐ๋ณ์)์ True๋ฅผ ์ง์ ํด์ ์ค์ ์ ํ์๊ธฐ์ ๊ฐ๋ฅํ ์ผ์ ๋๋ค.
- output_dim์ hidden_unit์ ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
๐ก example
์์๋ฅผ ํ๋ฒ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
time step=4์ผ ๋, return_sequences = True๋ฅผ ์ค์ ํ์ ๋์ ๊ทธ๋ ์ง ์์์ ๋ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์ง ๋ณด๊ฒ ์ต๋๋ค.
- return_sequences = True๋ฅผ ์ค์ ํ๋ฉด, Memory Cell์ด ๋ชจ๋ time step(๋ชจ๋ ์์ )์ ๋ํด์ hidden state (์๋ ์ํ)๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
- ๊ทผ๋ฐ, parameter๋ฅผ ์์ ์๊ฑฐ๋, return_sequences = False ์ด๋ฉด, Memory cell์ ํ๋์ ์๋ ์ํ ๊ฐ๋ง์ ์ถ๋ ฅํฉ๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ด ํ๋์ ๊ฐ์ ์์์ ์ค๋ช ํ๋ฏ์ด, ๋ง์ง๋ง ์์ (time step)์ Memory cell์ ์๋ ์ํ ๊ฐ์ ๋๋ค.
๋ง์ง๋ง hidden state (์๋ ์ํ)๋ง ์ ๋ฌํ๋ฉด many-to-one (๋ค ๋ ์ผ)์ด๊ณ , ๋ชจ๋ ์์ ์ hidden state (์๋ ์ํ)๋ฅผ ์ ๋ฌํ๋ฉด, ๋ค์์ธต์ RNN์ hidden layer๊ฐ ํ๋ ๋ ์๋ ๊ฒฝ์ฐ๋, ์๋๋ฉด many-to-many (๋ค ๋ ๋ค) ๊ฒฝ์ฐ ์ ๋๋ค.
RNN ๊ตฌํ - ๊น์ RNN Model ๊ตฌํํด๋ณด๊ธฐ
RNN์ ๋ค์์ hidden layer(์๋์ธต)์ ๊ฐ์ง์ ์์ต๋๋ค.
- ์์ ์์๋ RNN ์์ hidden layer๊ฐ 1๊ฐ ๋ ์ถ๊ฐ๋์ด ์๋์ธต์ด 2๊ฐ์ธ ๊น์(deep) ์ํ ์ ๊ฒฝ๋ง์ ๋ชจ์ต์ ๋ณด์ฌ์ค๋๋ค.
- ์๋ ์ฝ๋๋ ์๋์ธต์ 2๊ฐ ์ถ๊ฐํ๋ ์ฝ๋์ ๋๋ค.
model = Sequential()
model.add(SimpleRNN(hidden_units, input_length=10, input_dim=5, return_sequences=True))
model.add(SimpleRNN(hidden_units, return_sequences=True))
- ์ฒซ๋ฒ์งธ ์๋์ธต ์ฝ๋๋ ๋ค์ ์๋์ธต์ด ์กด์ฌํจ์ผ๋ก, return_sequences = True๋ฅผ ์ค์ ํ์์ต๋๋ค.
- ๊ทธ๋ฌ๋ฉด ๋ชจ๋ ์์ ์ ๋ํด์ hidden state ๊ฐ์ ๋ค์ ์๋์ธต์ผ๋ก ๋ณด๋ด์ค๋๋ค.
RNN ๊ตฌํ - ์๋ฐฉํฅ ์ํ ์ ๊ฒฝ๋ง (Bidrectional) Model ๊ตฌํํด๋ณด๊ธฐ
t์์์ ์ถ๋ ฅ๊ฐ์ ์์ธกํ ๋ ์ด์ ์์ ์ ์ ๋ ฅ๋ฟ๋ง ์๋๋ผ, ์ดํ ์์ ์ ์ ๋ ฅ ๋ํ ์์ธก์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค.
- ์๋ฐฉํฅ RNN์ ๊ณผ๊ฑฐ ์์ ์ ์ ๋ ฅ ๋ฟ๋ง ์๋๋ผ ๋ฏธ๋ ์์ ์ ์ ๋ ฅ์ ํํธ๊ฐ ์๋ ๊ฒฝ์ฐ๋ ์กด์ฌํฉ๋๋ค.
- ๊ทธ๋์ ์ด์ , ์ดํ์ ์์ ์ ๊ณ ๋ คํด์ ํ์ฌ ์์ (time step)์ ์์ธก์ ๋์ฑ ์ ํํ๊ฒ ํ ์ ์๊ฒ ํ ๋ชจ๋ธ์ด ์๋ฐฉํฅ RNN ์ ๋๋ค.
- ์๋ฐฉํฅ RNN์ ํ๋์ ์ถ๋ ฅ๊ฐ์ ์์ธก ํ๊ธฐ ์ํด์ ๊ธฐ๋ณธ์ ์ผ๋ก 2๊ฐ์ Memory Cell์ ์ฌ์ฉํฉ๋๋ค.
- ์ฒซ๋ฒ์งธ Memory Cell์ ์ ์์ ์ ์๋ ์ํ (Forward State)๋ฅผ ์ ๋ฌ๋ฐ์ ํ์ฌ์ hidden state(์๋ ์ํ)๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- ๊ทธ๋ฆผ์์๋ A' Memory Cell์ ํด๋นํฉ๋๋ค.
- ๋๋ฒ์งธ Memory Cell์ ๋ ์์ ์ ์๋ ์ํ (Forward State)๋ฅผ ์ ๋ฌ๋ฐ์ ํ์ฌ์ hidden state(์๋ ์ํ)๋ฅผ ๊ณ์ฐํฉ๋๋ค
- ๊ทธ๋ฆผ์์๋ A Memory Cell์ ํด๋นํ๋ฉฐ, input sequence๋ฅผ ๋ฐ๋๋ก ์ฝ์ต๋๋ค.
- ์ด 2๊ฐ์ Memory Cell์ ํ์ฌ ์์ ์์์ ์ถ๋ ฅ์ธต์์ ์ถ๋ ฅ ๊ฐ์ ์์ธก ํ๊ธฐ ์ํ์ฌ ์ฌ์ฉ๋ฉ๋๋ค.
์๋ ์ฝ๋๋ ๋จ์ง ์์์ผ๋ฟ ์์ ๊ทธ๋ฆผ์ ์ฝ๋๋ก ๊ตฌํํ๊ฒ์ด ์๋๋๋ค!
from tensorflow.keras.layers import Bidirectional
timesteps = 8
input_dim = 4
model = Sequential()
model.add(Bidirectional(SimpleRNN(hidden_units, return_sequences=True), input_shape=(timesteps, input_dim)))
์๋ฐฉํฅ RNN๋ ์ผ๋ฐ RNN ๋ชจ๋ธ์ฒ๋ผ ๋ค์์ hidden layer(์๋์ธต)์ ๊ฐ์ง ์ ์์ต๋๋ค.
์๋ ๊ทธ๋ฆผ์ hidden layer(์๋์ธต)๊ฐ 1๊ฐ๊ฐ ์ถ๊ฐ๋์ด์ 2๊ฐ์ธ ๊น์ ์๋ฐฉํฅ RNN ๋ชจ๋ธ์ ๋ชจ์ต์ ๊ทธ๋ฆผ์ผ๋ก ๋ณด์ฌ์ค๋๋ค.
์๋ ์ฝ๋๋ hidden layer (์๋์ธต)์ด 2๊ฐ์ธ ๊ฒฝ์ฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
model = Sequential()
model.add(Bidirectional(SimpleRNN(hidden_units, return_sequences=True), input_shape=(timesteps, input_dim)))
model.add(Bidirectional(SimpleRNN(hidden_units, return_sequences=True)))
- ๊ทผ๋ฐ, hidden layer (์๋์ธต)๋ฅผ ์ถ๊ฐํ๋ค๊ณ ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ๊ผญ ์ข์์ง๋๊ฑด ์๋๋๋ค.
- hidden layer (์๋์ธต)๋ฅผ ์ถ๊ฐํ๋ฉด ๋ชจ๋ธ์ด ํ์ตํ๋ ์๋ ๋ง์์ง์ง๋ง, ๊ทธ์ ๋น๋กํ์ฌ ํ๋ จ ๋ฐ์ดํฐ์ ์ ์๋ ๋์ด๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ์ ํ๋จํด์ hidden layer (์๋์ธต)๋ฅผ ๋๋ฆด์ง, ์ค์ผ์ง ํ๋จํด์ ๋ชจ๋ธ์ ๋ง๋ค์ด์ผ ํ ๊ฒ ์ ๋๋ค.
๋ฐ์ํ
'๐ NLP (์์ฐ์ด์ฒ๋ฆฌ) > ๐ Natural Language Processing' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NLP] LSTM - Long Short Term Memory Model (0) | 2024.01.29 |
---|---|
[NLP] Vanilla RNN Model, Long-Term Dependency - ์ฅ๊ธฐ ์์กด์ฑ ๋ฌธ์ (0) | 2024.01.23 |
[NLP] Seq2Seq, Encoder & Decoder (0) | 2024.01.19 |
[NLP] Pre-Trained Language Model - ๋ฏธ๋ฆฌ ํ์ต๋ ์ธ์ด๋ชจ๋ธ (0) | 2024.01.18 |
[NLP} Tokenization - ํ ํฐํํ๊ธฐ (0) | 2024.01.18 |