Deep Neural Networks for Youtube Recommendations (2016)
September 23, 2025Deep Neural Networks for YouTube Recommendationsは2016年頃のYouTubeの推薦システムの解説であり、パラメタ数が10億の深層学習のモデルが使われている。 この数千億の学習データで訓練されたモデルはcandidate generationとrankingの2つのネットワークからなる。 candidate generationは、ユーザーのYoutube上の行動履歴から数百の推薦候補の動画を協調フィルタリングで選び出す。 協調フィルタリングは、視聴した動画のIDや検索クエリのトークンが要素のスパースなベクトルを連結し、ユーザーの埋め込みベクトルを作る。 rankingはcandidate generationで選ばれた動画の試聴時間を推定する。
candidate generationは、行列分解による協調フィルタリングでユーザーと動画の埋め込みベクトルを学習する。 ネットワークはextreame classificationの問題として推薦をとらえ、視聴を見込める動画のクラスにユーザーを分類する。 ただし、YouTubeの動画数はクラスとみなすには数が多いため、クラス数の多いときに利用されるSampled Softmaxを出力層の活性化関数に使う。 ユーザーと動画の分散表現の次元数は等しく、推論時は近似最近傍探索でユーザーの分散表現に近い動画を検索し、推薦する。
ネットワークは、順伝搬型であり、ユーザーの特徴を連結した疎なベクトルを入力として受けつける。 ユーザーの特徴の中には、視聴履歴や検索履歴があり、履歴を系列ではなくベクトルで表現する必要がある。 そこで、視聴や検索を動画やクエリのトークンのIDを要素にした疎なベクトルで表し、ベクトルの平均値を履歴の分散表現として扱う。 連結した疎なベクトルには、新しい動画を推薦できるように、訓練データの古さを示す要素も含まれる。
Sampled Softmaxは、ニューラルネットワークによる機械翻訳で扱える語彙数を増やすためにSébastien Jeanらによって考案された。
Sampled Softmaxのアルゴリズムだけを知りたいければ、TensorFlowのtf.nn.sampled_softmax_lossの参考文献 What is Candidate Samplingの方が論文よりも分かりやすく思えた。
そのため、以下では参考文献に沿ってSampled Softmaxを説明する。
Sampled Softmaxには、入力の正解クラスを含むクラスの部分集合と入力を与えたときに、入力のクラスの確率が最大になるようにモデルを訓練する。
全クラスを\(L\), 関数\(Q(y|x)\)によるサンプルで選ばれるクラス\(y\in L\)の集合を\(S_i\)とする。
このとき、入力を\(x_i\)とすると、
$$
P(S_i=S|x_i) = \prod_{y\in S}Q(y|x_i) \prod_{y\in (L-S)}(1-Q(y|x_i))
$$
が成りたつ。
\(x_i\)のクラスを\(t_i\)とすれば、\(x_i\)が与えらえれたときに、\(C_i\)の中から\(t_i\)の確率が最大になるようにパラメタを更新する。
$$
C_i = S_i \cup \{t_i\}
$$
ベイズ則を適用すると
$$ \begin{align*} P(t_i=y|x_i, C_i) &= P(t_i = y, C_i|x_i)/ P(C_i|x_i)\\ &= P(t_i=y|x_i)P(C_i|t_i=y, x_i)/P(C_i|x_i)\\ &=P(y|x_i)P(C_i|t_i=y,x_i)/P(C_i|x_i) \end{align*} $$
また
$$ P(C_i|t_i=y,x_i) = \frac{1}{Q(y|x_i)}\prod_{y’\in C_i}Q(y’|x_i)\prod_{y’\in (L-C_i)}(1-Q(y’|x_i)) $$ より\(y\)に依存しない関数\(K(x_i, C_i)\), \(K’(x_i, C_i)\)を導入すると
$$ \begin{align*} P(t_i=y|x_i, C_i) &= \frac{P(y|x_i)}{Q(y|x_i)}/K(x_i, C_i)\\ \log(P(t_i=y|x_i,C_i)) &= \log(P(y|x_i)) - \log(Q(y|x_i)) + K’(x_i, C_i) \end{align*} $$ となる。 Softmaxでクラスの確率の合計が\(1\)になるように正規化されるので、\(y\)に依存しない\(K’(x_i, C_i)\)は無視できる。 また、モデルに学習させたい項は\(\log(P(y|x_i))\)なので、通常のSoftmaxへの入力と\(\log(Q(y|x))\)の差をSoftmaxに与える。
Youtubeの推薦システムはSampled Softmaxにおいて動画をクラスとみなす。 学習によって出力層への入力と重みの積が\(P(y|x_i)\)になるように訓練するため、重みを動画の埋め込みベクトル、入力をユーザーの埋め込みベクトルとして最近傍探索のデータベースに保存する。 推論時にはSoftmaxを計算せず、データベースに近傍の要素を推薦対象として問い合わせる。
rankingも、順伝播型のネットワークであり、ロジスティック回帰で動画の試聴時間を推定する。 推論時には、全ての動画ではなくcandidate generationが出力する動画の試聴時間のみを推薦すればよいため、candidate generationよりも扱う特徴量は多い。 交差エントロピーを使って訓練するとき、試聴時間を推定できるように、正例と負例の目標値を試聴時間と\(1\)にそれぞれ設定する。 試聴時間を予測するために、出力層の活性化関数に指数関数\(e^{x}\)を選ぶ。 このとき\(N\)を訓練データの総数、\(k\)を正例の数、\(i\)番目の正例の試聴時間を\(T_i\)とすれば、オッズは\(\frac{\sum T_i}{N-k}\)になる。 \(\frac{1}{1-x}\approx 1+x\)より、rankingのモデルは\(P\)をインプレッションが生じる確率とすると\(E[T](1+P)\)を推定する。 Youtubeの場合、\(P\)は小さいため、近似的に\(E[T]\)を予測するとみなせる。