最小熵原理(六):词向量的维度应该怎么选择?
By 苏剑林 | 2020-08-20 | 100902位读者 |随着NLP的发展,像Word2Vec、Glove这样的词向量模型,正逐渐地被基于Transformer的BERT等模型代替,不过经典始终是经典,词向量模型依然在不少场景发光发热,并且仍有不少值得我们去研究的地方。本文我们来关心一个词向量模型可能有的疑惑:词向量的维度大概多少才够?
先说结论,笔者给出的估算结果是
\begin{equation}n > 8.33\log N\label{eq:final}\end{equation}
更简约的话可以直接记$n > 8\log N$,其中$N$是词表大小,$n$就是词向量维度,$\log$是自然对数。当$n$超过这个阈值时,就说明模型有足够的容量容纳这$N$个词语(当然$n$越大过拟合风险也越大)。这样一来,当$N=100000$时,得到的$n$大约是96,所以对于10万个词的词向量模型来说,维度选择96就足够了;如果要容纳500万个词,那么$n$大概就是128。
背景 #
之所以想起这个问题,是因为昨天在Arxiv上刷到了论文《Word2vec Skip-gram Dimensionality Selection via Sequential Normalized Maximum Likelihood》,遗憾的是,从这篇论文中笔者并没有找到想要的答案。顺带搜索了一下,发现也有类似文献研究同样的问题,比如《On the Dimensionality of Word Embedding》,但答案依旧不是笔者想要的。
为什么这样说呢?很显然,这个问题的最标准答案应该是靠反复实验来确定最优维度,所以不能指望理论分析给出相当精确的答案。我们平时用到的词向量维度,一般有64、100、128、256、300等,不同的维度之间效果差别其实也没多少,所以笔者只希望能从最简洁直观的方式推导一下一般词向量模型所需要的维度量级,比如几十或者几百,不应该出现太过复杂的分析。
由于没有找到比较满意的现有结果,因此笔者从最小熵原理角度分析了一下,得到了一个接近自己心中所想的答案。
分析 #
本文要分析是基于Skip Gram思想的词向量模型,多数词向量模型其实都是它的变种,至于CBOW类的模型,在以往的实验里,它的表现其实跟Skip Gram差不多(尤其是数据量较大时),因此可以认为Skip Gram的分析结果应该是通用的。
最小化熵 #
我们的出发点是信息熵,我们知道,熵是不确定性的度量(参考《“熵”不起:从熵、最大熵原理到最大熵模型(一)》),语言本身具有一定的不确定性,而我们在用向量编码词语时,编码结果应该要等于甚至小于这种不确定性,才能保证这种编码是有效的、能充分保留原来语言的信息。所以,我们要消除不确定性,也就是要最小熵。
要注意的是,词向量是基于Skip Gram模型的,所以我们要计算的不是词平均熵,而是整个Skip Gram模型的平均熵,假设词对$(w_i, w_j)$的频率是$\tilde{p}(w_i, w_j)$,那么可以估算它的熵为
\begin{equation}\tilde{H}=-\sum_{i, j} \tilde{p}(w_i, w_j)\log \tilde{p}(w_i, w_j)\end{equation}
不同的词向量训练目标也有所差异,有些是在拟合联合概率$p(w_i, w_j)$,有些是在拟合条件概率$p(w_j|w_i)$,但这差别不大,前面说了,本文只是想得到一个概数。所以这里统一假设词向量模型为
\begin{equation}p(w_i, w_j) = \frac{e^{\langle\boldsymbol{u}_i, \boldsymbol{v}_j\rangle}}{Z},\quad Z = \sum_{i,j}e^{\langle\boldsymbol{u}_i, \boldsymbol{v}_j\rangle}\end{equation}
其中$\boldsymbol{u},\boldsymbol{v}$代表两套不同的词向量(中心词向量、上下文词向量),$\boldsymbol{u}_i$代表词$w_i$而$\boldsymbol{v}_j$代表词$w_j$。这时候它的信息熵是
\begin{equation}H=-\sum_{i, j} p(w_i, w_j)\log p(w_i, w_j)=\log Z-\frac{1}{Z}\sum_{i, j} e^{\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle} \langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle\end{equation}
采样近似 #
为了近似计算上式,我们将求和用采样近似,比如
\begin{equation}Z = \sum_{i, j} e^{\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle} = N^2\times \frac{1}{N^2}\sum_{i, j} e^{\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle}\approx N^2\mathbb{E}_{\boldsymbol{u}_i,\boldsymbol{v}_j}\left[e^{\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle}\right]\end{equation}
这里的$N$是词表大小。同理
\begin{equation}\sum_{i, j} e^{\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle} \langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle\approx N^2\mathbb{E}_{\boldsymbol{u}_i,\boldsymbol{v}_j}\left[e^{\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle} \langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle\right]\end{equation}
所以我们有近似
\begin{equation}H\approx\log N^2 + \log \mathbb{E}_{\boldsymbol{u}_i,\boldsymbol{v}_j}\left[e^{\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle}\right]-\frac{\mathbb{E}_{\boldsymbol{u}_i,\boldsymbol{v}_j}\left[e^{\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle} \langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle\right]}{\mathbb{E}_{\boldsymbol{u}_i,\boldsymbol{v}_j}\left[e^{\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle}\right]}\end{equation}
分布假设 #
观察已有的词向量模型,我们可以发现每个维度的数值有正有负,绝对值大小一般也比较均匀。在此,我们不妨假设每个元素的绝对值大概为1,那么每个词向量的模长大致就为$\sqrt{n}$($n$是词向量的维度,也就是我们要估算的目标,如果觉得这个近似不够准确,也可以自行调整),并且进一步假设所有的词向量均匀分布在半径为$\sqrt{n}$的$n$维超球面上,那么$\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle=n\cos\theta$,$\theta$是它们的夹角,所以
\begin{equation}H\approx\log N^2 + \log \mathbb{E}_{\theta}\left[e^{n\cos\theta}\right]-\frac{\mathbb{E}_{\theta}\left[e^{n\cos\theta} n\cos\theta\right]}{\mathbb{E}_{\theta}\left[e^{n\cos\theta}\right]}\label{eq:H-theta}\end{equation}
现在$\theta$相当于$n$维空间中任意两个向量的夹角,我们在《n维空间下两个随机向量的夹角分布》中就求出了它的分布为
\begin{equation}p_n(\theta) = \frac{\Gamma\left(\frac{n}{2}\right)}{\Gamma\left(\frac{n-1}{2}\right)\sqrt{\pi}}\sin^{n-2} \label{eq:jqfb}\theta\end{equation}
既然概率密度函数都确定了,那么对于给定的$N$和$n$,近似式$\eqref{eq:H-theta}$是完全可以数值计算出来的,而由$\tilde{H} > H$便可以解出对应的$n$。
结果对比 #
首先我们数值计算出$h_n=\log \mathbb{E}_{\theta}\left[e^{n\cos\theta}\right]-\frac{\mathbb{E}_{\theta}\left[e^{n\cos\theta} n\cos\theta\right]}{\mathbb{E}_{\theta}\left[e^{n\cos\theta}\right]}$的一些结果:
\begin{array}{c|cccccc}
\hline
n & 32 & 64 & 96 & 128 & 256 & 512\\
\hline
h_n & -7.77471 & -15.4734 & -23.1726 & -30.8718 & -61.6692 & -123.264\\
\hline
\end{array}
那么比如$n=64,N=100000$,就有$H\approx \log 100000^2 - 15.4734 = 7.55245$。读者可能会觉得奇怪,当$n=128,N=100000$时,$H$不就是负数了?离散熵怎么可能是负数?事实上,这是因为我们在前面的推导过程中,使用了采样近似和精确积分相结合的方式,当空间维数$n$足够大时,就算你采样几十万个样本也不一定能准确估计一些统计量,所以采样近似这一步带来了误差。
不过这倒是给我们另外一个确定$n$的思路:当出现$H < 0$时,说明$N$个样本已经无法对统计量做很好地估计了,那么反过来说就是此时的$n$维空间要容纳$N$个样本是“绰绰有余”的。因此,我们可以用$H < 0$简单确定一个边界,而不需要去估算$\tilde{H}$。(或者从另外一个角度想:$\tilde{H}$一定是大于0的,因此$H < 0$是$H < \tilde{H}$的充分条件。)
最后,我们看到$h_n$关于$n$大概是线性的,$h_n/n\approx -0.24$,因此$H\approx\log N^2 -0.24n$,让它小于0我们可以解出公式$\eqref{eq:final}$了。
近似估计 #
对于$h_n/n\approx -0.24$这个结果,我们也可以从理论上得到它。根据$h_n$定义,我们有
\begin{equation}h_n = \log\frac{\int_0^{\pi} \sin^{n-2}\theta\, e^{n\cos\theta}d\theta}{\int_0^{\pi} \sin^{n-2}\theta d\theta} - n\frac{\int_0^{\pi} \sin^{n-2}\theta\, e^{n\cos\theta}\cos\theta d\theta}{\int_0^{\pi} \sin^{n-2}\theta\,e^{n\cos\theta} d\theta}\end{equation}
所以,这是几个定积分的渐近估计问题,我们主要利用拉普拉斯近似的思想,假设$n$比较大,以至于我们可以忽略$n$与$n-2$的区别,那么
\begin{equation}\log\left[\sin^{n-2}\theta\, e^{n\cos\theta}\right]=(n-2)\log \sin\theta + n\cos\theta \approx n (\log \sin\theta + \cos\theta)\end{equation}
可以算出$\log\sin\theta + \cos\theta$在$[0,\pi]$的极大值点为$\arctan\sqrt{\frac{\sqrt{5}+1}{2}}\approx 0.904557$,那么在该处展开到二阶,就得到
\begin{equation}\log \sin\theta + \cos\theta\approx 0.377428 -1.11803 (\theta - 0.904557)^2\end{equation}
从而
\begin{equation}\begin{aligned}
\int_0^{\pi} \sin^{n-2}\theta\, e^{n\cos\theta}d\theta\approx&\, \int_{-\infty}^{\infty} e^{n[0.377428 -1.11803 (\theta - 0.904557)^2]}d\theta\\
\approx&\, \frac{1.67629}{\sqrt{n}}e^{0.377428n}
\end{aligned}\end{equation}
以及注意当$n$足够大的时候,被积函数只有在$\theta=0.904557$附近才会明显不等于0(或者将正态分布的极限视为狄拉克函数的近似),从而有
\begin{equation}\begin{aligned}
\frac{\int_0^{\pi} \sin^{n-2}\theta\, e^{n\cos\theta}\cos\theta d\theta}{\int_0^{\pi} \sin^{n-2}\theta\, e^{n\cos\theta} d\theta}\approx&\, \frac{\int_{-\infty}^{\infty} e^{n[0.377428 -1.11803 (\theta - 0.904557)^2]}\cos\theta d\theta}{\int_{-\infty}^{\infty} e^{n[0.377428 -1.11803 (\theta - 0.904557)^2]}d\theta} \\
\approx&\, \int_{-\infty}^{\infty} \delta(\theta - 0.904557) \cos\theta d\theta\\
=&\,\cos 0.904557 \approx 0.618034
\end{aligned}\end{equation}
同样利用拉普拉斯近似,我们可以得到$\int_0^{\pi} \sin^{n-2}\theta d\theta\approx\frac{2.50663}{\sqrt{n}}$。综合所有结果,我们可以得到
\begin{equation}h_n \approx \log \frac{\frac{1.67629}{\sqrt{n}}e^{0.377428n}}{\frac{2.50663}{\sqrt{n}}}-0.618034n\approx -0.240606 n\end{equation}
这就得到了$h_n/n\approx -0.24$这个结果。上述推导过程用的都是数值值,如果全部保留解析值,那么可以得到这个系数的解析解为$\frac{1}{2}\log\frac{\sqrt{5}+1}{2}$。
小结 #
本文从最小熵原理的思想出发分析了词向量的维度选择问题,最终给出了一个近似的估算公式,计算结果表明该估算公式与我们以往的炼丹经验是相符的。
转载到请包括本文地址:https://kexue.fm/archives/7695
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Aug. 20, 2020). 《 最小熵原理(六):词向量的维度应该怎么选择? 》[Blog post]. Retrieved from https://kexue.fm/archives/7695
@online{kexuefm-7695,
title={ 最小熵原理(六):词向量的维度应该怎么选择?},
author={苏剑林},
year={2020},
month={Aug},
url={\url{https://kexue.fm/archives/7695}},
}
August 21st, 2020
想到一件有趣的事,就是你上面的推導中,如果把"單詞數"換成"字母數",改為計算字母的"字向量"長度,並沒有任何條件限制我們這樣做對吧?
假設字母的字向量長度為 $n_c$,單詞的詞向量為 $n_w$,單詞的平均長度為 $L_w$,可以很合理的說,單字詞向量等於字母詞向量乘以單詞平均長度,即:
$$
n_w = n_c * L_w
$$
套用你上面的式子,
$$
\frac{n_w}{n_c} = \frac{8.33 \log N_w}{8.33 \log N_c} = L_w
$$
假設中文跟英文都大概有40萬個單詞[1,5],而中文常用字母約6000[2],英文有26個字母,估算一下平均詞長:
中文:
$$
L_w \approx \frac{\log 400000}{\log 6000} = \frac{12.90}{8.7} = 1.48
$$
英文
$$
L_w \approx \frac{\log 400000}{\log 26} = \frac{12.90}{3.26} = 3.95
$$
中文的平均詞長大約1~2字[6],而英文約4~5字[6],感覺還滿合理的。
所以若從字母開始計算字向量的大小,英文大約是8.33*log 26 = 27(*1),中文大約是8.33*log 6000 = 72;詞向量的長度,英文大約是27*4=108,中文大約是72*1.5=108。
(*1): 26個英文字母若以二進制表示的話只需要5 bits,但這裡算出來就要27維?或許英文字母比想像中包含更多資訊。想像一下,如果把英文單詞用音節來分割的話,音節的地位就相當於中文字母了。而英文用字母組成音節,就相當於中文用部首偏旁組成字一樣。而中文的部首偏旁顯然包含了許多資訊,所以英文的字母應該也包含了許多資訊(例如:為何某字母總是出現在這個音節?這個音節的發音通常又代表了某個意思...等,有點類似中文的形聲。) 如果可以用音節來表示英文單字,而非用英文字母,或許會得到跟中文很類似的結果。
類似的,可以計算句向量所需的長度。考慮英文一句話140個字母(以推特140個字母的限制為例),相同意思中文大約需要44.21個字母,比率為140/44.21=3.16[2]。而英文平均一句話約12個單詞[3],中文約需12*4/3.16=15個中文字母,即15/1.5=10個中文單詞。因此英文句向量長度約為 108*12=1296,中文句向量長度約為 108*10=1080。
一句話通常是一個完整意思的表達。因此我大膽推測,人類語言中任何一個完整意思都可以用1100~1300維的向量表示。通常,一個人為了清楚表達他的意思而寫了很長一句話,而用短句子卻可以創造更大的模糊性,因為只要改幾個字,意義可能就全改變。長句子透過舉了很多例子來補充說明,讓整句話更為精確,也更不容易因為一兩個字寫錯而造成誤會。實際上不太可能寫了很長一段話,寫到後面卻跟前面一點關係也沒有。因此,雖然越長的句子看似包含了更多資訊,需要更多維度來容納,但從語意的角度來看,越長的句子就是為了讓語意更加明確,表現在語意空間中,就只是讓向量方向的誤差範圍更小而已。
我認為,兩句話的相似,除了方向上的相似外,應該還有一個東西,叫做"方向誤差"也要相似。一個長句子的方向誤差應該要很小,因為如果可以找到另外一句話完整包含這長句子的意思,這句話顯然不可能跟原本的長句子差太多;但是對短句子來說,我們可以很容易找到意思差不多但寫法很不一樣的句子,這種句子語意上是相似,但不夠精確,所以顯現出來是方向相似,但是變動的範圍很大。
透過這樣的假設,也許可以設計以下訓練方案:
任取A,B兩句,B經過任意的挖洞、增刪、插入同義詞、錯別字、調換詞序得到B'。
S = similarity(A,B),S'=similarity(A,B')
S 屬於 (0,1)
令 dS = S-S',dS 跟句子長成反比,則:
對於B是長句子:dS -> 0
對於B是短句子:dS -> 1
令A=B則:
B為長句時,S=sim(A,B)=sim(B,B)=1,而S'=sim(A,B')=sim(B,B')~1
B為短句時,S=sim(A,B)=sim(B,B)=1,而S'=sim(A,B')=sim(B,B')~0
只是一個腦洞而已,隨便想想,版主別見怪呀~
參考:
[1]论英语单词长度的不合理性 https://zhuanlan.zhihu.com/p/50393671
[2]我也來算推特中英文訊息密度 https://twitter.com/octw/status/4831289513
[3]英文科研论文、英文学术论文中句子长度如何把握_AJE美国期刊专家 https://www.aje.com/cn/arc/sentence-length/
[4]漢字數量知多少 https://kknews.cc/zh-tw/history/l28xn6b.html
[5]汉语的词汇总量有多少,常用的多少? https://www.zhihu.com/question/65705721
[6]中文的文句中需不需要加入詞間空格?正反的觀點 https://www.most.gov.tw/most/attachments/18e4c2df-aea1-481d-a025-c31bcf62909d
欢迎各种奇思妙想。
主要回答两点:
1、“26個英文字母若以二進制表示的話只需要5bits,但這裡算出來就要27維?”,这里我们已经说了,我们要编码的不仅仅是单个单词,而是要编码词对,也就是$(2)$,编码词对相当于把部分语义也编码进去,其实会更加高效。你说编码26个字母只需要5bits,那只是把它们记录下来,但是哪个字母跟哪个相关性比较强,你这个5bits的编码是看不出来的,但是从一个更多维的向量可以表达出来。
2、“因此我大膽推測,人類語言中任何一個完整意思都可以用1100~1300維的向量表示”,这个猜想其实算是很合理的。在本文的推理里边,把“单词”换成“句子”也合理(以句子为单位也有上下文,也有Skip Gram),虽然看起来句子是无穷无穷,但人类知识能用到的所有句子其实是有限的,按照本文的公式,1000维的向量,可以表达$e^{125}\approx 2\times 10^{54}$个句子了,人类历史上都没产生过这么多个句子吧我估计。
August 25th, 2020
苏神,有个问题请教? embedding的每个维度对于某个任务都是有作用的吗? = = 感觉我要当白嫖党了
这个问题就大了,只能说答案是不一定吧。
September 29th, 2020
苏老师,您好。这篇博文对我的研究很有启发性,希望能在论文中引用您的工作。
关于"每个词向量的模长大致就为$\sqrt{n}$"这个近似假设,我存有疑虑。
请问,当词向量模长和n无关时,推导过程应该修改哪些部分呢?
我专门验证过Glove的词向量平均模长,确实和n呈一定的正相关。
预训练词向量 平均模长
glove.6B.50d.txt 5.286788343919269
glove.6B.100d.txt 5.86921360722279
glove.6B.200d.txt 6.268562206254464
glove.6B.300d.txt 6.2321101012225455
glove.42B.300d.txt 7.230307383511703
glove.840B.300d.txt 5.885159022263779
但在我的研究领域里,不同维度的表示向量的平均模长很接近,和n没有明显关联。
向量维度, 模长均值, 模长max, 模长min
8d, 1.5297602 2.4139495 0.4636897
16d, 1.6506543 2.614145 0.8139142
32d, 1.6400446 2.5166268 1.0426676
64d, 1.6354849 2.4380429 1.0203775
128d, 1.6350439 2.3142626 1.0703937
256d, 1.6746553 2.3845065 1.107584
512d, 1.5538142 2.3219275 1.0707994
考虑其原因可能是,向量距离公式不是内积,而是差的二范数,即$\left \langle u_i,v_j \right \rangle = \left \| u_i - v_j \right \|_2$.
在这种情况下,我将$\left \langle u_i,v_j \right \rangle = ncos\theta$ 改为 $\left \langle u_i,v_j \right \rangle = 2n*(1-cos\theta)$.
同时由于模长近似为定值, 我将距离公式中的n设为常数,即2.25。 这种情况下h随n的变化极小,且呈正相关,无法求得有效的临界维度值。
n h
32 -0.30791
64 -0.15708
128 -0.07896
256 -0.00015
请教苏老师,希望得到您的建议。
本文使用了以下几个假设:
1、模型是Skip Gram;
2、度量为内积;
3、所有的词向量均匀分布在半径为$\sqrt{n}$的$n$维超球面上。
我不确定你是不是使用了某些正则项,使得向量模型跟$n$无关?因为内积还是欧式距离影响不大,理论上来说,模长跟$n$无关的话,会削弱模型的拟合能力。如果你模长跟$n$没关系的话,感觉上要不就是有了其他约束,致使模长不增长;要不就是模型还没拟合好;要不就是你模型不是Skip Gram;又或者是你模型的向量分布明显偏离了均匀分布这个假设。
请问一下,度量对h/n的影响很大吗?
当我按照评论3中的方式,用欧式距离的平方替换内积后,h/n从0.24变为0.47。
当用开根号的正常欧式距离后,h/n变为0.003,这时增加n难以对整体熵产生影响。
此外当调整模长$\sqrt n$为$\sqrt n/2$时,h/n变为0.028,此时N=100就需要n=300?
是否是我在公式中忽略了某部分的改动?现在不同的度量函数对结果影响非常大。
还是像前面说的,本文得到的是一个不大严谨的“充分条件”,比如你说的“此外当调整模长$\sqrt n$为$\sqrt n/2$时,h/n变为0.028,此时N=100就需要n=300”,应当理解为$n\geq 300$是$N=100$的充分条件,没什么毛病。
推导过程为了简化计算,用了一步均匀假设,还用了一步积分代替采样,这两步都是在$N$很大的时候近似精度才会好,所以$N$比较小的时候误差较大是正常的。
至于不同的度量的影响,则要回到模型最最开始的假设:我们分析的是模型拟合了Skip Gram模型的能力,在这个前提下进行后续估计,当把度量从内积换成其他度量时,我们或许要加个调节因子(即度量前面可能要乘个$\lambda$来scale一下)才能更好地拟合Skip Gram模型,或者说我们要重新估计一下训练完成后模长的量级才行。
明白了,多谢多谢
September 30th, 2020
如果词向量是随机的话,那使用词向量对下游nlp task的帮助应该就不大了。可能更合理的是,u, v的内积接近于u, v的pointwise mutual information (https://papers.nips.cc/paper/5477-neural-word-embedding-as-implicit-matrix-factorization.pdf),而这个是有语言的分布决定的,和词向量的维度无关。所以比较怀疑关于H的估计基于的假设。
之所以最后的结论还是合理的,感觉是因为"当出现H
本文要估计的是多少维度的词向量才能比较好地拟合Skip Gram模型,是希望得到一个类似充分条件的东西。重点是希望把推导过程中的假设陈述清楚,并且尽量少结合语言分布本身有关的内容(因为不容易获得)。
最后假设词向量均匀分布在球面上,其实得到的结果会偏大,也就是说,如果我们代入具体的真实分布,得到的$n$可以更小,所以代入均匀分布是没有问题的,因为刚才说了是为了得到一个充分条件。
此外,均匀分布不代表随机,就算它均匀分布在球面上,我们依然可以把相近的词放在相近的位置,因此就算这个假设成立,也不代表词向量就没有词义了。
August 31st, 2021
苏神,IJCAI21 的一篇论文:Graph Entropy Guided Node Embedding Dimension Selection for Graph Neural Networks,https://arxiv.org/abs/2105.03178 跟本文有不少重合之处,特来反馈一下。
好的,感谢反馈,我邮件联系一下作者看看。
已经处理,感谢关注。
September 23rd, 2021
非常简洁的证明!求问一个小问题,实验能论证常数8.33是最好的吗,或者说8比16和4都要好吗?
问这个问题是因为logn的阶数是所有concentration方法都能推导到的,但是不同的方法前面常数不一样
October 25th, 2021
苏神,近似估计那里
\begin{equation}\mathbb{E}_\theta = \frac{\Gamma(\frac n2)}{\Gamma(\frac{n-1}{2})\sqrt{\pi}}\int_0^\pi \sin^{n-2}\theta\,e^{n\cos\theta}d\theta\end{equation}
是怎么推得$h_n$中$\log$中的
\begin{equation}\frac{\int_0^{\pi} \sin^{n-2}\theta\, e^{n\cos\theta}d\theta}{\int_0^{\pi} \sin^{n-2}\theta d\theta}\end{equation}
你是说为什么下式成立吗?
$$\frac{\Gamma(\frac{n}{2})}{\Gamma(\frac{n-1}{2})\sqrt{\pi}}\int_0^\pi \sin^{n-2}\theta\,e^{n\cos\theta}d\theta=\frac{\int_0^{\pi} \sin^{n-2}\theta\, e^{n\cos\theta}d\theta}{\int_0^{\pi} \sin^{n-2}\theta d\theta}$$
这很简单啊,$p_n(\theta)$是一个概率分布,必然有$\int_0^{\pi} p_n(\theta)d\theta = 1$,所以归一化因子就是$\int_0^{\pi}\sin^{n-2}\theta d\theta$。
是的
明白了,谢谢苏神回复,恍然大悟哈哈
October 26th, 2021
苏神,这里近似$cos\theta$的范围也从$[0,\pi]$变为$[-\infty,\infty]$,会不会对近似结果有影响?
\begin{equation}\begin{aligned}
\int_0^{\pi} \sin^{n-2}\theta\, e^{n\cos\theta}\cos\theta d\theta\approx&\, \int_{-\infty}^{\infty} e^{n[0.377428 -1.11803 (\theta - 0.904557)^2]}\cos\theta d\theta
\end{aligned}\end{equation}
第二个小问题,在计算中,因为$\frac{ e^{n[0.377428 -1.11803 (\theta - 0.904557)^2]}}{\frac{1.67629}{\sqrt{n}}e^{0.377428n}}$在$\theta=-0.904557$时趋于$\infty$, 其它情况趋于$0$(类似以均值$\mu=0.904557$)的正太分布极限变窄,所以可以近似为狄拉克函数,不知道这样理解对不对
\begin{equation}\begin{aligned} \frac{\int_{-\infty}^{\infty}e^{n[0.377428 -1.11803 (\theta - 0.904557)^2]}\cos\theta d\theta}{\int_{-\infty}^{\infty} e^{n[0.377428 -1.11803 (\theta - 0.904557)^2]}d\theta}
\approx&\,\int_{-\infty}^{\infty}\frac{ e^{n[0.377428 -1.11803 (\theta - 0.904557)^2]}}{\frac{1.67629}{\sqrt{n}}e^{0.377428n}}\cos\theta d\theta \\
\approx&\, \int_{-\infty}^{\infty} \delta(\theta - 0.904557) \cos\theta d\theta
\end{aligned}\end{equation}
两个问题的答案是一样的。当$n$足够大的时候,$e^{n[0.377428 -1.11803 (\theta - 0.904557)^2]}$在稍微远离$0.904557$的地方都足够小,因此哪怕扩大到$(-\infty,\infty)$进行积分,结果也不会有明显偏差。
苏神,当$n$足够大的时候,$e^{n[0.377428 -1.11803 (\theta - 0.904557)^2]}$在稍微远离$0.904557$的地方应该也是一个无限大的数字啊。
在超出$[0,\pi]$的范围后足够小,也就是苏神所说的“因此哪怕扩大到$(−\infty,\infty)$进行积分,结果也不会有明显偏差.”
说错了,应该是$e^{-1.11803 n(\theta - 0.904557)^2]}$在稍微远离$0.904557$的地方都足够小,因此哪怕扩大到$(-\infty,\infty)$进行积分,结果也不会有明显偏差。积分是对$\theta$积的,我们只需要考虑$\theta$相关项的近似程度,$e^{0.377428n}$跟$\theta$无关,所以在$(13)$式中被原封不动保留下来了。
谢谢苏神解惑,我是把$e^{n[0.377428 -1.11803 (\theta - 0.904557)^2]}$的$n$后面整体作为拉普拉斯方法中$\int_a^be^{Mf(x)}dx$的$f(x)$,跟苏神的结果一样。
读苏神的博客对我来说,更多的是在补充数学基础...,有基础再学习苏神的思路。
哈哈,有收获就好~
August 8th, 2023
[...]每个注意力头提取的 value,query 和 key 的维度 hs 为嵌入维度 n_embd 的 1/n_head。虽然编程时这里仅需保证 query 和 key 的空间维度一致即可,但是考虑到嵌入维度和 vocab table 大小的关系,每个注意力头处理的嵌入维度不宜过大,这样和 n_embd 绑定是比较方便的做法。请参考:最小熵原理(六):词向量的维度应该怎么选择?[...]
October 15th, 2023
文章里做了很多近似,但好像没有对近似损失的精度进行分析……
精度分析不大适合科普文章做,并且笔者的风格是偏向物理,以结果论,结果看起来跟实际很吻合,所以近似大概率是合理的。