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 |
+
์ค๋๋ ์ข์ํ๋ฃจ ๋ณด๋ด์ธ์!!
|