电话面试,约20分钟。
1. 数学问题:均匀分布怎么转为正态分布,线性代数的SVD。
- 均匀分布怎么转为正态分布
- Box-Muller算法实际上依据瑞利分布来求标准正态分布的反函数。我们知道标准正态分布的反函数是求不了的,但标准正态分布经过极坐标变换后却是可以求得反函数的。使用Box-Muller可以用来产生服从正态分布的随机数。做法如下:产生相互独立的[0, 1]均匀分布的随机数,。令,,则和是相互独立的N(0,1)随机数。
- 中心极限定理,样本容量极大时,样本均值的抽样分布趋近于正态分布。这和样本所属的总体的分布的类型无关,样本所属总体的分布可以是正态分布,也可以不是。(大数定律讲的是样本容量极大时,样本的均值必然趋近于总体的期望)。对于服从均匀分布的随机变量,只要n充分大,随机变量就服从均值为0,方差为1的正态分布。所以,均匀分布转为正态分布,取N个均匀分布的随机变量即可。对于(0,1)均匀分布的均值为0.5,方差为1/12,故取N=12。
- SVD:奇异值分解(多用于数据降维)
- 特征值分解定义(EVD),如果矩阵A是一个m*m的实对称矩阵(即A=A'),那么它可以被分解成如下的形式A=QΣQ',其中Q为标准正交阵,即有QQ'=E,Σ为对角矩阵,且这些矩阵的维度均为m*m。Σ的对角元素为特征值,Q为特征向量。
- 奇异值分解定义(SVD),有一个m*n的实数矩阵A,我们想要把它分解成如下的形式,A=UΣV',其中U和V均为单位正交阵,即有UU'=E和VV'=E,U成为左奇异矩阵,V成为右奇异矩阵,Σ仅在主对角线上有值,我们称它为奇异值,其他元素均为0。上面的矩阵U为m*m,Σ为m*n,V为n*n。
- 奇异值求解:利用如下性质AA'=UΣV'VΣ'U'=UΣΣ'U',A'A=VΣ'U'UΣV'=VΣ'ΣV'。需要注意的是,这里ΣΣ'和Σ'Σ在矩阵的角度上来讲,它们是不相等的,因为它们的维数不同,ΣΣ'为m*m,Σ'Σ为n*n,但是它们在主对角线的奇异值是相等的。这里AA'和A'A也是对称矩阵,那么可以做特征分解,分别可得到特征矩阵U和V,对ΣΣ'或Σ'Σ中的特征值进行开方,可以得到所有的奇异值。
2. softmax,BN(train和inference)。
- softmax为什么选择:因为是能够将任意实数映射到非负实数的最简单的、单调的、光滑的初等函数。
- softmax的溢出问题:当我们使用softmax计算比较小的值的时候是不会有什么问题的,但是如果运算的值比较大的时候,比如很大或很小的时候,朴素的直接计算会上溢出或下溢出,从而导致严重问题。
- 解决办法:令,即M为所有中最大的值,那么我们只需要计算的值,就可以解决上溢出和下溢出的问题了,并且计算结果理论上仍然和保持一致。举个实例:
- 延伸问题:如果softmax函数中的分子发生下溢出,也就是前面所说的为负数,且负数的绝对值很大,此时分母是一个极小的正数,有可能四舍五入为0的情况,此时,如果我们把softmax函数的计算结果再拿去计算log,即log softmax,其实就相当于计算log(0),所以会得到负无穷,但这实际上是错误的,因为它是由舍入误差造成的计算错误。解决办法同上:
3. 目标检测的召回率和准确率的权衡选择,特征相似距离怎么转换为概率分布。
4. Python怎么封装C++代码,C++的三个智能指针。
5. 我的GitHub地址。
参考链接: