對ID是否進行embedding要看情況,我們來看FM中的一個經典圖:
上面是ID型別的有:UserId,MovieId,上圖中已經對這兩個id進行了one-hot編碼,這樣子帶來的一個問題是:一般UserId可能是千萬級,MoveId是百萬級,那這個時候因為做了one-hot編碼,意味著我們的輸入一個千萬級別的稀疏向量,這個時候如果我們用簡單的lr模型,意味著引數個數就是千萬級別的,但是如果我們先對UserId和MoveId進行embedding,假設轉化為一個50維的向量,則此時再用lr模型話,引數個數才50+50=100,有效的控制了模型複雜度。
下面再從另外一個角度來談embedding作用。上面千萬級別的稀疏向量,其輸入一幫如下:
那此時經過lr後,其實輸出只有:
我們會發現只有偏移w0,以及使用者u和i的權重,模型的表達能力非常低,即我們只用一個維度對使用者進行了表達,此時如果我們先對使用者和物品進行embedding,那使用者和物品的表達就變為了各自一個50維度的向量,此時
此處Euk和Eik是embedding後的向量,我們可以看到模型的表達能力得到了增強,能夠捕捉到的資訊也更多了,所以Embedding的作用就是對模型的表達能力進行增強。
總結下embedding的作用:
降低模型複雜度
提升模型表達能力
對ID是否進行embedding要看情況,我們來看FM中的一個經典圖:
上面是ID型別的有:UserId,MovieId,上圖中已經對這兩個id進行了one-hot編碼,這樣子帶來的一個問題是:一般UserId可能是千萬級,MoveId是百萬級,那這個時候因為做了one-hot編碼,意味著我們的輸入一個千萬級別的稀疏向量,這個時候如果我們用簡單的lr模型,意味著引數個數就是千萬級別的,但是如果我們先對UserId和MoveId進行embedding,假設轉化為一個50維的向量,則此時再用lr模型話,引數個數才50+50=100,有效的控制了模型複雜度。
下面再從另外一個角度來談embedding作用。上面千萬級別的稀疏向量,其輸入一幫如下:
那此時經過lr後,其實輸出只有:
我們會發現只有偏移w0,以及使用者u和i的權重,模型的表達能力非常低,即我們只用一個維度對使用者進行了表達,此時如果我們先對使用者和物品進行embedding,那使用者和物品的表達就變為了各自一個50維度的向量,此時
此處Euk和Eik是embedding後的向量,我們可以看到模型的表達能力得到了增強,能夠捕捉到的資訊也更多了,所以Embedding的作用就是對模型的表達能力進行增強。
總結下embedding的作用:
降低模型複雜度
提升模型表達能力