面试系列(持续更新中……)

字节——风控岗位

概率题

在这里插入图片描述

笔试题

岛屿问题(岛屿数量、岛屿的周长、岛屿的最大面积、最大人工岛)
详见热题100

深度学习: 卷积核 为什么都是 奇数size

卷积核一般都把size设为奇数,主要有以下两个原因

  1. 保护位置信息:保护锚点刚好在中间,方便以模块中心为标准进行滑动卷积,避免了位置信息发生偏移
  2. padding时对称:保证了padding时,图像的两边依然相对称。

Epoch Batch Size Iteration区分

  1. 当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一个epoch(然而,当一个epoch对于计算机而言太庞大的时候,就需要把它分成多个小块。)
  2. 在一个epoch中,batch数和迭代数是相等的。迭代数是将batch看成一个整体,运行完一个epoch(运行完所有数据集)所执行了多少个batch。比如对于一个有2000个训练样本的数据集。将2000个样本分成大小为500的batch,那么完成一个epoch需要4个iteration。

GMM(高斯混合模型)原理和应用

  1. 从几何角度来看:加权平均(多个高斯分布叠加而成)
    每个高斯分布都对应一个在这里插入图片描述

因此叠加后: 在这里插入图片描述

  1. 从混合模型角度来看:
    https://www.bilibili.com/video/av35183585/
  2. 求解GMM参数需要使用EM算法:
    类似于其他的模型求解,我们先使用最大似然估计来尝试求解GMM的参数,
  3. GMM和K-means算法对比
    最后我们比较GMM和K-means两个算法的步骤。

GMM:

先计算所有数据对每个分模型的响应度
根据响应度计算每个分模型的参数
迭代
K-means:

先计算所有数据对于K个点的距离,取距离最近的点作为自己所属于的类
根据上一步的类别划分更新点的位置(点的位置就可以看做是模型参数)
迭代
可以看出GMM和K-means还是有很大的相同点的。GMM中数据对高斯分量的响应度就相当于K-means中的距离计算,GMM中的根据响应度计算高斯分量参数就相当于K-means中计算分类点的位置。然后它们都通过不断迭代达到最优。不同的是:GMM模型给出的是每一个观测点由哪个高斯分量生成的概率,而K-means直接给出一个观测点属于哪一类。
6. GMM的应用
由于GMM通常用来解决同一集合下的数据包含多种不同分布的情况,所以有如下几个应用:
在语音识别方面,早于1995年,Douglas A. Reynolds和R.C. Rose就提出论文,基于GMM实现了独立于文本的语音识别。 构成高斯混合的各个高斯分量用于对说话者的频谱从不同角度建模。
高斯混合模型在图像分割领域应用广泛,在一般图像上经典过程是将像素映射到特征空间,然后假设特征空间的点由待定参数的GMMs生成,使用EM等算法计算最优的参数值以确定像素的类别。
噪声在图像和视频中不可避免,消除噪声有利于图像与视频分割、特征提取、目标跟踪与识别等后期处理过程。GMMs在图像噪声消除领域多有应用,一个主要的方法是利用GMMs对图像的正交函数基分解系数建模,消除噪声

什么是EM算法

求解GMM的一种方法
通俗理解

RNN和LSTM区别

链接
正是因为LSTM中有了加法的操作,不再是全部连乘,解决了梯度问题。

深拷贝和浅拷贝

Focal loss公式以及详解

Focal loss的引入主要是为了解决难易样本数量不平衡(注意,有区别于正负样本不平衡)的问题。难易样本不平衡是从是否容易区分来说的,有的样本很容易被网络分对,有的样本网络总是会弄错,那这就是难易分类的差距。
单阶段的目标检测器通常会产生高达100k的候选目标,只有极少数是正样本,政府样本数量非常不平衡。计算分类的交叉熵公式如下:
在这里插入图片描述
为解决正负样本不平衡问题,通常会在交叉熵损失前面加上一个alpha,即
在这里插入图片描述
但对难易样本的不平衡没有帮助。
一个简单的思想,是把高置信度p样本的损失再降低一些。
在这里插入图片描述
举个例,γ取2时,如果 p = 0.968, (1-0.968)2 =0.001,损失衰减了1000倍!
Focal Loss的最终形式结合了上面的公式(2). 这很好理解,公式(3)解决了难易样本的不平衡,公式(2)解决了正负样本的不平衡,将公式(2)与(3)结合使用,同时解决正负难易2个问题!
在这里插入图片描述
GHM是一种改进
GHM的想法是,我们确实不应该过多关注易分样本,但是特别难分的样本(outliers,离群点)也不该关注啊!

这些离群点的梯度模长d要比一般的样本大很多,如果模型被迫去关注这些样本,反而有可能降低模型的准确度!况且,这些样本的数量也很多!

那怎么同时衰减易分样本和特别难分的样本呢?太简单了,谁的数量多衰减谁呗!那怎么衰减数量多的呢?简单啊,定义一个变量,让这个变量能衡量出一定梯度范围内的样本数量——这不就是物理上密度的概念吗?

于是,作者定义了梯度密度——本文最重要的公式:
在这里插入图片描述

理解Focal Loss与GHM——解决样本不平衡利器

理解自注意力(self-attention)

  1. 预处理输入数据
  2. 初始化权重
  3. 计算key、query和value
  4. 计算输入值的注意力得分
  5. 计算softmax层
  6. 注意力得分与value相乘
  7. 对6中结果加权求和,并得到第一个输出值
  8. 重复4-7,计算其余输入数据的输出值

给定一个二维数组A(维度为M x N),每一行为固定维度N的向量(共M行),假设自注意力Q、K、V的W初始权重均为0.5(维度均为N x D),请计算A的self-Attention自注意力得分输出矩阵Z。
注意:Z维度为(M x N)
提示:这里的softmax对象是self-attention按行的真实得分,应该按照行计算softmax
softmax

https://blog.csdn.net/weixin_42060232/article/details/107475662

拓蜂——算法岗

SaaS:Success as a Service
其实就是方便的、可靠的服务,随手可得缴费即用的服务,能为企业带来好处和助力的服务,也是一直在更新的服务

从商品文本、图片、评价等数据中提取商品类目,属性元素,主题风格,预测商品趋势,挖掘爆品与潜力品。
挖掘各平台关键词,分析关键词趋势。
构建商品同款、相似款识别系统。
依据商品营销数据完成商品销量预测算法与营销人群推荐算法
采用图像、文本生成技术帮助商家自动生成优质创意与文案

数据挖掘、机器学习 、自然语言处理、图像算法等相关领域
对算法相关的离线、在线系统有实现经验

梯度消失和梯度爆炸的区别

解决梯度消失的方法

  1. 残差网络
  2. BN层

Kmeans算法简述

  1. 选择初始化的k个样本作为初始聚类中心,如何确定k(手肘法),如何初始化质心(K-means++)

手肘法:
思想:随着聚类数K的增大,样本划分更加精细,那么所有样本的聚类误差(SSE)会逐渐变小。
在这里插入图片描述

  • 当k值小于真实聚类数时,k的增加会对聚类效果产生很大影响,故SSE下降幅度很大。
  • 当k值大于真实聚类数时,k的增加不会对聚类效果产生很大影响,故SSE下降幅度会趋于平缓。整个SSE-K图为一个手肘型。

在这里插入图片描述

随机初始化质心可能导致算法迭代很慢,K-means++是对k-means随机初始化质心的一个优化,具体步骤如下:

  1. 随机选取一个点作为第一个聚类中心
  2. 计算所有样本与第一个聚类中心的距离。
  3. 选择出上一步中距离最大的点作为第二个聚类中心
  4. 迭代:计算所有点到与之最近的聚类中心的距离,选取最大距离的点作为新的聚类中心。
  5. 终止条件:直到选出了这k个中心。

https://zhuanlan.zhihu.com/p/149441104
https://zhuanlan.zhihu.com/p/78798251

yolo系列网络详细介绍

先把loss贴上镇楼!!

在这里插入图片描述
yolo算法几乎是输入原图就直接预测出每个grid cell“附近”是否有某个对象和具体的box位置,那最终这个想法数学化后便体现在loss函数上。loss中有三个概念:anchor box、置信度(confidence)和对象条件类别概率(conditional class probabilities)。作者提出,在网络最后的输出中,对于每个grid cell对应的bounding box的输出有三类参数:一个是对象的box参数(box中心点坐标,box的宽高),一个是置信度,一个是一组条件类别概率

  • anchor box(论文中也称为bounding box prior,后面均使用anchor box)其实就是从训练集的所有ground truth box中统计(使用k-means)出来的在训练集中最经常出现的几个box形状和尺寸。比如,在某个训练集中最常出现的box形状有扁长的、瘦高的和宽高比例差不多的正方形这三种形状。我们可以预先将这些统计上的先验(或来自人类的)经验加入到模型中,这样模型在学习的时候,瞎找的可能性就更小了些,当然就有助于模型快速收敛了。
  • 置信度是每个bounding box输出的其中一个重要参数,作者对他的作用定义有两重:一重是代表当前box是否有对象的概率在这里插入图片描述,注意,是对象,不是某个类别的对象,也就是说它用来说明当前box内只是个背景(backgroud)还是有某个物体(对象);另一重表示当前的box有对象时,它自己预测的box与物体真实的box可能的在这里插入图片描述
    的值,注意,这里所说的物体真实的box实际是不存在的,这只是模型表达自己框出了物体的自信程度。以上所述,也就不难理解作者为什么将其称之为置信度了,因为不管哪重含义,都表示一种自信程度:框出的box内确实有物体的自信程度和框出的box将整个物体的所有特征都包括进来的自信程度。经过以上的解释,其实我们也就可以用数学形式表示置信度的定义了:
    在这里插入图片描述
  • 对象条件类别概率是一组概率的数组,数组的长度为当前模型检测的类别种类数量,它的意义是当bounding box认为当前box中有对象时,要检测的所有类别中每种类别的概率,其实这个和分类模型最后使用softmax函数输出的一组类别概率是类似的,只是二者存在两点不同:1.YOLO的对象类别概率中没有background一项,也不需要,因为对background的预测已经交给置信度了,所以它的输出是有条件的,那就是在置信度表示当前box有对象的前提下,所以条件概率的数学形式为;2.分类模型中最后输出之前使用softmax求出每个类别的概率,也就是说各个类别之间是互斥的,而YOLOv3算法的每个类别概率是单独用逻辑回归函数(sigmoid函数)计算得出了,所以每个类别不必是互斥的,也就是说一个对象可以被预测出多个类别。这个想法其实是有一些YOLO9000的意思的,因为YOLOv3已经有9000类似的功能,不同只是不能像9000一样,同时使用分类数据集和对象检测数据集,且类别之间的词性是有从属关系的。

https://www.jianshu.com/p/86b8208f634f

语义分割与实例分割的区别
同一物体的不同实例不需要单独分割出来。对下图左,标注为人,羊,狗,草地。而不需要羊1,羊2,羊3,羊4,羊5等。

相对目标检测的边界框,实例分割可精确到物体的边缘;相对语义分割,实例分割需要标注出图上同一物体的不同个体(羊1,羊2,羊3…)
在这里插入图片描述

语义分割的迁移学习
https://blog.csdn.net/deephub/article/details/111352267

Image Matting和语义分割是两码事!!
https://blog.csdn.net/qq_36165459/article/details/78549686
语义分割重在对每个像素的语义理解,将相同语义的像素分割为同一个部分,得到的结果就是若干个块状,至于块与块之间是否衔接自然则不考虑。抠图只将图片分成前景和背景两块,目的是拿到前景,好的抠图算法会对于头发等细节的处理效果比较精确。分割和抠图的另一个重要区别是分割是返回像素分类结果,分类结果是整型;而抠图返回的是属于前景或背景的概率p,在前景与背景交互区域会产生渐变的效果,使得抠图更加自然。
抠图技术的核心问题是解以下公式:Ii = αFi + (1-α)Bi,其中Ii是图像当前可观察的像素,为已知量;α是透明度,F是前景像素,B是背景像素,这三个变量为未知量。对于这个公式的理解,可以把原始图像看做是前景和背景按照一定权重(α透明度)叠加组成的。对于完全确定是前景的像素,α = 1;对于完全确定是背景的像素,α = 0;对于不确定是前景还是背景的像素,α是介于0到1之间的浮点数。

抠图方法简介:https://blog.csdn.net/qq_36165459/article/details/78549686

LRU缓存机制

大型互联网搜索引擎的缓存机制
深入理解浏览器的缓存机制
https://www.jianshu.com/p/54cc04190252

百度——推荐算法岗

推荐系统中不得不说的 DSSM 双塔模型

DSSM论文阅读与总结

协同过滤通俗理解

商汤——机器视觉算法岗

yolo系列的发展
有无anchor的优缺点
anchor free的一些算法,如center net之类的
ssd跟yolo区别
复现算法的能力要有

手撕代码题目:

给定一个数组,输出数组中所有元素与其右边元素差的最大值。
解释:输入一个数组,输出也是一个数组

#include <bits/stdc++.h>
using namespace std;
int main()
{
    vector<int> data = {1,2,3,4,5,6,7,8,9,0};
    // solution
    int len = data.size();
    vector<int> result(len);
    int maxV = data[len -1], minV = data[len -1];
    for(int i = len - 1; i >= 0; i --)
    {
        result[i] = max(abs(data[i] - maxV), abs(data[i] - minV));
        maxV = max(maxV, data[i]);
        minV = min(minV, data[i]);
    }

    for(int i = 0; i < len; i ++)
        cout << result[i] << " ";
}

阿里——测试开发岗

地图搜索:给你一个N*M的地图,#是墙壁,.是空地,S是起点,E是终点,问最短走多少步可以走到,如果走不到,输出一个无限大

class Solution {
public:
    int shortestDistance(vector<vector<string>>& maze, vector<int>& start, vector<int>& destination) {
        int m = maze.size(), n = maze[0].size(), i, j, k, x, y, delta;
    	vector<vector<int>> dir = {{1,0},{0,1},{0,-1},{-1,0}};
    	queue<vector<int>> q;
    	vector<vector<int>> dis(m, vector<int>(n,INT_MAX));
        dis[start[0]][start[1]] = 0;
    	q.push(start);
    	while(!q.empty())
    	{
    		i = q.front()[0];
    		j = q.front()[1];
    		q.pop();
    		for(k = 0; k < 4; ++k)
    		{
    			x = i;
	    		y = j;
                delta = 0;
    			while(x+dir[k][0]>=0 && x+dir[k][0]<m && y+dir[k][1]>=0 && y+dir[k][1]<n
                        && maze[x+dir[k][0]][y+dir[k][1]]=='#')
	    		{
	    			x += dir[k][0];
	    			y += dir[k][1];
                    delta++;//走的步数增量
	    		}
                if(dis[i][j]+delta < dis[x][y])//该方向下一个位置为墙壁,停在xy
	    		{
                    dis[x][y] = dis[i][j]+delta;
                    q.push({x,y});
                }
    		}
    	}
    	return dis[destination[0]][destination[1]]==INT_MAX ? -1 : dis[destination[0]][destination[1]];
    }
};

再地图搜索:给你一个N*M的地图,#是墙壁,.是空地,@是沼泽,S是起点,E是终点,走空地花1步,走沼泽花d步,问最短走多少步可以送S走到E,如果走不到,输出一个无限大。

不会做,说可能用邻接表来做

字节——视觉算法岗

概率题:一本书,共300页,总共有200个印刷错误,均匀分布。请问,这本书第100页不止有一个错误的概率:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值