μ
λ ₯ λ°μ΄ν°μ νλ¦μ΄ μμΌλ‘λ§ μ λ¬λλ μ κ²½λ§μ νΌλν¬μλ μ κ²½λ§(feedforward neural network)λΌκ³ νλ€.
Fully connected neural network λ Convolution neural network λ κΈ°μ΅ μ₯μΉκ° μμ΄μ, νλμ μν(λλ νλμ λ°°μΉ)λ₯Ό μ¬μ©νμ¬ μ λ°©ν₯ κ³μ°μ μννκ³ λλ©΄ κ·Έ μνμ λ²λ €μ§κ³ λ€μ μνμ μ²λ¦¬ν λ μ¬μ¬μ©νμ§ μλλ€.
μ κ²½λ§μ΄ μ΄μ μ μ²λ¦¬νλ μνμ λ€μ μνμ μ²λ¦¬νλλ° μ¬μ¬μ©νκΈ° μν΄μλ μ΄λ κ² λ°μ΄ν° νλ¦μ΄ μμΌλ‘λ§ μ λ¬λμ΄μλ κ³€λνλ€.
λ€μ μνμ μν΄μ μ΄μ λ°μ΄ν°κ° μ κ²½λ§ μΈ΅μ μνλ νμκ° μλ€.
μν μ κ²½λ§(Recurrent Neural Network, RNN)
μν μ κ²½λ§μμλ νΉλ³ν μΈ΅μ cell μ΄λΌκ³ λΆλ₯Έλ€. ν μ μλ μ¬λ¬ κ°μ λ΄λ°μ΄ μμ§λ§ μμ μ°κ²° μ κ²½λ§κ³Ό λ¬λ¦¬ λ΄λ°μ λͺ¨λ νμνμ§ μκ³ νλμ μ λ‘ μΈ΅μ νννλ€. λ μ μ μΆλ ₯μ μλ μν(Hidden state) λΌκ³ λΆλ₯Έλ€.
μν μ κ²½λ§μ κΈ°λ³Έ ꡬ쑰λ μ λ ₯μ μ΄λ€ κ°μ€μΉλ₯Ό κ³±νκ³ νμ±ν ν¨μλ₯Ό ν΅κ³ΌμμΌ λ€μ μΈ΅μΌλ‘ 보λ΄λ κ²μ΄λ€. μ΄λ μΈ΅μ μΆλ ₯(μ¦ μλ μν)λ₯Ό λ€μ νμ μ€ν μ μ¬μ¬μ©νλ€.
μΌλ°μ μΌλ‘ μν μ κ²½λ§μμλ νμ±ν ν¨μλ‘ tanh ν¨μλ₯Ό λ§μ΄ μ¬μ©νλ€.
tanh ν¨μλ μκ·Έλͺ¨μ΄λ ν¨μμλ λ¬λ¦¬ -1 ~ 1 μ¬μ΄μ λ²μλ₯Ό κ°μ§λ€.
νμ§λ§, μ¬μ€ μνμΈ΅μ κΈ°λ³Έμ μΌλ‘ λ§μ§λ§ νμμ€ν
μ μλ μνλ§ μΆλ ₯μΌλ‘ λ΄λ³΄λΈλ€.
μ
μ μ
λ ₯μ μνλ§λ€ νμμ€ν
(ex λ¨μ΄ κ°μ)κ³Ό λ¨μ΄ννμΌλ‘ μ΄λ£¨μ΄μ§ 2μ°¨μ λ°°μ΄μ΄μ΄μΌ νλ€. λ°λΌμ 첫 λ²μ§Έ μ
μ΄ λ§μ§λ§ νμμ€ν
μ μλ μνλ§μ μΆλ ₯ν΄μλ μλλ€. μ΄λ° κ²½μ°μλ λ§μ§λ§ μ
μ μ μΈν λ€λ₯Έ λͺ¨λ μ
μ λͺ¨λ νμμ€ν
μ μλμνλ₯Ό μΆλ ₯νλ€.
κ·Έλ κΈ°μ λ§μ§λ§ μ μ μΆλ ₯μ΄ 1μ°¨μμ΄μ΄μ λ°μ§μΈ΅μΌλ‘ 보λΌλ Flatten ν΄λμ€λ‘ νΌμΉ νμκ° μλ€.
μ μ΄μ , ν μ€νΈ λ°μ΄ν°λ₯Ό μ λ ₯μΌλ‘ λ°λ μν μ κ²½λ§μ λ§λ€μ΄λ³΄μ.
μ¬μ€ ν
μ€νΈ μ체λ₯Ό μ κ²½λ§μ μ λ¬νμ§λ μλλ€. μ»΄ν¨ν°μμ μ²λ¦¬νλ λͺ¨λ κ²μ μ΄λ€ μ«μ λ°μ΄ν°μ΄λ€. μμ ν©μ±κ³± μ κ²½λ§μμ μ΄λ―Έμ§λ₯Ό λ€λ£° λλ νΉλ³ν λ³νμ νμ§ μμλ€. μ΄λ μ΄λ―Έμ§κ° μ μ ν½μ
κ°μΌλ‘ μ΄λ£¨μ΄μ Έ μκΈ° λλ¬Έμ΄λ€.
ν
μ€νΈ λ°μ΄ν°μ κ²½μ° λ¨μ΄λ₯Ό μ«μ λ°μ΄ν°λ‘ λ°κΎΈλ μΌλ°μ μΈ λ°©λ²μ λ°μ΄ν°μ λ±μ₯νλ λ¨μ΄λ§λ€ κ³ μ ν μ μλ₯Ό λΆμ¬νλ κ²μ΄λ€.
μΌλ°μ μΌλ‘ μμ΄ λ¬Έμ₯μ λͺ¨λ μλ¬Έμλ‘ λ°κΎΈκ³ ꡬλ£μ μ μμ ν λ€μ 곡백μ κΈ°μ€μΌλ‘ λΆλ¦¬νλ€. μ΄λ κ² λΆλ¦¬λ λ¨μ΄λ₯Ό ν ν°(Token) μ΄λΌκ³ λΆλ₯Έλ€. νλμ μνμ μ¬λ¬ κ°μ ν ν°μΌλ‘ μ΄λ£¨μ΄μ Έ μκ³ 1κ°μ ν ν°μ΄ νλμ νμμ€ν μ ν΄λΉνλ€.
ν ν°μ ν λΉνλ μ μ μ€μ λͺ κ°λ νΉμ ν μ©λλ‘ μμ½λμ΄ μλ κ²½μ°κ° λ§λ€. μλ₯Ό λ€μ΄ 0μ ν¨λ©, 1μ λ¬Έμ₯μ μμ, 2λ μ΄ν μ¬μ μ μλ ν ν°μ λνλΈλ€.
μν μ κ²½λ§μ λ§λ€λ ν ν°μ μ μλ‘ λ³νν λ°μ΄ν°λ₯Ό inputμΌλ‘ λ£κ² λλ©΄ λ¬Έμ μ μ΄ νλ μκΈ΄λ€.
β ν° μ μμΌ μλ‘ ν° νμ±ν μΆλ ₯μ λ§λ λ€. μ¬μ€ λ¨μ΄μ μμλ‘ κ³ μ ν μ μλ₯Ό λΆμ¬ν λΏμ΄μ§, 20μ 10λ³΄λ€ λ μ€μμν΄μΌ ν μ΄μ λ μλ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μ μ μκ°μ μλ ν¬κΈ° μμ±μ μμ κ³ κ° μ μλ₯Ό κ³ μ νκ² ννν μ μλλ‘ μ-ν« μΈμ½λ©(One-hot Encoding)μ λμ ν μ μλ€.
μ-ν« μΈμ½λ©μ μ΄λ€ ν΄λμ€μ ν΄λΉνλ μμλ§ 1μ΄κ³ λλ¨Έμ§λ λͺ¨λ 0μΈ λ²‘ν°μ΄λ€. λ³νλ ν ν°μ μ-ν« μΈμ½λ©μΌλ‘ λ³ννλ €λ©΄ μ΄ν μ¬μ ν¬κΈ°μ 벑ν°κ° λ§λ€μ΄μ§λ€.
μ΄λ κ² μ-ν« μΈμ½λ©μ μ μ©νλ©΄ λ§μ½ μ΄ 500κ°μ λ¨μ΄λ§ μ¬μ©νλλ‘ νλ λ°μ΄ν°λ₯Ό λΆλ¬μ€κ³ 100κ° λ¨μ΄λ‘ μ΄λ£¨μ΄μ§ (100, ) ν¬κΈ°μ ν μ€νΈν λ°μ΄ν°κ° λ€μ΄μ€κ² λλ€λ©΄ (100, 500) ν¬κΈ°λ‘ λ³νλλ€.
keras.utils.to_categorical(train_data) μ κ°μ μ½λλ₯Ό ν΅ν΄ μ-ν« μΈμ½λ©μ μ μ©ν μ μλ€.
νμ§λ§ μ-ν« μΈμ½λ©μ λ¨μ μ μ λ ₯ λ°μ΄ν°κ° μμ² μ»€μ§λ€λ κ²μ΄λ€. ν ν° 1κ°λ₯Ό 500μ°¨μμΌλ‘ λλ ΈκΈ° λλ¬Έμ λλ΅ 500λ°°κ° μ»€μ§λ€κ³ λ³Ό μ μλ€. μ΄λ μ© μ’μ λ°©λ²μΌλ‘ 보μ΄μ§ μλλ€.
κ·Έλμ μ€μ μν μ κ²½λ§μμλ ν μ€νΈν λ°μ΄ν°λ₯Ό μ²λ¦¬ν λ μ£Όλ‘ λ¨μ΄ μλ² λ©(Word Embedding)μ μ΄μ©νλ€.
λ¨μ΄ μλ² λ©μ μ μλ‘ λ³νλ ν ν°μ λΉκ΅μ μμ ν¬κΈ°μ μ€μ λ°μ§ 벑ν°λ‘ λ³ννλ€. μ΄λ° λ°μ§ 벑ν°λ λ¨μ΄ μ¬μ΄μ κ΄κ³λ₯Ό ννν μ μκΈ° λλ¬Έμ μμ°μ΄ μ²λ¦¬μμ μ’μ μ±λ₯μ λ°ννλ€.
μΌλΌμ€μμλ keras.layers ν¨ν€μ§ μλ Embedding ν΄λμ€λ‘ μλ² λ© κΈ°λ₯μ μ 곡νλ€. μ΄ ν΄λμ€λ₯Ό λ€λ₯Έ μΈ΅μ²λΌ λͺ¨λΈμ μΆκ°νλ©΄ μ²μμλ λͺ¨λ 벑ν°κ° λλ€νκ² μ΄κΈ°νλμ§λ§ νλ ¨μ ν΅ν΄ λ°μ΄ν°μμ μ’μ λ¨μ΄ μλ² λ©μ νμ΅νλ€.
model = keras.Sequential()
model.add(keras.layers.Embedding(500, 16, input_length=100))
model.add(keras.layers.SimpleRNN(8))
model.add(keras.layers.Dense(1, activation='sigmoid'))
Embedding ν΄λμ€μ 첫λ²μ§Έ 맀κ°λ³μ 500μ μ΄ν μ¬μ μ ν¬κΈ°μ΄λ€. λλ²μ§Έ 맀κ°λ³μ 16μ μλ² λ© λ²‘ν°μ ν¬κΈ°μ΄λ€. μΈλ²μ§Έ 맀κ°λ³μ 100μ μ λ ₯ μνμ€μ κΈΈμ΄μ΄λ€.
μμ λ¬Έμ λ₯Ό νλ² λ³΄μ.
Q: μ΄λ€ μνμΈ΅μ (100, 10) ν¬κΈ°μ μ λ ₯μ΄ μ£Όμ λκ³ μ΄ μνμΈ΅μ λ΄λ° κ°μκ° 16κ°λΌλ©΄ μ΄ μΈ΅μ νμν λͺ¨λΈμ νλΌλ―Έν° κ°μλ λͺκ°μΌκΉ?
A: μ λ ₯ μνμ€μ μλ ν ν° λ²‘ν°μ ν¬κΈ°κ° 10μ΄κ³ μνμΈ΅μ λ΄λ° κ°μκ° 16μ΄λ―λ‘ Wxμ ν¬κΈ°λ 10 x 16 = 160 κ°μ΄λ€. μνμΈ΅μ μλ μνμ κ³±ν΄μ§λ whμ ν¬κΈ°λ 16 x 16 = 256 κ°μ΄λ€. λ§μ§λ§μΌλ‘ λ΄λ°λ§λ€ 1κ°μ© μ΄ 16κ°μ μ νΈμ΄ μκΈ° λλ¬Έμ 160 + 256 + 16 = 432κ°μ΄λ€.
κ³ κΈ μνμΈ΅ : LSTM κ³Ό GRU μ
λ λμκ° κ³ κΈ μνμΈ΅μΈ LSTM κ³Ό GRU μ λν΄μ μμ보λλ‘ νμ.
μμ λ κ°μ μΈ΅λ€μ SimpleRNN λ³΄λ€ κ³μ°μ΄ ν¨μ¬ 볡μ‘νλ€. νμ§λ§ μ±λ₯μ΄ λ°μ΄λκΈ° λλ¬Έμ μν μ κ²½λ§μ λ§μ΄ μ±νλκ³ μλ€.
μΌλ°μ μΌλ‘ κΈ°λ³Έ μνμΈ΅μ κΈ΄ μνμ€λ₯Ό νμ΅νκΈ° μ΄λ ΅λ€. μ΄λ μνμ€κ° κΈΈμλ‘ μνλλ μλ μνμ λ΄κΈ΄ μ λ³΄κ° μ μ°¨ ν¬μλκΈ° λλ¬Έμ΄λ€. λ°λΌμ λ©λ¦¬ λ¨μ΄μ Έ μλ λ¨μ΄ μ 보λ₯Ό μΈμνλ λ° μ΄λ €μΈ μ μλ€. μ΄λ₯Ό μν΄ LSTM κ³Ό GRU μ μ΄ λ°λͺ λμλ€.
LSTM (Long Short-Term Memory) λ λ¨κΈ° κΈ°μ΅μ μ€λ κΈ°μ΅νκΈ° μν΄ κ³ μλμλ€.
LSTM μλ μ λ ₯κ³Ό κ°μ€μΉλ₯Ό κ³±νκ³ μ νΈμ λν΄ νμ±ν ν¨μλ₯Ό ν΅κ³Όμν€λ ꡬ쑰λ₯Ό μ¬λ¬κ° κ°μ§κ³ μλ€. μ΄λ° κ³μ° κ²°κ³Όλ λ€μ νμμ€ν μ μ¬μ¬μ©λλ€.
λ¨Όμ LSTM μ΄ μλ μνλ₯Ό λ§λλ λ°©λ²μ μμ보μ.
μλ μνλ μ
λ ₯κ³Ό μ΄μ νμμ€ν
μ μλ μνλ₯Ό κ°μ€μΉμ κ³±ν ν νμ±ν ν¨μλ₯Ό ν΅κ³ΌμμΌ λ€μ μλ μνλ₯Ό λ§λ λ€.
μ΄λ κΈ°λ³Έ μνμΈ΅κ³Ό λ¬λ¦¬ μκ·Έλͺ¨μ΄λ νμ±ν ν¨μλ₯Ό μ¬μ©νλ€. λ tanh νμ±ν ν¨μλ₯Ό ν΅κ³Όν μ΄λ€ κ°κ³Ό κ³±ν΄μ Έμ μλ μνλ₯Ό λ§λ λ€.
Woλ μλ μνλ₯Ό κ³μ°ν λ μ¬μ©νλ κ°μ€μΉ Wxμ Whλ₯Ό ν΅νμ΄ ννν κ²μ΄λ€.
LSTM μλ μνλλ μνκ° 2κ°μ΄λ€. μλ μνλ§κ³ μ μν(cell state) λΌκ³ λΆλ₯΄λ κ°μ΄ λ μλ€. μλ μνμ λ¬λ¦¬ μ μνλ λ€μ μΈ΅μΌλ‘ μ λ¬λμ§ μκ³ LSTM μ μμλ§ μνλλ κ°μ΄λ€.
μ
μνλ μ κ·Έλ¦Όμ μ΄λ‘μ c λΆλΆμ΄λ€. λν LSTM μλ μ΄ 4κ°μ μ
μ΄ μ‘΄μ¬νλ€.
λ¨Όμ μ
λ ₯κ³Ό μλ μνλ₯Ό κ°κΈ° λ€λ₯Έ κ°μ€μΉμ κ³±ν λ€μ, νλλ μκ·Έλͺ¨μ΄λ ν¨μλ₯Ό ν΅κ³Όμν€κ³ λ€λ₯Έ νλλ tanh ν¨μλ₯Ό ν΅κ³Ό μν¨λ€.
κ·Έλ€μ λ κ²°κ³Όλ₯Ό κ³±ν ν μ΄μ μ
μνμ λνλ€. μ΄ κ²°κ³Όκ° μ΅μ’
μ μΈ λ€μ μ
μνκ° λλ κ²μ΄λ€.
LSTM μ λ§μΉ μμ μ μ μ¬λ¬ κ° ν¬ν¨νκ³ μλ ν° μ κ³Ό κ°λ€. μ€μν κ²μ μ λ ₯κ³Ό μλ μνμ κ³±ν΄μ§λ κ°μ€μΉλ€μ΄ λ€λ₯΄λ€λ μ μ΄λ€.
μμ κ·Έλ¦Όμ²λΌ μΈ κ΅°λ°μ κ³±μ μ μΌμͺ½λΆν° μμ κ²μ΄νΈ, μ λ ₯ κ²μ΄νΈ, μΆλ ₯ κ²μ΄νΈλΌκ³ λΆλ₯Έλ€.
μμ κ²μ΄νΈλ μ μνμ μλ μ 보λ₯Ό μ κ±°νκ³ μ λ ₯ κ²μ΄νΈλ μλ‘μ΄ μ 보λ₯Ό μ μνμ μΆκ°νλ€. λ§μ§λ§μΌλ‘ μΆλ ₯ κ²μ΄νΈλ₯Ό ν΅ν΄μ μ΄ μ μνκ° λ€μ μλ μνλ‘ μΆλ ₯λλ€.
LSTM μ λ€μκ³Ό κ°μ΄ kerasλ‘ μ¬μ©ν μ μλ€.
from tensorflow import keras
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'))
μνμΈ΅μ λλ‘μμ μ μ©νκΈ°
Fully connected Neural Network μ Convolution Neural Network μμλ Dropout ν΄λμ€λ₯Ό μ¬μ©ν΄ λλ‘μμμ μ μ©νμλ€. μ΄λ₯Ό ν΅ν΄ λͺ¨λΈμ΄ νλ ¨ μΈνΈμ κ³Όλμ ν©μ΄ λλκ²μ λ§μ μ μμλ€. Recurrent Neural Network μμλ μ체μ μΌλ‘ λλ‘μμ κΈ°λ₯μ μ 곡νλ€. λ κ°μ§κ° μλλ°, dropout 맀κ°λ³μμ recurrent_dropoutμ΄ μλ€.
dropout 맀κ°λ³μλ μ
μ μ
λ ₯μ λλ‘μμμ μ μ©νκ³ ,
recurrent_dropout 맀κ°λ³μλ μνλλ μλ μνμ λλ‘μμμ μ μ©νλ€.
νμ§λ§ κΈ°μ μ λ¬Έμ λ‘ μΈν΄ recurrent_dropout λ₯Ό μ¬μ©νλ©΄ GPU λ₯Ό μ¬μ©νμ§ λͺ»νμ¬ λͺ¨λΈμ νλ ¨μλκ° λ§€μ° λλ €μ§ μ μλ€.
μνμΈ΅μ μ¬λ¬ κ° μ°κ²°νκΈ°
μνμΈ΅μ μ°κ²°ν λλ μ£Όμν μ μ΄ μλ€. μνμΈ΅μ μλ μνλ μνμ λ§μ§λ§ νμμ€ν
μ λν μλ μνλ§ λ€μ μΈ΅μΌλ‘ μ λ¬νλ€.
νμ§λ§ μνμΈ΅μ μκ² λλ©΄ λͺ¨λ μνμΈ΅μ μμ°¨ λ°μ΄ν°κ° νμνλ€. λ°λΌμ μμͺ½μ μνμΈ΅μ΄ λͺ¨λ νμμ€ν
μ λν μλ μνλ₯Ό μΆλ ₯ν΄μΌ νλ€. μ€μ§ λ§μ§λ§ μνμΈ΅λ§ λ§μ§λ§ νμμ€νμ μλμνλ₯Ό μΆλ ₯ν΄μΌνλ€.
μ΄λ λ€μκ³Ό κ°μ΄ μ½λλ₯Ό μμ±νλ©΄ λλ€.
from tensorflow import keras
model = keras.Sequential()
model.add(keras.layers.Embedding(500, 16, input_length = 100))
model.add(keras.layers.LSTM(8, dropout=0.3, return_sequences=True))
model.add(keras.layers.LSTM(8, dropout=0.3)
model.add(keras.layers.Dense(1, activation='sigmoid'))
μμ μ½λμ κ°μ΄ μΌλΌμ€μ μνμΈ΅μμ λͺ¨λ νμμ€ν μ μλ μνλ₯Ό μΆλ ₯νλ €λ©΄ λ§μ§λ§μ μ μΈν λ€λ₯Έ λͺ¨λ μνμΈ΅μμ return_sequences 맀κ°λ³μλ₯Ό True λ‘ μ§μ νλ©΄ λλ€.
GRU (Gated Recurrent Unit) ꡬ쑰
GRU λ λ΄μ λνκ΅ μ‘°κ²½ν κ΅μκ° λ°λͺ ν μ μ΄λ€. μ΄ μ μ LSTM μ κ°μνν λ²μ μΌλ‘ μκ°ν μ μλ€. μ΄ μ μ LSTM μ²λΌ μ μνλ₯Ό κ³μ°νμ§ μκ³ μλ μν νλλ§ ν¬ν¨νκ³ μλ€. λ¨Όμ GRU μ μ κ·Έλ¦Όμ λ€μκ³Ό κ°λ€.
GRU μ μλ μλ μνμ μ λ ₯μ κ°μ€μΉλ₯Ό κ³±νκ³ μ νΈμ λνλ μμ μ μ΄ 3κ° λ€μ΄μλ€. 2κ°λ μκ·Έλͺ¨μ΄λ νμ±ν ν¨μλ₯Ό μ¬μ©νκ³ νλλ tanh νμ±ν ν¨μλ₯Ό μ¬μ©νλ€. μ κ·Έλ¦Όμμλ μλ μνμ μ λ ₯μ κ³±ν΄μ§λ κ°μ€μΉλ₯Ό ν©μ³μ λνλ μλ€.
맨 μΌμͺ½μμ Wz λ₯Ό μ¬μ©νλ μ
μ μΆλ ₯μ΄ μλ μνμ λ°λ‘ κ³±ν΄μ Έ μμ κ²μ΄νΈ μν μ μννλ€.
μ΄μ λκ°μ μΆλ ₯μ 1μμ λΊ λ€μμ κ°μ₯ μ€λ₯Έμͺ½ Wg λ₯Ό μ¬μ©νλ μ
μ μΆλ ₯μ κ³±νλ€. μ΄λ μ
λ ₯λ
λ μ 보λ₯Ό μ μ΄νλ μν μ μννλ€.
κ°μ΄λ° Wr μ μ¬μ©νλ μ
μμ μΆλ ₯λ κ°μ Wg μ
μ΄ μ¬μ©ν μλ μνμ μ 보λ₯Ό μ μ΄νλ€.
GRU μ μ LSTM λ³΄λ€ κ°μ€μΉκ° μ κΈ° λλ¬Έμ κ³μ°λμ΄ μ μ§λ§ LSTM λͺ»μ§μμ μ’μ μ±λ₯μ λ΄λκ²μΌλ‘ μ λͺ νλ€.
from tensorflow import keras
model = keras.Sequential()
model.add(keras.layers.Embedding(500, 16, input_length = 100))
model.add(keras.layers.GRU(8))
model.add(keras.layers.Dense(1, activation='sigmoid'))
'πAI > DeepLearning_WIL' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[DL/WIL] 2 ν©μ±κ³± μ κ²½λ§(Convolution Neural Network, CNN) (0) | 2024.11.19 |
---|