嗨喽大家好,我是cv君,本专栏长期连载更新,速度收藏,下次就看不到了。
首先,本系列专栏适用于:
1:小白,小白需要大量努力,方向和cv君亲自整理的资料很关键,cv君有手把手实战文近百篇,点击此处查看:原创实战项目级专栏还有精选精品视觉项目,还有机器学习原理与项目
再加上本面经专栏 cv君文章,只需订阅一个专栏,百篇文章都能看哦~(订阅后联系cv君)
(即将更新100期),卷个算法岗,不上岸,来找我手把手教学,和cv君接触,你会发现,有问必答,而且还有近万的cv君朋友,在多个交流群中,欢迎订阅后进群~
2:求职者:马上要去找工作的朋友们,加油,我第一次面大厂,试试水,结果完全没准备,他问我的算法问题,我语无伦次,支支吾吾,完全被吊打,后来,我重振旗鼓,成功拿下大厂算法Offer,这段时间,我静下心来出这份面经专栏,预期更100期,能把面试官说的服帖。求职者,最需要的是项目和面经,个人感悟,所以如果你看我的面经文,会有较大帮助,cv君也不吹了哈哈哈。
3:工程师,cv君是一名擅长应用的工程师,对算法优化,模型部署有着一定研究,交流群也很多朋友做应用,本专栏还是很多数据和应用教学的,欢迎订阅后联系cv君进群交流应用哦!
答:sigmoid将一个real value映射到(0,1)的区间,用来做二分类。 而 softmax 把一个 k 维的real value向量(a1,a2,a3,a4….)映射成一个(b1,b2,b3,b4….),其中 bi 是一个 0~1 的常数,输出神经元之和为 1.0,所以相当于概率值,然后可以根据 bi 的概率大小来进行多分类的任务。
二分类问题时 sigmoid 和 softmax 是一样的,求的都是 cross entropy loss(交叉熵损失),而 softmax 可以用于多分类问题。softmax是sigmoid的扩展,因为,当类别数 k=2 时,softmax 回归退化为 logistic 回归。
0-1损失函数:
函数曲线:
函数曲线为如上的阶梯函数。有三个特点:不连续,非凸,不平滑。由于这三个特点,损失函数的优化难度很大。
Hinge loss:
在0-1 loss函数基础上,做了两点改动:对于正例(y[i] = 1), f(x[i])必须大于等于1;而对于负例(y[i] = -1), f(x[i])必须小于等于-1 (相比之前f(x[i])与0对比,加强条件,提高稳定性);没有达到要求的情况,视为错误。f(x[i])权值偏离越大,错误越严重。
函数曲线(连续,凸,非平滑):
cross-entropy loss(log loss):
常用于多分类问题,描述了概率分布之间的不同,y是标签,p是预测概率:
在逻辑回归也就是二分类问题中,上述公式可以写成:
这就是logistic loss。logistic loss 其实是 cross-entropy loss 的一个特例。
答:1)数据集不够;2)参数太多,模型过于复杂,容易过拟合;3)权值学习过程中迭代次数太多,拟合了训练数据中的噪声和没有代表性的特征。
Regularization is a technique which makes slight modifications to the learning algorithm such that the model generalizes better. 正则化是一种技术,通过调整可以让算法的泛化性更好,控制模型的复杂度,避免过拟合。1)L1&L2正则化;2)Dropout(指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络);3)数据增强、加噪;4)early stopping(提前终止训练);5)多任务联合;6)加BN。
答:L1 正则化向目标函数添加正则化项,以减少参数的绝对值总和;而 L2 正则化中,添加正则化项的目的在于减少参数平方的总和。线性回归的L1正则化通常称为LASSO(Least Absolute Shrinkage and Selection Operator)回归。LASSO回归可以使得一些特征的系数变小,甚至还有一些绝对值较小的系数直接变为0,从而增强模型的泛化能力,因此特别适用于参数数目缩减与参数的选择,因而用来估计稀疏参数的线性模型。
dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。训练的时候使用dropout,测试的时候不使用。Dropout的思想是训练DNNs的整体然后平均整体的结果,而不是训练单个DNN。DNNs以概率p丢弃神经元,因此保持其它神经元概率为q=1-p。当一个神经元被丢弃时,无论其输入及相关的学习参数是多少,其输出都会被置为0。丢弃的神经元在训练阶段的前向传播和后向传播阶段都不起作用:因为这个原因,每当一个单一的神经元被丢弃时,训练阶段就好像是在一个新的神经网络上完成。大概是sample吧。(我感觉有点像非结构化稀疏剪枝)
答:weight decay特指神经网络的正则化,是放在正则项前的一个系数,正则项表示模型的复杂度,weight decay的作用就是调节模型复杂度对损失函数的影响。一般用l2 正则化。
答:sigmoid公式:
它输入实数值并将其“挤压”到0到1范围内,适合输出为概率的情况,但是现在已经很少有人在构建神经网络的过程中使用sigmoid。
tanh公式:
Tanh非线性函数图像如下图所示,它将实数值压缩到[-1,1]之间。
relu公式:
ReLU非线性函数图像如下图所示。
Leaky ReLU公式:
其中α是很小的负数梯度值,比如0.01,Leaky ReLU非线性函数图像如下图所示。这样做目的是使负轴信息不会全部丢失,解决了ReLU神经元“死掉”的问题。
ELU公式:
ELU函数是针对ReLU函数的一个改进型,相比于ReLU函数,在输入为负数的情况下,是有一定的输出的,而且这部分输出还具有一定的抗干扰能力。这样可以消除ReLU死掉的问题,不过还是有梯度饱和和指数运算的问题。
答:Batch Normalization。归一化的作用,经过BN的归一化消除了尺度的影响,避免了反向传播时因为权重过大或过小导致的梯度消失或爆炸问题,从而可以加速神经网络训练。BN一般放在激活函数前面。
1)BN归一化的维度是[N,H,W],那么channel维度上(N,H,W方向)的所有值都会减去这个归一化的值,对小的batch size效果不好;2)LN归一化的维度是[H,W,C],那么batch维度上(H,W,C方向)的所有值都会减去这个归一化的值,主要对RNN作用明显;3)IN归一化的维度是[H,W],那么H,W方向的所有值都会减去这个归一化的值,用在风格化迁移;4)GN是将通道分成G组,归一化的维度为[H,W,C//G]。
答:防止梯度消失;传递浅层信息,比如边缘、纹理和形状。CNNs with skip connections have been the main stream for modern network design since it can mitigate the gradient vanishing/exploding issue in ultra deep networks by the help of skip connections.
答:第一,softmax+cross entropy loss,比如fcn和u-net。
第二,第一的加权版本,比如segnet,每个类别的权重不一样。
第三,使用adversarial training,加入gan loss。
(第四,sigmoid+dice loss,比如v-net,只适合二分类。
第五,online bootstrapped cross entropy loss,比如FRNN。
第六,类似于第四,sigmoid+jaccard(IoU),只适合二分类,但是可推广到多类。)
答:在BN的原始论文中,BN是放在非线性激活层前面的。但是现在目前在实践中,倾向于把BN放在ReLU后面,也有评测表明BN放ReLu后面更好。还有一种观点,BN放在非线性函数前还是后取决于你想要normalize的对象,更像一个超参数。