MAB Algorithm Benchmarking
0. ๊ฐ์
Objective
MAB ๊ธฐ๋ณธ ์๊ณ ๋ฆฌ์ฆ๋ค์ ์ฑ๋ฅ(convergence ์๋, latency) ์ธก์
๋ฐฉ๋ฒ
convergence: experiments์ ํ๊ท reward๊ฐ๊ณผ ์ต์ ์ arm์ ์ ํํ ํ๋ฅ ์ plotting
latency: agent ์ด๊ธฐํ ๋ถ๋ถ์ ์ ์ธํ ์ค์ MAB ์๊ณ ๋ฆฌ์ฆ ๊ตฌ๋๋ถ์ ์๋๋ง ์ธก์
%matplotlib inline
import os
import sys
module_path = os.path.abspath(os.path.join('..'))
if module_path not in sys.path:
sys.path.append(module_path)
import bandits as bd
from bandits import kullback1. ํ์ดํผํ๋ผ๋ฉํฐ ์ค์
Number of Arms: arm์ ๊ฐฏ์, ์ฆ k
Number of Trials: Number of Iterations (Time steps)
Number of Experiments: Converge ์ฒ๋ ์คํ; ๊ฐ์ ๋ค๋ฅธ ์ธํ ์(default:random) 500๊ฐ์ k arms๋ค์ ๊ตฌ๋์์ผ ํ๊ท ์ ์ทจํ๊ธฐ ์ํ ๋ชฉ์ ์
2. ๐-greedy(epsilon-greedy)
๊ฐ์: ๐ ํ๋ฃฐ๋ก randomํ๊ฒ ํ์ํ๊ณ 1 โ ๐์ ํ๋ฅ ๋ก greedyํ๊ฒ ๊ฐ์ฅ ์ข์ arm์ ์ ํํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๐์ด ํฌ๋ฉด ํ์์ ๋น์ค์ด ๋์์ง๊ณ ๐์ด ์์ผ๋ฉด ํ๋์ ๋น์ค์ด ๋์์ง
๋น๊ต ์๊ณ ๋ฆฌ์ฆ
Random: ๐=1 ์ธ ๊ฒฝ์ฐ
Greedy: ๐=0 ์ธ ๊ฒฝ์ฐ
EpsilonGreedy (w/ ๐=0.01): ๐=0.01 ์ธ ๊ฒฝ์ฐ
EpsilonGreedy (w/ ๐=0.1): ๐=0.01 ์ธ ๊ฒฝ์ฐ (์ผ๋ฐ์ ์ผ๋ก ์ฐ์ด๋ ์ธํ ๊ฐ์ด๋ ํ๊ฒฝ์ ๋ฐ๋ผ ์กฐ์ ํ์)
์คํ ๊ฒฐ๊ณผ (Converge Ratio):
Random: Average Reward์ Optimal Action์ ์ ํ ํ๋ฅ ์ด ๋งค์ฐ ๋ฎ์
Greedy: Average Reward๊ฐ Random ๋๋น ๋์ผ๋ Optimal Action์ ์ ํ ํ๋ฅ ์ด ์ผ์ ์์ ์ดํ์ ์ฆ๊ฐํ์ง ์์
EpsilonGreedy (w/ ๐=0.01): Optimal Action์ ์ ํ ํ๋ฅ ์ด ์ ์ง์ ์ผ๋ก ์ฆ๊ฐํ์ง๋ง ์๋ ด ์๋๊ฐ ๋๋ค
EpsilonGreedy (w/ ๐=0.1): Optimal Action์ ์ ํ ํ๋ฅ ์ด ๋๋จธ์ง ์ ๋๋น ๊ฐ์ฅ ์ข์ผ๋ฉฐ ์ฆ๊ฐ ์๋๋ ๋น ๋ฆ
์คํ ๊ฒฐ๊ณผ (Elapsed Time):
4๊ฐ์ง Policy ๋ชจ๋ ํฐ ์ฐจ์ด๋ ์์ผ๋ Random์ ๊ฒฝ์ฐ ์๋๊ฐ ์ฝ๊ฐ ๋จ์ด์ง

3. UCB(Upper Confidence Bound)
๊ฐ์: Upper Confidence Bound(์ดํ UCB)๋ฅผ ์ค์ ํ์ฌ reward์ ๋ํ ๋ถํ์ค์ฑ์ ๊ณ ๋ ค
As-is: ์ฃผ์ฌ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๋์ก์ ๋ ๊ธฐ๋๊ฐ์ 3.5์ด์ง๋ง, ๋ ๋ฒ๋ง ๋์ก์ ๋ ๋๊ธ์ด 1, 3์ด ๋์ค๋ฉด ๊ธฐ๋๊ฐ์ด 2๊ฐ ๋์ค๋ฏ๋ก ์ค์ ๊ธฐ๋๊ฐ๊ณผ ํธ์ฐจ๊ฐ ์ฌํจ
To-be: ์ฃผ์ฌ์๋ฅผ ๋ ๋ฒ๋ง ๋์ก์ ๋ [2, 5.2]์ ๋ฒ์๋ก Confidence Interval์ ์ ํ๊ณ ํ์๊ฐ ์ฆ๊ฐํ ์๋ก Confidence Interval์ ๊ฐ์์์ผ ๋ถํ์ค์ฑ์ ์ค์
๋น๊ต ์๊ณ ๋ฆฌ์ฆ
EpsilonGreedy (w/ ๐=0.1)
EpsilonGreedy (w/ ๐=0.1, Initial Value=5): Initial Value๋ฅผ ๋๊ฒ ์ค์ ์ ์ด๊ธฐ Iteration์์ ํ์ ๋น์ค์ด ์ฌ๋ผ๊ฐ๊ธฐ ๋๋ฌธ์ ์ต์ Action์ ์ ํ ๋น๋๊ฐ ๋์ด๋จ
UCB (w/ c): c๋ Confidence level๋ฅผ ์กฐ์ ํ๋ ํ์ดํผํ๋ผ๋ฉํฐ๋ก ๊ฐ์ด ๋์์๋ก ํ์ ๋น๋ ์ฆ๊ฐ
์ง๊ด์ ์ดํด1: ๊ณ์ ํน์ arm๋ง ์ ํํ๋ฉด UCB term์ด ์์์ง๋ฏ๋ก Confidence Interval์ด ๊ฐ์ํ์ฌ ํ์ ๋น๋ ๊ฐ์ (๐๐ก(๐) ๊ฐ ์ฆ๊ฐํ๋ฏ๋ก)
์ง๊ด์ ์ดํด2: log์ ์ญํ ์ UCB decay๋ก ์ ์ฐจ Confidence Interval์ ๊ฐ์์ํค๋ ์ญํ
์ง๊ด์ ์ดํด3: ์ ์ ํ๋์ง ์์ arm์ Confidence Interval์ด ๊ฐ์ํ์ฌ ํ์ ๋น๋ ์ฆ๊ฐ
3.1. Gaussian Bandits
์คํ ๊ฒฐ๊ณผ (Converge Ratio):
EpsilonGreedy (w/ ๐=0.1, Initial Value=5): Iteration ๊ทน์ด๊ธฐ์ % Optimal Action ์ฆ๊ฐ ์๋๊ฐ ์ ์ค ๊ฐ์ฅ ๋น ๋ฆ
UCB: Average Reward ๋ฐ Optimal Action์ ์ ํ ํ๋ฅ ์ด ์ ์ค ๊ฐ์ฅ ๋์ง๋ง ์ค๊ฐ์ค๊ฐ ์ฑ๋ฅ์ด ์ ํ๋๋ ๊ตฌ๊ฐ ๋ฐ์
์คํ ๊ฒฐ๊ณผ (Elapsed Time):
UCB์ ๊ฒฝ์ฐ ๐-greedy ๋๋น ์ฝ 1.5๋ฐฐ ์ ๋ ์ง์ฐ๋จ

3.2. Bernoulli Bandits

4. UCB Variants
๊ฐ์: ๋ค์ํ UCB ์๊ณ ๋ฆฌ์ฆ๋ค์ ๋ํ ์ฑ๋ฅ ํ๊ฐ
4.1. Bernoulli Bandits
4.2. Binomial Bandits
5. TS(Thompson Sampling)
๊ฐ์: Beta ๋ถํฌ๋ฅผ prior๋ก ๊ฐ์ ํ๊ณ Bandit์ ๋ถํฌ๋ฅผ ๋ฒ ๋ฅด๋์ด ๋ถํฌ๋ ์ดํญ ๋ถํฌ์ ํํ๋ฅผ ๊ฐ์ง๋ likelihood๋ก ๊ฐ์ ํ์ฌ ํ๋ฃฐ ๋ถํฌ๋ฅผ ๋ชจ๋ธ๋งํ๋ ๋ฐฉ๋ฒ
๋น๊ต ์๊ณ ๋ฆฌ์ฆ
EpsilonGreedy (w/ ๐=0.1, Initial Value=5)
UCB
TS
5.1. pymc3 ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์๋ณธ ์์ค์ฝ๋๋ก theano์ฌ์ฉ์ผ๋ก ์ธํด non-GPU ํ๊ฒฝ์์ ์๋๊ฐ ๋๋ฆผ
์คํ ๊ฒฐ๊ณผ (Converge Ratio):
EpsilonGreedy (w/ ๐=0.1, Initial Value=5): ์์ ์ ์ผ๋ก ์๋ ดํ์ง๋ง ์ผ์ Iteration ์ด์์์ ์๋ ด์๋๊ฐ ๋จ์ด์ง
UCB: Average Reward์ Optimal Action์ ์ ํ ํ๋ฅ ์ด Iteration์ด ๋ฐ๋ณต๋ ์๋ก ๊พธ์คํ ์ฆ๊ฐํ์ง๋ง ์ค๊ฐ์ค๊ฐ ์ฑ๋ฅ์ด ์ ํ๋๋ ๊ตฌ๊ฐ ๋ฐ์
TS: 1000๋ฒ ์ด๋ด์ time step์์๋ ๊ฐ์ฅ ์ฐ์ํ ์ฑ๋ฅ์ ๋ณด์ด๋ 5000ํ, 10000ํ ๋ฑ long run์ผ๋ก ๊ฐ์๋ก UCB์ ๋นํด ๋ถ๋ฆฌํ ์ ์์
์คํ ๊ฒฐ๊ณผ (Elapsed Time):
TS์ ์๊ณ ๋ฆฌ์ฆ ๋ก์ง์ ๊ฐ๋จํ๋ pymc3 ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ Beta ํ๋ฅ ๋ถํฌ ๋ชจ๋ธ๋ง์์ ๋ก๋๊ฐ ๋ง์ด ๊ฑธ๋ฆผ
5.2. numpy ๋ผ์ด๋ธ๋ฌ๋ฆฌ
pymc3 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ์ง ์๊ณ numpy๋ก๋ง ๊ตฌํํ ์ฝ๋
Non-caching๊ณผ caching์ผ๋ก ๋๋์ด์ running time ๋น๊ต (pymc3 ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ฐ ๊ตฌํ์ caching ์ฌ์ฉ)
Non-caching์, reward๊ฐ์ prior ๋ถํฌ๋ ๋งค time step๋ง๋ค [num_arms x 1] ๋ฒกํฐ๋ก ๊ณ์ฐ
Caching์, reward๊ฐ์ prior ๋ถํฌ๋ [num_trials x num_arms] ํ๋ ฌ๋ก ๋ฏธ๋ฆฌ ๊ณ์ฐํ์ฌ ๋งค time step๋ง๋ค [num_arms x 1] ๋ฒกํฐ ๋ฆฌํด
์คํ ๊ฒฐ๊ณผ, Caching ์ฌ์ฉ ์์ running time์ด non-caching ๋๋น ์ฝ 3๋ฐฐ ์ด์ ๋ ๋น ๋ฆ

Last updated