์†์‹ค ํ•จ์ˆ˜(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์ธ ํ™•๋ฅ ์  ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์ด ์ตœ์ ํ•ด๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๊ณผ์ •


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

+ Recent posts