Выборка Томпсона: добавление положительных наград к отрицательным наградам в Python для искусственного интеллекта - PullRequest
0 голосов
/ 26 мая 2020

в главе 5 AI Cra sh Course автор пишет:

 nSelected = nPosReward + nNegReward 

for i in range(d):
    print('Machine number ' + str(i + 1) + ' was selected ' + str(nSelected[i]) + ' times')
print('Conclusion: Best machine is machine number ' + str(np.argmax(nSelected) + 1))

Почему количество отрицательных наград добавляется к количеству положительных наград? Чтобы найти лучшую машину, не следует ли нам заботиться только о машине с самыми положительными наградами? Я не понимаю, почему нам нужно добавлять отрицательное к положительным наградам. Также я понимаю, что это симуляция, в которой вы случайным образом назначаете успехи и заранее назначаете показатели успеха. Однако в реальной жизненной ситуации, как заранее узнать процент успеха каждого игрового автомата? А как узнать, каким машинам следует присвоить "1"? Спасибо вам большое! Вот полный код:

# Importing the libraries
import numpy as np

# Setting conversion rates and the number of samples
conversionRates = [0.15, 0.04, 0.13, 0.11, 0.05]
N = 10000
d = len(conversionRates)


# Creating the dataset
X = np.zeros((N, d))

for i in range(N):

    for j in range(d):
        if np.random.rand() < conversionRates[j]:
            X[i][j] = 1


# Making arrays to count our losses and wins
nPosReward = np.zeros(d)
nNegReward = np.zeros(d)


# Taking our best slot machine through beta distribution and updating its losses and wins
for i in range(N):
    selected = 0
    maxRandom = 0


    for j in range(d):
        randomBeta = np.random.beta(nPosReward[j] + 1, nNegReward[j] + 1)
        if randomBeta > maxRandom:
            maxRandom = randomBeta
            selected = j


    if X[i][selected] == 1:
        nPosReward[selected] += 1
    else:
        nNegReward[selected] += 1






# Showing which slot machine is considered the best

nSelected = nPosReward + nNegReward 

for i in range(d):
    print('Machine number ' + str(i + 1) + ' was selected ' + str(nSelected[i]) + ' times')
print('Conclusion: Best machine is machine number ' + str(np.argmax(nSelected) + 1))

1 Ответ

0 голосов
/ 26 мая 2020

Получая все больше и больше отзывов, Thompson Sampling все больше и больше смещает свое внимание с разведки на разработку. То есть при больших значениях nSelected по всем направлениям (из-за большого N) все бета-распределения будут в значительной степени сосредоточены вокруг своего среднего (nPosReward[i]/nSelected[i]), а для более крупных итераций с возрастающей вероятностью будет выбрана выборка Томпсона. машина, которую он считает самой полезной. Глядя на достаточно длинный горизонт, вы приближаете вероятность увидеть наиболее подходящую машину, которая также является наиболее часто выбираемой машиной, до 1.

Подводя итог, ваша интуиция верна. Машина, которая дает наибольшее вознаграждение в ожидании (с учетом наблюдаемой на данный момент обратной связи), имеет наивысшее эмпирическое среднее значение. Из-за явления вероятности c, которое я только что описал, если вы запустите алгоритм достаточно долго, наиболее часто выбираемая машина и машина с наибольшим ожидаемым вознаграждением будут совпадать с вероятностью, приближающейся к 1.

О второй части на ваш вопрос, мы не знаем процент успешных попыток. Если бы мы знали их, оптимальный алгоритм просто выбрал бы те из них, у которых всегда был самый высокий процент успеха. В реальной жизни мы наблюдаем результаты этих случайных процессов. Например, когда вы показываете онлайн-рекламу, вы не знаете, с какой вероятностью они нажмут. Однако с большим упрощением, предполагающим, что все ведут себя одинаково, показывая это людям и наблюдая, щелкают они по нему или нет, мы узнаем процент успеха на лету.

...