ウシジの深層・強化学習の学習

深層学習、強化学習に関して、学んだことや論文、ニュース等を紹介していきます。よろしくお願いします。

Coursera Machine Learning: Week9-2 Recommender Systems

移転しました。

f:id:ushiji:20191203125437p:plain

CourseraのMachine Learningについてまとめています。 前回はWeek9の前半、Anomaly Detectionついてまとめました。 

今回は、Week9の後半、Recommender Systemsについて学びます。

  

 

Week9

Recommender Systems

Recommender systemは、機械学習の重要な適用例の1つです。例えばAmazonの書籍のリコメンドやNetflixの映画のリコメンド等。今回は、このリコメンドシステムをどう構築するかについて学んでいきます。

リコメンドシステムの1例としてあげられるのが、下記図のような映画評価の予測です。各ユーザーが視聴済みの各映画に対して0~5のレート付けを行っており、評価していない映画については、"?"を記載しています。この未評価の映画について、各ユーザーがどの程度の評価を付けるかを予測し、評価が高くなりそうな映画を次に観る映画としてリコメンドします。下記の例では、上3つの映画が恋愛映画に分類でき、下2つの映画がアクション映画に分類できます。このカテゴリと各ユーザーの評価をもとに、未評価の映画がどのくらいの評価になりそうかを予測します。

f:id:ushiji:20191217122623p:plain

Predicting movie ratings

 

Content-based recommendations

最初のアプローチとして、コンテンツベースリコメンデーションについて学びます。

まず、各映画にx1とx2の二つのFeatureがあるとします。x1はその映画がどのくらいロマンティックな映画なのか、x2はその映画がどのくらいのアクション映画なのかを測る指標です。  

f:id:ushiji:20191217124429p:plain

Predicting movie ratings2

これにバイアス項のx0を加えて、例えば、Cute puppies of loveのFeatureベクトルx(3)は下記のように表せます。

f:id:ushiji:20191223113557p:plain

Feature vector of Cute puppies of love

また、各ユーザーの評価を予測するために、各ユーザーのパラメータベクトルθ(1), θ(2), ... , θ(j)を学習する必要があります。例えば、Aliceのパラメータθ(1)が既に下記のように得られていたとして、AliceのCute puppies of loveの評価を予測するために、x(3)とθ(1)を掛け合わせ、4.95の評価が得られると予測できます。

f:id:ushiji:20191223114723p:plain

Prediction example

この後コンテンツベースリコメンデーションのアルゴリズムを説明するにあたり、必要な項目を下記のように定義、整理します。

f:id:ushiji:20191223121627p:plain

コンテンツベースリコメンデーション

パラメータθ(j)を求める方法としては、Linear regressionと同様に考えれば良く、下記のコスト関数で求めることができます。ここで、i:r(i, j)=1とは、r(i, j)=1となる(ユーザーが映画の評価を行っている)全てのiに対して総和を取るという意味です。

f:id:ushiji:20191223123706p:plain

Cost function for user j parameter

また、実際には、1人のユーザーjに対するパラメータを求めるのではなく、全てのユーザーのパラメータを学習する必要があるため、ユーザーの総数をnuとして、コスト関数は、下記のように書き換えることができます。

f:id:ushiji:20191223124056p:plain

Cost function for all users parameter

 

Gradient descentについては、下記のように計算することができます。

f:id:ushiji:20191223124329p:plain

Gradient descent

 

以上が、コンテンツベースリコメンデーションのアルゴリズムで、各ユーザーの映画への評価を予測することができます。しかしながら、この方法は、映画のコンテンツ(どのくらいロマンチックなのか、アクションなのかが定義されたフィーチャー)が分かっている前提のアルゴリズムです。この後、そうでない場合のアルゴリズムについて説明していきます。

 

Collaborative filtering

Feature含めて学習する方法として、Collaborative filtering(協調フィルタリング)について学びます。

まず、各映画のFeature x1、x2が下記のように不明な状態であり、一方で、各ユーザーの好みは把握することが出来ていて、パラメータθが分かっている状態だと仮定します。

f:id:ushiji:20191223152310p:plain

Problem motivation

この場合、映画iのFeatureは、コンテンツベースリコメンデーションの時と同様に下記のコスト関数で求めることができます。

f:id:ushiji:20191223152712p:plain

Cost function to learn movie feature

また、全ての映画についても、同様に下記のコスト関数で求めることができます。

f:id:ushiji:20191223152724p:plain

Cost function to learn all movie features

つまり、パラメータθが分かっていれば、Feature xを求めることができ、Feature xが分かっていれば、パラメータθを求めることができます。最初にランダムにパラメータθの値を推測しておき、θ → x → θ → x → θ ... と繰り返すことで、リーズナブルなパラメータとFeatureに収束させることができます。これが協調フィルタリングアルゴリズムの考え方です。ちなみに、これが可能なのは、各ユーザーが複数の映画をレーティングしていて、全ての映画が複数のユーザーにレーティング場合のみとのことです。

 

θとxを行ったり来たりしながら解いていくと記載しましたが、より効率的な方法として、下記数式のように、2つのコスト関数を合わせてしまうことも可能とのことです。

f:id:ushiji:20191223153944p:plain

Collaborative filtering algorithm

協調フィルタリングを利用する際には、下記のように進めます。

  1. x(1), x(2), ... , x(nm)とθ(1), θ(2), ... , θ(nu)を小さな値でランダムに初期化
  2. 下記のGradient descent、もしくはその他の最適化アルゴリズムを用いてコスト関数Jを最小化
  3. θとxを用いて、映画の評価を予測(θTxを計算)

f:id:ushiji:20191223154606p:plain

Gradient descent for Collaborative filtering

 

 

 

プログラミング演習

Week9のプログラミング演習では、まずは、異常検知アルゴリズムを実装し、ネットワーク上のサーバーの障害検知に適用します。次に、協調フィルタリングを用い、映画のリコメンドシステムの構築を行います。演習の項目は、具体的には以下のものです。

  • Estimate Gaussian Parameters
  • Select Threshold
  • Collaborative Filtering Cost
  • Collaborative Filtering Gradient
  • Regularized Cost
  • Gradient with regularization

 プログラム演習は、今回で最後であり、Week10, 11は講義のみとなります。

 

 

次回は、Week10 Large Scale Machine Learningについてまとめます。

ushiji.hatenablog.com

 

 

 

コース全体の目次とそのまとめ記事へのリンクは、下記の記事にまとめていますので、参照ください。

ushiji.hatenablog.com