keras model on particle swarm optimization
νμ¬ λͺ¨λΈμ python 3.9 λ²μ , tensorflow 2.11 λ²μ μμ ν μ€νΈ λμμ΅λλ€
PSO μκ³ λ¦¬μ¦ κ΅¬ν λ° μλ‘μ΄ μλ
μ΄κΈ° μΈν λ° μ¬μ© λ°©λ²
PSO μκ³ λ¦¬μ¦μ μ΄μ©νμ¬ νμ΄ν λ¬Έμ λ€μ μ νλ
Particle Swarm Optimization on tensorflow package
pso μκ³ λ¦¬μ¦μ μ¬μ©νμ¬ μλ‘μ΄ νμ΅ λ°©λ²μ μ°Ύλμ€ μ
λλ€
λ³λ ¬μ²λ¦¬λ‘ μ¬μ©νλ λ
Όλ¬Έμ μ°Ύμ보μμ§λ§ μ΄λ³΄λ€ λ μ’μ λ°©λ²μ΄ μμ κ² κ°μμ μ°Ύμλ³΄κ³ μμ΅λλ€ - [1]
κΈ°λ³Έ pso μκ³ λ¦¬μ¦μ μλλ₯Ό ꡬνλ μμμ λ€μκ³Ό κ°μ΅λλ€
$$V_{t+1} = W_t + c_1 * r_1 * (Pbest_t - x_t) + c_2 * r_2 * (Gbest_t - x_t)$$
λ€μ μμΉλ₯Ό μ λ°μ΄νΈνλ μμμ λλ€
$$x_{t+1} = x_{t} + V_{t+1}$$
λ€μκ³Ό κ°μ λ³μλ₯Ό μ¬μ©ν©λλ€
$Pbest_t : κ° νν°ν΄μ μ§μ μ΅μ ν΄$
$Gbest_t : μ μ μ΅μ ν΄$
$W_t : κ°μ€μΉ$
$c_1, c_2 : νλΌλ―Έν°$
$r_1, r_2 : λλ€ κ°$
$x_t : νμ¬ μμΉ$
$V_{(t+1)} : λ€μ μλ$
pso μκ³ λ¦¬μ¦μ μ΄μ©νμ¬ keras λͺ¨λΈμ νμ΅νλ λ°©λ²μ νꡬνκ³ μμ΅λλ€
νμ¬λ xor, iris, mnist λ¬Έμ λ₯Ό νμ΄λ³΄μμΌλ©°, xor λ¬Έμ μ iris λ¬Έμ λ 100%μ μ νλλ₯Ό 보μ΄κ³ μμ΅λλ€
mnist λ¬Έμ λ 63%μ μ νλλ₯Ό 보μ΄κ³ μμ΅λλ€
μλμΌλ‘ conda νκ²½μ μ€μ νκΈ° μν΄μλ λ€μ λͺ λ Ήμ΄λ₯Ό μ¬μ©ν©λλ€
conda env create -f conda_env/environment.yaml
νμ¬ python 3.9 λ²μ , tensorflow 2.11 λ²μ μμ ν
μ€νΈ λμμ΅λλ€
μ§μ μ€μΉνμ¬ μ¬μ©ν κ²½μ° pso2keras ν¨ν€μ§λ₯Ό pypi μμ λ€μ΄λ‘λ λ°μμ μ¬μ©νμκΈ° λ°λλλ€
pip install pso2keras
μμ ν¨ν€μ§λ₯Ό μ¬μ©νκΈ° μν΄μλ tensorflow μ tensorboard κ° μ€μΉλμ΄ μμ΄μΌ ν©λλ€
python ν¨ν€μ§λ₯Ό μ¬μ©νκΈ° μν λΌμ΄λΈλ¬λ¦¬λ μλ μ½λλ₯Ό μ¬μ©ν©λλ€
from pso import Optimizer
pso_model = Optimizer(...)
pso_model.fit(...)
|-- /conda_env # conda νκ²½ μ€μ νμΌ
| |-- environment.yaml # conda νκ²½ μ€μ νμΌ
|-- /metacode # pso κΈ°λ³Έ μ½λ
| |-- pso_bp.py # μ€μ°¨μμ ν ν¨μλ₯Ό μ΅μ ννλ PSO μκ³ λ¦¬μ¦ κ΅¬ν - μ±λ₯μ΄ 99% μ΄μμΌλ‘ λμ€λ λͺ©μ κ³Ό λ€λ¦
| |-- pso_meta.py # PSO κΈ°λ³Έ μκ³ λ¦¬μ¦ κ΅¬ν
| |-- pso_tf.py # tensorflow λͺ¨λΈμ μ΄μ©κ°λ₯ν PSO μκ³ λ¦¬μ¦ κ΅¬ν
|-- /pso # tensorflow λͺ¨λΈμ νμ΅νκΈ° μν΄ κΈ°λ³Έ pso μ½λμμ μμ - (psokeras μ½λ μ ꡬ쑰λ₯Ό μ¬μ©νμ¬ λ§λ¬)
| |-- __init__.py # pso λͺ¨λμ μ¬μ©νκΈ° μν μ΄κΈ°ν νμΌ
| |-- optimizer.py # pso μκ³ λ¦¬μ¦ μ΄μ©μ μν κΈ°λ³Έ μ½λ
| |-- particle.py # κ° νν°ν΄μ μ 보 λ° μμΉλ₯Ό μ μ₯νλ μ½λ
|-- xor.py # pso λ₯Ό μ΄μ©ν xor λ¬Έμ νμ΄
|-- iris.py # pso λ₯Ό μ΄μ©ν iris λ¬Έμ νμ΄
|-- iris_tf.py # tensorflow λ₯Ό μ΄μ©ν iris λ¬Έμ νμ΄
|-- mnist.py # pso λ₯Ό μ΄μ©ν mnist λ¬Έμ νμ΄
|-- mnist_tf.py # tensorflow λ₯Ό μ΄μ©ν mnist λ¬Έμ νμ΄
|-- plt.ipynb # pyplot μΌλ‘ νμ΅ κ²°κ³Όλ₯Ό κ·Έλνλ‘ νν
|-- README.md # νμ¬ νμΌ
|-- requirements.txt # pypi μμ λ€μ΄λ‘λ λ°μ ν¨ν€μ§ λͺ©λ‘
pso λΌμ΄λΈλ¬λ¦¬λ tensorflow λͺ¨λΈμ νμ΅νκΈ° μν΄ κΈ°λ³Έ ./metacode/pso_meta.py μ½λμμ μμ νμμ΅λλ€ [2]
pso μκ³ λ¦¬μ¦μ μ΄μ©νμ¬ μ€μ°¨μμ ν ν¨μλ₯Ό μ΅μ ν νλ λ°©λ²μ μ°Ύλ μ€μ λλ€
- νν°ν΄μ μμΉμ μλλ₯Ό μ΄κΈ°ν νλ€.
- κ° νν°ν΄μ μ μλ₯Ό κ³μ°νλ€.
- κ° νν°ν΄μ μ§μ μ΅μ ν΄μ μ μ μ΅μ ν΄λ₯Ό ꡬνλ€.
- κ° νν°ν΄μ μλλ₯Ό μ λ°μ΄νΈ νλ€.
loss = 'mean_squared_error'
pso_xor = Optimizer(
model,
loss=loss,
n_particles=50,
c0=0.35,
c1=0.8,
w_min=0.6,
w_max=1.2,
negative_swarm=0.1,
mutation_swarm=0.2,
particle_min=-3,
particle_max=3,
)
best_score = pso_xor.fit(
x_test,
y_test,
epochs=200,
save=True,
save_path="./result/xor",
renewal="acc",
empirical_balance=False,
Dispersion=False,
check_point=25,
)
μμ νλΌλ―Έν° κΈ°μ€ 10 μΈλ κ·Όμ²λΆν° μ νλκ° 100%κ° λμ€λ κ²μ νμΈνμμ΅λλ€
loss = 'mean_squared_error'
pso_iris = Optimizer(
model,
loss=loss,
n_particles=100,
c0=0.35,
c1=0.7,
w_min=0.5,
w_max=0.9,
negative_swarm=0.1,
mutation_swarm=0.2,
particle_min=-3,
particle_max=3,
)
best_score = pso_iris.fit(
x_train,
y_train,
epochs=200,
save=True,
save_path="./result/iris",
renewal="acc",
empirical_balance=False,
Dispersion=False,
check_point=25
)
μμ νλΌλ―Έν° κΈ°μ€ 7 μΈλμ 97%, 35 μΈλμ 99.16%μ μ νλλ₯Ό 보μμ΅λλ€
μμ κ·Έλνλ₯Ό 보면 epochs μ΄ λμ΄λλ μ νλμ loss κ° μλ ΄νμ§ μλκ²μ 보면 νλΌλ―Έν°μ μ΄λ μλκ° λ무 λΉ λ₯΄λ€κ³ μκ°ν©λλ€
loss = 'mean_squared_error'
pso_mnist = Optimizer(
model,
loss=loss,
n_particles=500,
c0= 0.4,
c1= 0.6,
w_min= 0.5,
w_max= 0.8,
negative_swarm=0.1,
mutation_swarm=0.2,
particle_min=-5,
particle_max=5,
)
best_score = pso_mnist.fit(
x_train,
y_train,
epochs=200,
save_info=True,
log=2,
log_name="mnist",
save_path="./result/mnist",
renewal="acc",
check_point=25,
)
μμ νλΌλ―Έν° κΈ°μ€ νμ¬ μ νλ 63.84%λ₯Ό 보μ΄κ³ μμ΅λλ€
63%μ μ νλκ° λνλλ κ²μΌλ‘ 보μ μ΅μ νκ° λμ΄κ°κ³ μλ€κ³ λ³Ό μ μμ κ² κ°μ΅λλ€.
νμ§λ§ μ νλκ° λ μ΄μ μ¬λΌκ°μ§ μκ³ μ 체λλ κ²μΌλ‘ 보μ μ‘°κΈ° μλ ΄νλ λ¬Έμ κ° λ°μνκ³ μλ€κ³ μκ°ν©λλ€.
- λ₯λ¬λ μκ³ λ¦¬μ¦ νΉμ±μ weightsλ μ²μ μ»΄νμΌμ 무μμνκ² μμ±λλ€. weightsμ κ° μ§μ μ μ€μλλ λ§€λ² λ¬΄μμλ‘ μ ν΄μ§κΈ°μ μ μ μ΅μ κ°μΌλ‘ μ°Ύμκ° λ κ°μ΄ λμ lossλ₯Ό ν₯ν΄μ μμΉνλ νμμ΄ λνλλ€.
λ°λΌμ weightsμ μ΄λ λ°©λ²μ λ νꡬνκ±°λ, weightsλ₯Ό μ΄κΈ°ν ν λ random μ€μλλ₯Ό μ’λ λ Έμ΄μ¦κ° μ κ² μμ±νλ λ°©ν₯μ λͺ¨μν΄μΌν κ² κ°λ€.
-> κ³ λ₯΄κ² μ΄κΈ°ν νκΈ° μν΄ np.random.uniform ν¨μλ₯Ό μ¬μ©νμμ΅λλ€
- μ§μμ΅μ κ°μ κ³μ 머무λ₯΄λ μ‘°κΈ° μλ ΄ νμμ΄ λνλλ€. - 30% μ λμ μ νλλ₯Ό κ°μ§λ€
-> μ§μμ΅μ κ°μ 머무λ₯΄λ κ²μ λ°©μ§νκΈ° μν΄ negative_swarm, mutation_swarm νλΌλ―Έν°λ₯Ό μΆκ°νμμ΅λλ€ - νμ¬ 63% μ λμ μ νλλ₯Ό 보μ΄κ³ μμ΅λλ€
- νν°ν΄μ μλ₯Ό λ리면 μ μ μ΅μ ν΄μ μ’λ κ°κΉμμ§λ νμμ λ°κ²¬νμλ€. νμ§λ§ νν°ν΄μ μλ₯Ό λ리면 λ©λͺ¨λ¦¬ μ¬μ©λμ΄ κΈ°νκΈμμ μΌλ‘ λμ΄λλ€.
-> keras λͺ¨λΈμ μ¬μ©ν λ predict, evaluate ν¨μλ₯Ό μ¬μ©νλ©΄ λ©λͺ¨λ¦¬ λμκ° λ°μνλ λ¬Έμ λ₯Ό μ°Ύμμ΅λλ€. ν΄κ²°λ°©λ²μ μΆκ°λ‘ μ°Ύμ보λμ€ μ
λλ€. -> λ©λͺ¨λ¦¬ λμλ₯Ό νκΈ°μ μΌλ‘ μ€μ¬ νμ¬λ νν°ν΄μ μλ₯Ό 500κ°μμ 1000κ°κΉμ§ μ¦κ°μμΌλ λ¬Έμ κ° μμ΅λλ€.
-> μΆκ°λ‘ νν°ν΄μ μκ° μ μλμλ μ μ μ΅μ ν΄λ₯Ό μ½κ² μ°Ύλ λ°©λ²μ μ°Ύλμ€ μ
λλ€
- νμ¬ tensorboard λ‘ λ‘κ·Έ μ μ₯μ 994κ° μ΄μ μ μ₯μ΄ μλλ λ¬Έμ κ° λ°μνκ³ μμ΅λλ€.
-> csv νμΌλ‘ μ μ₯ν κ²½μ° κ°―μμλ λ¬Έμ κ° λ°μνμ§ μμ΅λλ€. -> μκ° μ μλ ν νν°ν΄μ΄ μ§μ μ΅μ ν΄μμ 머무λ₯Ό κ²½μ° νν°ν΄μ μ΄κΈ°ν νλ λ°©λ²μ΄ νμν΄ λ³΄μ λλ€.
- λͺ¨λΈμ ν¬κΈ°κ° 컀μ§λ©΄ μλ ΄μ΄ λ¦μ΄μ§κ³ μ νλκ° λ¨μ΄μ§λ νμμ΄ λ°κ²¬λμλ€. λͺ¨λΈμ ν¬κΈ°μ λ§λ νλΌλ―Έν°λ₯Ό μ°ΎμμΌν κ² κ°λ€.
- EBPSO μ λ°©μμ μΆκ°λ‘ μ μ©μ νμμΌλ μμμ μλͺ» μ μ©μ νκ²μΈμ§ κΈ°λ³Έ pso λ³΄λ€ λ λ¨μ΄μ§λ μ νλλ₯Ό 보μ΄κ³ μλ€. (νμ¬ μμ μ€)
λ¨Έμ λ¬λ λΆλ₯ λ°©μμ μ‘΄μ¬νλ random forest λ°©μμ μ΄μ©νμ¬, μ€μ°¨μμ ν ν¨μλ₯Ό μ΅μ ν νλ λ°©λ²μ΄ μμκ² κ°μ΅λλ€
pso μ random forest λ°©μμ΄ λ§€μ° μ μ¬νλ€κ³ μκ°νμ¬ νμ΅ν λ λΏλ§ μλλΌ μμΈ‘ ν λλ μ΄λ¬ν λ°©μμΌλ‘ μ¬μ©ν μ μμ κ² κ°μ΅λλ€
[1]: A partilce swarm optimization algorithm with empirical balance stategy
[2]: psokeras
[3]: PSOμ λ€μν μμ νμκ³Ό μ§μμ λ―Έλλ© μΈμμ μν μ λ΅
[4]: PC ν΄λ¬μ€ν° κΈ°λ°μ Multi-HPSOλ₯Ό μ΄μ©ν μμ λ μ μ½μ κ²½μ κΈμ
[5]: Particle 2-Swarm Optimization for Robust Search