---
做了這么長時間的基於深度學習的NLP,愈發可以感受到bayesian的意思,語言模型里面一切皆是分布,問題答案都是分布,一個問題模擬出來的是一個答案的分布;
我覺得我做的最好的一個聊天模型,就是先將問題表示成一個100維的高斯分布,然后計算各個答案跟這個分布的契合概率,當然這個模型肯定不能放出來,但是這種思想可以延伸出去,也希望有興趣的朋友跟我探討探討,jy2641@columbia.edu.
---
0: 原則上,loss函數都應該選convex函數,convex函數的定義就是函數上方得點是一個convex集合
1: 之前使用的0-1的數據預測正負樣本,loss函數選用的是cross entropy loss,
實際上這里的0-1 cross entropy和seq2seq的softmax cross entropy都是使用的log函數算的loss,
但是最近看到有人說,在seq2seq里面使用MSE, mean square error比softmax cross entropy要好很多,
遂作下圖,可以觀察比較一下各個不同的loss函數;
下面是對於分類里面的三種常見的loss的比較,函數形式是
x: predicted - true value的絕對值
log_loss = -np.log(1- x + 1e-12)
mse = x*x
abs_loss = x
我的感覺是,類別非常多,或者越不能准確預測某一類的值的時候,不要用log loss
2: 對於剛剛做的問答匹配采用正樣本和負樣本之間的cosine差值的loss;
loss = max(0, 0.2 - cosine(question, true answer) + cosine(question, negative answer))
之所以有效,可能是為了防止模型過多關注那些涇渭分明的case,而不去關注那些true answer 和 negative answer很模糊的case;
