Upload README.md
Browse files
README.md
CHANGED
|
@@ -1,3 +1,287 @@
|
|
| 1 |
---
|
| 2 |
license: apache-2.0
|
| 3 |
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
license: apache-2.0
|
| 3 |
---
|
| 4 |
+
|
| 5 |
+
์๋
ํ์ธ์ Oneclick AI ์
๋๋ค!!
|
| 6 |
+
์ค๋์, RNN์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ LSTM(Long Short-Term Memory)๊ณผ GRU(Gated Recurrent Unit) ๋ชจ๋ธ์ ๋ํด์ ์์๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ๋ณผ๊น ํฉ๋๋ค.
|
| 7 |
+
|
| 8 |
+
RNN์ด ์์ฐจ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐ ํ์ ์ ๊ฐ์ ธ์์ง๋ง, ๊ธด ์ํ์ค์์ ๊ณผ๊ฑฐ ์ ๋ณด๋ฅผ ์ ๋๋ก ๊ธฐ์ตํ์ง ๋ชปํ๋ '์ฅ๊ธฐ ์์กด์ฑ ๋ฌธ์ '๋ก ์ธํด ํ๊ณ๋ฅผ ๋๋ฌ๋์ต๋๋ค.
|
| 9 |
+
LSTM๊ณผ GRU๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ณ ์๋ ๊ณ ๊ธ ์ํ ์ ๊ฒฝ๋ง์ผ๋ก, ๋ง์น ์ฌ๋์ ์ฅ๊ธฐ ๊ธฐ์ต์ฒ๋ผ ์ค์ํ ์ ๋ณด๋ฅผ ์ ํ์ ์ผ๋ก ์ ์งํ๊ณ ์์ด๋ฒ๋ฆด ์ ์๋ '๊ฒ์ดํธ' ๋ฉ์ปค๋์ฆ์ ๋์
ํ์ต๋๋ค.
|
| 10 |
+
์ค๋์ ์ด ๋ ๋ชจ๋ธ์ด ์ด๋ป๊ฒ RNN์ ์ฝ์ ์ ๋ณด์ํ๋ฉฐ ์๋ํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ๋ ๋ณต์กํ ๋ฌธ์ฅ์ด๋ ์๊ณ์ด ๋ฐ์ดํฐ๋ฅผ ์ ๊ตํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋์ง ์์๋ด
์๋ค.
|
| 11 |
+
|
| 12 |
+
---
|
| 13 |
+
|
| 14 |
+
## ๋ชฉ์ฐจ
|
| 15 |
+
1. LSTM/GRU ํต์ฌ ์๋ฆฌ ํ์
ํ๊ธฐ
|
| 16 |
+
- ์ LSTM/GRU๋ฅผ ์ฌ์ฉํด์ผ๋ง ํ ๊น?
|
| 17 |
+
- LSTM์ ์ฌ์ฅ : ์
์ํ์ 3๊ฐ์ ๊ฒ์ดํธ ๋ฉ์ปค๋์ฆ
|
| 18 |
+
- GRU : LSTM์ ๊ฐ์ํ๋ ๋ฒ์ ๊ณผ 2๊ฐ์ ๊ฒ์ดํธ
|
| 19 |
+
- LSTM๊ณผ GRU๋ฅผ ์๊ฐ์ ๋ฐ๋ผ ํผ์ณ๋ณด๊ธฐ
|
| 20 |
+
- LSTM/GRU์ ์ฃผ์ ๊ตฌ์ฑ ์์ ์์ธ ๋ถ์
|
| 21 |
+
2. ์ํคํ
์ฒ๋ฅผ ํตํ ๋ด๋ถ ์ฝ๋ ๋ค์ฌ๋ค ๋ณด๊ธฐ
|
| 22 |
+
- Keras๋ก ๊ตฌํํ LSTM/GRU ๋ชจ๋ธ ์ํคํ
์ฒ
|
| 23 |
+
- model.summary()๋ก ๊ตฌ์กฐ ํ์ธํ๊ธฐ
|
| 24 |
+
3. ์ง์ LSTM/GRU ๊ตฌํํด ๋ณด๊ธฐ
|
| 25 |
+
- 1๋จ๊ณ : ๋ฐ์ดํฐ ๋ก๋ ๋ฐ ์ ์ฒ๋ฆฌ
|
| 26 |
+
- 2๋จ๊ณ : ๋ชจ๋ธ ์ปดํ์ผ
|
| 27 |
+
- 3๋จ๊ณ : ๋ชจ๋ธ ํ์ต ๋ฐ ํ๊ฐ
|
| 28 |
+
- 4๋จ๊ณ : ํ์ต๋ ๋ชจ๋ธ ์ ์ฅ ๋ฐ ์ฌ์ฌ์ฉ
|
| 29 |
+
- 5๋จ๊ณ : ๋๋ง์ ๋ฌธ์ฅ์ผ๋ก ๋ชจ๋ธ ํ
์คํธํ๊ธฐ
|
| 30 |
+
4. ๋๋ง์ LSTM/GRU ๋ชจ๋ธ ์
๊ทธ๋ ์ด๋ํ๊ธฐ
|
| 31 |
+
- ๊ธฐ์ด ์ฒด๋ ฅ ํ๋ จ : ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋
|
| 32 |
+
- ์ธต ์๊ธฐ : ๋ค์ค LSTM/GRU ๋ ์ด์ด
|
| 33 |
+
- ๊ณผ๊ฑฐ์ ๋ฏธ๋๋ฅผ ๋์์ : ์๋ฐฉํฅ LSTM/GRU
|
| 34 |
+
- ์ ์ดํ์ต์ผ๋ก ์ฑ๋ฅ ๊ทน๋ํ ํ๊ธฐ
|
| 35 |
+
5. ๊ฒฐ๋ก
|
| 36 |
+
---
|
| 37 |
+
|
| 38 |
+
## 1. LSTM/GRU ํต์ฌ์๋ฆฌ ํ์
ํ๊ธฐ
|
| 39 |
+
๊ฐ์ฅ ๋จผ์ , LSTM๊ณผ GRU๊ฐ ์ RNN์ ๋์์ผ๋ก ๋ฑ์ฅํ๋์ง ๊ทธ ๊ทผ๋ณธ์ ์ธ ์ด์ ๋ถํฐ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
|
| 40 |
+
|
| 41 |
+
**์ LSTM/GRU๋ฅผ ์ฌ์ฉํ ๊น?? with RNN์ ํ๊ณ**
|
| 42 |
+
๊ธฐ๋ณธ RNN์ ์๋ ์ํ๋ฅผ ํตํด ๊ณผ๊ฑฐ ์ ๋ณด๋ฅผ ์ ๋ฌํ์ง๋ง, ์ํ์ค๊ฐ ๊ธธ์ด์ง๋ฉด ๊ทธ๋๋์ธํธ ์์ค(Vanishing Gradient)์ด๋ ํญ๋ฐ(Exploding Gradient) ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
|
| 43 |
+
์ด๋ ํ์ต ๊ณผ์ ์์ ๊ธฐ์ธ๊ธฐ๊ฐ 0์ ๊ฐ๊น์์ง๊ฑฐ๋ ๋ฌดํ๋๊ฐ ๋์ด, ๋ฌธ์ฅ ์๋ถ๋ถ์ ์ค์ํ ์ ๋ณด๋ฅผ ์์ด๋ฒ๋ฆฌ๋ '์ฅ๊ธฐ ์์กด์ฑ ๋ฌธ์ (Long-Term Dependency)'๋ฅผ ์ด๋ํฉ๋๋ค.
|
| 44 |
+
์๋ฅผ ๋ค์ด, "์ด๋ฆฐ ์์ ํ๋์ค์์ ์๋๊ธฐ ๋๋ฌธ์... (๊ธด ๋ด์ฉ)... ๊ทธ๋์ ๋๋ ํ๋์ค์ด๋ฅผ ์ ์ฐฝํ๊ฒ ๊ตฌ์ฌํ๋ค."๋ผ๋ ๋ฌธ์ฅ์์ RNN์ 'ํ๋์ค'๋ผ๋ ์ด๊ธฐ ์ ๋ณด๋ฅผ ์๊ธฐ ์ฝ์ต๋๋ค.
|
| 45 |
+
LSTM๊ณผ GRU๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด '๊ฒ์ดํธ'๋ผ๋ ๊ตฌ์กฐ๋ฅผ ๋์
ํ์ฌ, ์ ๋ณด์ ํ๋ฆ์ ์ ์ดํฉ๋๋ค.
|
| 46 |
+
์ด๋ค์ RNN์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๋ฉด์๋ ์ค์ํ ์ ๋ณด๋ฅผ ์ ํ์ ์ผ๋ก ๊ธฐ์ตํ๊ณ ๋ถํ์ํ ๊ฒ์ ์์ด๋ฒ๋ฆด ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
|
| 47 |
+
|
| 48 |
+
**LSTM์ ์ฌ์ฅ : ์
์ํ์ 3๊ฐ์ ๊ฒ์ดํธ ๋ฉ์ปค๋์ฆ**
|
| 49 |
+
LSTM์ ํต์ฌ์ '์
์ํ(Cell State, $C_t$)'์ ์ด๋ฅผ ์ ์ดํ๋ 3๊ฐ์ ๊ฒ์ดํธ์
๋๋ค.
|
| 50 |
+
- ์
์ํ(Cell State, $C_t$): ์ฅ๊ธฐ ๊ธฐ์ต์ ์ํ '์ปจ๋ฒ ์ด์ด ๋ฒจํธ'๋ก, ์ ๋ณด๊ฐ ๊ฑฐ์ ๋ณํ ์์ด ์ ๋ฌ๋ฉ๋๋ค.
|
| 51 |
+
- ๊ฒ์ดํธ(Gates): ์๊ทธ๋ชจ์ด๋(Sigmoid) ํจ์๋ฅผ ์ฌ์ฉํด 0~1 ์ฌ์ด์ ๊ฐ์ ์ถ๋ ฅํ๋ฉฐ, ์ ๋ณด์ ํต๊ณผ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
|
| 52 |
+
|
| 53 |
+
1. ๋ง๊ฐ ๊ฒ์ดํธ(Forget Gate, $f_t$): ์ด์ ์
์ํ $C_{t-1}$์์ ์ด๋ค ์ ๋ณด๋ฅผ ์์์ง ๊ฒฐ์ ํฉ๋๋ค.
|
| 54 |
+
$f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)$
|
| 55 |
+
(์ฌ๊ธฐ์ $\sigma$๋ ์๊ทธ๋ชจ์ด๋ ํจ์, $h_{t-1}$์ ์ด์ ์๋ ์ํ, $x_t$๋ ํ์ฌ ์
๋ ฅ)
|
| 56 |
+
|
| 57 |
+
2. ์
๋ ฅ ๊ฒ์ดํธ(Input Gate, $i_t$)์ ํ๋ณด ์
์ํ($\tilde{C_t}$): ์๋ก์ด ์ ๋ณด๋ฅผ ์ผ๋ง๋ ์ถ๊ฐํ ์ง ๊ฒฐ์ ํฉ๋๋ค.
|
| 58 |
+
$i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i)$
|
| 59 |
+
$\tilde{C_t} = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C)$
|
| 60 |
+
|
| 61 |
+
3. ์ถ๋ ฅ ๊ฒ์ดํธ(Output Gate, $o_t$): ์
์ํ์์ ์ด๋ค ์ ๋ณด๋ฅผ ์ถ๋ ฅํ ์ง ๊ฒฐ์ ํฉ๋๋ค.
|
| 62 |
+
$o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o)$
|
| 63 |
+
์ต์ข
์
์ํ $C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C_t}$ ( $\odot$์ ์์๋ณ ๊ณฑ)
|
| 64 |
+
์๋ ์ํ $h_t = o_t \odot \tanh(C_t)$
|
| 65 |
+
|
| 66 |
+
์ด ๊ตฌ์กฐ ๋๋ถ์ LSTM์ ์ฅ๊ธฐ์ ์ธ ์์กด์ฑ์ ํจ๊ณผ์ ์ผ๋ก ํ์ตํฉ๋๋ค.
|
| 67 |
+
|
| 68 |
+
**GRU : LSTM์ ๊ฐ์ํ๋ ๋ฒ์ ๊ณผ 2๊ฐ์ ๊ฒ์ดํธ**
|
| 69 |
+
GRU๋ LSTM์ ๋ณํ์ผ๋ก, ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ฌ ๊ณ์ฐ ํจ์จ์ฑ์ ๋์์ต๋๋ค.
|
| 70 |
+
์๋ ์ํ $h_t$๊ฐ ์
์ํ ์ญํ ์ ๊ฒธํ๋ฉฐ, 2๊ฐ์ ๊ฒ์ดํธ๋ง ์ฌ์ฉํฉ๋๋ค.
|
| 71 |
+
- ๋ฆฌ์
๊ฒ์ดํธ(Reset Gate, $r_t$): ์ด์ ์๋ ์ํ๋ฅผ ์ผ๋ง๋ ๋ฌด์ํ ์ง ๊ฒฐ์ ํฉ๋๋ค.
|
| 72 |
+
$r_t = \sigma(W_r \cdot [h_{t-1}, x_t] + b_r)$
|
| 73 |
+
|
| 74 |
+
- ์
๋ฐ๏ฟฝ๏ฟฝ๏ฟฝํธ ๊ฒ์ดํธ(Update Gate, $z_t$): ์ด์ ์ํ์ ์ ํ๋ณด ์ํ๋ฅผ ์ผ๋ง๋ ์์์ง ๊ฒฐ์ ํฉ๋๋ค. (LSTM์ ๋ง๊ฐ+์
๋ ฅ ๊ฒ์ดํธ ์ญํ )
|
| 75 |
+
$z_t = \sigma(W_z \cdot [h_{t-1}, x_t] + b_z)$
|
| 76 |
+
ํ๋ณด ์๋ ์ํ $\tilde{h_t} = \tanh(W_h \cdot [r_t \odot h_{t-1}, x_t] + b_h)$
|
| 77 |
+
์ต์ข
$h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h_t}$
|
| 78 |
+
|
| 79 |
+
GRU๋ LSTM๋งํผ ๊ฐ๋ ฅํ๋ฉด์๋ ํ์ต์ด ๋ ๋น ๋ฆ
๋๋ค.
|
| 80 |
+
|
| 81 |
+
**LSTM/GRU๋ฅผ ์๊ฐ์ ๋ฐ๋ผ ํผ์ณ๋ณด๊ธฐ**
|
| 82 |
+
์๋ ๊ทธ๋ฆผ์ฒ๋ผ ์๊ฐ์ ๋ฐ๋ผ ๋คํธ์ํฌ๋ฅผ ๊ธธ๊ฒ ํผ์ณ์ ํํํ๋ฉด, ์ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
|
| 83 |
+
```markdown
|
| 84 |
+
์๊ฐ ํ๋ฆ โโโโถ
|
| 85 |
+
์
๋ ฅ ์ํ์ค: xโ xโ xโ ... xโ
|
| 86 |
+
โ โ โ โ
|
| 87 |
+
โโโโโโ โโโโโโ โโโโโโ ... โโโโโโ
|
| 88 |
+
hโ, Cโ โโโถโLSTMโโถโLSTMโโถโLSTMโ โถ ... โถโLSTMโ (๋๋ GRU)
|
| 89 |
+
โโโโโโ โโโโโโ โโโโโโ โโโโโโ
|
| 90 |
+
โ โ โ โ
|
| 91 |
+
โผ โผ โผ โผ
|
| 92 |
+
hโ hโ hโ hโ
|
| 93 |
+
```
|
| 94 |
+
๊ฐ ํ์์คํ
์์ ๊ฒ์ดํธ๊ฐ ์ ๋ณด๋ฅผ ์ ์ดํ๋ฉฐ, ์
์ํ(๋๋ ์๋ ์ํ)๊ฐ ์ฅ๊ธฐ์ ์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค.
|
| 95 |
+
|
| 96 |
+
**LSTM/GRU์ ์ฃผ์ ๊ตฌ์ฑ ์์**
|
| 97 |
+
- ๊ฒ์ดํธ ๋ฉ์ปค๋์ฆ: ์ ๋ณด ์ ํ๊ณผ ์ญ์ .
|
| 98 |
+
- ์๋/์
์ํ: ๋ฉ๋ชจ๋ฆฌ ์ญํ .
|
| 99 |
+
- ํ๋ผ๋ฏธํฐ ๊ณต์ : ๋ชจ๋ ํ์์คํ
์์ ๋์ผํ ๊ฐ์ค์น ์ฌ์ฉ.
|
| 100 |
+
|
| 101 |
+
---
|
| 102 |
+
|
| 103 |
+
## 2. ์ํคํ
์ฒ๋ฅผ ํตํ ๋ด๋ถ ์ฝ๋ ๋ค์ฌ๋ค ๋ณด๊ธฐ
|
| 104 |
+
์ด์ ์ด๋ก ์ ๋ฐํ์ผ๋ก, TensorFlow Keras ๋ฅผ ํตํด ์ง์ LSTM๊ณผ GRU๋ฅผ ๊ตฌํํด ๋ด
์๋ค.
|
| 105 |
+
Keras๋ก ๊ตฌํํ LSTM/GRU ๋ชจ๋ธ ์ํคํ
์ฒ ์ฌ์ธต ๋ถ์๋ค์์ IMDB ์ํ ๋ฆฌ๋ทฐ ๊ฐ์ฑ ๋ถ์์ ์ํ ๊ฐ๋จํ LSTM ๋ชจ๋ธ์
๋๋ค. (GRU๋ ์ ์ฌ)
|
| 106 |
+
|
| 107 |
+
```python
|
| 108 |
+
import tensorflow as tf
|
| 109 |
+
from tensorflow import keras
|
| 110 |
+
|
| 111 |
+
# ๋ชจ๋ธ ์ํคํ
์ฒ ์ ์
|
| 112 |
+
model = keras.Sequential([
|
| 113 |
+
# 1. ๋จ์ด ์๋ฒ ๋ฉ ์ธต
|
| 114 |
+
keras.layers.Embedding(input_dim=10000, output_dim=32),
|
| 115 |
+
|
| 116 |
+
# 2. LSTM ์ธต (GRU๋ก ๋ฐ๊พธ๋ ค๋ฉด SimpleRNN ๋์ LSTM ๋๋ GRU ์ฌ์ฉ)
|
| 117 |
+
keras.layers.LSTM(32),
|
| 118 |
+
|
| 119 |
+
# 3. ์ต์ข
๋ถ๋ฅ๊ธฐ
|
| 120 |
+
keras.layers.Dense(1, activation="sigmoid"),
|
| 121 |
+
])
|
| 122 |
+
|
| 123 |
+
# ๋ชจ๋ธ ๊ตฌ์กฐ ์์ฝ ์ถ๋ ฅ
|
| 124 |
+
model.summary()
|
| 125 |
+
```
|
| 126 |
+
๋ ์ด์ด๋ฅผ ์์ธํ ๋ค์ด๋ค ๋ด
์๋ค.
|
| 127 |
+
|
| 128 |
+
- **์๋ฒ ๋ฉ ์ธต(Embedding)**
|
| 129 |
+
```python
|
| 130 |
+
keras.layers.Embedding(input_dim=10000, output_dim=32)
|
| 131 |
+
```
|
| 132 |
+
๋จ์ด๋ฅผ ๋ฒกํฐ๋ก ๋ณํ, RNN ๋ฌธ์์ ๋์ผ.
|
| 133 |
+
|
| 134 |
+
- **์ํ ๊ณ์ธต(LSTM ๋๋ GRU)**
|
| 135 |
+
```python
|
| 136 |
+
keras.layers.LSTM(32),
|
| 137 |
+
```
|
| 138 |
+
๋๋
|
| 139 |
+
```python
|
| 140 |
+
keras.layers.GRU(32),
|
| 141 |
+
```
|
| 142 |
+
๋ด๋ถ์ ์ผ๋ก ๊ฒ์ดํธ๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ, ์ฅ๊ธฐ ์์กด์ฑ์ ํ์ต. ๊ธฐ๋ณธ์ ์ผ๋ก ์ต์ข
์๋ ์ํ๋ง ์ถ๋ ฅ.
|
| 143 |
+
|
| 144 |
+
- **์์ ์ฐ๊ฒฐ ๊ณ์ธต(Dense)**
|
| 145 |
+
```python
|
| 146 |
+
keras.layers.Dense(1, activation="sigmoid")
|
| 147 |
+
```
|
| 148 |
+
์ต์ข
ํ๋จ.
|
| 149 |
+
|
| 150 |
+
model.summary()๋ก ํ๋ผ๋ฏธํฐ ์ ๊ณ์ฐ ์๋ฆฌ ์ดํดํ๊ธฐ์ ์ฝ๋์์ model.summary()๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ต๋๋ค.
|
| 151 |
+
|
| 152 |
+
```bash
|
| 153 |
+
Model: "sequential"
|
| 154 |
+
_________________________________________________________________
|
| 155 |
+
Layer (type) Output Shape Param #
|
| 156 |
+
=================================================================
|
| 157 |
+
embedding (Embedding) (None, None, 32) 320000
|
| 158 |
+
|
| 159 |
+
lstm (LSTM) (None, 32) 8320
|
| 160 |
+
|
| 161 |
+
dense (Dense) (None, 1) 33
|
| 162 |
+
|
| 163 |
+
=================================================================
|
| 164 |
+
Total params: 328,353
|
| 165 |
+
Trainable params: 328,353
|
| 166 |
+
Non-trainable params: 0
|
| 167 |
+
_________________________________________________________________
|
| 168 |
+
```
|
| 169 |
+
|
| 170 |
+
๊ฐ ์ธต์ ํ๋ผ๋ฏธํฐ ์๋ ์ด๋ป๊ฒ ๊ณ์ฐ๋๋์ง ์์๋ณด์๋ฉด,
|
| 171 |
+
1. Embedding: 10,000 * 32 = 320,000 ๊ฐ.
|
| 172 |
+
2. LSTM: ์
๋ ฅ(32)๊ณผ ์๋(32)์ ๊ณ ๋ คํ 4๊ฐ์ ๊ฒ์ดํธ(์
๋ ฅ, ๋ง๊ฐ, ์ถ๋ ฅ, ํ๋ณด)๋ก, (32+32+1)*32*4 = 8,320 ๊ฐ. (GRU๋ 3๋ฐฐ: ์ฝ 6,240)
|
| 173 |
+
3. Dense: 32 * 1 + 1 = 33 ๊ฐ.
|
| 174 |
+
|
| 175 |
+
---
|
| 176 |
+
|
| 177 |
+
## 3. ์ง์ LSTM/GRU ๊ตฌํํด ๋ณด๊ธฐ
|
| 178 |
+
์ด์ , ์ ์ฒด ์ฝ๋๋ฅผ ๋จ๊ณ๋ณ๋ก ์คํํ๋ฉฐ ์ง์ ๋ชจ๋ธ์ ํ์ต์์ผ ๋ณด๊ฒ ์ต๋๋ค. (RNN ๋ฌธ์์ ์ ์ฌ, IMDB ๋ฐ์ดํฐ ์ฌ์ฉ)
|
| 179 |
+
|
| 180 |
+
**1๋จ๊ณ. ๋ฐ์ดํฐ ๋ก๋ ๋ฐ ์ ์ฒ๋ฆฌ**
|
| 181 |
+
```python
|
| 182 |
+
import numpy as np
|
| 183 |
+
import tensorflow as tf
|
| 184 |
+
from tensorflow import keras
|
| 185 |
+
from keras import layers
|
| 186 |
+
|
| 187 |
+
(x_train, y_train), (x_test, y_test) = keras.datasets.imdb.load_data(num_words=10000)
|
| 188 |
+
|
| 189 |
+
x_train = keras.preprocessing.sequence.pad_sequences(x_train, maxlen=256)
|
| 190 |
+
x_test = keras.preprocessing.sequence.pad_sequences(x_test, maxlen=256)
|
| 191 |
+
```
|
| 192 |
+
|
| 193 |
+
**2๋จ๊ณ. ๋ชจ๋ธ ์ปดํ์ผ**
|
| 194 |
+
```python
|
| 195 |
+
model = keras.Sequential([
|
| 196 |
+
layers.Embedding(input_dim=10000, output_dim=32),
|
| 197 |
+
layers.LSTM(32), # ๋๋ layers.GRU(32)
|
| 198 |
+
layers.Dense(1, activation="sigmoid")
|
| 199 |
+
])
|
| 200 |
+
|
| 201 |
+
model.compile(
|
| 202 |
+
loss="binary_crossentropy",
|
| 203 |
+
optimizer="adam",
|
| 204 |
+
metrics=["accuracy"]
|
| 205 |
+
)
|
| 206 |
+
```
|
| 207 |
+
|
| 208 |
+
**3๋จ๊ณ. ๋ชจ๋ธ ํ์ต ๋ฐ ํ๊ฐ**
|
| 209 |
+
```python
|
| 210 |
+
batch_size = 128
|
| 211 |
+
epochs = 10
|
| 212 |
+
|
| 213 |
+
history = model.fit(
|
| 214 |
+
x_train, y_train,
|
| 215 |
+
batch_size=batch_size,
|
| 216 |
+
epochs=epochs,
|
| 217 |
+
validation_data=(x_test, y_test)
|
| 218 |
+
)
|
| 219 |
+
|
| 220 |
+
score = model.evaluate(x_test, y_test, verbose=0)
|
| 221 |
+
print(f"\nTest loss: {score[0]:.4f}")
|
| 222 |
+
print(f"Test accuracy: {score[1]:.4f}")
|
| 223 |
+
```
|
| 224 |
+
|
| 225 |
+
**4๋จ๊ณ. ํ์ต๋ ๋ชจ๋ธ ์ ์ฅ ๋ฐ ์ฌ์ฌ์ฉ**
|
| 226 |
+
```python
|
| 227 |
+
model.save("my_lstm_model_imdb.keras")
|
| 228 |
+
loaded_model = keras.models.load_model("my_lstm_model_imdb.keras")
|
| 229 |
+
```
|
| 230 |
+
|
| 231 |
+
**5๋จ๊ณ. ๋๋ง์ ๋ฌธ์ฅ์ผ๋ก ๋ชจ๋ธ ํ
์คํธํ๊ธฐ**
|
| 232 |
+
```python
|
| 233 |
+
word_index = keras.datasets.imdb.get_word_index()
|
| 234 |
+
|
| 235 |
+
review = "This movie was fantastic and wonderful"
|
| 236 |
+
tokens = [word_index.get(word, 2) for word in review.lower().split()]
|
| 237 |
+
padded_tokens = keras.preprocessing.sequence.pad_sequences([tokens], maxlen=256)
|
| 238 |
+
|
| 239 |
+
prediction = loaded_model.predict(padded_tokens)
|
| 240 |
+
print(f"๋ฆฌ๋ทฐ: '{review}'")
|
| 241 |
+
print(f"๊ธ์ ํ๋ฅ : {prediction[0][0] * 100:.2f}%")
|
| 242 |
+
```
|
| 243 |
+
|
| 244 |
+
## 4. ๋๋ง์ LSTM/GRU ๋ชจ๋ธ ์
๊ทธ๋ ์ด๋ํ๊ธฐ
|
| 245 |
+
๊ธฐ๋ณธ ๋ชจ๋ธ์ ๋ ๊ฐ๋ ฅํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ๋ค์ํ ๊ธฐ๋ฒ์ ์ ์ฉํด ๋ณด๊ฒ ์ต๋๋ค.
|
| 246 |
+
|
| 247 |
+
- **๊ธฐ์ด ์ฒด๋ ฅ ํ๋ จ : ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋**
|
| 248 |
+
ํ์ต๋ฅ , ๋ฐฐ์น ํฌ๊ธฐ, ์ ๋ ์ ๋ฑ์ ์กฐ์ .
|
| 249 |
+
```python
|
| 250 |
+
optimizer = keras.optimizers.Adam(learning_rate=0.001)
|
| 251 |
+
model.compile(loss="binary_crossentropy", optimizer=optimizer, metrics=["accuracy"])
|
| 252 |
+
```
|
| 253 |
+
|
| 254 |
+
- **์ธต ์๊ธฐ : ๋ค์ค LSTM/GRU ๋ ์ด์ด**
|
| 255 |
+
```python
|
| 256 |
+
model = keras.Sequential([
|
| 257 |
+
layers.Embedding(input_dim=10000, output_dim=64),
|
| 258 |
+
layers.LSTM(64, return_sequences=True),
|
| 259 |
+
layers.LSTM(32),
|
| 260 |
+
layers.Dense(1, activation='sigmoid')
|
| 261 |
+
])
|
| 262 |
+
```
|
| 263 |
+
|
| 264 |
+
- **๊ณผ๊ฑฐ์ ๋ฏธ๋๋ฅผ ๋์์ : ์๋ฐฉํฅ LSTM/GRU**
|
| 265 |
+
```python
|
| 266 |
+
model = keras.Sequential([
|
| 267 |
+
layers.Embedding(input_dim=10000, output_dim=64),
|
| 268 |
+
layers.Bidirectional(layers.LSTM(64)),
|
| 269 |
+
layers.Dropout(0.5),
|
| 270 |
+
layers.Dense(1, activation='sigmoid')
|
| 271 |
+
])
|
| 272 |
+
```
|
| 273 |
+
|
| 274 |
+
- **์ ์ดํ์ต์ผ๋ก ์ฑ๋ฅ ๊ทน๋ํ ํ๊ธฐ**
|
| 275 |
+
์ฌ์ ํ์ต๋ ๋ชจ๋ธ(์: GloVe ์๋ฒ ๋ฉ) ์ฌ์ฉํ๊ฑฐ๋, ๋ํ ๋ชจ๋ธ์ LSTM ๋ ์ด์ด freeze.
|
| 276 |
+
```python
|
| 277 |
+
# ์: ์ฌ์ ํ์ต๋ ์๋ฒ ๋ฉ ๋ก๋ (๋ณ๋ ํ์ผ ํ์)
|
| 278 |
+
embedding_layer = layers.Embedding(input_dim=10000, output_dim=100, trainable=False)
|
| 279 |
+
# GloVe ๋ฑ์ผ๋ก ์ด๊ธฐํ
|
| 280 |
+
```
|
| 281 |
+
|
| 282 |
+
## 5. ๊ฒฐ๋ก
|
| 283 |
+
์ค๋์, RNN์ ํ๊ณ๋ฅผ ๋์ด์ LSTM๊ณผ GRU์ ํต์ฌ ์๋ฆฌ๋ถํฐ ์ค์ ๊ตฌํ, ์
๊ทธ๋ ์ด๋ ๋ฐฉ๋ฒ๊น์ง ์์๋ณด์์ต๋๋ค.
|
| 284 |
+
์ด ๋ ๋ชจ๋ธ์ ์์ฐ์ด ์ฒ๋ฆฌ๋ฟ๋ง ์๋๋ผ ์๊ณ์ด ์์ธก, ์์ฑ ์ธ์ ๋ฑ์์ ์ฌ์ ํ ํต์ฌ์ ์ธ ์ญํ ์ ํฉ๋๋ค.
|
| 285 |
+
ํนํ, LSTM/GRU์ ๊ฒ์ดํธ ์์ด๋์ด๋ ์ดํ ์ดํ
์
๋ฉ์ปค๋์ฆ๊ณผ ํธ๋์คํฌ๋จธ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ด ๋์์ต๋๋ค.
|
| 286 |
+
๋ค์์๋ ํธ๋์คํฌ๋จธ ๋ชจ๋ธ๋ก ๋์์ค๊ฒ ์ต๋๋ค!!
|
| 287 |
+
์ค๋๋ ์ข์ํ๋ฃจ ๋ณด๋ด์ธ์!!
|