本日は文脈バンディットをやっていきます。行列とかでてきて、、、、計算が苦手な僕は、、、って感じなんですけどやってることは前回のUCBをTSと全く同じなので気楽にいきましょう。
Contextual Bandit
文脈バンディットとは以前のバンディット問題にユーザーの特徴量ベクトルを導入されたものです。というとは、前回は単純に時刻tにおいて行動価値関数のみでアームを選んでいましたが、文脈バンディットではユーザーの情報も加味してアームを選ぼうという考えです。

ポリシーに対するoffline評価などはまた次回やりたいと思います。今回は単純に次の二つのポリシーの実装のお話です。
LinUCB
まずLinUCBとは前回したUCBの文脈バンディットへの拡張アルゴリズムです。この時点で上界・分散的なイメージをもって欲しいです。また、Linearの略です。見ていきます。(添字a,tは時刻tにおける行動aに対する、という意味)


- https://research.miidas.jp/2020/01/レコメンデーション%E3%80%80biased-mfの実装/
- https://research.miidas.jp/2019/02/ねぇpython、正則化って何?ridge/






LinTS
これは前回のTSと全く同じで事後分布からパラメータシータをサンプリングする方法です。 ただ、論文中の事前分布とかは結構複雑で結果的に次のpresudo-codeになってます、



LogisticTS
ただ、前回実装したbanditって報酬はベルヌーイを仮定したじゃないです か、ということはcontextualにもあるはずですよね。モデルは簡単です、先ほどの線形モデルにロジスティックをかますだけです。 そうなんです、あるんです、ただロジスティックを使ってしまうと事後分布が解析的には得られないので勾配法とかになっちゃうところをラプラス近似でやろう!という発想です。僕はラプラス近似をあまり知らないのでそれも勉強しないといけませんが、とりあえず話を進めると事後分布は正規分布になるようです、さらに共分散行列は対角行列らしいです。presudo-codeは次のとおりです。

実装
実際の報酬のアームの分布は次の通りです。
References
- https://courses.cs.washington.edu/courses/cse599i/18wi/resources/lecture10/lecture10.pdf
- https://arxiv.org/pdf/1003.0146.pdf
- https://arxiv.org/pdf/1508.03326.pdf
- https://courses.cs.washington.edu/courses/cse599i/18wi/resources/lecture10/lecture10.pdf
- https://github.com/nicku33/demo
- http://proceedings.mlr.press/v28/agrawal13.pdf
- https://arxiv.org/pdf/1508.03326.pdf