一、湯普森採樣推薦
湯普森採樣是一種概率分佈採樣方法,可以用於從一組已知的概率分佈中生成一個隨機變量,湯普森採樣的方法在生成離散和連續的概率分佈時都非常有效,常用於生成文本和音頻數據等。另外,該方法還能應用於深度學習模型的權重參數隨機初始化。
import numpy as np
def thompson_sampling(probabilities):
"""
使用湯普森採樣算法從一個子集中選擇一個項
:param probabilities: [N] 概率分佈
:return: int32 隨機選擇的項
"""
N = probabilities.shape[0]
sample = np.zeros([N])
for i in range(N):
sample[i] = np.random.beta(1+probabilities[i], 1+sum(probabilities)-probabilities[i])
return np.argmax(sample)
二、湯普森採樣的定義
湯普森採樣即 Thompson Sampling,是一種用於解決多臂賭博機問題的隨機策略,最初是由它的名字命名的 (Thompson, 1933)。在多背景的情況下,每個背景被視為一台老虎機 ( multi-armed bandit(MAB) ) ,它的目標是通過選擇最好的臂來最大化回報 (例如,最大化利潤或最小化損失)。大部分時間裏, MAB 問題是無法精確地解決的,因為環境會引入噪聲或者隨機事件,而這樣的噪聲或者隨機事件可能會使我們選擇錯誤的臂。湯普森採樣法解決這個問題的做法十分簡單:在每一次要取樣時使用當前的信仰(Belief)的隨機樣本挑選臂,然後觀察選擇的這個臂的獎勵。
三、湯普森採樣 d2d
湯普森採樣的 d2d (dueling to dueling) 策略在解決多臂賭博機問題時非常有用。他對經驗回放和步長(learning rate)自適應有非常好的效果,使模型更快地逼近最優解。而在實踐中,其還具有非常好的收斂速度。
def generate_action(self, state):
"""
生成一個新的動作,並把它添加到接口的隊列中。
@param state: 當前狀態
return: 選擇的動作,或者空列表,如果沒有動作選擇的話.
"""
# 我們使用極度社交學習算法, 湯普森採樣
# 用經驗回放增強策略.
self.epsilon = self.options.init_epsilon
if np.random.uniform() < self.epsilon:
return self.env.action_space.sample()
# 獲取當前狀態的初始化
state = np.atleast_2d(state)
h = self.bh_net.predict(state)
p = self.bp_net.predict(h)
# 隨機選擇一個合法的動作.
action = thompson_sampling(p[0])
return action
四、湯普森採樣應用
湯普森採樣在解決多臂賭博機問題以及適用於哪些分佈是常見問題,在如何使用該算法方面,需要有經驗或者閱讀相關文獻。
五、湯普森採樣結合遺傳算法
遺傳算法 (Genetic Algorithm, GA) 是對進化論理論模型的應用,用於解決搜索和優化問題。通常情況下,它涉及一個族群(population) 的可行解, 然後找到它們中最適宜的個體群。在每一個新的進化 (每代) 的過程中,遺傳算法使用種群中的個體產生新的,歐足聯的後代,遺傳算法在重複執行過程中逐漸逼近最優解。與湯普森採樣結合起來,我們可以兼顧全局搜索和局部尋優,加速收斂速度。
from numpy.random import seed
from numpy.random import rand
from numpy.random import randint
# 梅森旋轉素數種子, 用於自動生成隨機數
seed(1)
# 初始化測試的母體族群
# 母體種群大小.
pop_size = 100
# 每個個體基因個數
num_parents = 2
# 基因長度
num_gen = 10
# 獲取一個隨機個體
def init_pop(population_size, n_genes):
"""
初始化種群
:param population_size: 種群大小
:param n_genes: 每個個體的基因個數
:return: 種群數據
"""
return rand(population_size, n_genes)
# 湯普森採樣算法的配套函數
def roulette_wheel_selection(population, fitness):
"""
選擇最優的個體群.
@param population: 種群。
@param fitness: 評價函數。
@return: 最優個體。
"""
total_fitness = np.sum(fitness)
rel_fitness = fitness / total_fitness
# 生成一個輪盤
wheel = np.zeros(rel_fitness.shape)
wheel[0] = rel_fitness[0]
for i in range(1, rel_fitness.shape[0]):
wheel[i] = wheel[i-1] + rel_fitness[i]
# 用輪盤選擇父母
parents = np.zeros([2, population.shape[1]])
for i in range(2):
rand_val = np.random.rand()
for j in range(wheel.shape[0]):
if rand_val < wheel[j]:
parents[i, :] = population[j, :]
break
return parents
六、湯普森採樣打標
在語音識別、自然語言處理等領域,我們通常需要為一些大規模語料庫建立標籤。湯普森採樣可以用於在大規模數據上快速生成標籤。具體地,可對數據進行隨機採樣,然後依據所選數據類別的分佈,使用湯普森採樣來生成標籤。而對於那些被人工標記過的數據,可以將它們放在湯普森採樣的一個子集中,這樣我們可以放心地使用湯普森採樣算法生成標籤。
七、湯普森採樣 冷啟動
新產品上線,往往需要大量的數據來滿足其訓練需求,這時候,我們不可能從現有的平穩數據中進行採集。湯普森採樣可以用於快速生成樣本,解決新產品冷啟動問題。新產品啟動過程中,我們可以從探索平台上隨機抽取樣本,然後依據所選樣本類別分佈,使用湯普森採樣算法來生成新樣本。這樣可以大大加快新產品上線的時效性和成功率。
八、湯普森採樣算法
湯普森採樣算法是一種隨機策略,通過估計每個動作的價值,找到每一條能夠使獎勵最大化的選擇路徑。具體採取貝葉斯方法估計每個動作的期望獎勵,然後採用此期望獎勵來做出決策。該算法在像廣告推薦、自然語言處理和計算機視覺等領域的應用方面非常有效。
九、湯普森採樣 神經網絡
湯普森採樣 神經網絡算法是一種將深度學習和湯普森採樣技術結合起來的算法,能夠讓深度學習模型更快地學習訓練數據。它使用的基本思想是,在模型訓練過程中對參數使用湯普森採樣,這些採樣樣本用於表示參數梯度的先知信息。當使用這個算法的時候,我們需要仔細地調節模型的超參數,才能使之取得最優的訓練結果。
十、湯普森採樣算法 推薦
在實際工作中,如何合理地評估與選取最佳的推薦策略是非常重要的。湯普森採樣可以讓我們充分利用已經有的數據,發現最佳的推薦策略。湯普森採樣算法的真正本質是使我們從可能性分佈中得到一些概率值,在這個基礎上做出決策。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/242425.html
微信掃一掃
支付寶掃一掃