171以 1/N 的概率返回 1~N 之间的数
第一步:生成Rand1()函数,等概率产生0和1。
第二步:计算整数 n 的二进制表示所拥有的位数 k, k = 1 + l o g 2 n k = 1 +log_2n k=1+log2n
第三步:调用k次 Rand1() 产生随机数。
172给定函数rand5() 构造rand7() 或 rand7()构造rand10()
1730出1次,1出现2次,2出现3次,n-1出现n次?
174给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?
175返回 (0, 1) 之间的均匀分布(字节跳动面试题)
因为这里的条件给了 p 是已知的,所以把一条长度为 1 的线段,左边划分长度 p, 右边划分长度 (1-p);
再把左边的 p 划分成两段,占比分别为 p 和 (1-p)
同样再把右边的 (1-p) 划分成两段,占比分别为 p 和 (1-p)
依次递归到满足精度 e − 8 e^{-8} e−8 为止
176给定数据集,已知函数关系,拟合参数
链接
最大似然估计的一般求解步骤:写出似然函数、取对数lnL、求偏导、判断偏导有解与否
177损失函数
说一下你了解的损失函数?各自的运用场景⭐
• 用于回归的损失函数:
- 绝对值损失函数
- 平方损失函数(squared loss):常用于线性回归。
• 用于分类的损失函数: - 0-1损失函数(zero-one loss):在感知机中,使用的该损失函数
- 对数损失函数(log loss):用于最大似然估计,等价于交叉熵损失函数
- 指数损失函数(exponential loss):在adaboost中使用的该损失函数
- 合页损失函数(hinge loss):在SVM中使用的该损失函数,当样本被正确分类且函数间隔大于1时,合页损失是0,否则损失是1−Y⋅f(x)
- 交叉熵损失函数(cross-entropy loss):用于分类任务
• 用于分割的损失函数: - IOU loss:就是交集和并集的比值,常用于分割任务、回归任务。
- Dice loss
- Tversky Loss :引入α\alphaα和β\betaβ来控制RecallRecallRecall和PrecisionPrecisionPrecision
• 用于检测的损失函数: - Smooth L1 Loss :融合绝对值损失函数和平方损失函数,faster RCNN用的该损失函数
- Focal loss :用于单阶段目标检测方法中样本极端不平衡的情况。在RetinaNet网络中使用该损失函数
178交叉熵函数与最大似然函数的联系和区别?
区别:交叉熵函数使用来描述模型预测值和真实值的差距大小,越大代表越不相近;似然函数的本质就是衡量在某个参数下,整体的估计和真实的情况一样的概率,越大代表越相近。
联系:交叉熵函数可以由最大似然函数在伯努利分布的条件下推导出来,或者说最小化交叉熵函数的本质就是对数似然函数的最大化。
179在用sigmoid作为激活函数的时候,为什么要用交叉熵损失函数,而不用均方误差损失函数?
- 因为交叉熵损失函数可以完美解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质。
- sigmoid作为激活函数的时候,如果采用均方误差损失函数,那么这是一个非凸优化问题,不宜求解。而采用交叉熵损失函数依然是一个凸优化问题,更容易优化求解。
180为什么交叉熵损失函数有log项?
通过最大似然估计的方式求得交叉熵公式,这个时候引入log项。这是因为似然函数(概率)是乘性的,而loss函数是加性的,所以需要引入log项“转积为和”。而且也是为了简化运算。
181说说adaboost损失函数
那么为什么AdaBoost算法使用指数损失函数,而不使用其他损失函数呢?
这是因为,当前向分步算法的损失函数是指数损失函数时,其学习的具体操作等价于AdaBoost算法的学习过程。
182说说SVM损失函数
183简单的深度神经网络(DNN)的损失函数是什么?
深度神经网络(DNN)涉及到梯度消失的问题,如果使用均方误差作为损失函数配合sigmoid激活函数,那么参数更新缓慢。这个时候应该考虑使用交叉熵作为损失函数,可以避免参数更新缓慢的问题
184说说KL散度
相对熵,是两个概率分布间差异的非对称性度量 。
说说KL散度
相对熵,是两个概率分布间差异的非对称性度量 。
p为真实分布,q为理论分布(拟合分布)
185交叉熵的设计思想是什么
交叉熵函数的本质是对数函数。
交叉熵函数使用来描述模型预测值和真实值的差距大小,越大代表越不相近。
交叉熵损失函数可以完美解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质。
对数损失在逻辑回归和多分类任务上广泛使用。交叉熵损失函数的标准型就是对数损失函数,本质没有区别
186交叉熵为什么可以做损失函数
训练数据上模型学到的分布 q(𝑚𝑜𝑑𝑒𝑙) 和真实数据的分布 𝑃(𝑟𝑒𝑎𝑙) 越接近越好,所以我们可以使其相对熵最小
而为了计算方便,用交叉熵取代相对熵,只需要计算−p *lg(q)。得证,交叉熵可以用来计算学习模型分布与训练分布之间的差异。
187说一下你了解的激活函数?分别应用于什么场景?
链接
10种
Sigmoid tanh
ReLU Leaky ReLU Mish激活函数 参数化ReLU 随机化ReLU 指数化线性单元(ELU)
Maxout
188写一下leaky ReLU的公式,跟ReLU比有什么优势?
189了解ReLU6吗?
ReLU的正值输出为[0,无穷大],关键是我们计算机内存有限,能存储无穷大的数吗?当然不能,所以将ReLU应用到实际中时需要限定输出的最大值,所以就成了ReLU6了,如图:
190sigmoid有什么缺点,有哪些解决办法?
sigmoid型函数是第一个被广泛应用于神经网络的激活函数。经过sigmoid型函数作用后,输出的值范围在[0,1]之间。但是sigmoid型函数的输出存在均值不为0的情况,并且存在梯度消失与梯度爆炸的问题
- 在深层网络中被其他激活函数替代。如ReLU(x)、Leaky ReLU(x)等
- 在分类问题中,sigmoid做激活函数时,使用交叉熵损失函数替代均方误差损失函数。
- 采用正确的权重初始化方法:如He_init方法
- 加入BN层
- 分层训练权重(maxout函数)