NN[神經網絡]中embedding的dense和sparse是什么意思?
dense 表示稠密,在embedding中的dense時:
假設我們有這樣一個句子: “北京是北京”,我們將其數值化表示為:
dense embedding,需要你講它轉換成onehot表示:
假設embedding對輸出size=3,也就是hidden層的size=3*3;
eg:
那么dense layer的計算過程就是一個矩陣相乘:
....
整個流程展開來看就是:
你會看到這個過程: 1. 計算量非常巨大 ,這個回想一下矩陣乘法的復雜度就知道O((N*M)*(M*M)), 2.而且對於輸入來說,轉換的矩陣也很巨大(就是vocabulary有多大,這個列就有多大,你想想當vocabulary=500w時,這個輸入input的表示矩陣大不大).
那么有沒有方法,優化一下這兩個問題(計算量大,輸入尺寸也大)呢?
sparse : 表示稀疏,在embedding中的dense時:
同樣假設我們有這樣一個句子: “北京是北京”,我們將其數值化表示為:
sparse embedding,不需要你轉換乘onehot編碼格式:
那么,它是如何計算的呢?
假設embedding對輸出size=3,也就是hidden層的size=3*3;
eg:
那么sparse layer的計算過程的“矩陣相乘”(相當於一個查表的過程,所以有lookup_table這個表述):
這個計算過程為:
->
->
->
最終得到:
你會看到,dense和sparse結果都一樣,但是這個計算量變成列O((N*1)*(M*M)) 減少列一個量級. 而且輸入input的vec也極大的縮小了,畢竟存儲的是index嘛.
那么會到我們開始的問題,NN[神經網絡]中embedding的dense和sparse是什么意思?
結合上面的例子的計算過程,dense embedding 就是要求輸入必須為onehot,sparse embedding 不需要.
那么在擴大一點,NN[神經網絡]中的dense和sparse是什么意思?
dense和sparse描述的是該層hidden layer和前后層的網絡連接情況,如果hidden layer 和前一層以及后一層參數連接多,我們就說他是dense layer,比如全連接層(fc),相反,如果連接數比較少,我們說它是sparse layer。