pso2keras

Particle Swarm Optimization on tensorflow package


Keywords
pso, tensorflow, keras, optimization, particle, swarm, pso2keras
License
MIT
Install
pip install pso2keras==1.0.5.1

Documentation

Python Package Index publish PyPI - Version Quality Gate Status Duplicated Lines (%) Security Rating

PSO

keras model on particle swarm optimization

ν˜„μž¬ λͺ¨λΈμ„ python 3.9 버전, tensorflow 2.11 λ²„μ „μ—μ„œ ν…ŒμŠ€νŠΈ λ˜μ—ˆμŠ΅λ‹ˆλ‹€

λͺ©μ°¨

PSO μ•Œκ³ λ¦¬μ¦˜ κ΅¬ν˜„ 및 μƒˆλ‘œμš΄ μ‹œλ„

초기 μ„ΈνŒ… 및 μ‚¬μš© 방법

ꡬ쑰 및 μž‘λ™ 방식

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%의 정확도λ₯Ό 보이고 μžˆμŠ΅λ‹ˆλ‹€

xor
iris
mnist

초기 μ„ΈνŒ… 및 μ‚¬μš© 방법

μžλ™μœΌλ‘œ 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(...)

Open In Colab

ꡬ쑰 및 μž‘λ™ 방식

파일 ꡬ쑰

|-- /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 μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•˜μ—¬ μ˜€μ°¨μ—­μ „νŒŒ ν•¨μˆ˜λ₯Ό μ΅œμ ν™” ν•˜λŠ” 방법을 μ°ΎλŠ” μ€‘μž…λ‹ˆλ‹€

μ•Œκ³ λ¦¬μ¦˜ μž‘λ™ 방식

  1. νŒŒν‹°ν΄μ˜ μœ„μΉ˜μ™€ 속도λ₯Ό μ΄ˆκΈ°ν™” ν•œλ‹€.
  2. 각 νŒŒν‹°ν΄μ˜ 점수λ₯Ό κ³„μ‚°ν•œλ‹€.
  3. 각 νŒŒν‹°ν΄μ˜ 지역 μ΅œμ ν•΄μ™€ μ „μ—­ μ΅œμ ν•΄λ₯Ό κ΅¬ν•œλ‹€.
  4. 각 νŒŒν‹°ν΄μ˜ 속도λ₯Ό μ—…λ°μ΄νŠΈ ν•œλ‹€.

PSO μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•˜μ—¬ ν’€μ΄ν•œ λ¬Έμ œλ“€μ˜ 정확도

1. xor 문제

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%κ°€ λ‚˜μ˜€λŠ” 것을 ν™•μΈν•˜μ˜€μŠ΅λ‹ˆλ‹€

xor

2. iris 문제

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%의 정확도λ₯Ό λ³΄μ˜€μŠ΅λ‹ˆλ‹€

iris

μœ„μ˜ κ·Έλž˜ν”„λ₯Ό 보면 epochs 이 λŠ˜μ–΄λ‚˜λ„ 정확도와 loss κ°€ μˆ˜λ ΄ν•˜μ§€ μ•ŠλŠ”κ²ƒμ„ 보면 νŒŒλΌλ―Έν„°μ˜ 이동 속도가 λ„ˆλ¬΄ λΉ λ₯΄λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€

3. mnist 문제

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%λ₯Ό 보이고 μžˆμŠ΅λ‹ˆλ‹€

mnist_acc

mnist_loss

63%의 정확도가 λ‚˜νƒ€λ‚˜λŠ” κ²ƒμœΌλ‘œ 보아 μ΅œμ ν™”κ°€ λ˜μ–΄κ°€κ³  μžˆλ‹€κ³  λ³Ό 수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 정확도가 더 이상 μ˜¬λΌκ°€μ§€ μ•Šκ³  μ •μ²΄λ˜λŠ” κ²ƒμœΌλ‘œ 보아 μ‘°κΈ° μˆ˜λ ΄ν•˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•˜κ³  μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

Trouble Shooting

  1. λ”₯λŸ¬λ‹ μ•Œκ³ λ¦¬μ¦˜ νŠΉμ„±μƒ weightsλŠ” 처음 μ»΄νŒŒμΌμ‹œ λ¬΄μž‘μœ„ν•˜κ²Œ μƒμ„±λœλ‹€. weights의 각 μ§€μ μ˜ μ€‘μš”λ„λŠ” 맀번 λ¬΄μž‘μœ„λ‘œ 정해지기에 μ „μ—­ μ΅œμ κ°’μœΌλ‘œ μ°Ύμ•„κ°ˆ λ•Œ 값이 높은 lossλ₯Ό ν–₯ν•΄μ„œ μƒμŠΉν•˜λŠ” ν˜„μƒμ΄ λ‚˜νƒ€λ‚œλ‹€.

λ”°λΌμ„œ weights의 이동 방법을 더 νƒκ΅¬ν•˜κ±°λ‚˜, weightsλ₯Ό μ΄ˆκΈ°ν™” ν• λ•Œ random μ€‘μš”λ„λ₯Ό 쒀더 λ…Έμ΄μ¦ˆκ°€ 적게 μƒμ„±ν•˜λŠ” λ°©ν–₯을 λͺ¨μƒ‰ν•΄μ•Όν•  것 κ°™λ‹€.

-> κ³ λ₯΄κ²Œ μ΄ˆκΈ°ν™” ν•˜κΈ° μœ„ν•΄ np.random.uniform ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€

  1. μ§€μ—­μ΅œμ κ°’μ— 계속 머무λ₯΄λŠ” μ‘°κΈ° 수렴 ν˜„μƒμ΄ λ‚˜νƒ€λ‚œλ‹€. - 30% μ •λ„μ˜ 정확도λ₯Ό 가진닀

-> μ§€μ—­μ΅œμ κ°’μ— 머무λ₯΄λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ negative_swarm, mutation_swarm νŒŒλΌλ―Έν„°λ₯Ό μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€ - ν˜„μž¬ 63% μ •λ„μ˜ 정확도λ₯Ό 보이고 μžˆμŠ΅λ‹ˆλ‹€

  1. νŒŒν‹°ν΄μ˜ 수λ₯Ό 늘리면 μ „μ—­ μ΅œμ ν•΄μ— 쒀더 κ°€κΉŒμ›Œμ§€λŠ” ν˜„μƒμ„ λ°œκ²¬ν•˜μ˜€λ‹€. ν•˜μ§€λ§Œ νŒŒν‹°ν΄μ˜ 수λ₯Ό 늘리면 λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ λŠ˜μ–΄λ‚œλ‹€.

-> keras λͺ¨λΈμ„ μ‚¬μš©ν• λ•Œ predict, evaluate ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ λ°œμƒν•˜λŠ” 문제λ₯Ό μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. 해결방법을 μΆ”κ°€λ‘œ μ°Ύμ•„λ³΄λŠ”μ€‘ μž…λ‹ˆλ‹€. -> λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό 획기적으둜 쀄여 ν˜„μž¬λŠ” νŒŒν‹°ν΄μ˜ 수λ₯Ό 500κ°œμ—μ„œ 1000κ°œκΉŒμ§€ μ¦κ°€μ‹œμΌœλ„ λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€.
-> μΆ”κ°€λ‘œ νŒŒν‹°ν΄μ˜ μˆ˜κ°€ μ μ„λ•Œμ—λ„ μ „μ—­ μ΅œμ ν•΄λ₯Ό μ‰½κ²Œ μ°ΎλŠ” 방법을 μ°ΎλŠ”μ€‘ μž…λ‹ˆλ‹€

  1. ν˜„μž¬ tensorboard 둜 둜그 μ €μž₯μ‹œ 994개 이상 μ €μž₯이 μ•ˆλ˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

-> csv 파일둜 μ €μž₯ν•  경우 κ°―μˆ˜μ—λŠ” λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. -> μˆ˜κ°€ μ μ„λ•Œ ν•œ νŒŒν‹°ν΄μ΄ 지역 μ΅œμ ν•΄μ—μ„œ 머무λ₯Ό 경우 νŒŒν‹°ν΄μ„ μ΄ˆκΈ°ν™” ν•˜λŠ” 방법이 ν•„μš”ν•΄ λ³΄μž…λ‹ˆλ‹€.

  1. λͺ¨λΈμ˜ 크기가 컀지면 수렴이 λŠ¦μ–΄μ§€κ³  정확도가 λ–¨μ–΄μ§€λŠ” ν˜„μƒμ΄ λ°œκ²¬λ˜μ—ˆλ‹€. λͺ¨λΈμ˜ 크기에 λ§žλŠ” νŒŒλΌλ―Έν„°λ₯Ό μ°Ύμ•„μ•Όν•  것 κ°™λ‹€.
  1. 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