์ ๊ทํ(Regularisation)
์ด๋ฒ์๋ ๋ชจ๋ธ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๊ทํ ํด ๋ณด์. vecnorm
๊ณผ ๊ฐ์ ์ ๊ทํ๋ฅผ ํด์ฃผ๋ ์ ์ ํ ํจ์๋ฅผ ๊ฐ ๋ชจ๋ธ ํ๋ผ๋ฏธํฐ์ ์ ์ฉํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ loss์ ๋ํ๋๋ก ํ์.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ๊ฐ๋จํ regression์ ๋ณด์.
julia> using Flux
julia> m = Dense(10, 5)
Dense(10, 5)
julia> loss(x, y) = Flux.crossentropy(softmax(m(x)), y)
loss (generic function with 1 method)
m.W
์ m.b
ํ๋ผ๋ฏธํฐ์ L2 norm์ ์ทจํ์ฌ ์ ๊ทํ ํด๋ณด์.
julia> penalty() = vecnorm(m.W) + vecnorm(m.b)
penalty (generic function with 1 method)
julia> loss(x, y) = Flux.crossentropy(softmax(m(x)), y) + penalty()
loss (generic function with 1 method)
๋ ์ด์ด๋ฅผ ์ด์ฉํ๋ ๊ฒฝ์ฐ, Flux๋ params
ํจ์๋ฅผ ์ ๊ณตํ์ฌ ๋ชจ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ํ๋ฒ์ ๊ฐ์ ธ์ฌ ์ ์๋ค. sum(vecnorm, params)
๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด๋ฅผ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋ค.
julia> params(m)
2-element Array{Any,1}:
param([-0.61839 -0.556047 โฆ -0.460808 -0.107646; 0.346293 -0.375076 โฆ -0.608704 -0.181025; โฆ ; -0.2226 -0.0992159 โฆ 0.0707984 -0.429173; -0.331058 -0.291995 โฆ 0.383368 0.156716])
param([0.0, 0.0, 0.0, 0.0, 0.0])
julia> sum(vecnorm, params(m))
2.4130860599427706 (tracked)
์ข ๋ ํฐ ๊ท๋ชจ์ ์๋ก, ๋ฉํฐ-๋ ์ด์ด ํผ์ ํธ๋ก (perceptron)์ ๋ค์๊ณผ ๊ฐ๋ค.
julia> m = Chain(
Dense(28^2, 128, relu),
Dense(128, 32, relu),
Dense(32, 10), softmax)
Chain(Dense(784, 128, NNlib.relu), Dense(128, 32, NNlib.relu), Dense(32, 10), NNlib.softmax)
julia> loss(x, y) = Flux.crossentropy(m(x), y) + sum(vecnorm, params(m))
loss (generic function with 1 method)
julia> loss(rand(28^2), rand(10))
39.128892409412174 (tracked)