์์ค ํจ์(Loss function)
์ค์ ๊ฐ๊ณผ ์์ธก๊ฐ์ ์ฐจ์ด๋ฅผ ์์นํํด์ฃผ๋ ํจ์
์ค์ฐจ๊ฐ ํด ์๋ก ์์ค ํจ์์ ๊ฐ์ ํฌ๊ณ ์ค์ฐจ๊ฐ ์์ ์๋ก ์์ค ํจ์์ ๊ฐ์ ์์์ง
๋ ๊ฐ์ ๋งค๊ฐ๋ณ์์ธ ๊ฐ์ค์น ์ ํธํฅ ์ ๊ฐ์ ์ฐพ๋ ๊ฒ์ด ๋ฅ ๋ฌ๋์ ํ์ต ๊ณผ์ ์ด๋ฏ๋ก ์์ค ํจ์์ ์ ์ ์ ๋งค์ฐ ์ค์
1) ํ๊ท ์ ๊ณฑ ์ค์ฐจ (Mean Squared Error, MSE)
์ฐ์ํ ๋ณ์๋ฅผ ์์ธกํ ๋ ์ฌ์ฉ
model.compile(optimizer='adam', loss='mse', metrics=['mse'])
model.compile(optimizer='adam', loss=tf.keras.losses.MeanSquaredError(), metrics=['mse'])
2) ์ด์ง ํฌ๋ก์ค ์ํธ๋กํผ(Binary Cross-Entropy)
= ์ดํญ ๊ต์ฐจ ์ํธ๋กํผ
๋ก์ง์คํฑ ํ๊ท์์ ์ฌ์ฉํ๋ ์์ค ํจ์
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['acc'])
model.compile(loss=tf.keras.losses.BinaryCrossentropy(), optimizer='adam', metrics=['acc'])
3) ์นดํ
๊ณ ๋ฆฌ์นผ ํฌ๋ก์ค ์ํธ๋กํผ(Categorical Cross-Entropy)
= ๋ฒ์ฃผํ ๊ต์ฐจ ์ํธ๋กํผ
์ํํธ๋งฅ์ค ํ๊ท์์ ์ฌ์ฉํ๋ ์์ค ํจ์
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])
model.compile(loss=tf.keras.losses.CategoricalCrossentropy(), optimizer='adam', metrics=['acc'])
4) ๊ทธ ์ธ ๋ค์ํ ์์ค ํจ์๋ค
https://www.tensorflow.org/api_docs/python/tf/keras/losses
๋ฐฐ์น ํฌ๊ธฐ(Batch Size)์ ๋ฐ๋ฅธ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ
๋ฐฐ์น : ๊ฐ์ค์น ๋ฑ์ ๋งค๊ฐ ๋ณ์์ ๊ฐ์ ์กฐ์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฐ์ดํฐ์ ์
์ฒด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ๋งค๊ฐ ๋ณ์์ ๊ฐ์ ์กฐ์ ํ ์๋ ์๊ณ , ์ ํด์ค ์์ ๋ฐ์ดํฐ๋ง ๊ฐ์ง๊ณ ๋ ๋งค๊ฐ ๋ณ์์ ๊ฐ์ ์กฐ์ ํ ์ ์์ต๋๋ค.
1) ๋ฐฐ์น ๊ฒฝ์ฌ ํ๊ฐ๋ฒ(Batch Gradient Descent)
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ
์ค์ฐจ(loss)๋ฅผ ๊ตฌํ ๋ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๊ณ ๋ ค
์ ์ฒด ๋ฐ์ดํฐ์ ๋ํ ํ ๋ฒ์ ํ๋ จ ํ์๋ฅผ 1 ์ํฌํฌ
ํ ๋ฒ์ ์ํฌํฌ์ ๋ชจ๋ ๋งค๊ฐ๋ณ์ ์
๋ฐ์ดํธ๋ฅผ ๋จ ํ ๋ฒ ์ํ
ํ ๋ฒ์ ๋งค๊ฐ ๋ณ์ ์
๋ฐ์ดํธ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํฌ๊ฒ ์๊ตฌํ๋ค๋ ๋จ์
model.fit(X_train, y_train, batch_size=len(X_train))
2) ๋ฐฐ์น ํฌ๊ธฐ๊ฐ 1์ธ ํ๋ฅ ์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ(Stochastic Gradient Descent, SGD)
๋งค๊ฐ๋ณ์ ๊ฐ์ ์กฐ์ ์ ์ ์ฒด ๋ฐ์ดํฐ๊ฐ ์๋๋ผ ๋๋ค์ผ๋ก ์ ํํ ํ๋์ ๋ฐ์ดํฐ์ ๋ํด์๋ง ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ
๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋ ๋น ๋ฅด๊ฒ ๊ณ์ฐ
๋งค๊ฐ๋ณ์์ ๋ณ๊ฒฝํญ์ด ๋ถ์์ ํ๊ณ , ๋๋ก๋ ๋ฐฐ์น ๊ฒฝ์ฌ ํ๊ฐ๋ฒ๋ณด๋ค ์ ํ๋๊ฐ ๋ฎ์ ์๋ ์์ง๋ง ํ๋์ ๋ฐ์ดํฐ์ ๋ํด์๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ฉด ๋๋ฏ๋ก ์์์ด ์ ์ ์ปดํจํฐ์์๋ ์ฝ๊ฒ ์ฌ์ฉ๊ฐ๋ฅ
model.fit(X_train, y_train, batch_size=1)
3) ๋ฏธ๋ ๋ฐฐ์น ๊ฒฝ์ฌ ํ๊ฐ๋ฒ(Mini-Batch Gradient Descent)
์ ์ฒด ๋ฐ์ดํฐ๋, 1๊ฐ์ ๋ฐ์ดํฐ๋ ์๋ ๋, ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ ์ง์ ํ์ฌ ํด๋น ๋ฐ์ดํฐ ๊ฐ์๋งํผ์ ๋ํด์ ๊ณ์ฐํ์ฌ ๋งค๊ฐ ๋ณ์์ ๊ฐ์ ์กฐ์ ํ๋ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ
์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๊ณ์ฐํ๋ ๊ฒ๋ณด๋ค ๋น ๋ฅด๋ฉฐ, SGD๋ณด๋ค ์์ ์
model.fit(X_train, y_train, batch_size=128)
๋ฐฐ์น ํฌ๊ธฐ๋ ์ผ๋ฐ์ ์ผ๋ก 2์ n์ ๊ณฑ์ ํด๋นํ๋ ์ซ์๋ก ์ ํํ๋ ๊ฒ์ด ๋ณดํธ์ (๋ฐฐ์น ํฌ๊ธฐ๋ฅผ ๋ณ๋๋ก ์ง์ ํด์ฃผ์ง ์์ ๊ฒฝ์ฐ์ ๊ธฐ๋ณธ๊ฐ์ 2์ 5์ ๊ณฑ์ ํด๋นํ๋ ์ซ์์ธ 32๋ก ์ค์ )
์ตํฐ๋ง์ด์ (Optimizer)
1) ๋ชจ๋ฉํ
(Momentum)
๊ฒฝ์ฌ ํ๊ฐ๋ฒ์์ ๊ณ์ฐ๋ ์ ์ ์ ๊ธฐ์ธ๊ธฐ์ ํ ์์ ์ ์ ์ ์ ์ ๊ธฐ์ธ๊ธฐ๊ฐ์ ์ผ์ ํ ๋น์จ๋งํผ ๋ฐ์
๋ก์ปฌ ๋ฏธ๋๋ฉ์ ๋๋ฌ ์, ๋ ๊ธ๋ก๋ฒ ๋ฏธ๋๋ฉ์ผ๋ก ์๋ชป ์ธ์ํ์ฌ ํ์ถํ์ง ๋ชปํ์์ ์ํฉ์์ ๋ชจ๋ฉํ ์ผ๋ก ๊ฐ์ ์กฐ์ ํด ํ์ฌ ๋ก์ปฌ ๋ฏธ๋๋ฉ์์ ํ์ถํ๊ณ , ๊ธ๋ก๋ฒ ๋ฏธ๋๋ฉ ๋๋ ๋ ๋ฎ์ ๋ก์ปฌ ๋ฏธ๋๋ฉ์ผ๋ก ๊ฐ ์ ์์
- ๊ธ๋ก๋ฒ ๋ฏธ๋๋ฉ(Global Minimum) : ์ ์ฒด ํจ์์ ๊ฑธ์น ์ต์๊ฐ
- ๋ก์ปฌ ๋ฏธ๋๋ฉ(Local Minimum) : ๊ธ๋ก๋ฒ ๋ฏธ๋๋ฉ์ด ์๋ ํน์ ๊ตฌ์ญ์์์ ์ต์๊ฐ
tf.keras.optimizers.SGD(lr=0.01, momentum=0.9)
2) ์๋ค๊ทธ๋ผ๋(Adagrad)
๊ฐ ๋งค๊ฐ๋ณ์์ ์๋ก ๋ค๋ฅธ ํ์ต๋ฅ ์ ์ ์ฉ (๋ชจ๋ ๋งค๊ฐ๋ณ์์ ๋์ผํ ํ์ต๋ฅ ์ ์ ์ฉํ๋ ๊ฒ์ ๋นํจ์จ์ )
๋ณํ๊ฐ ๋ง์ ๋งค๊ฐ๋ณ์๋ ํ์ต๋ฅ ์ด ์๊ฒ ์ค์ ๋๊ณ ๋ณํ๊ฐ ์ ์ ๋งค๊ฐ๋ณ์๋ ํ์ต๋ฅ ์ ๋๊ฒ ์ค์
tf.keras.optimizers.Adagrad(lr=0.01, epsilon=1e-6)
3) ์์ ์์คํ๋กญ(RMSprop)
ํ์ต์ ๊ณ์ ์งํํ ๊ฒฝ์ฐ ๋์ค์ ํ์ต๋ฅ ์ด ์ง๋์น๊ฒ ๋จ์ด์ง๋ค๋ ๋จ์ ์ด ์๋๋ฐ, ์ด๋ฅผ ๋ค๋ฅธ ์์์ผ๋ก ๋์ฒดํ์ฌ ๋จ์ ๊ฐ์
tf.keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-06)
4) ์๋ด(Adam)
์์ ์์คํ๋กญ๊ณผ ๋ชจ๋ฉํ
๋ ๊ฐ์ง๋ฅผ ํฉ์น ๋ฏํ ๋ฐฉ๋ฒ
๋ฐฉํฅ๊ณผ ํ์ต๋ฅ ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ์ก๊ธฐ ์ํ ๋ฐฉ๋ฒ
tf.keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
๊ฐ ์ตํฐ๋ง์ด์ ์ธ์คํด์ค๋ compile์ optimizer์์ ํธ์ถ
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])
#optimizer='sgd', optimizer='rmsprop'
* keras์ ์ตํฐ๋ง์ด์ ์ฌ์ฉ๋ฒ : https://www.tensorflow.org/api_docs/python/tf/keras/optimizers
์ํฌํฌ, ๋ฐฐ์น ํฌ๊ธฐ, ์ดํฐ๋ ์ด์
1) ์ํฌํฌ(Epoch)
์ธ๊ณต ์ ๊ฒฝ๋ง์์ ์ ์ฒด ๋ฐ์ดํฐ์ ๋ํด์ ์์ ํ์ ์ญ์ ํ๊ฐ ๋๋ ์ํ
์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๋ฌธ์ ์ง์ ๋น์ ํ๋ค๋ฉด ๋ฌธ์ ์ง์ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ๋๊น์ง ๋ค ํ๊ณ , ์ ๋ต์ง๋ก ์ฑ์ ์ ํ์ฌ ๋ฌธ์ ์ง์ ๋ํ ๊ณต๋ถ๋ฅผ ํ ๋ฒ ๋๋ธ ์ํ
์ํฌํฌ ํ์๊ฐ ์ง๋์น๊ฑฐ๋ ๋๋ฌด ์ ์ผ๋ฉด ๊ณผ์ ํฉ๊ณผ ๊ณผ์์ ํฉ์ด ๋ฐ์ํ ์ ์๋ค
ex) ์ํฌํฌ = 50์ผ ๋ ์ ์ฒด ๋ฐ์ดํฐ ๋จ์๋ก๋ ์ด 50๋ฒ ํ์ต (๋ฌธ์ ์ง๋ฅผ 50๋ฒ ํผ ์
)
2) ๋ฐฐ์น ํฌ๊ธฐ(Batch size)
๋ช ๊ฐ์ ๋ฐ์ดํฐ ๋จ์๋ก ๋งค๊ฐ๋ณ์๋ฅผ ์
๋ฐ์ดํธ ํ๋์ง๋ฅผ ์๋ฏธ
๋ฌธ์ ์ง์์ ๋ช ๊ฐ์ฉ ๋ฌธ์ ๋ฅผ ํ๊ณ ๋์ ์ ๋ต์ง๋ฅผ ํ์ธํ๋๋์ ๋ฌธ์
๊ธฐ๊ณ๋ ์ค์ ๊ฐ๊ณผ ์์ธก๊ฐ์ผ๋ก๋ถํฐ ์ค์ฐจ๋ฅผ ๊ณ์ฐํ๊ณ , ์ตํฐ๋ง์ด์ ๊ฐ ๋งค๊ฐ๋ณ์๋ฅผ ์
๋ฐ์ดํธ
์
๋ฐ์ดํธ๊ฐ ์์๋๋ ์์ ์ด ์ ๋ต์ง/์ค์ ๊ฐ์ ํ์ธํ๋ ์์
! ์ฃผ์
๋ฐฐ์น ํฌ๊ธฐ์ ๋ฐฐ์น์ ์๋ ๋ค๋ฅธ ๊ฐ๋
ex) ์ ์ฒด ๋ฐ์ดํฐ๊ฐ 2,000์ผ๋ ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ 200์ผ๋ก ์ค์ ํ๋ฉด ๋ฐฐ์น์ ์๋ 10
(์ํฌํฌ์์ ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ ๋๋ ์ค ๊ฐ(2,000/200). ์ด ๋ ๋ฐฐ์น์ ์ = ์ดํฐ๋ ์ด์
)
3) ์ดํฐ๋ ์ด์
(Iteration) =์คํ
(Step)
ํ ๋ฒ์ ์ํฌํฌ๋ฅผ ๋๋ด๊ธฐ ์ํด์ ํ์ํ ๋ฐฐ์น์ ์ ๋๋ ํ ๋ฒ์ ์ํฌํฌ ๋ด์์ ์ด๋ฃจ์ด์ง๋ ๋งค๊ฐ๋ณ์์ ์
๋ฐ์ดํธ ํ์
์ ์ฒด ๋ฐ์ดํฐ๊ฐ 2,000์ผ ๋ ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ 200์ผ๋ก ํ๋ค๋ฉด ์ดํฐ๋ ์ด์
์ ์๋ ์ด 10 = ํ ๋ฒ์ ์ํฌํฌ ๋น ๋งค๊ฐ๋ณ์ ์
๋ฐ์ดํธ๊ฐ 10๋ฒ ์ด๋ฃจ์ด์ง
๋ฐฐ์น ํฌ๊ธฐ๊ฐ 1์ธ ํ๋ฅ ์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ๋ชจ๋ ์ดํฐ๋ ์ด์
๋ง๋ค ํ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ํํ์ฌ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ ์ํ
์ฐธ๊ณ https://wikidocs.net/36033
https://www.nathanieldake.com/Deep_Learning/01-Neural_Networks-03-Backpropagation-Calculations.html
https://twinw.tistory.com/247
'๊ฐ์ธ๊ณต๋ถ > Tensorflow' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
94. ๋ฅ๋ฌ๋ ๊ธฐ์ด ์ด๋ก (6)๊ณผ์ ํฉ ํด๊ฒฐ (0) | 2021.12.31 |
---|---|
92. Tensorflow Selenium Crawling ํผ์ํด๋ณด๊ธฐ Google PlayStore ์ฌ์ฉ์ ๋ฆฌ๋ทฐ ๊ฐ์ ธ์ค๊ธฐ (0) | 2021.12.29 |
91. ๋ฅ๋ฌ๋ ๊ธฐ์ด ์ด๋ก (4)ํผ์ ํธ๋ก , ์ ๊ฒฝ๋ง (0) | 2021.12.27 |
90. ๋ฅ๋ฌ๋ ๊ธฐ์ด ์ด๋ก (3)ํ์ฑํํจ์ (0) | 2021.12.25 |
89. ๋ฅ๋ฌ๋ ๊ธฐ์ด ์ด๋ก (2)ํ๊ท์ ๋ถ๋ฅ (0) | 2021.12.24 |